org.faktorips.runtime
Class DeltaComputationOptionsByPosition

java.lang.Object
  extended by org.faktorips.runtime.DeltaComputationOptionsByPosition
All Implemented Interfaces:
IDeltaComputationOptions

public class DeltaComputationOptionsByPosition
extends Object
implements IDeltaComputationOptions

Delta computation options that create child deltas per position and don't ignore any property. TODO the following reference does not exist

Author:
Jan Ortmann
See Also:
IDeltaComputationOptions.ComputationMethod.BY_POSITION

Nested Class Summary
 
Nested classes/interfaces inherited from interface org.faktorips.runtime.IDeltaComputationOptions
IDeltaComputationOptions.ComputationMethod
 
Constructor Summary
DeltaComputationOptionsByPosition()
           
 
Method Summary
 boolean areValuesEqual(Class<?> modelClass, String property, Object value1, Object value2)
          Compares two values for equality by the given model class and property, where either one or both values may be null.
 IDeltaComputationOptions.ComputationMethod getMethod(String association)
          Returns if the delta computation computes child deltas per position/index or per object.
 boolean ignore(Class<?> clazz, String property)
          Returns false.
 boolean isCreateSubtreeDelta()
          Controls whether delta objects for added or removed subtree elements should be created explicitly.
 boolean isSame(IModelObject object1, IModelObject object2)
          Returns true if the specified object references are identical.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DeltaComputationOptionsByPosition

public DeltaComputationOptionsByPosition()
Method Detail

getMethod

public IDeltaComputationOptions.ComputationMethod getMethod(String association)
Description copied from interface: IDeltaComputationOptions
Returns if the delta computation computes child deltas per position/index or per object.

1. Example for a 1-many association:
A contract version A has three coverages c0, c1, and c2. A second version B of the same contract has a new coverage cNew inserted between coverage c0 and c1. The coverages c0, c1,and c2 are unchanged except for their position.

If this method returns IDeltaComputationOptions.ComputationMethod.BY_POSITION, the following deltas are computed. position 0: version A:c0, version B:c0 => empty delta position 1: version A:c1, version B:cNew => changed position 2: version A:c2, version B:c1 => changed position 3: version A:none, version B:c2 => added

If this method returns IDeltaComputationOptions.ComputationMethod.BY_OBJECT, the following deltas are computed. c0: version A:position 0, version B:position 0 => empty delta c1: version A:position 1, version B:position 2 => moved c2: version A:position 2, version B:position 3 => moved cNew: version A:position none, version B:position 1 => added

2. Example for a 1-many association:
Same scenario as above, but now c1 is removed and no coverage is added.

If this method returns IDeltaComputationOptions.ComputationMethod.BY_POSITION, the following deltas are computed. position 0: version A:c0, version B:c0 => empty delta position 1: version A:c1, version B:v2 => changed position 2: version A:c2, version B:none => removed

If this method returns IDeltaComputationOptions.ComputationMethod.BY_OBJECT, the following deltas are computed. c0: version A:position 0, version B:position 0 => empty delta c1: version A:position 1, version B:position none => removed c2: version A:position 2, version B:position 1 => moved

Example for a 1-1 association:
A contract version A has the insured person p0. A second contract version B has the insured person p1.

If this method returns IDeltaComputationOptions.ComputationMethod.BY_POSITION, the following delta is computed. position 0: changed

If this method returns IDeltaComputationOptions.ComputationMethod.BY_OBJECT, the following deltas are computed. p1: removed p2: added

Specified by:
getMethod in interface IDeltaComputationOptions

isSame

public boolean isSame(IModelObject object1,
                      IModelObject object2)
Returns true if the specified object references are identical.

Specified by:
isSame in interface IDeltaComputationOptions

ignore

public boolean ignore(Class<?> clazz,
                      String property)
Returns false.

Specified by:
ignore in interface IDeltaComputationOptions
Parameters:
clazz - The class the property belongs to.
property - The name of the property.

isCreateSubtreeDelta

public boolean isCreateSubtreeDelta()
Description copied from interface: IDeltaComputationOptions
Controls whether delta objects for added or removed subtree elements should be created explicitly.

This method returns true if a delta should be created for added or removed subtrees. If this method returns false a delta is only created for the root of an added or removed subtree.

The creation of delta elements for subtree nodes is based on reflection and may cause a performance issue if used in massive delta computation with many added or removed subtrees.

Specified by:
isCreateSubtreeDelta in interface IDeltaComputationOptions
Returns:
true if a delta should be created for every element of an added or removed subtree.

areValuesEqual

public boolean areValuesEqual(Class<?> modelClass,
                              String property,
                              Object value1,
                              Object value2)
Description copied from interface: IDeltaComputationOptions
Compares two values for equality by the given model class and property, where either one or both values may be null.

Specified by:
areValuesEqual in interface IDeltaComputationOptions
Parameters:
modelClass - The class the property belongs to.
property - The name of the property.
value1 - The first value to compare
value2 - The second value to compare
Returns:
true if the values are the same


Copyright © 2015. All rights reserved.