/**
*
Two DataObjects are equalShallow if
* they have the same {@link DataObject#getType Type}
* and all their compared Properties are equal.
* The set of Properties compared are the
* {@link DataObject#getInstanceProperties() instance properties}
* where property.getType().isDataType() is true
* and property.getType() is not ChangeSummaryType.
*
Two of these Property values are equal if they are both not
* {@link DataObject#isSet(Property) set}, or set to an equal value
* dataObject1.get(property).equals(dataObject2.get(property))
*
If the type is a sequenced type, the sequence entries must be the same.
* For each entry x in the sequence where the property is used in the comparison,
* dataObject1.getSequence().getValue(x).equals(
* dataObject2.getSequence().getValue(x)) and
* dataObject1.getSequence().getProperty(x) ==
* dataObject2.getSequence().getProperty(x)
* must be true.
*
Two DataObjects are equal(Deep) if they are equalShallow,
* all their compared Properties are equal, and all reachable DataObjects in their
* graphs excluding containers are equal.
* The set of Properties compared are the
* {@link DataObject#getInstanceProperties() instance properties}
* where property.getType().isDataType() is false,
* and is not a container property, ie !property.getOpposite().isContainment()
*
Two of these Property values are equal if they are both not
* {@link DataObject#isSet(Property) set}, or all the DataObjects
* they refer to are {@link #equal(DataObject, DataObject) equal} in the
* context of dataObject1 and dataObject2.
*
Note that properties to a containing DataObject are not compared
* which means two DataObject trees can be equal even if their containers are not equal.
*
If the type is a sequenced type, the sequence entries must be the same.
* For each entry x in the sequence where the property is used in the comparison,
* equal(dataObject1.getSequence().getValue(x),
* dataObject2.getSequence().getValue(x)) and
* dataObject1.getSequence().getProperty(x) ==
* dataObject2.getSequence().getProperty(x)
* must be true.
*
* A DataObject directly or indirectly referenced by dataObject1 or dataObject2 * can only be equal to exactly one DataObject directly or indirectly referenced * by dataObject1 or dataObject2, respectively. * This ensures that dataObject1 and dataObject2 are equal if the graph formed by * all their referenced DataObjects have the same shape. *
* Returns true if the trees of DataObjects are equal(Deep). * @param dataObject1 DataObject to be compared * @param dataObject2 DataObject to be compared * @return true if the trees of DataObjects are equal(Deep). */ boolean equal(DataObject dataObject1, DataObject dataObject2); /** * The default EqualityHelper. */ EqualityHelper INSTANCE = HelperProvider.getEqualityHelper(); }