package org.simantics.interop.test; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.exception.DatabaseException; /** * * @author Marko Luukkainen * */ public abstract class ResourceComparator { public static int NO_MATCH = Integer.MAX_VALUE; // Comparison result when Resources cannot match. public static int UNDECISIVE = 0; // Comparison result when current available data is not enough to decide if the Resources match or not. public static int EXACT_MATCH = 1; // Comparison result when Resources are exact match. private GraphComparator comparator; void setComparator(GraphComparator comparator) { this.comparator = comparator; } public GraphComparator getComparator() { return comparator; } /** * Optional initialization method for overriding implementations. * * @param g * @param r1 root 1 * @param r2 root 2 */ public void initialize(ReadGraph g, Resource r1, Resource r2) throws DatabaseException { } /** * Compares two resources and returns numeric value of differences, minimum value is 1. * * Special values: * Integer.MAX_VALUE: Objects are not comparable. * 0 (zero): Object comparison is not reliable. * * Result is same as compare(g, o1, o2, true); * */ public abstract int compare(ReadGraph g, Resource o1, Resource o2) throws DatabaseException; /** * Compares two resources and returns numeric value of differences, minimum value is 1. * * Special values: * Integer.MAX_VALUE: Objects are not comparable. * 0 (zero): Object comparison is not reliable. * * @param g * @param o1 * @param o2 * @param local: if true, comparison must not utilise information stored into comparator. * @return * @throws DatabaseException */ public abstract int compare(ReadGraph g, Resource o1, Resource o2, boolean local) throws DatabaseException; }