001: /*--
002:
003: Copyright (C) 2002-2005 Adrian Price.
004: All rights reserved.
005:
006: Redistribution and use in source and binary forms, with or without
007: modification, are permitted provided that the following conditions
008: are met:
009:
010: 1. Redistributions of source code must retain the above copyright
011: notice, this list of conditions, and the following disclaimer.
012:
013: 2. Redistributions in binary form must reproduce the above copyright
014: notice, this list of conditions, and the disclaimer that follows
015: these conditions in the documentation and/or other materials
016: provided with the distribution.
017:
018: 3. The names "OBE" and "Open Business Engine" must not be used to
019: endorse or promote products derived from this software without prior
020: written permission. For written permission, please contact
021: adrianprice@sourceforge.net.
022:
023: 4. Products derived from this software may not be called "OBE" or
024: "Open Business Engine", nor may "OBE" or "Open Business Engine"
025: appear in their name, without prior written permission from
026: Adrian Price (adrianprice@users.sourceforge.net).
027:
028: THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
029: WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
030: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
031: DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT,
032: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
033: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
034: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
035: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
036: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
037: IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
038: POSSIBILITY OF SUCH DAMAGE.
039:
040: For more information on OBE, please see
041: <http://obe.sourceforge.net/>.
042:
043: */
044:
045: package org.obe.xpdl.model.data;
046:
047: /**
048: * Standard interface implemented by any data type.
049: *
050: * @author Adrian Price
051: */
052: public interface Type {
053: // These ordinal data type numbers are identical to those in WMAttribute.
054: /**
055: * Indicates that the type is currently undefined. This value is only
056: * returned by {@link DeclaredType#value()}.
057: */
058: int UNDEFINED_TYPE = -2;
059: /**
060: * Preserves the existing type - use only when the type has already been
061: * assigned.
062: */
063: int DEFAULT_TYPE = -1;
064: // BasicTypes:
065: /**
066: * Basic string type.
067: */
068: int STRING_TYPE = 0;
069: /**
070: * Basic 64-bit signed double-precision type.
071: */
072: int FLOAT_TYPE = 1;
073: /**
074: * Basic 32-bit integer type.
075: */
076: int INTEGER_TYPE = 2;
077: /**
078: * @deprecated Use {@link #EXTERNAL_REFERENCE_TYPE} or {@link #SCHEMA_TYPE}.
079: */
080: int REFERENCE_TYPE = 3;
081: /**
082: * Basic date/time type.
083: */
084: int DATETIME_TYPE = 4;
085: /**
086: * Basic boolean type.
087: */
088: int BOOLEAN_TYPE = 5;
089: /**
090: * Basic performer name type (basically a string).
091: */
092: int PERFORMER_TYPE = 6;
093:
094: /**
095: * A reference to a Package-level TypeDeclaration.
096: * <em>N.B. DECLARED_TYPE must not be used directly when setting attributes.
097: * It is always a reference to another type.</em>
098: */
099: int DECLARED_TYPE = 7;
100: /**
101: * An XML document whose structure is defined by an XML Schema.
102: */
103: int SCHEMA_TYPE = 8;
104: /**
105: * An object whose definition is external (e.g., as a Java class).
106: */
107: int EXTERNAL_REFERENCE_TYPE = 9;
108: /**
109: * @deprecated Use {@link #EXTERNAL_REFERENCE_TYPE} or {@link #SCHEMA_TYPE}.
110: */
111: int RECORD_TYPE = 10;
112: /**
113: * @deprecated Use {@link #EXTERNAL_REFERENCE_TYPE} or {@link #SCHEMA_TYPE}.
114: */
115: int UNION_TYPE = 11;
116: /**
117: * @deprecated Use {@link #EXTERNAL_REFERENCE_TYPE} or {@link #SCHEMA_TYPE}.
118: */
119: int ENUMERATION_TYPE = 12;
120: /**
121: * @deprecated Use {@link #EXTERNAL_REFERENCE_TYPE} or {@link #SCHEMA_TYPE}.
122: */
123: int ARRAY_TYPE = 13;
124: /**
125: * @deprecated Use {@link #EXTERNAL_REFERENCE_TYPE} or {@link #SCHEMA_TYPE}.
126: */
127: int LIST_TYPE = 14;
128:
129: /**
130: * The data type's ordinal value.
131: *
132: * @return Ordinal value: {@link #STRING_TYPE}, {@link #FLOAT_TYPE},
133: * {@link #INTEGER_TYPE}, {@link #REFERENCE_TYPE}, {@link #DATETIME_TYPE},
134: * {@link #BOOLEAN_TYPE}, {@link #PERFORMER_TYPE}, {@link #DECLARED_TYPE},
135: * {@link #SCHEMA_TYPE}, {@link #EXTERNAL_REFERENCE_TYPE},
136: * {@link #RECORD_TYPE}, {@link #UNION_TYPE}, {@link #ENUMERATION_TYPE},
137: * {@link #ARRAY_TYPE}, {@link #LIST_TYPE}
138: */
139: int value();
140:
141: /**
142: * Checks type compatibility in an assignment.
143: *
144: * @param fromType The type of the 'rvalue'.
145: * @return <code>true</code> if a value of type <code>fromType</code> can
146: * be assigned or converted to a value of type <code>toType</code>.
147: */
148: boolean isAssignableFrom(Type fromType);
149:
150: /**
151: * Returns the actual type implied by this type. Some types behave as
152: * references to other types.
153: *
154: * @return The implied type.
155: */
156: Type getImpliedType();
157: }
|