From 480e5518a2beb3d8fc73000e9a510e36d65b3855 Mon Sep 17 00:00:00 2001 From: Sonia Zorba Date: Thu, 10 Aug 2017 15:07:47 +0200 Subject: [PATCH] Added modal for keys editing, various improvements and fixes --- .../main/java/it/inaf/ia2/tsm/TSMUtil.java | 34 +++++ .../main/java/it/inaf/ia2/tsm/TapSchema.java | 3 +- .../tsm/datalayer/mysql/MySQLDBBroker.java | 6 +- .../inaf/ia2/tsm/webapp/SearchUCDDialog.java | 3 + .../ia2/tsm/webapp/TapSchemaEditingBean.java | 66 ++++++++++ .../it/inaf/ia2/tsm/webapp/UCDEditor.java | 22 +++- .../webapp/resources/js/edit-tapschema.js | 4 + .../resources/tsm_components/ucd_editor.xhtml | 4 +- .../src/main/webapp/tapSchemaEditing.xhtml | 122 +++++++++++++++--- 9 files changed, 236 insertions(+), 28 deletions(-) diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TSMUtil.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TSMUtil.java index f0639af..abde2e3 100644 --- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TSMUtil.java +++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TSMUtil.java @@ -306,4 +306,38 @@ public class TSMUtil { return sb.toString(); } + + /** + * Utility class for joining a collection of object properties. + */ + public static class StringJoiner { + + private final Iterable values; + private final String separator; + + public StringJoiner(Iterable values, String separator) { + this.values = values; + this.separator = separator; + } + + public final String getString() { + StringBuilder sb = new StringBuilder(); + boolean first = true; + for (T value : values) { + if (!first) { + sb.append(separator); + } + sb.append(getStringValue(value)); + first = false; + } + return sb.toString(); + } + + public String getStringValue(T value) { + if (value instanceof String) { + return (String) value; + } + return null; + } + } } 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 5457498..e438571 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 @@ -463,7 +463,8 @@ public class TapSchema implements EntitiesContainer, Serializable { if (obscore) { SchemaModel ivoaSchemaModel = getIvoaSchemaModel(); - broker.createIvoaSchemaStructure(ivoaSchemaModel); + // ivoa schema has to be created into source database + getSourceDBBroker().createIvoaSchemaStructure(ivoaSchemaModel); // Initializing ivoa schema slot in schemata maps schemas.put(ivoaSchemaModel.getName(), null); 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 b7d4cbd..f3b8475 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 @@ -74,7 +74,11 @@ public class MySQLDBBroker extends DBBrokerTemplate { if (beginIndex != -1) { int endIndex = typeWithSize.indexOf(')'); if (endIndex != -1) { - return Integer.parseInt(typeWithSize.substring(beginIndex + 1, endIndex)); + try { + return Integer.parseInt(typeWithSize.substring(beginIndex + 1, endIndex)); + } catch (NumberFormatException e) { + return null; + } } } return null; diff --git a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/SearchUCDDialog.java b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/SearchUCDDialog.java index f421706..55039c5 100644 --- a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/SearchUCDDialog.java +++ b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/SearchUCDDialog.java @@ -107,6 +107,9 @@ public class SearchUCDDialog implements Serializable { String assignResponse = SearchUCD.assign(description); if (assignResponse == null) { UCDnotFound = true; + selectedUCD = null; + suggestedUCD = null; + suggestedUCDs.clear(); } else { selectedUCD = assignResponse; suggestedUCD = assignResponse; diff --git a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/TapSchemaEditingBean.java b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/TapSchemaEditingBean.java index bedc26f..0bbac7f 100644 --- a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/TapSchemaEditingBean.java +++ b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/TapSchemaEditingBean.java @@ -30,6 +30,7 @@ import it.inaf.ia2.tsm.Key; import it.inaf.ia2.tsm.KeyColumn; import it.inaf.ia2.tsm.Schema; import it.inaf.ia2.tsm.Status; +import it.inaf.ia2.tsm.TSMUtil; import it.inaf.ia2.tsm.Table; import it.inaf.ia2.tsm.TapSchema; import it.inaf.ia2.tsm.TapSchemaEntity; @@ -67,6 +68,7 @@ public class TapSchemaEditingBean implements Serializable { private EntitiesContainer currentAddingContainer; private List currentAddables; + private boolean addAlsoAllChildren; private VOUnitValidator voUnitValidator; @Inject @@ -259,6 +261,7 @@ public class TapSchemaEditingBean implements Serializable { } public void openAddablesModal(EntitiesContainer currentAddingContainer) { + this.addAlsoAllChildren = false; this.currentAddingContainer = currentAddingContainer; this.currentAddables = new ArrayList<>(); for (String name : currentAddingContainer.getAddableChildrenNames()) { @@ -277,11 +280,30 @@ public class TapSchemaEditingBean implements Serializable { } } + private void addAllChildren(TapSchemaEntity childEntity) throws SQLException { + if (childEntity instanceof Schema) { + Schema schema = (Schema) childEntity; + for (String tableName : schema.getAddableChildrenNames()) { + Table table = schema.addChild(tableName); + addAllChildren(table); + } + } else if (childEntity instanceof Table) { + Table table = (Table) childEntity; + for (String column : table.getAddableChildrenNames()) { + table.addChild(column); + } + } + } + public void addSelected() throws SQLException { TapSchemaEntity lastAddedEntity = null; + boolean canAddChildren = isCanAddChildren(); for (AddableItem item : currentAddables) { if (item.isSelected()) { lastAddedEntity = currentAddingContainer.addChild(item.getName()); + if (lastAddedEntity != null && canAddChildren) { + addAllChildren(lastAddedEntity); + } } } if (lastAddedEntity != null) { @@ -299,6 +321,22 @@ public class TapSchemaEditingBean implements Serializable { return currentAddables; } + public boolean isCanAddChildren() { + if (currentAddingContainer == null) { + return false; + } + return currentAddingContainer instanceof TapSchema + || currentAddingContainer instanceof Schema; + } + + public boolean isAddAlsoAllChildren() { + return addAlsoAllChildren; + } + + public void setAddAlsoAllChildren(boolean addAlsoAllChildren) { + this.addAlsoAllChildren = addAlsoAllChildren; + } + public void saveUCD() { if (!FacesContext.getCurrentInstance().isValidationFailed()) { @@ -402,4 +440,32 @@ public class TapSchemaEditingBean implements Serializable { column.setValue("principal", value ? 1 : 0); } } + + public List getVisibleKeys() { + List keys = new ArrayList<>(); + for (Key key : tapSchema.getAllKeys()) { + if (key.isVisible()) { + keys.add(key); + } + } + return keys; + } + + public String formatFromColumns(Key key) { + return (new TSMUtil.StringJoiner(key.getKeyColumns(), ", ") { + @Override + public String getStringValue(KeyColumn kc) { + return kc.getFromColumn(); + } + }).getString(); + } + + public String formatTargetColumns(Key key) { + return (new TSMUtil.StringJoiner(key.getKeyColumns(), ", ") { + @Override + public String getStringValue(KeyColumn kc) { + return kc.getTargetColumn(); + } + }).getString(); + } } diff --git a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/UCDEditor.java b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/UCDEditor.java index 1e1555a..6a36cfd 100644 --- a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/UCDEditor.java +++ b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/UCDEditor.java @@ -6,7 +6,6 @@ import it.inaf.ia2.tsm.webapp.xmlconfig.UCDConfiguration; import java.io.IOException; import java.io.Serializable; import java.util.List; -import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.inject.Named; import org.apache.deltaspike.core.api.scope.WindowScoped; @@ -30,7 +29,7 @@ public class UCDEditor implements Serializable { private boolean viewExisting; private UCDConfiguration newUCDConfiguration; private String invalidUCDMessage; - + public void openDialog() { viewExisting = true; newUCDConfiguration = new UCDConfiguration(user.getUsername()); @@ -76,11 +75,20 @@ public class UCDEditor implements Serializable { invalidUCDMessage = "Invalid UCD word syntax"; return; } -// -// newUCDConfiguration = new UCDConfiguration(user.getUsername()); -// if(config.addUCD(newUCDConfiguration)) { -// ne -// } + + if (!newUCDConfiguration.getWord().contains(":")) { + invalidUCDMessage = "Custom UCDs must have a namespace"; + return; + } + + boolean inserted = config.addUCD(newUCDConfiguration); + if (!inserted) { + invalidUCDMessage = "Specified UCD already exists"; + return; + } + + newUCDConfiguration = new UCDConfiguration(user.getUsername()); + invalidUCDMessage = null; } public void removeUCD(UCDConfiguration ucd) { diff --git a/TASMAN-webapp/src/main/webapp/resources/js/edit-tapschema.js b/TASMAN-webapp/src/main/webapp/resources/js/edit-tapschema.js index 34cdd9c..0146318 100644 --- a/TASMAN-webapp/src/main/webapp/resources/js/edit-tapschema.js +++ b/TASMAN-webapp/src/main/webapp/resources/js/edit-tapschema.js @@ -4,6 +4,10 @@ $('#updateOperationsModal').modal('show'); }); + TSM.displayKeysModal = TSM.eventHandlerFactory(function (srcElement, jsupdate) { + $('#keysModal').modal('show'); + }); + TSM.saveUCDCalled = TSM.eventHandlerFactory(function (srcElement, jsupdate) { if (jsupdate !== null) { $('#searchUCDModal').modal('hide'); diff --git a/TASMAN-webapp/src/main/webapp/resources/tsm_components/ucd_editor.xhtml b/TASMAN-webapp/src/main/webapp/resources/tsm_components/ucd_editor.xhtml index 9ed13bd..d65ef28 100644 --- a/TASMAN-webapp/src/main/webapp/resources/tsm_components/ucd_editor.xhtml +++ b/TASMAN-webapp/src/main/webapp/resources/tsm_components/ucd_editor.xhtml @@ -31,12 +31,12 @@
  • - + × - + [#{ucd.code}] #{ucd.word}
  • diff --git a/TASMAN-webapp/src/main/webapp/tapSchemaEditing.xhtml b/TASMAN-webapp/src/main/webapp/tapSchemaEditing.xhtml index bfe98e7..b7a428b 100644 --- a/TASMAN-webapp/src/main/webapp/tapSchemaEditing.xhtml +++ b/TASMAN-webapp/src/main/webapp/tapSchemaEditing.xhtml @@ -25,11 +25,31 @@
    - - - Display update operations - - +
    + + +
      @@ -366,6 +386,16 @@
    + + Xtype: + + + + + @@ -380,7 +410,7 @@