ALF-10772: schema comparator

Compares two abstract database schemas.



git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@31312 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Matt Ward
2011-10-18 11:42:57 +00:00
parent 4cde60f0e6
commit 2a5a337b4e
14 changed files with 799 additions and 139 deletions

View File

@@ -18,39 +18,73 @@
*/
package org.alfresco.util.schemacomp;
import org.alfresco.util.schemacomp.model.DbObject;
/**
* Result of a comparison between two database objects.
*
* @author Matt Ward
*/
public class Result
public final class Result
{
public enum Type { ONLY_IN_LEFT, ONLY_IN_RIGHT, IN_BOTH_NO_DIFFERENCE, IN_BOTH_BUT_DIFFERENCE };
private Type type;
// Field list, where differences lie - recorded for single level only, otherwise, an error deep down would end
// up having the whole schema as being different, but that isn't useful. During reporting, climb back up the tree
// to produce a path, e.g. "my_schema.my_table.my_column.nullable has differences"
/** Specifies the type of differences */
public enum Where { ONLY_IN_LEFT, ONLY_IN_RIGHT, IN_BOTH_NO_DIFFERENCE, IN_BOTH_BUT_DIFFERENCE };
private final Where where;
private final Object left;
private final Object right;
private final String path;
// Could hold the two items that (may - see type above) differ?
// These objects are already structured, no field names required.
DbObject left;
DbObject right;
// or, could...
// Have differences
public static class DiffField
public Result(Where where, Object left, Object right, String path)
{
String leftFieldName;
String leftVal;
String rightFieldName;
String rightVal;
this.where = where;
this.left = left;
this.right = right;
this.path = path;
}
/**
* @return the where
*/
public Where getWhere()
{
return this.where;
}
/**
* @return the left
*/
public Object getLeft()
{
return this.left;
}
/**
* @return the right
*/
public Object getRight()
{
return this.right;
}
/**
* @return the path
*/
public String getPath()
{
return this.path;
}
@Override
public String toString()
{
return "Result [where=" + this.where + ", left=" + this.left + ", right=" + this.right
+ ", path=" + this.path + "]";
}
}