package org.javers.core.diff;
import org.javers.common.validation.Validate;
import org.javers.core.graph.ObjectNode;
import org.javers.core.metamodel.object.GlobalId;
import org.javers.core.metamodel.property.Property;
import org.javers.core.metamodel.type.ManagedType;
import java.util.List;
/**
* holds two versions of the same {@link ObjectNode}
*
* @author bartosz walacik
*/
public class RealNodePair implements NodePair {
private final ObjectNode left;
private final ObjectNode right;
public RealNodePair(ObjectNode left, ObjectNode right) {
Validate.argumentsAreNotNull(left, right);
Validate.argumentCheck(left.getGlobalId().equals(right.getGlobalId()), "left & right should refer to the same Cdo");
this.left = left;
this.right = right;
}
@Override
public ManagedType getManagedType() {
return left.getManagedType();
}
@Override
public boolean isNullOnBothSides(Property property) {
return left.getPropertyValue(property) == null &&
right.getPropertyValue(property) == null;
}
@Override
public Object getLeftPropertyValue(Property property) {
return left.getPropertyValue(property);
}
@Override
public Object getRightPropertyValue(Property property) {
return right.getPropertyValue(property);
}
@Override
public GlobalId getRightGlobalId(Property property) {
return right.getReference(property);
}
@Override
public GlobalId getLeftGlobalId(Property property) {
return left.getReference(property);
}
@Override
public ObjectNode getRight() {
return right;
}
@Override
public List<Property> getProperties() {
return (List)getManagedType().getProperties();
}
@Override
public GlobalId getGlobalId() {
return left.getGlobalId();
}
}