001    package hirondelle.web4j.model;
002    
003    import java.io.IOException;
004    import java.io.ObjectInputStream;
005    import java.io.Serializable;
006    import java.util.ArrayList;
007    import java.util.Collections;
008    import java.util.List;
009    
010    /** General implementation of {@link MessageList}. */
011    public class MessageListImpl implements MessageList, Serializable {
012      
013      /** Create an empty {@link MessageList}.   */
014      public MessageListImpl(){
015        //empty 
016      }
017    
018      /**
019       Create a {@link MessageList} having one simple {@link AppResponseMessage}.
020        
021       <P>The argument satisfies the same conditions as {@link AppResponseMessage#forSimple}.
022      */
023      public MessageListImpl(String aMessage) {
024        add(aMessage);
025      }
026      
027      /**
028       Create a {@link MessageList} having one compound {@link AppResponseMessage}.
029       
030       <P>The arguments satisfy the same conditions as 
031       {@link AppResponseMessage#forCompound}.
032      */
033      public MessageListImpl(String aMessage, Object... aParams) {
034        add(aMessage, aParams);
035      }
036      
037      public final void add(String aMessage){
038        fAppResponseMessages.add(AppResponseMessage.forSimple(aMessage));
039      }
040      
041      public final void add(String aMessage, Object... aParams){
042        fAppResponseMessages.add(AppResponseMessage.forCompound(aMessage, aParams));
043      }
044      
045      public final void add (AppException ex) {
046        fAppResponseMessages.addAll( ex.getMessages() );
047      }
048      
049      public final List<AppResponseMessage> getMessages () {
050        return Collections.unmodifiableList(fAppResponseMessages);
051      }
052      
053      public final boolean isNotEmpty () {
054        return !isEmpty();
055      }
056      
057      public final boolean isEmpty () {
058        return fAppResponseMessages.isEmpty();
059      }
060      
061      /** Intended for debugging only.  */
062      @Override public String toString(){
063        return 
064          "Messages : + " + fAppResponseMessages.toString() + 
065          " Has Been Displayed  : " +  fHasBeenDisplayed
066        ;
067      }
068      
069      // PRIVATE 
070      
071      /** List of {@link AppResponseMessage}s attached to this exception.  */
072      private final List<AppResponseMessage> fAppResponseMessages = new ArrayList<AppResponseMessage>();
073      
074      /** Controls the display-once-only behavior needed for JSPs.  */
075      private boolean fHasBeenDisplayed = false;
076      
077      private static final long serialVersionUID = 1000L;
078      
079       /** Always treat de-serialization as a full-blown constructor, by validating the final state of the deserialized object. */
080      private void readObject(ObjectInputStream aInputStream) throws ClassNotFoundException, IOException {
081        aInputStream.defaultReadObject();
082      }
083    }