/*
* ====================================================================
*
* The ObjectStyle Group Software License, Version 1.0
*
* Copyright (c) 2006 The ObjectStyle Group and individual authors of the
* software. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowlegement: "This product includes software
* developed by the ObjectStyle Group (http://objectstyle.org/)." Alternately,
* this acknowlegement may appear in the software itself, if and wherever such
* third-party acknowlegements normally appear.
*
* 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse or
* promote products derived from this software without prior written permission.
* For written permission, please contact andrus@objectstyle.org.
*
* 5. Products derived from this software may not be called "ObjectStyle" nor
* may "ObjectStyle" appear in their names without prior written permission of
* the ObjectStyle Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* OBJECTSTYLE GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many individuals on
* behalf of the ObjectStyle Group. For more information on the ObjectStyle
* Group, please see <http://objectstyle.org/>.
*
*/
package org.objectstyle.wolips.eomodeler.core.model;
import org.objectstyle.wolips.baseforplugins.util.ComparisonUtils;
import org.objectstyle.wolips.eomodeler.core.Messages;
public class EODataType implements Comparable<EODataType> {
public static final EODataType STRING = new EODataType("NSString", java.lang.String.class.getName(), new String[] { null, "", "S" }, Messages.getString("EODataType.string"));
//public static final EODataType STRING_SET = new EODataType("NSString", java.lang.String.class.getName(), "S", Messages.getString("EODataType.stringSetString"));
public static final EODataType STRING_CHAR = new EODataType("NSString", java.lang.String.class.getName(), "C", Messages.getString("EODataType.stringChar"));
public static final EODataType STRING_UTF = new EODataType("NSString", java.lang.String.class.getName(), "E", Messages.getString("EODataType.stringUTF"));
public static final EODataType STRING_RTRIM = new EODataType("NSString", java.lang.String.class.getName(), "c", Messages.getString("EODataType.stringRTRIM"));
public static final EODataType BYTE = new EODataType("NSNumber", java.lang.Byte.class.getName(), "b", Messages.getString("EODataType.byte"));
public static final EODataType SHORT = new EODataType("NSNumber", java.lang.Short.class.getName(), "s", Messages.getString("EODataType.short"));
public static final EODataType INTEGER = new EODataType("NSNumber", java.lang.Integer.class.getName(), new String[] { "i", null, "" }, Messages.getString("EODataType.integer")); //$NON-NLS-4$
public static final EODataType LONG = new EODataType("NSNumber", java.lang.Long.class.getName(), "l", Messages.getString("EODataType.long"));
public static final EODataType FLOAT = new EODataType("NSNumber", java.lang.Float.class.getName(), "f", Messages.getString("EODataType.float"));
public static final EODataType DOUBLE = new EODataType("NSNumber", java.lang.Double.class.getName(), "d", Messages.getString("EODataType.double"));
public static final EODataType BOOLEAN = new EODataType("NSNumber", "boolean", "c", Messages.getString("EODataType.boolean"));
public static final EODataType BIGDECIMAL = new EODataType("NSDecimalNumber", java.math.BigDecimal.class.getName(), "B", Messages.getString("EODataType.bigDecimal"));
public static final EODataType DECIMAL_NUMBER = new EODataType("NSDecimalNumber", java.lang.Integer.class.getName(), (String) null, Messages.getString("EODataType.decimalNumber"));
public static final EODataType DATE_OBJ = new EODataType("NSCalendarDate", "com.webobjects.foundation.NSTimestamp", new String[] { null, "" }, Messages.getString("EODataType.dateObj"));
public static final EODataType DATE = new EODataType("NSCalendarDate", "com.webobjects.foundation.NSTimestamp", new String[] { "D" }, Messages.getString("EODataType.date"));
public static final EODataType TIME = new EODataType("NSCalendarDate", "com.webobjects.foundation.NSTimestamp", "t", Messages.getString("EODataType.time"));
public static final EODataType TIMESTAMP = new EODataType("NSCalendarDate", "com.webobjects.foundation.NSTimestamp", "T", Messages.getString("EODataType.timestamp"));
public static final EODataType DATE_MSSQL = new EODataType("NSCalendarDate", "com.webobjects.foundation.NSTimestamp", "M", Messages.getString("EODataType.dateMSSQL"));
public static final EODataType DATA = new EODataType("NSData", "com.webobjects.foundation.NSData", (String) null, Messages.getString("EODataType.data"));
public static final EODataType CUSTOM = new EODataType(null, "Custom", (String) null, Messages.getString("EODataType.custom"));
public static final EODataType[] DATA_TYPES = new EODataType[] { EODataType.STRING/*, EODataType.STRING_SET*/, EODataType.STRING_CHAR, EODataType.STRING_UTF, EODataType.STRING_RTRIM, EODataType.BYTE, EODataType.SHORT, EODataType.INTEGER, EODataType.LONG, EODataType.FLOAT, EODataType.DOUBLE, EODataType.BIGDECIMAL, EODataType.DECIMAL_NUMBER, EODataType.BOOLEAN, EODataType.DATE_OBJ, EODataType.DATE, EODataType.TIME, EODataType.TIMESTAMP, EODataType.DATE_MSSQL, EODataType.DATA, EODataType.CUSTOM };
private String myValueClass;
private String myJavaValueClass;
private String[] myValueTypes;
private String myName;
public EODataType(String _valueClass, String _javaValueClass, String _valueType, String _name) {
this(_valueClass, _javaValueClass, new String[] { _valueType }, _name);
}
public EODataType(String _valueClass, String _javaValueClass, String[] _valueTypes, String _name) {
myValueClass = _valueClass;
myJavaValueClass = _javaValueClass;
myValueTypes = _valueTypes;
myName = _name;
}
public String getShortJavaValueClass() {
String javaValueClass = myJavaValueClass;
if (javaValueClass != null) {
int lastDotIndex = javaValueClass.lastIndexOf('.');
if (lastDotIndex != -1) {
javaValueClass = javaValueClass.substring(lastDotIndex + 1);
}
}
return javaValueClass;
}
public String getJavaValueClass() {
return myJavaValueClass;
}
public String getValueClass() {
return myValueClass;
}
public String getFirstValueType() {
return myValueTypes[0];
}
public String[] getValueTypes() {
return myValueTypes;
}
public String getName() {
return myName;
}
public String toString() {
return "[EODataType: name = " + myName + "]";
}
public int compareTo(EODataType o) {
return getName().compareToIgnoreCase(o.getName());
}
public static EODataType getDataTypeByValueClassAndType(String _valueClass, String _valueType) {
EODataType matchingDataType = null;
for (int dataTypeNum = 0; matchingDataType == null && dataTypeNum < EODataType.DATA_TYPES.length; dataTypeNum++) {
EODataType dataType = EODataType.DATA_TYPES[dataTypeNum];
if (ComparisonUtils.equals(dataType.myValueClass, _valueClass)) {
for (int valueTypeNum = 0; matchingDataType == null && valueTypeNum < dataType.myValueTypes.length; valueTypeNum++) {
if (ComparisonUtils.equals(dataType.myValueTypes[valueTypeNum], _valueType)) {
matchingDataType = dataType;
}
}
}
}
if (matchingDataType == null) {
matchingDataType = EODataType.CUSTOM;
}
return matchingDataType;
}
public static EODataType getDataTypeByValueClass(String _valueClass) {
EODataType matchingDataType = null;
for (int dataTypeNum = 0; matchingDataType == null && dataTypeNum < EODataType.DATA_TYPES.length; dataTypeNum++) {
EODataType dataType = EODataType.DATA_TYPES[dataTypeNum];
if (ComparisonUtils.equals(dataType.myValueClass, _valueClass)) {
matchingDataType = dataType;
}
}
if (matchingDataType == null) {
matchingDataType = EODataType.CUSTOM;
}
return matchingDataType;
}
}