Commit 243decdb authored by Sonia Zorba's avatar Sonia Zorba
Browse files

Consistency checking improvements

parent 4b9b9bba
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -44,6 +44,9 @@ public class Column extends ChildEntity<Table> {
    public final static String UCD_KEY = "ucd";
    public final static String UNIT_KEY = "unit";

    // Original datatype (computed from information_schema data), used for consistency checking
    public final static String ORIGINAL_DATATYPE_KEY = "original_datatype";

    private static final long serialVersionUID = 9175956487892235521L;
    private static final Logger LOG = LoggerFactory.getLogger(Column.class);

@@ -51,15 +54,17 @@ public class Column extends ChildEntity<Table> {
    private Key foreignKey;

    private Table parentTable;
    private boolean mandatory;

    private Column() {
        // for serialization
        super();
    }

    protected Column(TapSchema tapSchema, Table table, String columnName) {
    protected Column(TapSchema tapSchema, Table table, String columnName, boolean mandatory) {
        super(tapSchema, tapSchema.getTableModel(TapSchema.COLUMNS_TABLE), table.getColumnMetadata(columnName));
        parentTable = table;
        this.mandatory = mandatory;
        setStatus(Status.LOADED);
    }

@@ -114,6 +119,10 @@ public class Column extends ChildEntity<Table> {
        return (boolean) getMetadata(PRIMARY_KEY);
    }

    public boolean isMandatory() {
        return mandatory;
    }

    @Override
    public int hashCode() {
        int hash = 7;
+6 −1
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ package it.inaf.ia2.tsm;

import java.io.Serializable;
import java.util.Objects;
import java.util.regex.Pattern;

/**
 *
@@ -47,6 +46,12 @@ public class ColumnHolder implements Serializable {
        this.columnName = columnName;
    }

    public ColumnHolder(Column column) {
        this.schemaName = column.getParent().getParent().getName();
        this.tableName = column.getParent().getName();
        this.columnName = column.getName();
    }

    public String getSchemaName() {
        return schemaName;
    }
+40 −1
Original line number Diff line number Diff line
@@ -53,9 +53,13 @@ public class ConsistencyChecks implements Serializable {
    private final Map<String, Set<String>> tablesToAdd;
    private final Map<ColumnHolder, ColumnModel> missingColumns;
    private final Set<ColumnHolder> columnsToAdd;
    private final List<WrongDataType> wrongDataTypes;
    private boolean missingObscore;
    private boolean obscoreToAdd;

    // This will not consider an inconsistency: it is only used to display a warning
    private final Set<ColumnHolder> unaddedOptionalColumns;

    public ConsistencyChecks() {
        inconsistencies = new ArrayList<>();
        unexisingSchemas = new HashSet<>();
@@ -66,6 +70,8 @@ public class ConsistencyChecks implements Serializable {
        tablesToAdd = new HashMap<>();
        missingColumns = new HashMap<>();
        columnsToAdd = new HashSet<>();
        unaddedOptionalColumns = new HashSet<>();
        wrongDataTypes = new ArrayList<>();
    }

    public void addInconsistency(InconsistentColumnProperty problemDescription) {
@@ -182,11 +188,44 @@ public class ConsistencyChecks implements Serializable {
        this.obscoreToAdd = obscoreToAdd;
    }

    public void addUnaddedOptionalColumn(ColumnHolder columnHolder) {
        unaddedOptionalColumns.add(columnHolder);
    }

    public Set<ColumnHolder> getUnaddedOptionalColumns() {
        return unaddedOptionalColumns;
    }

    public void addWrongDataType(ColumnHolder columnHolder, String wrongDataType, String correctDataType, String adqlCorrectDataType, Integer size) {
        // If datatype needs to be changed inconsistency on it doesn't make sense anymore.
        Iterator<InconsistentColumnProperty> ite = inconsistencies.iterator();
        while (ite.hasNext()) {
            InconsistentColumnProperty inconsistency = ite.next();
            if (inconsistency.getColumnHolder().equals(columnHolder)
                    && (inconsistency.getKey().equals(Column.DATATYPE_KEY)
                    || inconsistency.getKey().equals(Column.SIZE_KEY)
                    || inconsistency.getKey().equals(Column.ARRAYSIZE_KEY))) {
                ite.remove();
            }
        }

        WrongDataType wdt = new WrongDataType(columnHolder, wrongDataType, correctDataType, adqlCorrectDataType, size);
        wrongDataTypes.add(wdt);
    }

    public List<WrongDataType> getWrongDataTypes() {
        return wrongDataTypes;
    }

    public boolean isInconsistent() {
        return !inconsistencies.isEmpty()
        return !inconsistencies.isEmpty() || !wrongDataTypes.isEmpty()
                || !unexisingSchemas.isEmpty() || !unexisingTables.isEmpty() || !unexistingColumns.isEmpty()
                || !missingTables.isEmpty() || !missingColumns.isEmpty()
                || !columnsToAdd.isEmpty() || !tablesToAdd.isEmpty()
                || obscoreToAdd || missingObscore;
    }

    public boolean isHasWarnings() {
        return !unaddedOptionalColumns.isEmpty();
    }
}
+14 −8
Original line number Diff line number Diff line
@@ -32,8 +32,7 @@ public class InconsistentColumnProperty implements Serializable {

    private static final long serialVersionUID = -5145865322582594970L;

    private String tableCompleteName;
    private String columnName;
    private ColumnHolder columnHolder;
    private String key;
    private Object currentValue;
    private Object correctValue;
@@ -41,20 +40,27 @@ public class InconsistentColumnProperty implements Serializable {
    private InconsistentColumnProperty() {
    }

    public InconsistentColumnProperty(String tableCompleteName, String columnName, String key, Object currentValue, Object correctValue) {
        this.tableCompleteName = tableCompleteName;
        this.columnName = columnName;
    public InconsistentColumnProperty(ColumnHolder columnHolder, String key, Object currentValue, Object correctValue) {
        this.columnHolder = columnHolder;
        this.key = key;
        this.currentValue = currentValue;
        this.correctValue = correctValue;
    }

    public ColumnHolder getColumnHolder() {
        return columnHolder;
    }

    public void setColumnHolder(ColumnHolder columnHolder) {
        this.columnHolder = columnHolder;
    }

    public String getTableCompleteName() {
        return tableCompleteName;
        return String.format("%s.%s", columnHolder.getSchemaName(), columnHolder.getTableName());
    }

    public String getColumnName() {
        return columnName;
        return columnHolder.getColumnName();
    }
    
    public String getKey() {
+15 −3
Original line number Diff line number Diff line
@@ -52,12 +52,15 @@ public class Table extends ChildEntity<Schema> implements EntitiesContainer<Colu
    private String simpleName;
    private Schema parentSchema;

    // WARNING: this is different from tableModel inherited field.
    private TableModel tableTableModel;

    private Table() {
        // for serialization
        super();
    }

    private TableModel getModel() {
    private TableModel getTableTableModel() {
        if (tapSchema.getName().equals(parentSchema.getName())) {
            return tapSchema.getTapSchemaModel().getTable(simpleName);
        }
@@ -77,7 +80,9 @@ public class Table extends ChildEntity<Schema> implements EntitiesContainer<Colu
        columns = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);

        DBBroker broker = tapSchema.getDBBroker(schema.getName());
        columnsMetadata = broker.getAllColumnsMetadata(schema.getName(), tableSimpleName, getModel(), tapSchema.getVersion());
        tableTableModel = getTableTableModel();
        columnsMetadata = broker.getAllColumnsMetadata(schema.getName(), tableSimpleName, tableTableModel, tapSchema.getDataTypeMode());

        for (Map.Entry<String, Map<String, Object>> entry : columnsMetadata.entrySet()) {
            // Adding table names to columns metadata
            entry.getValue().put(Column.TABLE_NAME_KEY, schema.getName() + "." + tableSimpleName);
@@ -103,6 +108,13 @@ public class Table extends ChildEntity<Schema> implements EntitiesContainer<Colu
        return getValue(TABLE_NAME_KEY, String.class);
    }

    private boolean isMandatory(String columnName) {
        if (tableTableModel != null) {
            return tableTableModel.get(columnName).isMandatory();
        }
        return false;
    }

    /**
     * {@inheritDoc }
     */
@@ -117,7 +129,7 @@ public class Table extends ChildEntity<Schema> implements EntitiesContainer<Colu
        } else {
            Column column = columns.get(columnName);
            if (column == null) {
                column = new Column(tapSchema, this, columnName);
                column = new Column(tapSchema, this, columnName, isMandatory(columnName));
                columns.put(columnName, column);
                column.setStatus(Status.ADDED_NOT_PERSISTED);
            } else {
Loading