novie-core/src/main/java/com/groupon/novie/utils/SchemaDefinitionImpl.java
public Collection<Error> buildAndValidateConfig() {
        Collection<Error> returnValue = new ArrayList<Error>();

        // Check default TZ
        if (defaultTimezone == null) {
            returnValue.add(new Error("No default Timezone configured"));
        }

        for (Pair<Pair<String, String>, Pair<String, String>> fkRelationship : fkRelationshipSet) {
            Optional<PhysicalSqlColumn> left = getColumnByPair(fkRelationship.getLeft());
            Optional<PhysicalSqlColumn> right = getColumnByPair(fkRelationship.getRight());
            if (!left.isPresent()) {
                returnValue.add(new Error("Column " + fkRelationship.getLeft().getRight() + " in table " + fkRelationship.getLeft().getLeft()
                        + " doesn't exist."));
            } else if (!right.isPresent()) {
                returnValue.add(new Error("Column " + fkRelationship.getRight().getRight() + " in table " + fkRelationship.getRight().getLeft()
                        + " doesn't exist."));
            } else {
                buildSqlForeignKey(left.get(), right.get());
            }
        }
        // Check Alternate Tables
        for (Entry<Pair<String, String>, DimensionTable> entry : alternateDimensions.entrySet()) {
            DimensionTable dim = dimensions.get(entry.getKey().getLeft());
            if (dim == null) {
                returnValue.add(new Error("Original dimension " + entry.getKey().getLeft() + " does not exist."));
            } else {
                if (!dim.isEquivalent(entry.getValue(), returnValue)) {
                    returnValue.add(new Error("Dimension " + entry.getValue().getDimensionName() + " is not equivalent to " + dim.getDimensionName()
                            + "."));
                }
            }

        }

        return returnValue;
    }
public Collection<Error> buildAndValidateConfig() {
        Collection<Error> returnValue = new ArrayList<Error>();

        // Check default TZ
        if (defaultTimezone == null) {
            returnValue.add(new Error("No default Timezone configured"));
        }

        for (Pair<Pair<String, String>, Pair<String, String>> fkRelationship : fkRelationshipSet) {
            Optional<PhysicalSqlColumn> left = getColumnByPair(fkRelationship.getLeft());
            Optional<PhysicalSqlColumn> right = getColumnByPair(fkRelationship.getRight());
            if (!left.isPresent()) {
                returnValue.add(new Error("Column " + fkRelationship.getLeft().getRight() + " in table " + fkRelationship.getLeft().getLeft()
                        + " doesn't exist."));
            } else if (!right.isPresent()) {
                returnValue.add(new Error("Column " + fkRelationship.getRight().getRight() + " in table " + fkRelationship.getRight().getLeft()
                        + " doesn't exist."));
            } else {
                buildSqlForeignKey(left.get(), right.get());
            }
        }
        // Check Alternate Tables
        for (Entry<Pair<String, String>, DimensionTable> entry : alternateDimensions.entrySet()) {
            DimensionTable dim = dimensions.get(entry.getKey().getLeft());
            if (dim == null) {
                returnValue.add(new Error("Original dimension " + entry.getKey().getLeft() + " does not exist."));
            } else {
                if (!dim.isEquivalent(entry.getValue(), returnValue)) {
                    returnValue.add(new Error("Dimension " + entry.getValue().getDimensionName() + " is not equivalent to " + dim.getDimensionName()
                            + "."));
                }
            }

        }

        return returnValue;
    }
Build the configuration links (ie Foreigns key). Checks the validity of
the configuration.

@throws Exception