001: /*
002: * ====================================================================
003: * JAFFA - Java Application Framework For All
004: *
005: * Copyright (C) 2002 JAFFA Development Group
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation; either
010: * version 2.1 of the License, or (at your option) any later version.
011: *
012: * This library is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this library; if not, write to the Free Software
019: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020: *
021: * Redistribution and use of this software and associated documentation ("Software"),
022: * with or without modification, are permitted provided that the following conditions are met:
023: * 1. Redistributions of source code must retain copyright statements and notices.
024: * Redistributions must also contain a copy of this document.
025: * 2. Redistributions in binary form must reproduce the above copyright notice,
026: * this list of conditions and the following disclaimer in the documentation
027: * and/or other materials provided with the distribution.
028: * 3. The name "JAFFA" must not be used to endorse or promote products derived from
029: * this Software without prior written permission. For written permission,
030: * please contact mail to: jaffagroup@yahoo.com.
031: * 4. Products derived from this Software may not be called "JAFFA" nor may "JAFFA"
032: * appear in their names without prior written permission.
033: * 5. Due credit should be given to the JAFFA Project (http://jaffa.sourceforge.net).
034: *
035: * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
036: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
037: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
038: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
039: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
040: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
041: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
042: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
043: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
044: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
045: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
046: * SUCH DAMAGE.
047: * ====================================================================
048: */
049:
050: package org.jaffa.metadata;
051:
052: import java.io.Serializable;
053:
054: /**
055: * This is the base class for all the meta objects.
056: */
057: public abstract class FieldMetaData implements Cloneable, Comparable,
058: Serializable {
059:
060: /** A constant indicating uppercase.*/
061: public static final String UPPER_CASE = "UpperCase";
062:
063: /** A constant indicating lowercase.*/
064: public static final String LOWER_CASE = "LowerCase";
065:
066: /** A constant indicating mixedcase.*/
067: public static final String MIXED_CASE = "MixedCase";
068:
069: // NOTE: keep the equals(), clone(), compareTo(), hashCode() methods in sync
070: private String m_name = null;
071: private String m_dataType = null;
072: private String m_labelToken = null;
073: private Boolean m_isMandatory = null;
074:
075: /** Creates an instance.
076: * @param name The field name.
077: * @param description The field description.
078: * @param dataType The data type.
079: * @param labelToken The token used for displaying labels.
080: * @param isMandatory Indicates if the field is mandatory.
081: */
082: protected FieldMetaData(String name, String dataType,
083: String labelToken, Boolean isMandatory) {
084: m_name = name;
085: m_dataType = dataType;
086: m_labelToken = labelToken;
087: m_isMandatory = isMandatory;
088: }
089:
090: /** Getter for property layout.
091: * @return Value of property layout.
092: */
093: public String getName() {
094: return m_name;
095: }
096:
097: /** Getter for property dataType.
098: * @return Value of property dataType.
099: */
100: public String getDataType() {
101: return m_dataType;
102: }
103:
104: /** Getter for property labelToken.
105: * @return Value of property labelToken.
106: */
107: public String getLabelToken() {
108: return m_labelToken;
109: }
110:
111: /** Getter for property isMandatory.
112: * @return Value of property isMandatory.
113: */
114: public Boolean isMandatory() {
115: return m_isMandatory;
116: }
117:
118: /** Returns a clone of the object.
119: * @return a clone of the object.
120: */
121: public Object clone() {
122: try {
123: return super .clone();
124: // no more processing required since the fields are immutable
125: } catch (CloneNotSupportedException e) {
126: // this shouldn't happen, since we are Cloneable
127: return null;
128: }
129: }
130:
131: /** Returns the hash code.
132: * @return the hash code.
133: */
134: public int hashCode() {
135: int i = 0;
136: if (m_name != null)
137: i += m_name.hashCode();
138: if (m_dataType != null)
139: i += m_dataType.hashCode();
140: if (m_labelToken != null)
141: i += m_labelToken.hashCode();
142: if (m_isMandatory != null)
143: i += m_isMandatory.hashCode();
144: return i;
145: }
146:
147: /** Compares this object with another FieldMetaData object.
148: * Returns a true if both the objects have the same properties.
149: * @param obj the other FieldMetaData object.
150: * @return a true if both the objects have the same properties.
151: */
152: public boolean equals(Object obj) {
153: if (obj instanceof FieldMetaData) {
154: FieldMetaData field2 = (FieldMetaData) obj;
155: if (((m_name != null && m_name.equals(field2.m_name)) || (m_name == null && field2.m_name == null))
156: && ((m_dataType != null && m_dataType
157: .equals(field2.m_dataType)) || (m_dataType == null && field2.m_dataType == null))
158: && ((m_labelToken != null && m_labelToken
159: .equals(field2.m_labelToken)) || (m_labelToken == null && field2.m_labelToken == null))
160: && ((m_isMandatory != null && m_isMandatory
161: .equals(field2.m_isMandatory)) || (m_isMandatory == null && field2.m_isMandatory == null)))
162: return true;
163: else
164: return false;
165: } else
166: return false;
167: }
168:
169: /** Compares this object with another FieldMetaData object.
170: * Note: this class has a natural ordering that is inconsistent with equals
171: * Only the field name is compared.
172: * @param obj the other FieldMetaData object.
173: * @return a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
174: */
175: public int compareTo(Object obj) {
176: int i;
177: FieldMetaData target = (FieldMetaData) obj;
178: if (m_name != null && target.m_name == null)
179: i = 1;
180: else if (m_name == null && target.m_name != null)
181: i = -1;
182: else if (m_name != null && target.m_name != null)
183: i = m_name.compareTo(target.m_name);
184: else
185: i = 0;
186: return i;
187: }
188:
189: /** Returns the diagnostic information.
190: * @return the diagnostic information.
191: */
192: public String toString() {
193: String comma = ", ";
194: String equals = "=";
195: StringBuffer buffer = new StringBuffer();
196:
197: buffer.append("Name");
198: buffer.append(equals);
199: buffer.append(m_name);
200: buffer.append(comma);
201: buffer.append("DataType");
202: buffer.append(equals);
203: buffer.append(m_dataType);
204: buffer.append(comma);
205: buffer.append("LabelToken");
206: buffer.append(equals);
207: buffer.append(m_labelToken);
208: buffer.append(comma);
209: buffer.append("Mandatory");
210: buffer.append(equals);
211: buffer.append(m_isMandatory);
212:
213: return buffer.toString();
214: }
215:
216: /** Getter for property width.
217: * @return Value of property width.
218: */
219: public abstract int getWidth();
220: }
|