View Javadoc

1   /*
2    *  jDTAUS Core API
3    *  Copyright (C) 2005 Christian Schulte
4    *  <cs@schulte.it>
5    *
6    *  This library is free software; you can redistribute it and/or
7    *  modify it under the terms of the GNU Lesser General Public
8    *  License as published by the Free Software Foundation; either
9    *  version 2.1 of the License, or any later version.
10   *
11   *  This library is distributed in the hope that it will be useful,
12   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14   *  Lesser General Public License for more details.
15   *
16   *  You should have received a copy of the GNU Lesser General Public
17   *  License along with this library; if not, write to the Free Software
18   *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19   *
20   */
21  package org.jdtaus.core.container;
22  
23  import java.io.Serializable;
24  
25  /**
26   * Message meta-data.
27   * <p>A message consists of the properties {@code name}, {@code template} and
28   * {@code arguments}. Property {@code name} holds a name uniquely identifying
29   * the message in a set of messages. Property {@code template} holds the
30   * template of the message. Property {@code arguments} holds meta-data
31   * describing arguments to format the message with.</p>
32   *
33   * @author <a href="mailto:cs@schulte.it">Christian Schulte</a>
34   * @version $JDTAUS: Message.java 8743 2012-10-07 03:06:20Z schulte $
35   */
36  public class Message extends ModelObject implements Cloneable, Serializable
37  {
38      //--Constants---------------------------------------------------------------
39  
40      /** Serial version UID for backwards compatibility with 1.5.x classes. */
41      private static final long serialVersionUID = 8433823757935477327L;
42  
43      //---------------------------------------------------------------Constants--
44      //--Message.----------------------------------------------------------------
45  
46      /**
47       * The name of the message.
48       * @serial
49       */
50      private String name;
51  
52      /**
53       * The name of the module holding the message.
54       * @serial
55       */
56      private String moduleName;
57  
58      /**
59       * The template of the message.
60       * @serial
61       */
62      private Text template;
63  
64      /**
65       * The arguments of the message.
66       * @serial
67       */
68      private Arguments arguments;
69  
70      /** Creates a new {@code Message} instance. */
71      public Message()
72      {
73          super();
74      }
75  
76      /**
77       * Gets the name of the message.
78       *
79       * @return the name of the message.
80       */
81      public String getName()
82      {
83          if ( this.name == null )
84          {
85              this.name = "";
86          }
87  
88          return this.name;
89      }
90  
91      /**
92       * Setter for property {@code name}.
93       *
94       * @param value the new name of the message.
95       */
96      public void setName( final String value )
97      {
98          this.name = value;
99      }
100 
101     /**
102      * Gets the name of the module holding the message.
103      *
104      * @return the name of the module holding the message.
105      */
106     public String getModuleName()
107     {
108         if ( this.moduleName == null )
109         {
110             this.moduleName = "";
111         }
112 
113         return this.moduleName;
114     }
115 
116     /**
117      * Setter for property {@code moduleName}.
118      *
119      * @param value the new name of the module holding the message.
120      */
121     public void setModuleName( final String value )
122     {
123         this.moduleName = value;
124     }
125 
126     /**
127      * Gets the template of the message.
128      *
129      * @return the template of the message.
130      */
131     public Text getTemplate()
132     {
133         if ( this.template == null )
134         {
135             this.template = new Text();
136         }
137 
138         return this.template;
139     }
140 
141     /**
142      * Setter for property {@code template}.
143      *
144      * @param value the new template of the message.
145      */
146     public void setTemplate( final Text value )
147     {
148         this.template = value;
149     }
150 
151     /**
152      * Gets the arguments of the message.
153      *
154      * @return the arguments of the message.
155      */
156     public Arguments getArguments()
157     {
158         if ( this.arguments == null )
159         {
160             this.arguments = new Arguments();
161         }
162 
163         return this.arguments;
164     }
165 
166     /**
167      * Setter for property {@code arguments}.
168      *
169      * @param value the new arguments of the message.
170      */
171     public void setArguments( final Arguments value )
172     {
173         this.arguments = value;
174     }
175 
176     /**
177      * Creates a string representing the properties of the instance.
178      *
179      * @return a string representing the properties of the instance.
180      */
181     private String internalString()
182     {
183         final StringBuffer buf = new StringBuffer( 500 ).append( '{' ).
184             append( this.internalString( this ) ).
185             append( ", name=" ).append( this.name ).
186             append( ", moduleName=" ).append( this.moduleName ).
187             append( ", template=" ).append( this.template ).
188             append( ", arguments=" ).append( this.arguments );
189 
190         buf.append( '}' );
191         return buf.toString();
192     }
193 
194     //----------------------------------------------------------------Template--
195     //--Object------------------------------------------------------------------
196 
197     /**
198      * Returns a string representation of the object.
199      *
200      * @return a string representation of the object.
201      */
202     public String toString()
203     {
204         return super.toString() + this.internalString();
205     }
206 
207     /**
208      * Creates and returns a copy of this object. This method  performs a
209      * "shallow copy" of this object, not a "deep copy" operation.
210      *
211      * @return a clone of this instance.
212      */
213     public Object clone()
214     {
215         try
216         {
217             return super.clone();
218         }
219         catch ( final CloneNotSupportedException e )
220         {
221             throw new AssertionError( e );
222         }
223     }
224 
225     /**
226      * Indicates whether some other object is equal to this one by comparing
227      * properties {@code name} and {@code moduleName}.
228      *
229      * @param o the reference object with which to compare.
230      *
231      * @return {@code true} if this object is the same as {@code o};
232      * {@code false} otherwise.
233      */
234     public final boolean equals( final Object o )
235     {
236         boolean equal = o == this;
237         if ( !equal && o instanceof Message )
238         {
239             final Message that = (Message) o;
240             equal = this.getName().equals( that.getName() ) &&
241                 this.getModuleName().equals( that.getModuleName() );
242 
243         }
244 
245         return equal;
246     }
247 
248     /**
249      * Returns a hash code value for this object.
250      *
251      * @return a hash code value for this object.
252      */
253     public final int hashCode()
254     {
255         return this.getName().hashCode() + this.getModuleName().hashCode();
256     }
257 
258     //------------------------------------------------------------------Object--
259 }