/** * * * Service Data Objects * Version 2.1.0 * Licensed Materials * * (c) Copyright BEA Systems, Inc., International Business Machines Corporation, * Oracle Corporation, Primeton Technologies Ltd., Rogue Wave Software, SAP AG., * Software AG., Sun Microsystems, Sybase Inc., Xcalia, Zend Technologies, * 2005, 2006. All rights reserved. * * * */ package commonj.sdo; import java.io.Serializable; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Date; import java.util.List; /** * A data object is a representation of some structured data. * It is the fundamental component in the SDO (Service Data Objects) package. * Data objects support reflection, path-based accesss, convenience creation and deletion methods, * and the ability to be part of a {@link DataGraph data graph}. *

* Each data object holds its data as a series of {@link Property Properties}. * Properties can be accessed by name, property index, or using the property meta object itself. * A data object can also contain references to other data objects, through reference-type Properties. *

* A data object has a series of convenience accessors for its Properties. * These methods either use a path (String), * a property index, * or the {@link Property property's meta object} itself, to identify the property. * Some examples of the path-based accessors are as follows: *

 * DataObject company = ...;
 * company.get("name");                   is the same as company.get(company.getType().getProperty("name"))
 * company.set("name", "acme");
 * company.get("department.0/name")       is the same as ((DataObject)((List)company.get("department")).get(0)).get("name")
 *                                        .n  indexes from 0 ... implies the name property of the first department
 * company.get("department[1]/name")      [] indexes from 1 ... implies the name property of the first department
 * company.get("department[number=123]")  returns the first department where number=123
 * company.get("..")                      returns the containing data object
 * company.get("/")                       returns the root containing data object
 *
*

There are general accessors for Properties, i.e., {@link #get(Property) get} and {@link #set(Property, Object) set}, * as well as specific accessors for the primitive types and commonly used data types like * String, Date, List, BigInteger, and BigDecimal. */ public interface DataObject extends Serializable { /** * Returns the value of a property of either this object or an object reachable from it, as identified by the * specified path. * @param path the path to a valid object and property. * @return the value of the specified property. * @see #get(Property) */ Object get(String path); /** * Sets a property of either this object or an object reachable from it, as identified by the specified path, * to the specified value. * @param path the path to a valid object and property. * @param value the new value for the property. * @see #set(Property, Object) */ void set(String path, Object value); /** * Returns whether a property of either this object or an object reachable from it, as identified by the specified path, * is considered to be set. * @param path the path to a valid object and property. * @see #isSet(Property) */ boolean isSet(String path); /** * Unsets a property of either this object or an object reachable from it, as identified by the specified path. * @param path the path to a valid object and property. * @see #unset(Property) */ void unset(String path); /** * Returns the value of a boolean property identified by the specified path. * @param path the path to a valid object and property. * @return the boolean value of the specified property. * @see #get(String) */ boolean getBoolean(String path); /** * Returns the value of a byte property identified by the specified path. * @param path the path to a valid object and property. * @return the byte value of the specified property. * @see #get(String) */ byte getByte(String path); /** * Returns the value of a char property identified by the specified path. * @param path the path to a valid object and property. * @return the char value of the specified property. * @see #get(String) */ char getChar(String path); /** * Returns the value of a double property identified by the specified path. * @param path the path to a valid object and property. * @return the double value of the specified property. * @see #get(String) */ double getDouble(String path); /** * Returns the value of a float property identified by the specified path. * @param path the path to a valid object and property. * @return the float value of the specified property. * @see #get(String) */ float getFloat(String path); /** * Returns the value of a int property identified by the specified path. * @param path the path to a valid object and property. * @return the int value of the specified property. * @see #get(String) */ int getInt(String path); /** * Returns the value of a long property identified by the specified path. * @param path the path to a valid object and property. * @return the long value of the specified property. * @see #get(String) */ long getLong(String path); /** * Returns the value of a short property identified by the specified path. * @param path the path to a valid object and property. * @return the short value of the specified property. * @see #get(String) */ short getShort(String path); /** * Returns the value of a byte[] property identified by the specified path. * @param path the path to a valid object and property. * @return the byte[] value of the specified property. * @see #get(String) */ byte[] getBytes(String path); /** * Returns the value of a BigDecimal property identified by the specified path. * @param path the path to a valid object and property. * @return the BigDecimal value of the specified property. * @see #get(String) */ BigDecimal getBigDecimal(String path); /** * Returns the value of a BigInteger property identified by the specified path. * @param path the path to a valid object and property. * @return the BigInteger value of the specified property. * @see #get(String) */ BigInteger getBigInteger(String path); /** * Returns the value of a DataObject property identified by the specified path. * @param path the path to a valid object and property. * @return the DataObject value of the specified property. * @see #get(String) */ DataObject getDataObject(String path); /** * Returns the value of a Date property identified by the specified path. * @param path the path to a valid object and property. * @return the Date value of the specified property. * @see #get(String) */ Date getDate(String path); /** * Returns the value of a String property identified by the specified path. * @param path the path to a valid object and property. * @return the String value of the specified property. * @see #get(String) */ String getString(String path); /** * Returns the value of a List property identified by the specified path. * @param path the path to a valid object and property. * @return the List value of the specified property. * @see #get(String) */ List getList(String path); /** * @see #getSequence() * Returns the value of a Sequence property identified by the specified path. * An implementation may throw an UnsupportedOperationException. * @param path the path to a valid object and property. * @return the Sequence value of the specified property. * @see #get(String) * @deprecated in 2.1.0. */ Sequence getSequence(String path); /** * Sets the value of a boolean property identified by the specified path, to the specified value. * @param path the path to a valid object and property. * @param value the new value for the property. * @see #set(String, Object) */ void setBoolean(String path, boolean value); /** * Sets the value of a byte property identified by the specified path, to the specified value. * @param path the path to a valid object and property. * @param value the new value for the property. * @see #set(String, Object) */ void setByte(String path, byte value); /** * Sets the value of a char property identified by the specified path, to the specified value. * @param path the path to a valid object and property. * @param value the new value for the property. * @see #set(String, Object) */ void setChar(String path, char value); /** * Sets the value of a double property identified by the specified path, to the specified value. * @param path the path to a valid object and property. * @param value the new value for the property. * @see #set(String, Object) */ void setDouble(String path, double value); /** * Sets the value of a float property identified by the specified path, to the specified value. * @param path the path to a valid object and property. * @param value the new value for the property. * @see #set(String, Object) */ void setFloat(String path, float value); /** * Sets the value of a int property identified by the specified path, to the specified value. * @param path the path to a valid object and property. * @param value the new value for the property. * @see #set(String, Object) */ void setInt(String path, int value); /** * Sets the value of a long property identified by the specified path, to the specified value. * @param path the path to a valid object and property. * @param value the new value for the property. * @see #set(String, Object) */ void setLong(String path, long value); /** * Sets the value of a short property identified by the specified path, to the specified value. * @param path the path to a valid object and property. * @param value the new value for the property. * @see #set(String, Object) */ void setShort(String path, short value); /** * Sets the value of a byte[] property identified by the specified path, to the specified value. * @param path the path to a valid object and property. * @param value the new value for the property. * @see #set(String, Object) */ void setBytes(String path, byte[] value); /** * Sets the value of a BigDecimal property identified by the specified path, to the specified value. * @param path the path to a valid object and property. * @param value the new value for the property. * @see #set(String, Object) */ void setBigDecimal(String path, BigDecimal value); /** * Sets the value of a BigInteger property identified by the specified path, to the specified value. * @param path the path to a valid object and property. * @param value the new value for the property. * @see #set(String, Object) */ void setBigInteger(String path, BigInteger value); /** * Sets the value of a DataObject property identified by the specified path, to the specified value. * @param path the path to a valid object and property. * @param value the new value for the property. * @see #set(String, Object) */ void setDataObject(String path, DataObject value); /** * Sets the value of a Date property identified by the specified path, to the specified value. * @param path the path to a valid object and property. * @param value the new value for the property. * @see #set(String, Object) */ void setDate(String path, Date value); /** * Sets the value of a String property identified by the specified path, to the specified value. * @param path the path to a valid object and property. * @param value the new value for the property. * @see #set(String, Object) */ void setString(String path, String value); /** * Sets the value of a List property identified by the specified path, to the specified value. * @param path the path to a valid object and property. * @param value the new value for the property. * @see #set(String, Object) * @see #setList(Property, List) */ void setList(String path, List value); /** * Returns the value of the property at the specified index in {@link Type#getProperties property list} * of this object's {@link Type type}. * @param propertyIndex the index of the property. * @return the value of the specified property. * @see #get(Property) */ Object get(int propertyIndex); /** * Sets the property at the specified index in {@link Type#getProperties property list} of this object's * {@link Type type}, to the specified value. * @param propertyIndex the index of the property. * @param value the new value for the property. * @see #set(Property, Object) */ void set(int propertyIndex, Object value); /** * Returns whether the the property at the specified index in {@link Type#getProperties property list} of this object's * {@link Type type}, is considered to be set. * @param propertyIndex the index of the property. * @return whether the specified property is set. * @see #isSet(Property) */ boolean isSet(int propertyIndex); /** * Unsets the property at the specified index in {@link Type#getProperties property list} of this object's {@link Type type}. * @param propertyIndex the index of the property. * @see #unset(Property) */ void unset(int propertyIndex); /** * Returns the value of a boolean property identified by the specified property index. * @param propertyIndex the index of the property. * @return the boolean value of the specified property. * @see #get(int) */ boolean getBoolean(int propertyIndex); /** * Returns the value of a byte property identified by the specified property index. * @param propertyIndex the index of the property. * @return the byte value of the specified property. * @see #get(int) */ byte getByte(int propertyIndex); /** * Returns the value of a char property identified by the specified property index. * @param propertyIndex the index of the property. * @return the char value of the specified property. * @see #get(int) */ char getChar(int propertyIndex); /** * Returns the value of a double property identified by the specified property index. * @param propertyIndex the index of the property. * @return the double value of the specified property. * @see #get(int) */ double getDouble(int propertyIndex); /** * Returns the value of a float property identified by the specified property index. * @param propertyIndex the index of the property. * @return the float value of the specified property. * @see #get(int) */ float getFloat(int propertyIndex); /** * Returns the value of a int property identified by the specified property index. * @param propertyIndex the index of the property. * @return the int value of the specified property. * @see #get(int) */ int getInt(int propertyIndex); /** * Returns the value of a long property identified by the specified property index. * @param propertyIndex the index of the property. * @return the long value of the specified property. * @see #get(int) */ long getLong(int propertyIndex); /** * Returns the value of a short property identified by the specified property index. * @param propertyIndex the index of the property. * @return the short value of the specified property. * @see #get(int) */ short getShort(int propertyIndex); /** * Returns the value of a byte[] property identified by the specified property index. * @param propertyIndex the index of the property. * @return the byte[] value of the specified property. * @see #get(int) */ byte[] getBytes(int propertyIndex); /** * Returns the value of a BigDecimal property identified by the specified property index. * @param propertyIndex the index of the property. * @return the BigDecimal value of the specified property. * @see #get(int) */ BigDecimal getBigDecimal(int propertyIndex); /** * Returns the value of a BigInteger property identified by the specified property index. * @param propertyIndex the index of the property. * @return the BigInteger value of the specified property. * @see #get(int) */ BigInteger getBigInteger(int propertyIndex); /** * Returns the value of a DataObject property identified by the specified property index. * @param propertyIndex the index of the property. * @return the DataObject value of the specified property. * @see #get(int) */ DataObject getDataObject(int propertyIndex); /** * Returns the value of a Date property identified by the specified property index. * @param propertyIndex the index of the property. * @return the Date value of the specified property. * @see #get(int) */ Date getDate(int propertyIndex); /** * Returns the value of a String property identified by the specified property index. * @param propertyIndex the index of the property. * @return the String value of the specified property. * @see #get(int) */ String getString(int propertyIndex); /** * Returns the value of a List property identified by the specified property index. * @param propertyIndex the index of the property. * @return the List value of the specified property. * @see #get(int) */ List getList(int propertyIndex); /** * @see #getSequence() * Returns the value of a Sequence property identified by the specified property index. * An implementation may throw an UnsupportedOperationException. * @param propertyIndex the index of the property. * @return the Sequence value of the specified property. * @see #get(int) * @deprecated in 2.1.0. */ Sequence getSequence(int propertyIndex); /** * Sets the value of a boolean property identified by the specified property index, to the specified value. * @param propertyIndex the index of the property. * @param value the new value for the property. * @see #set(int, Object) */ void setBoolean(int propertyIndex, boolean value); /** * Sets the value of a byte property identified by the specified property index, to the specified value. * @param propertyIndex the index of the property. * @param value the new value for the property. * @see #set(int, Object) */ void setByte(int propertyIndex, byte value); /** * Sets the value of a char property identified by the specified property index, to the specified value. * @param propertyIndex the index of the property. * @param value the new value for the property. * @see #set(int, Object) */ void setChar(int propertyIndex, char value); /** * Sets the value of a double property identified by the specified property index, to the specified value. * @param propertyIndex the index of the property. * @param value the new value for the property. * @see #set(int, Object) */ void setDouble(int propertyIndex, double value); /** * Sets the value of a float property identified by the specified property index, to the specified value. * @param propertyIndex the index of the property. * @param value the new value for the property. * @see #set(int, Object) */ void setFloat(int propertyIndex, float value); /** * Sets the value of a int property identified by the specified property index, to the specified value. * @param propertyIndex the index of the property. * @param value the new value for the property. * @see #set(int, Object) */ void setInt(int propertyIndex, int value); /** * Sets the value of a long property identified by the specified property index, to the specified value. * @param propertyIndex the index of the property. * @param value the new value for the property. * @see #set(int, Object) */ void setLong(int propertyIndex, long value); /** * Sets the value of a short property identified by the specified property index, to the specified value. * @param propertyIndex the index of the property. * @param value the new value for the property. * @see #set(int, Object) */ void setShort(int propertyIndex, short value); /** * Sets the value of a byte[] property identified by the specified property index, to the specified value. * @param propertyIndex the index of the property. * @param value the new value for the property. * @see #set(int, Object) */ void setBytes(int propertyIndex, byte[] value); /** * Sets the value of a BigDecimal property identified by the specified property index, to the specified value. * @param propertyIndex the index of the property. * @param value the new value for the property. * @see #set(int, Object) */ void setBigDecimal(int propertyIndex, BigDecimal value); /** * Sets the value of a BigInteger property identified by the specified property index, to the specified value. * @param propertyIndex the index of the property. * @param value the new value for the property. * @see #set(int, Object) */ void setBigInteger(int propertyIndex, BigInteger value); /** * Sets the value of a DataObject property identified by the specified property index, to the specified value. * @param propertyIndex the index of the property. * @param value the new value for the property. * @see #set(int, Object) */ void setDataObject(int propertyIndex, DataObject value); /** * Sets the value of a Date property identified by the specified property index, to the specified value. * @param propertyIndex the index of the property. * @param value the new value for the property. * @see #set(int, Object) */ void setDate(int propertyIndex, Date value); /** * Sets the value of a String property identified by the specified property index, to the specified value. * @param propertyIndex the index of the property. * @param value the new value for the property. * @see #set(int, Object) */ void setString(int propertyIndex, String value); /** * Sets the value of a List property identified by the specified property index, to the specified value. * @param propertyIndex the index of the property. * @param value the new value for the property. * @see #set(int, Object) * @see #setList(Property, List) */ void setList(int propertyIndex, List value); /** * Returns the value of the given property of this object. *

* If the property is {@link Property#isMany many-valued}, * the result will be a {@link java.util.List} * and each object in the List will be {@link Type#isInstance an instance of} * the property's {@link Property#getType type}. * Otherwise the result will directly be an instance of the property's type. * @param property the property of the value to fetch. * @return the value of the given property of the object. * @see #set(Property, Object) * @see #unset(Property) * @see #isSet(Property) */ Object get(Property property); /** * Sets the value of the given property of the object to the new value. *

* If the property is {@link Property#isMany many-valued}, * the new value must be a {@link java.util.List} * and each object in that list must be {@link Type#isInstance an instance of} * the property's {@link Property#getType type}; * the existing contents are cleared and the contents of the new value are added. * Otherwise the new value directly must be an instance of the property's type * and it becomes the new value of the property of the object. * @param property the property of the value to set. * @param value the new value for the property. * @see #unset(Property) * @see #isSet(Property) * @see #get(Property) */ void set(Property property, Object value); /** * Returns whether the property of the object is considered to be set. *

* isSet() for many-valued Properties returns true if the List is not empty and * false if the List is empty. For single-valued Properties it returns true if the Property * has been set() and not unset(), and false otherwise. * Any call to set() without a call to unset() will cause isSet() to return true, regardless of * the value being set. For example, after calling set(property, property.getDefault()) on a * previously unset property, isSet(property) will return true, even though the value of * get(property) will be unchanged. * @param property the property in question. * @return whether the property of the object is set. * @see #set(Property, Object) * @see #unset(Property) * @see #get(Property) */ boolean isSet(Property property); /** * Unsets the property of the object. *

* If the property is {@link Property#isMany many-valued}, * the value must be an {@link java.util.List} * and that list is cleared. * Otherwise, * the value of the property of the object * is set to the property's {@link Property#getDefault default value}. * The property will no longer be considered {@link #isSet set}. * @param property the property in question. * @see #isSet(Property) * @see #set(Property, Object) * @see #get(Property) */ void unset(Property property); /** * Returns the value of the specified boolean property. * @param property the property to get. * @return the boolean value of the specified property. * @see #get(Property) */ boolean getBoolean(Property property); /** * Returns the value of the specified byte property. * @param property the property to get. * @return the byte value of the specified property. * @see #get(Property) */ byte getByte(Property property); /** * Returns the value of the specified char property. * @param property the property to get. * @return the char value of the specified property. * @see #get(Property) */ char getChar(Property property); /** * Returns the value of the specified double property. * @param property the property to get. * @return the double value of the specified property. * @see #get(Property) */ double getDouble(Property property); /** * Returns the value of the specified float property. * @param property the property to get. * @return the float value of the specified property. * @see #get(Property) */ float getFloat(Property property); /** * Returns the value of the specified int property. * @param property the property to get. * @return the int value of the specified property. * @see #get(Property) */ int getInt(Property property); /** * Returns the value of the specified long property. * @param property the property to get. * @return the long value of the specified property. * @see #get(Property) */ long getLong(Property property); /** * Returns the value of the specified short property. * @param property the property to get. * @return the short value of the specified property. * @see #get(Property) */ short getShort(Property property); /** * Returns the value of the specified byte[] property. * @param property the property to get. * @return the byte[] value of the specified property. * @see #get(Property) */ byte[] getBytes(Property property); /** * Returns the value of the specified BigDecimal property. * @param property the property to get. * @return the BigDecimal value of the specified property. * @see #get(Property) */ BigDecimal getBigDecimal(Property property); /** * Returns the value of the specified BigInteger property. * @param property the property to get. * @return the BigInteger value of the specified property. * @see #get(Property) */ BigInteger getBigInteger(Property property); /** * Returns the value of the specified DataObject property. * @param property the property to get. * @return the DataObject value of the specified property. * @see #get(Property) */ DataObject getDataObject(Property property); /** * Returns the value of the specified Date property. * @param property the property to get. * @return the Date value of the specified property. * @see #get(Property) */ Date getDate(Property property); /** * Returns the value of the specified String property. * @param property the property to get. * @return the String value of the specified property. * @see #get(Property) */ String getString(Property property); /** * Returns the value of the specified List property. * The List returned contains the current values. * Updates through the List interface operate on the current values of the DataObject. * Each access returns the same List object. * @param property the property to get. * @return the List value of the specified property. * @see #get(Property) */ List getList(Property property); /** * @see #getSequence() * Returns the value of the specified Sequence property. * An implementation may throw an UnsupportedOperationException. * @param property the property to get. * @return the Sequence value of the specified property. * @see #get(Property) * @deprecated in 2.1.0. */ Sequence getSequence(Property property); /** * Sets the value of the specified boolean property, to the specified value. * @param property the property to set. * @param value the new value for the property. * @see #set(Property, Object) */ void setBoolean(Property property, boolean value); /** * Sets the value of the specified byte property, to the specified value. * @param property the property to set. * @param value the new value for the property. * @see #set(Property, Object) */ void setByte(Property property, byte value); /** * Sets the value of the specified char property, to the specified value. * @param property the property to set. * @param value the new value for the property. * @see #set(Property, Object) */ void setChar(Property property, char value); /** * Sets the value of the specified double property, to the specified value. * @param property the property to set. * @param value the new value for the property. * @see #set(Property, Object) */ void setDouble(Property property, double value); /** * Sets the value of the specified float property, to the specified value. * @param property the property to set. * @param value the new value for the property. * @see #set(Property, Object) */ void setFloat(Property property, float value); /** * Sets the value of the specified int property, to the specified value. * @param property the property to set. * @param value the new value for the property. * @see #set(Property, Object) */ void setInt(Property property, int value); /** * Sets the value of the specified long property, to the specified value. * @param property the property to set. * @param value the new value for the property. * @see #set(Property, Object) */ void setLong(Property property, long value); /** * Sets the value of the specified short property, to the specified value. * @param property the property to set. * @param value the new value for the property. * @see #set(Property, Object) */ void setShort(Property property, short value); /** * Sets the value of the specified byte[] property, to the specified value. * @param property the property to set. * @param value the new value for the property. * @see #set(Property, Object) */ void setBytes(Property property, byte[] value); /** * Sets the value of the specified BigDecimal property, to the specified value. * @param property the property to set. * @param value the new value for the property. * @see #set(Property, Object) */ void setBigDecimal(Property property, BigDecimal value); /** * Sets the value of the specified BigInteger property, to the specified value. * @param property the property to set. * @param value the new value for the property. * @see #set(Property, Object) */ void setBigInteger(Property property, BigInteger value); /** * Sets the value of the specified DataObject property, to the specified value. * @param property the property to set. * @param value the new value for the property. * @see #set(Property, Object) */ void setDataObject(Property property, DataObject value); /** * Sets the value of the specified Date property, to the specified value. * @param property the property to set. * @param value the new value for the property. * @see #set(Property, Object) */ void setDate(Property property, Date value); /** * Sets the value of the specified String property, to the specified value. * @param property the property to set. * @param value the new value for the property. * @see #set(Property, Object) */ void setString(Property property, String value); /** * Sets the value of the specified List property, to the specified value. *

The new value must be a {@link java.util.List} * and each object in that list must be {@link Type#isInstance an instance of} * the property's {@link Property#getType type}; * the existing contents are cleared and the contents of the new value are added. * @param property the property to set. * @param value the new value for the property. * @see #set(Property, Object) */ void setList(Property property, List value); /** * Returns a new {@link DataObject data object} contained by this object using the specified property, * which must be a {@link Property#isContainment containment property}. * The type of the created object is the {@link Property#getType declared type} of the specified property. * @param propertyName the name of the specified containment property. * @return the created data object. * @see #createDataObject(String, String, String) */ DataObject createDataObject(String propertyName); /** * Returns a new {@link DataObject data object} contained by this object using the specified property, * which must be a {@link Property#isContainment containment property}. * The type of the created object is the {@link Property#getType declared type} of the specified property. * @param propertyIndex the index of the specified containment property. * @return the created data object. * @see #createDataObject(int, String, String) */ DataObject createDataObject(int propertyIndex); /** * Returns a new {@link DataObject data object} contained by this object using the specified property, * which must be a {@link Property#isContainment containment property}. * The type of the created object is the {@link Property#getType declared type} of the specified property. * @param property the specified containment property. * @return the created data object. * @see #createDataObject(Property, Type) */ DataObject createDataObject(Property property); /** * Returns a new {@link DataObject data object} contained by this object using the specified property, * which must be a {@link Property#isContainment containment property}. * The type of the created object is specified by the packageURI and typeName arguments. * The specified type must be a compatible target for the property identified by propertyName. * @param propertyName the name of the specified containment property. * @param namespaceURI the namespace URI of the package containing the type of object to be created. * @param typeName the name of a type in the specified package. * @return the created data object. * @see #createDataObject(String) * @see DataGraph#getType */ DataObject createDataObject(String propertyName, String namespaceURI, String typeName); /** * Returns a new {@link DataObject data object} contained by this object using the specified property, * which must be a {@link Property#isContainment containment property}. * The type of the created object is specified by the packageURI and typeName arguments. * The specified type must be a compatible target for the property identified by propertyIndex. * @param propertyIndex the index of the specified containment property. * @param namespaceURI the namespace URI of the package containing the type of object to be created. * @param typeName the name of a type in the specified package. * @return the created data object. * @see #createDataObject(int) * @see DataGraph#getType */ DataObject createDataObject(int propertyIndex, String namespaceURI, String typeName); /** * Returns a new {@link DataObject data object} contained by this object using the specified property, * which must be of {@link Property#isContainment containment type}. * The type of the created object is specified by the type argument, * which must be a compatible target for the speicifed property. * @param property a containment property of this object. * @param type the type of object to be created. * @return the created data object. * @see #createDataObject(int) */ DataObject createDataObject(Property property, Type type); /** * Remove this object from its container and then unset all its non-{@link Property#isReadOnly readOnly} Properties. * If this object is contained by a {@link Property#isReadOnly readOnly} {@link Property#isContainment containment property}, its non-{@link Property#isReadOnly readOnly} Properties will be unset but the object will not be removed from its container. * All DataObjects recursively contained by {@link Property#isContainment containment Properties} will also be deleted. */ void delete(); /** * Returns the containing {@link DataObject data object} * or null if there is no container. * @return the containing data object or null. */ DataObject getContainer(); /** * Return the Property of the {@link DataObject data object} containing this data object * or null if there is no container. * @return the property containing this data object. */ Property getContainmentProperty(); /** * Returns the {@link DataGraph data graph} for this object or null if there isn't one. * @return the containing data graph or null. */ DataGraph getDataGraph(); /** * Returns the data object's type. *

* The type defines the Properties available for reflective access. * @return the type. */ Type getType(); /** * Returns the Sequence for this DataObject. * When getType().isSequencedType() == true, * the Sequence of a DataObject corresponds to the * XML elements representing the values of its Properties. * Updates through DataObject and the Lists or Sequences returned * from DataObject operate on the same data. * When getType().isSequencedType() == false, null is returned. * @return the Sequence or null. */ Sequence getSequence(); /** * Returns a read-only List of the Properties currently used in this DataObject. * This list will contain all of the Properties in getType().getProperties() * and any Properties where isSet(property) is true. * For example, Properties resulting from the use of * open or mixed XML content are present if allowed by the Type. * the List does not contain duplicates. * The order of the Properties in the List begins with getType().getProperties() * and the order of the remaining Properties is determined by the implementation. * The same list will be returned unless the DataObject is updated so that * the contents of the List change. * @return the List of Properties currently used in this DataObject. */ List /* Property */ getInstanceProperties(); /** * Returns the named Property from the current instance properties, * or null if not found. The instance properties are getInstanceProperties(). * @param propertyName the name of the Property * @return the named Property from the DataObject's current instance properties, or null. */ Property getInstanceProperty(String propertyName); /** * @deprecated replaced by {@link #getInstanceProperty(String)} in 2.1.0 */ Property getProperty(String propertyName); /** * Returns the root {@link DataObject data object}. * @return the root data object. */ DataObject getRootObject(); /** * Returns the ChangeSummary with scope covering this dataObject, or null * if there is no ChangeSummary. * @return the ChangeSummary with scope covering this dataObject, or null. */ ChangeSummary getChangeSummary(); /** * Removes this DataObject from its container, if any. * Same as * getContainer().getList(getContainmentProperty()).remove(this) or * getContainer().unset(getContainmentProperty()) * depending on getContainmentProperty().isMany() respectively. */ void detach(); }