/**
*
* 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();
}