|
Oracle Fusion Middleware Java API Reference for Oracle TopLink 11g Release 1 (11.1.1) E28847-01 |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object
org.eclipse.persistence.sdo.helper.SDOEqualityHelper
public class SDOEqualityHelper
Purpose: A helper class for checking deep or shallow equality of DataObjects.
ChangeSummary is not in scope for equality checking.
SDODataObject
Field Summary | |
---|---|
private HelperContext |
aHelperContext hold the context containing all helpers so that we can preserve inter-helper relationships |
Constructor Summary | |
---|---|
SDOEqualityHelper() INTERNAL: This default constructor must be used in conjunction with the setHelperContext() function. |
|
SDOEqualityHelper(HelperContext aContext) Constructor that takes in a HelperContext instance that contains this equalityHelper. |
Method Summary | |
---|---|
private boolean |
arePropertiesEqual(Property prop1, Property prop2) INTERNAL: Convenience method that compares two Property objects for equality |
private boolean |
compare(DataObject dataObject1, DataObject dataObject2, boolean isDeep, java.util.List properties) INTERNAL: iterativly, compare the values of shared properties in two target DataObjects |
private boolean |
compareDataObjects(DataObject dataObject1, DataObject dataObject2, boolean isDeep) INTERNAL: Separately, checks the declared properties and open content properties. |
private boolean |
compareManyProperty(DataObject dataObject1, DataObject dataObject2, boolean isDeep, Property p) INTERNAL: iteratively check value of property p when p is many type property. |
private boolean |
compareProperty(DataObject dataObject1, DataObject dataObject2, boolean isDeep, SDOProperty p) INTERNAL: Recursively [PreOrder sequence] compare corresponding properties of 2 DataObjects check value of property p when p is not a many type property. |
private boolean |
compareSequences(SDOSequence aSequence, SDOSequence aSequenceCopy, boolean isDeep) INTERNAL: Return whether the 2 sequences are equal. |
boolean |
equal(DataObject dataObject1, DataObject dataObject2) 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. |
boolean |
equalShallow(DataObject dataObject1, DataObject dataObject2) Two DataObjects are equalShallow if they have the same Type and all their compared Properties are equal. |
HelperContext |
getHelperContext() INTERNAL: Return the helperContext containing this equalityHelper. |
private int |
getIndexOfNextDataTypeSetting(SDOSequence aSequence, int index) INTERNAL: Convenience method for returning the index of the next DataType Setting in a given sequence. |
private boolean |
isADataObjectInList(DataObject dataObject1, java.util.List objects) INTERNAL: |
void |
setHelperContext(HelperContext helperContext) INTERNAL: Set the helperContext if this equalityHelper was created using the default constructor. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
private HelperContext aHelperContext
Constructor Detail |
---|
public SDOEqualityHelper()
public SDOEqualityHelper(HelperContext aContext)
aContext
-Method Detail |
---|
public boolean equalShallow(DataObject dataObject1, DataObject dataObject2)
Two DataObjects are equalShallow if they have the same Type
and all their compared Properties are equal. The set of Properties compared are the 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 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.
dataObject1
- DataObject to be compareddataObject2
- DataObject to be comparedpublic boolean equal(DataObject dataObject1, DataObject dataObject2)
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 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 set
, or all the DataObjects they refer to are 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).dataObject1
- DataObject to be compareddataObject2
- DataObject to be comparedprivate boolean compareDataObjects(DataObject dataObject1, DataObject dataObject2, boolean isDeep)
dataObject1
- the DataObject to be compareddataObject2
- the DataObject to be comparedisDeep
- if comparison is deepprivate boolean compareSequences(SDOSequence aSequence, SDOSequence aSequenceCopy, boolean isDeep)
For shallow equal - only dataType=true objects are compared, DataObject values are ignored but should be defaults. Note: A setting object should handle its own isEqual() behavior
aSequence
-aSequenceCopy
-isDeep
-private int getIndexOfNextDataTypeSetting(SDOSequence aSequence, int index)
aSequence
-index
-private boolean arePropertiesEqual(Property prop1, Property prop2)
prop1
-prop2
-private boolean compare(DataObject dataObject1, DataObject dataObject2, boolean isDeep, java.util.List properties)
dataObject1
- the DataObject to be compareddataObject2
- the DataObject to be comparedisDeep
- if comparison is deepproperties
- list of properties shared by two DataObjectsprivate boolean compareProperty(DataObject dataObject1, DataObject dataObject2, boolean isDeep, SDOProperty p)
dataObject1
- the DataObject to be compareddataObject2
- the DataObject to be comparedisDeep
- if comparison is deepp
- the property shared by two DataObjectsprivate boolean compareManyProperty(DataObject dataObject1, DataObject dataObject2, boolean isDeep, Property p)
dataObject1
- the DataObject to be compareddataObject2
- the DataObject to be comparedisShallow
- if comparison is shallowp
- the property shared by two DataObjectsprivate boolean isADataObjectInList(DataObject dataObject1, java.util.List objects)
dataObject1
-objects
-public HelperContext getHelperContext()
public void setHelperContext(HelperContext helperContext)
helperContext
-
|
|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |