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 ebdcc661962277fcb727b11003a8cb6247dd95d7..54574983c673265ef74e5ab91d504f581ec07995 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 @@ -79,14 +79,14 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable { public final DBBroker getSourceDBBroker() { if (sourceDBBroker == null) { - sourceDBBroker = DBBrokerFactory.getDBBroker(dbWrapper.getSourceDataSourceWrapper()); + sourceDBBroker = DBBrokerFactory.getDBBroker(dbWrapper.getSourceDataSourceWrapper(), tapSchemaVersion); } return sourceDBBroker; } public final DBBroker getTapSchemaDBBroker() { if (tapSchemaDBBroker == null) { - tapSchemaDBBroker = DBBrokerFactory.getDBBroker(dbWrapper.getTapSchemaDataSourceWrapper()); + tapSchemaDBBroker = DBBrokerFactory.getDBBroker(dbWrapper.getTapSchemaDataSourceWrapper(), tapSchemaVersion); } return tapSchemaDBBroker; } @@ -464,6 +464,8 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable { SchemaModel ivoaSchemaModel = getIvoaSchemaModel(); broker.createIvoaSchemaStructure(ivoaSchemaModel); + // Initializing ivoa schema slot in schemata maps + schemas.put(ivoaSchemaModel.getName(), null); // Add ivoa schema into TAP_SCHEMA addEntireSchema(ivoaSchemaModel.getName()); diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaEntity.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaEntity.java index 5580664b5cab6658f18ef1e66440958d80d0d0af..825d53e40b0e74d9e1aed26cd051346e4d6d1848 100644 --- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaEntity.java +++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaEntity.java @@ -24,7 +24,6 @@ package it.inaf.ia2.tsm; import it.inaf.ia2.tsm.model.PropertyModel; import it.inaf.ia2.tsm.model.TableModel; -import it.inaf.ia2.tsm.model.TypesMapping; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/DBBrokerFactory.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/DBBrokerFactory.java index 27a947007edc64577ce3488762628566e168d4a5..ec59db5326c49fb23c303ef089da933961ad5ab0 100644 --- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/DBBrokerFactory.java +++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/DBBrokerFactory.java @@ -31,13 +31,13 @@ import it.inaf.ia2.tsm.datalayer.pgsql.PostgresDBBroker; */ public class DBBrokerFactory { - public static DBBroker getDBBroker(DataSourceWrapper dataSourceWrapper) { + public static DBBroker getDBBroker(DataSourceWrapper dataSourceWrapper, String tapSchemaVersion) { switch (dataSourceWrapper.getDatabaseType()) { case MYSQL: - return new MySQLDBBroker(dataSourceWrapper.getDataSource()); + return new MySQLDBBroker(dataSourceWrapper.getDataSource(), tapSchemaVersion); default: String pgDatabase = dataSourceWrapper.getCredentials().getDatabase(); - return new PostgresDBBroker(dataSourceWrapper.getDataSource(), pgDatabase); + return new PostgresDBBroker(dataSourceWrapper.getDataSource(), pgDatabase, tapSchemaVersion); } } } diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/DBBrokerTemplate.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/DBBrokerTemplate.java index 3ee990c29a45061ddd7e8bc10dae3b23519f35ef..31cd078c2dd3ef80c25ded8723d3c2766c9fbd43 100644 --- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/DBBrokerTemplate.java +++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/DBBrokerTemplate.java @@ -62,10 +62,12 @@ public abstract class DBBrokerTemplate implements DBBroker { protected final DataSource dataSource; private final char escapeCharacter; + private final String tapSchemaVersion; - public DBBrokerTemplate(DataSource dataSource, char escapeCharacter) { + public DBBrokerTemplate(DataSource dataSource, char escapeCharacter, String tapSchemaVersion) { this.dataSource = dataSource; this.escapeCharacter = escapeCharacter; + this.tapSchemaVersion = tapSchemaVersion; } protected List<String> getAllItemsNames(String query) throws SQLException { @@ -110,7 +112,7 @@ public abstract class DBBrokerTemplate implements DBBroker { sb.append(String.format("(%s)", size)); } - protected abstract void createTable(String tapSchemaName, TableModel tableModel, Connection conn) throws SQLException; + protected abstract void createTable(String schemaName, TableModel tableModel, Connection conn) throws SQLException; protected abstract String getAddPrimaryKeyQuery(String tapSchemaName, String tableName, String[] keyColumns); @@ -764,4 +766,8 @@ public abstract class DBBrokerTemplate implements DBBroker { LOG.debug("{} columns found", allColumns.size()); return allColumns; } + + protected String getTapSchemaVersion() { + return tapSchemaVersion; + } } diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/mysql/MySQLDBBroker.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/mysql/MySQLDBBroker.java index 4297b69debdaa861b4182fd8bb59c889d34be65e..b7d4cbd7b9f0c839d3434567c5e8848bc330168e 100644 --- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/mysql/MySQLDBBroker.java +++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/mysql/MySQLDBBroker.java @@ -50,8 +50,8 @@ public class MySQLDBBroker extends DBBrokerTemplate { private static final Logger LOG = LoggerFactory.getLogger(MySQLDBBroker.class); - public MySQLDBBroker(DataSource dataSource) { - super(dataSource, '`'); + public MySQLDBBroker(DataSource dataSource, String tapSchemaVersion) { + super(dataSource, '`', tapSchemaVersion); } @Override @@ -74,7 +74,7 @@ public class MySQLDBBroker extends DBBrokerTemplate { if (beginIndex != -1) { int endIndex = typeWithSize.indexOf(')'); if (endIndex != -1) { - Integer.parseInt(typeWithSize.substring(beginIndex + 1, endIndex)); + return Integer.parseInt(typeWithSize.substring(beginIndex + 1, endIndex)); } } return null; @@ -111,14 +111,26 @@ public class MySQLDBBroker extends DBBrokerTemplate { cm.put(Column.INDEXED_KEY, indexed); // Datatype and Size - String type = resultSet.getString("Type").toLowerCase(); - String datatype = TypesMapping.getADQLTypeFromMySQLType(type); + String type = resultSet.getString("Type").toUpperCase(); + String datatype = TypesMapping.getADQLTypeFromMySQLType(type, getTapSchemaVersion()); Integer size = getSize(type); + if (size != null && size > 0 && !datatype.contains("(")) { + // Adding size at the end of datatype + datatype += String.format("(%s)", size); + } cm.put(Column.DATATYPE_KEY, datatype); cm.put(Column.SIZE_KEY, size); - Integer arraySize = null; // TODO (v 1.1) + String arraySize = null; + if (size != null) { + arraySize = String.valueOf(size); + // variable length columns must have a "*" symbol on arraysize + if (datatype.startsWith(ADQL.VARCHAR.name())) { + arraySize += "*"; + } + } + cm.put(Column.ARRAYSIZE_KEY, arraySize); allColumnsMetadata.put(columnName, cm); } @@ -128,12 +140,12 @@ public class MySQLDBBroker extends DBBrokerTemplate { } @Override - protected void createTable(String tapSchemaName, TableModel tableModel, Connection conn) throws SQLException { + protected void createTable(String schemaName, TableModel tableModel, Connection conn) throws SQLException { StringBuilder querySb = new StringBuilder(); querySb.append("CREATE TABLE IF NOT EXISTS "); - querySb.append(escape(tapSchemaName)); + querySb.append(escape(schemaName)); querySb.append("."); querySb.append(escape(tableModel.getName())); querySb.append(" (\n"); diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/pgsql/PostgresDBBroker.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/pgsql/PostgresDBBroker.java index 6254a4cd7a931645338270e113ac2e0aa9766edd..7c9b26e7a6c8dde90b95f7e329605341f628ae09 100644 --- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/pgsql/PostgresDBBroker.java +++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/pgsql/PostgresDBBroker.java @@ -53,17 +53,17 @@ public class PostgresDBBroker extends DBBrokerTemplate { private final String pgDatabaseName; - public PostgresDBBroker(DataSource dataSource, String pgDatabaseName) { - super(dataSource, '"'); + public PostgresDBBroker(DataSource dataSource, String pgDatabaseName, String tapSchemaVersion) { + super(dataSource, '"', tapSchemaVersion); this.pgDatabaseName = pgDatabaseName; } @Override - protected void createTable(String tapSchemaName, TableModel tableModel, Connection conn) throws SQLException { + protected void createTable(String schemaName, TableModel tableModel, Connection conn) throws SQLException { StringBuilder querySb = new StringBuilder(); querySb.append("CREATE TABLE IF NOT EXISTS "); - querySb.append(escape(tapSchemaName)); + querySb.append(escape(schemaName)); querySb.append("."); querySb.append(escape(tableModel.getName())); querySb.append(" (\n"); @@ -131,6 +131,21 @@ public class PostgresDBBroker extends DBBrokerTemplate { return String.format("SELECT tablename FROM pg_catalog.pg_tables where schemaname = '%s'", schemaName); } + /** + * Example: 5x5x4 is approximated to *x*x*, because it seems there is no + * easy way to retrieve that numbers. + */ + private String formatArraySize(int arrayDimension) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < arrayDimension; i++) { + if (i > 0) { + sb.append("x"); + } + sb.append("*"); + } + return sb.toString(); + } + @Override public Map<String, Map<String, Object>> getAllColumnsMetadata(String schemaName, String tableSimpleName) throws SQLException { @@ -138,10 +153,11 @@ public class PostgresDBBroker extends DBBrokerTemplate { StringBuilder querySb = new StringBuilder(); - querySb.append("SELECT c.column_name, c.data_type, r.contype AS column_type, c.character_maximum_length, c.numeric_precision\n"); //, c.numeric_precision_radix + querySb.append("SELECT c.column_name, c.data_type, pg_catalog.format_type(a.atttypid, a.atttypmod), r.contype AS column_type, c.character_maximum_length, c.numeric_precision, a.attndims AS arraydim\n"); querySb.append("FROM information_schema.columns c\n"); querySb.append("JOIN pg_catalog.pg_tables t ON c.table_schema = t.schemaname AND c.table_name = t.tablename\n"); querySb.append("LEFT JOIN pg_catalog.pg_constraint r ON c.ordinal_position = ANY(r.conkey) AND r.conrelid = (t.schemaname || '.' || t.tablename)::regclass::oid\n"); + querySb.append("LEFT JOIN pg_catalog.pg_attribute a ON a.attrelid = (t.schemaname || '.' || t.tablename)::regclass::oid and a.attname = c.column_name\n"); querySb.append("WHERE t.schemaname = '"); querySb.append(schemaName); querySb.append("' AND t.tablename = '"); @@ -178,19 +194,46 @@ public class PostgresDBBroker extends DBBrokerTemplate { cm.put(Column.PRIMARY_KEY, primaryKey); cm.put(Column.INDEXED_KEY, indexed); - int size = 0; + Integer size = null; + int arraydimension = 0; String datatype; - String type = resultSet.getString("data_type"); - datatype = TypesMapping.getADQLTypeFromPostgresType(type); - if (datatype.equals(ADQL.VARCHAR.name()) || datatype.equals(ADQL.CHAR.name())) { + String type = resultSet.getString("data_type").toUpperCase(); + boolean isArray = false; + if ("ARRAY".equals(type)) { + isArray = true; + // example: integer array has data_type ARRAY and format_type integer[] + type = resultSet.getString("format_type").toUpperCase(); + // example: an array defined as integer[5][5] has arraydim = 2 + // unfortunately it seems there is no easy way to get also the + // numbers inside brakets, so this case will be approximated to *x* + arraydimension = resultSet.getInt("arraydim"); + } + + datatype = TypesMapping.getADQLTypeFromPostgresType(type, getTapSchemaVersion()); + if (!isArray && (datatype.equals(ADQL.VARCHAR.name()) || datatype.equals(ADQL.CHAR.name()))) { size = resultSet.getInt("character_maximum_length"); } + if (size != null && size > 0 && !datatype.contains("(")) { + // Adding size at the end of datatype + datatype += String.format("(%s)", size); + } cm.put(Column.DATATYPE_KEY, datatype); cm.put(Column.SIZE_KEY, size); - Integer arraySize = null; // TODO (v 1.1) + String arraySize = null; + if (isArray) { + arraySize = formatArraySize(arraydimension); + } else if (size != null) { + arraySize = String.valueOf(size); + // variable length columns must have a "*" symbol on arraysize + if (datatype.startsWith(ADQL.VARCHAR.name())) { + arraySize += "*"; + } + } + + cm.put(Column.ARRAYSIZE_KEY, arraySize); allColumnsMetadata.put(columnName, cm); } diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/TypeMapping.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/TypeMapping.java index e7d68f3b6f6470f97353f2a95f0bca5555b53122..e1d5fbaf1b97b25e2a77d5ad165663fdc8582352 100644 --- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/TypeMapping.java +++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/TypeMapping.java @@ -46,11 +46,11 @@ public class TypeMapping { } @XmlElement(name = "mysql") - public String getMysqlType() { + public String getMySQLType() { return mysqlType; } - public void setMysqlType(String mysqlType) { + public void setMySQLType(String mysqlType) { this.mysqlType = mysqlType; } diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/TypesMapping.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/TypesMapping.java index 487c6472ce902cbffda75c0853600a6f2245ef6e..0e18be9a0f7a75d42813a4b9b33e21a2ca77b0bb 100644 --- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/TypesMapping.java +++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/TypesMapping.java @@ -28,7 +28,6 @@ import java.io.InputStream; import java.util.List; import javax.xml.bind.JAXB; import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlElements; import javax.xml.bind.annotation.XmlRootElement; @@ -38,6 +37,9 @@ import javax.xml.bind.annotation.XmlRootElement; */ public class TypesMapping { + // For older TAP_SCHEMA versions + private static final String ADQL_PREFIX = "adql:"; + @XmlRootElement(name = "sql_type_mapping") static class TypesWrapper { @@ -76,36 +78,55 @@ public class TypesMapping { throw new IllegalArgumentException("Unable to retrieve mapping for ADQL type " + adqlType); } + /** + * returns an ADQL type String compatible with older TAP_SCHEMA versions + * (for older versions "adql:" prefix is needed). + */ + private static String getCompatibleADQLType(String adqlType, String tapSchemaVersion) { + if (tapSchemaVersion.startsWith("1.0")) { + return ADQL_PREFIX + adqlType; + } + return adqlType; + } + public static Class getClassFromAdqlType(String adqlType) { return getTypeMappingFromADQLType(adqlType).getJavaType(); } public static String getMySQLTypeFromADQLType(String adqlType) { - return getTypeMappingFromADQLType(adqlType).getMysqlType(); + return getTypeMappingFromADQLType(adqlType).getMySQLType(); } public static String getPostgresSQLTypeFromADQLType(String adqlType) { return getTypeMappingFromADQLType(adqlType).getPgsqlType(); } - public static String getADQLTypeFromPostgresType(String pgsqlType) { + private static String getADQLTypeFromPostgresType(String pgsqlType) { for (TypeMapping typeMapping : TYPES) { - if (typeMapping.getPgsqlType().startsWith(pgsqlType)) { + if (pgsqlType.toUpperCase().startsWith(typeMapping.getPgsqlType().toUpperCase())) { return typeMapping.getAdqlType(); } } return ADQL.getDataType(pgsqlType); } - public static String getADQLTypeFromMySQLType(String mysqlType) { + public static String getADQLTypeFromPostgresType(String pgsqlType, String tapSchemaVersion) { + return getCompatibleADQLType(getADQLTypeFromPostgresType(pgsqlType), tapSchemaVersion); + } + + private static String getADQLTypeFromMySQLType(String mysqlType) { for (TypeMapping typeMapping : TYPES) { - if (typeMapping.getPgsqlType().startsWith(mysqlType)) { + if (mysqlType.toUpperCase().startsWith(typeMapping.getMySQLType().toUpperCase())) { return typeMapping.getAdqlType(); } } return ADQL.getDataType(mysqlType); } + public static String getADQLTypeFromMySQLType(String mysqlType, String tapSchemaVersion) { + return getCompatibleADQLType(getADQLTypeFromMySQLType(mysqlType), tapSchemaVersion); + } + public static Object parseDefaultValue(String defaultValue, String type) { return parseDefaultValue(defaultValue, ADQL.valueOf(type)); } diff --git a/TASMAN-core/src/main/resources/schema_definition/tap_schema-1_1.xml b/TASMAN-core/src/main/resources/schema_definition/tap_schema-1_1.xml index bcb19f48e5458592b7832ed7774bacb9d2813546..ea62f6e8e42dd7a8f055463151c90c9c9583d005 100644 --- a/TASMAN-core/src/main/resources/schema_definition/tap_schema-1_1.xml +++ b/TASMAN-core/src/main/resources/schema_definition/tap_schema-1_1.xml @@ -39,12 +39,14 @@ Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. <type>VARCHAR</type> <updatable>false</updatable> <key>arraysize</key> + <size>255</size> <standard>true</standard> </property> <property> <name>xtype</name> <type>VARCHAR</type> <updatable>true</updatable> + <size>255</size> <standard>true</standard> </property> <property> diff --git a/TASMAN-core/src/test/java/it/inaf/ia2/tsm/TestAll.java b/TASMAN-core/src/test/java/it/inaf/ia2/tsm/TestAll.java index 04b81fcee54a278a32264c428721cf83e874d9c8..6e2f5f1fadcb3bd49ecc506bcfc96d299ffc1f56 100644 --- a/TASMAN-core/src/test/java/it/inaf/ia2/tsm/TestAll.java +++ b/TASMAN-core/src/test/java/it/inaf/ia2/tsm/TestAll.java @@ -92,7 +92,7 @@ public class TestAll { settings = new TapSchemaSettings(); settings.setTapSchemaName("test_tap_schema"); - settings.setTapSchemaVersion("1.0"); + settings.setTapSchemaVersion("1.1"); settings.setHasObscore(true); settings.setObscoreVersion("1.1"); @@ -166,9 +166,11 @@ public class TestAll { switch (dbType) { case MYSQL: stat.executeUpdate("DROP DATABASE IF EXISTS test_tap_schema"); + stat.executeUpdate("DROP DATABASE IF EXISTS ivoa"); break; case POSTGRES: stat.executeUpdate("DROP SCHEMA IF EXISTS test_tap_schema CASCADE"); + stat.executeUpdate("DROP SCHEMA IF EXISTS ivoa CASCADE"); break; default: throw new UnsupportedOperationException("Database type " + dbType + " not supported"); @@ -457,10 +459,16 @@ public class TestAll { operations = new UpdateOperations(tapSchema); assertFalse(operations.getHasOperations()); + // Checking size and arraysize detection + Column descriptionColumn = tapSchema.getChild(tapSchema.getName()).getChild("columns").getChild("description"); + assertEquals("VARCHAR(255)", descriptionColumn.getProperty("datatype").getValue(String.class)); + assertEquals(255, descriptionColumn.getProperty("size").getValue(Integer.class)); + assertEquals("255*", descriptionColumn.getProperty("arraysize").getValue(String.class)); + // reloading LOG.debug("----- Reloading saved TAP_SCHEMA -----"); tapSchema = new TapSchema(dbWrapper, settings, true); - assertEquals("1.0", tapSchema.getTapSchemaDBBroker().detectVersion(tapSchema.getName())); + assertEquals("1.1", tapSchema.getTapSchemaDBBroker().detectVersion(tapSchema.getName())); LOG.debug(tapSchema.toString()); assertNotNull(sch0 = tapSchema.getChild("sch0", Status.ADDED_PERSISTED)); diff --git a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/TapSchemaLoader.java b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/TapSchemaLoader.java index 1095927769155e8765119588437ae920e0fa2eed..d31a9bda2b02f033aca8b84a428463430b8cc5e1 100644 --- a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/TapSchemaLoader.java +++ b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/TapSchemaLoader.java @@ -79,7 +79,7 @@ public class TapSchemaLoader implements Serializable { dbWrapper.testConnections(); // Searching for TAP_SCHEMA name - DBBroker broker = DBBrokerFactory.getDBBroker(dbWrapper.getTapSchemaDataSourceWrapper()); + DBBroker broker = DBBrokerFactory.getDBBroker(dbWrapper.getTapSchemaDataSourceWrapper(), tapCredentials.getTapSchemaVersion()); boolean tapSchemaExists = false; for (String schemaName : broker.getAllSchemaNames()) { if (schemaName.equals(tapCredentials.getTapSchemaName())) { diff --git a/TASMAN-webapp/src/main/webapp/resources/css/style.css b/TASMAN-webapp/src/main/webapp/resources/css/style.css index ddb34d0908e2b14820044932b7fbd3a7f1996c17..49247654d1bc41ea73f87aaa3c4d1c0c7d1829ab 100644 --- a/TASMAN-webapp/src/main/webapp/resources/css/style.css +++ b/TASMAN-webapp/src/main/webapp/resources/css/style.css @@ -218,4 +218,16 @@ table input+label { #users-list-wrapper li a:hover { text-decoration: none; +} + +/* CSS3 multicolumn layout */ +#addablesModal .modal-body { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; +} + +/* Margin fix for multicolumn layout */ +#addablesModal .checkbox:first-child { + margin-top: 0; } \ No newline at end of file diff --git a/TASMAN-webapp/src/main/webapp/tapSchemaEditing.xhtml b/TASMAN-webapp/src/main/webapp/tapSchemaEditing.xhtml index 249dd99b73292dfcec26eb269e235d276f1455c9..bfe98e778e9e8a62a31e98e387cf199e183b2d01 100644 --- a/TASMAN-webapp/src/main/webapp/tapSchemaEditing.xhtml +++ b/TASMAN-webapp/src/main/webapp/tapSchemaEditing.xhtml @@ -259,10 +259,14 @@ </div> </div> <div class="col-xs-6"> - <div class="form-group"> + <h:panelGroup class="form-group" layout="block" rendered="#{tapSchemaEditing.selectedColumn.getProperty('arraysize') eq null}"> <label for="size" class="control-label">Size:</label> <span>#{tapSchemaEditing.selectedColumn.getProperty('size').value}</span> - </div> + </h:panelGroup> + <h:panelGroup class="form-group" layout="block" rendered="#{tapSchemaEditing.selectedColumn.getProperty('arraysize') ne null}"> + <label for="arraysize" class="control-label">Arraysize:</label> + <span>#{tapSchemaEditing.selectedColumn.getProperty('arraysize').value}</span> + </h:panelGroup> </div> </div> <div class="row"> @@ -375,9 +379,8 @@ </h:panelGroup> <div class="modal fade" tabindex="-1" role="dialog" id="addablesModal"> - <div class="modal-dialog"> + <div class="modal-dialog modal-lg"> <div class="modal-content"> - <div class="modal-header"> <div class="pull-right"> <h:commandLink class="btn btn-default btn-sm" action="#{tapSchemaEditing.checkAllEntities(false)}"> @@ -396,8 +399,6 @@ <h4 class="modal-title">Add</h4> </div> <div class="modal-body"> - <div class="clearfix"> - </div> <div class="addables"> <h:panelGroup id="addables_modal_content"> <h:panelGroup rendered="#{tapSchemaEditing.currentAddingContainer ne null}">