package org.alfresco.util.schemacomp; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import org.alfresco.util.schemacomp.Difference.Where; import org.alfresco.util.schemacomp.model.Column; import org.alfresco.util.schemacomp.model.ForeignKey; import org.alfresco.util.schemacomp.model.Index; import org.alfresco.util.schemacomp.model.PrimaryKey; import org.alfresco.util.schemacomp.model.Sequence; import org.alfresco.util.schemacomp.model.Table; import org.apache.commons.lang.ArrayUtils; public class SchemaCompTestingUtils { public static void dumpValidation(Results results) { System.out.println("Validation Results (" + results.size() + ")"); for (Result r : results) { if (r instanceof ValidationResult) { System.out.println(r); } } } public static void dumpDiffs(Results differences, boolean showNonDifferences) { System.out.println("Differences (" + differences.size() + ")"); for (Result d : differences) { if (d instanceof Difference) { Difference diff = (Difference) d; if (diff.getWhere() != Where.IN_BOTH_NO_DIFFERENCE || showNonDifferences) { System.out.println(d); } } } } public static Table table(String name) { return new Table(null, name, columns("id NUMBER(10)"), pk("pk_" + name, "id"), fkeys(), indexes()); } public static Table table(String name, Collection columns, PrimaryKey primaryKey, Collection foreignKeys, Collection indexes) { return new Table(null, name, columns, primaryKey, foreignKeys, indexes); } public static Collection columns(boolean compareColOrder, String... colDefs) { assertTrue("Tables must have columns", colDefs.length > 0); Column[] columns = new Column[colDefs.length]; for (int i = 0; i < colDefs.length; i++) { String[] parts = colDefs[i].split(" "); columns[i] = new Column(null, parts[0], parts[1], false); columns[i].setOrder(i+1); columns[i].setCompareOrder(compareColOrder); } return Arrays.asList(columns); } public static Collection columns(String... colDefs) { return columns(true, colDefs); } public static PrimaryKey pk(String name, String... columnNames) { assertTrue("No columns specified", columnNames.length > 0); // Create a list of column orders, ordered the same as the supplied column names // i.e. 1, 2, 3... N List columnOrders = new ArrayList(columnNames.length); for (int i = 1; i <= columnNames.length; i++) { columnOrders.add(i); } PrimaryKey pk = new PrimaryKey(null, name, Arrays.asList(columnNames), columnOrders); return pk; } public static List fkeys(ForeignKey... fkeys) { return Arrays.asList(fkeys); } public static ForeignKey fk(String fkName, String localColumn, String targetTable, String targetColumn) { return new ForeignKey(null, fkName, localColumn, targetTable, targetColumn); } /** * Create collection of indexes using strings of format "name column1 [column2 ... columnN]" */ public static Collection indexes(String... indexDefs) { Index[] indexes = new Index[indexDefs.length]; for (int i = 0; i < indexDefs.length; i++) { String[] parts = indexDefs[i].split(" "); String name = parts[0]; boolean unique = false; int columnsStart = 1; if (parts[1].equals("[unique]")) { unique = true; columnsStart++; } String[] columns = (String[]) ArrayUtils.subarray(parts, columnsStart, parts.length); indexes[i] = new Index(null, name, Arrays.asList(columns)); indexes[i].setUnique(unique); } return Arrays.asList(indexes); } public static Sequence sequence(String name) { return new Sequence(name); } }