package org.test4j.hamcrest.matcher.property.difference;
import java.util.HashMap;
import java.util.Map;
/**
* A class for holding the difference between two objects.
*/
public class ObjectDifference extends Difference {
/* The differences per field name */
private Map<String, Difference> fieldDifferences = new HashMap<String, Difference>();
/**
* Creates a difference.
*
* @param message
* a message describing the difference
* @param leftValue
* the left instance
* @param rightValue
* the right instance
*/
public ObjectDifference(String message, Object leftValue, Object rightValue) {
super(message, leftValue, rightValue);
}
/**
* Adds a difference for the field with the given name.
*
* @param fieldName
* The field name, not null
* @param difference
* The difference, not null
*/
public void addFieldDifference(String fieldName, Difference difference) {
fieldDifferences.put(fieldName, difference);
}
/**
* Gets all differences per field name.
*
* @return The differences, not null
*/
public Map<String, Difference> getFieldDifferences() {
return fieldDifferences;
}
/**
* Double dispatch method. Dispatches back to the given visitor.
* <p/>
* All subclasses should copy this method in their own class body.
*
* @param visitor
* The visitor, not null
* @param argument
* An optional argument for the visitor, null if not applicable
* @return The result
*/
@Override
public <T, A> T accept(DifferenceVisitor<T, A> visitor, A argument) {
return visitor.visit(this, argument);
}
}