/** * * * Service Data Objects * Version 2.0 * Licensed Materials - Property of BEA and IBM * * (c) Copyright BEA Systems, Inc. and International Business Machines Corp 2005. All rights reserved. * * * */ package commonj.sdo; import java.util.List; /** * A representation of the type of a {@link Property property} of a {@link DataObject data object}. */ public interface Type { /** * Returns the name of the type. * @return the type name. */ String getName(); /** * Returns the namespace URI of the type. * @return the namespace URI. */ String getURI(); /** * Returns the Java class that this type represents. * @return the Java class. */ Class getInstanceClass(); /** * Returns whether the specified object is an instance of this type. * @param object the object in question. * @return true if the object is an instance. * @see Class#isInstance */ boolean isInstance(Object object); /** * Returns the List of the {@link Property Properties} of this type. *

* The expression *

   *   type.getProperties().indexOf(property)
   *
* yields the property's index relative to this type. * As such, these expressions are equivalent: *
   *    dataObject.{@link DataObject#get(int) get}(i)
   *    dataObject.{@link DataObject#get(Property) get}((Property)dataObject.getType().getProperties().get(i));
   *
*

* @return the Properties of the type. * @see Property#getContainingType */ List /*Property*/ getProperties(); /** * Returns from {@link #getProperties all the Properties} of this type, the one with the specified name. * As such, these expressions are equivalent: *
   *    dataObject.{@link DataObject#get(String) get}("name")
   *    dataObject.{@link DataObject#get(Property) get}(dataObject.getType().getProperty("name"))
   *
*

* @return the Property with the specified name. * @see #getProperties */ Property getProperty(String propertyName); /** * Indicates if this Type specifies DataTypes (true) or DataObjects (false). * When false, any object that is an instance of this type * also implements the DataObject interface. * True for simple types such as Strings and numbers. * For any object: *
   *   isInstance(object) && !isDataType() implies
   *   DataObject.class.isInstance(object) returns true. 
   * 
* @return true if Type specifies DataTypes, false for DataObjects. */ boolean isDataType(); /** * Indicates if this Type allows any form of open content. If false, * dataObject.getInstanceProperties() must be the same as * dataObject.getType().getProperties() for any DataObject dataObject of this Type. * @return true if this Type allows open content. */ boolean isOpen(); /** * Indicates if this Type specifies Sequenced DataObjects. * Sequenced DataObjects are used when the order of values * between Properties must be preserved. * When true, a DataObject will return a Sequence. For example, *
   *  Sequence elements = dataObject.{@link DataObject#getSequence() getSequence}();
   * 
* @return true if this Type specifies Sequenced DataObjects. */ boolean isSequenced(); /** * Indicates if this Type is abstract. If true, this Type cannot be * instantiated. Abstract types cannot be used in DataObject or * DataFactory create methods. * @return true if this Type is abstract. */ boolean isAbstract(); /** * Returns the List of base Types for this Type. The List is empty * if there are no base Types. XSD , , and * Java extends keyword are mapped to this list. * @return the List of base Types for this Type. */ List /*Type*/ getBaseTypes(); /** * Returns the Properties declared in this Type as opposed to * those declared in base Types. * @return the Properties declared in this Type. */ List /*Property*/ getDeclaredProperties(); /** * Return a list of alias names for this Type. * @return a list of alias names for this Type. */ List /*String*/ getAliasNames(); }