1   /***
2    * Copyright (c) 2002, CodeStreet LLC. All rights reserved.<p>
3    * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
4    * conditions are met:<p>
5    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
6    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer
7    * in the documentation and/or other materials provided with the distribution. Neither the name of CodeStreet LLC. nor the
8    * names of its contributors may be used to endorse or promote products derived from this software without specific prior written
9    * permission.<p>
10   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
11   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
12   * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
13   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
14   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
15   * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<p>
16   */
17  
18  package com.codestreet.messageforge;
19  
20  import java.lang.Long;
21  
22  /***
23   * Class to represent a <tt>long</tt> field.
24   * @author Jawaid Hakim.
25   */
26  public class RFldI64 extends RFldNumeric
27  {
28      /***
29       * Default constructor.
30       */
31      public RFldI64()
32      {
33      }
34  
35      /***
36       * Constructor.
37       * @param name Field name.
38       * @param fieldId Field id. Field ids must be either <tt>0</tt>
39       * to indicate that there is no id on the field, or greater. In addition,
40       * field ids must be unique within a messages - no two fields are allowed
41       * to have the same field id.
42       */
43      public RFldI64(String name, int fieldId)
44      {
45          super(name, fieldId);
46      }
47  
48      /***
49       * Constructor.
50       * @param name Field name.
51       * @param fieldId Field id. Field ids must be either <tt>0</tt>
52       * to indicate that there is no id on the field, or greater. In addition,
53       * field ids must be unique within a messages - no two fields are allowed
54       * to have the same field id.
55       * @param desc Field description.
56       */
57      public RFldI64(String name, int fieldId, String desc)
58      {
59          super(name, fieldId, desc);
60      }
61  
62      /***
63       * Get field type.
64       * @return Field type <tt>I64</tt>.
65       * @see RFldType
66       */
67      public final RFldType getType()
68      {
69          return RFldType.I64;
70      }
71  
72      /***
73       * Check if another field is equal to this field. Equality is defined
74       * as the fields having the same value.
75       * @param anObject Another field.
76       * @return <tt>true</tt> if another field is equal to this field.
77       * Otherwise, returns <tt>false</tt>.
78       */
79      public final boolean equals(Object anObject)
80      {
81        if (this == anObject)
82        {
83          return true;
84        }
85        else if (! (anObject instanceof RFldI64))
86        {
87          return false;
88        }
89  
90        RFldI64 another = (RFldI64)anObject;
91        if (valSet_ != another.isValSet())
92           return false;
93        else
94           return (! valSet_ || dataObj_.longValue() == another.getValue());
95      }
96  
97  
98      /***
99       * Return the hash code value for the field.  Uses the same technique
100      * as in java.lang.Long.  The following javadoc comments taken from there.
101      * Computes a hashcode for this Long. The result is the exclusive
102      * OR of the two halves of the primitive <tt>long</tt> value
103      * represented by this <tt>Long</tt> object. That is, the hashcode
104      * is the value of the expression:
105      * <blockquote><pre>
106      * (int)(getValue()^(getValue()>>32))
107      * </pre></blockquote>
108      *
109      * @return a hash code value for the field
110      */
111     public final int hashCode()
112     {
113         long data = dataObj_.longValue();
114         return (valSet_) ? (int)(data ^ (data >> 32)) : 1231;
115     }
116 
117     /***
118      * Reset the field value.
119      * @see #isValSet()
120      */
121     public final void reset() throws FieldValidationException
122     {
123         if (isLocked())
124             throw new FieldValidationException("Field " + getName() + " is locked");
125 
126         valSet_ = false;
127     }
128 
129     /***
130      * Set data.
131      * @param newData New data.
132      */
133     public final RFld set(Object newData) throws FieldValidationException
134     {
135         try
136         {
137             return set((Long)newData);
138         }
139         catch (ClassCastException e)
140         {
141             try
142             {
143                 return set(Long.valueOf(newData.toString()));
144             }
145             catch (NumberFormatException ex)
146             {
147                 throw new FieldValidationException(ex);
148             }
149         }
150     }
151 
152     /***
153      * Set data.
154      * @param newData New data.
155      */
156     public final RFld set(long newData) throws FieldValidationException
157     {
158         return set(new Long(newData));
159     }
160 
161     /***
162      * Set the field value from a JDOM element.
163      * @param elem Field value as a JDOM element.
164      */
165     public final RFld set(org.jdom.Element elem) throws FieldValidationException
166     {
167         return set(elem.getAttributeValue(XML_ATTR_VALUE));
168     }
169 
170     /***
171      * Set data.
172      * @param newData New data.
173      * @throws NullPointerException if the new data is <tt>null</tt>.
174      */
175     public final RFld set(Long newData) throws FieldValidationException
176     {
177         validate(this, newData.longValue());
178 
179         dataObj_ = newData;
180         valSet_ = true;
181 
182         return this;
183     }
184 
185     /***
186      * Validate against constraints. A field is valid if either it's value is set
187      *  and satisfies all constraints, or the the field is optional.
188      */
189     public final void validate() throws FieldValidationException
190     {
191         // Only need to check that non-optional fields have been set. If a
192         // field has been set then it must be valid since validation is done
193         // with each set.
194         if (! valSet_ && ! optional_)
195             throw new FieldValidationException("Field not set: " + getName());
196     }
197 
198     /***
199      * Check if a new value will satifsy constraints.
200      * @param newData New value.
201      */
202     public final void validate(RFld fld, long newData) throws FieldValidationException
203     {
204         if (locked_)
205             throw new FieldValidationException("Cannot modify locked field: " + getName());
206 
207         for (int i = getConstraintCount() - 1; i >= 0; --i)
208             ((RFldConstraintI64)getConstraint(i)).validate(this, newData);
209     }
210 
211     /***
212      * Get data.
213      * @return data Data.
214      * @throws NullPointerException if the field valuehas not been set.
215      */
216     public final long getValue()
217     {
218         return dataObj_.longValue();
219     }
220 
221     /***
222      * Get the field value as an object.
223      * @return Field value as an object. Returns <tt>null</tt> if the field
224      * value has not been set.
225      */
226     public final Object getValueAsObject()
227     {
228         return dataObj_;
229     }
230 
231     /***
232      * Get the field value as a string.
233      * @return Field value as a string.
234      * @throws NullPointerException if the field valuehas not been set.
235      */
236     public final String getValueAsString()
237     {
238         return dataObj_.toString();
239     }
240 
241     /***
242      * Get the field value as a <tt>java.util.Hashtable</tt>. Not supported - throws
243      * an exception.
244      * @return Field value as java.util.Hashtable. Returns <tt>null</tt> if the field
245      * value is not set.
246      */
247     public final java.util.Hashtable getValueAsHashtable() throws FieldValidationException
248     {
249         throw new FieldValidationException("Not supported");
250     }
251 
252     /***
253      * Get the XML tag for this field type.
254      * @return XML tag for this field type.
255      */
256     public final String getTag()
257     {
258         return XML_TAG;
259     }
260 
261     /***
262      * Set the XML tag for this field type.
263      * @param tag New XML tag for this field type.
264      */
265     public static void setTag(String tag)
266     {
267         XML_TAG = tag;
268     }
269 
270     /***
271      * XML tag for this element type.
272      */
273     protected static transient String XML_TAG = "i64";
274 
275     /***
276      * Data.
277      */
278     protected java.lang.Long dataObj_;
279 }
This page was automatically generated by Maven