diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/Table.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/Table.java index 7dab2cf52c52d58271e80e22dc3ef99e78ab4fda..0f92212ecf19bad212d4393fbb838c77c1d64479 100644 --- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/Table.java +++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/Table.java @@ -23,6 +23,7 @@ package it.inaf.ia2.tsm; import it.inaf.ia2.tsm.datalayer.DBBroker; +import it.inaf.ia2.tsm.model.ColumnModel; import it.inaf.ia2.tsm.model.TableModel; import java.sql.SQLException; import java.util.List; @@ -148,7 +149,10 @@ public class Table extends ChildEntity<Schema> implements EntitiesContainer<Colu private boolean isMandatory(String columnName) { if (tableTableModel != null) { - return tableTableModel.get(columnName).isMandatory(); + ColumnModel columnModel = tableTableModel.get(columnName); + if (columnModel != null) { + return columnModel.isMandatory(); + } } return false; } diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchema.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchema.java index c8b2a85fb18210dc2eddeef5d4283a83408fe1bb..a6fb6d8c9d4d774637b1e615ed1d84705e66353c 100644 --- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchema.java +++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchema.java @@ -627,7 +627,11 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable { * Returns the {@link SchemaModel} for the TAP_SCHEMA schema. */ public final SchemaModel getTapSchemaModel() { - return SchemaModels.getTapSchemaModel(getVersion()); + SchemaModel tapSchemaModel = SchemaModels.getTapSchemaModel(getVersion()); + if (tapSchemaModel == null) { + throw new IllegalStateException("TAP_SCHEMA model is null for version " + getVersion()); + } + return tapSchemaModel; } /** diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaLoader.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaLoader.java index bf09a081519b8429d65388e736ba4d854d482d9b..a016ed7ca723d7666a8d91ebb977203d57a39a90 100644 --- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaLoader.java +++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaLoader.java @@ -159,18 +159,42 @@ public class TapSchemaLoader { if (!ep.isUpdatable()) { return true; } + + // Here we check fixed values for columns having a XML model. + // We need to be aware that the user could alter these structures + // adding custom tables and columns, so we have to check for null + // parts of the models. + // Schema parentSchema = column.getParent().getParent(); + + SchemaModel schemaModel; if (parentSchema.getName().equals(tapSchema.getName())) { - return equalsOneOf(key, Column.STD_KEY, Column.PRINCIPAL_KEY); - } else { - SchemaModel ivoaSchemaModel = tapSchema.getIvoaSchemaModel(); - if (ivoaSchemaModel != null - && parentSchema.getName().equals(ivoaSchemaModel.getName())) { - return equalsOneOf(key, Column.STD_KEY, Column.PRINCIPAL_KEY, - Column.UCD_KEY, Column.UNIT_KEY, Column.UTYPE_KEY, Column.DATATYPE_KEY); + + if (parentSchema.getName().equals(tapSchema.getName())) { + schemaModel = tapSchema.getTapSchemaModel(); + } else { + schemaModel = tapSchema.getIvoaSchemaModel(); + } + + if (schemaModel != null) { + TableModel tableModel = schemaModel.getTable(column.getParent().getName()); + if (tableModel != null) { + ColumnModel columnModel = tableModel.get(column.getName()); + if (columnModel != null) { + if (parentSchema.getName().equals(tapSchema.getName())) { + // is a TAP_SCHEMA column + return equalsOneOf(key, Column.STD_KEY, Column.PRINCIPAL_KEY); + } else { + // is an obscore column + return equalsOneOf(key, Column.STD_KEY, Column.PRINCIPAL_KEY, + Column.UCD_KEY, Column.UNIT_KEY, Column.UTYPE_KEY, Column.DATATYPE_KEY); + } + } + } } - return false; } + + return false; } private Object getCompatibleIntOrBoolValue(String key, boolean value) { diff --git a/TASMAN-core/src/main/resources/schema_definition/tap_schema-1_1-IA2.xml b/TASMAN-core/src/main/resources/schema_definition/tap_schema-1_1-IA2.xml index 1cfde662a3a76bf2297408c8d746d358b7e9c37c..0745682232c4af884e777a0ba2fc2585864ca7c0 100644 --- a/TASMAN-core/src/main/resources/schema_definition/tap_schema-1_1-IA2.xml +++ b/TASMAN-core/src/main/resources/schema_definition/tap_schema-1_1-IA2.xml @@ -23,11 +23,6 @@ Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. --> <schema name="TAP_SCHEMA" version="1.1-IA2" extends="1.1" datatype="VOTable"> <table name="schemas"> - <column name="schemaID"> - <type>BIGINT</type> - <updatable>true</updatable> - <standard>false</standard> - </column> <column name="schemaID"> <type>BIGINT</type> <updatable>true</updatable>