Loading TASMAN-core/src/main/java/it/inaf/ia2/tsm/Column.java +10 −1 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); } Loading Loading @@ -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; Loading TASMAN-core/src/main/java/it/inaf/ia2/tsm/ColumnHolder.java +6 −1 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ package it.inaf.ia2.tsm; import java.io.Serializable; import java.util.Objects; import java.util.regex.Pattern; /** * Loading @@ -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; } Loading TASMAN-core/src/main/java/it/inaf/ia2/tsm/ConsistencyChecks.java +40 −1 Original line number Diff line number Diff line Loading @@ -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<>(); Loading @@ -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) { Loading Loading @@ -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(); } } TASMAN-core/src/main/java/it/inaf/ia2/tsm/InconsistentColumnProperty.java +14 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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() { Loading TASMAN-core/src/main/java/it/inaf/ia2/tsm/Table.java +15 −3 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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); Loading @@ -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 } */ Loading @@ -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 Loading
TASMAN-core/src/main/java/it/inaf/ia2/tsm/Column.java +10 −1 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); } Loading Loading @@ -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; Loading
TASMAN-core/src/main/java/it/inaf/ia2/tsm/ColumnHolder.java +6 −1 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ package it.inaf.ia2.tsm; import java.io.Serializable; import java.util.Objects; import java.util.regex.Pattern; /** * Loading @@ -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; } Loading
TASMAN-core/src/main/java/it/inaf/ia2/tsm/ConsistencyChecks.java +40 −1 Original line number Diff line number Diff line Loading @@ -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<>(); Loading @@ -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) { Loading Loading @@ -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(); } }
TASMAN-core/src/main/java/it/inaf/ia2/tsm/InconsistentColumnProperty.java +14 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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() { Loading
TASMAN-core/src/main/java/it/inaf/ia2/tsm/Table.java +15 −3 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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); Loading @@ -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 } */ Loading @@ -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