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 d8752dbc883ca9ba22f932fe36d03ace86ae1b32..f3d6adeccf68ceee9791d7df8412836223ee7237 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 @@ -266,9 +266,6 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable { if (!keyFound) { boolean setKeyToRemove = true; - if (Tasman.ALLOWS_FICTITIOUS_KEYS) { - // TODO - } if (setKeyToRemove) { String[] fromColumns = new String[kcPropsById.size()]; String[] targetColumns = new String[kcPropsById.size()]; diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/Credentials.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/Credentials.java index dfc027253636396c1b1a43872e3735391164e633..35695c942af3d4fbf06393da2b7fcf0f3e45af29 100644 --- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/Credentials.java +++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/Credentials.java @@ -39,14 +39,14 @@ public class Credentials implements Serializable { private static final long serialVersionUID = 1153912575502196261L; private static final Logger LOG = LoggerFactory.getLogger(Credentials.class); + private DatabaseType databaseType; + private String hostname; private int port; private String username; private String password; private String database; - private DatabaseType databaseType; - public Credentials() { this(DatabaseType.MYSQL); } @@ -56,6 +56,16 @@ public class Credentials implements Serializable { this.setDefaults(); } + // Copy constructor + public Credentials(Credentials credentials) { + this(credentials.getDatabaseType()); + this.hostname = credentials.getHostname(); + this.port = credentials.getPort(); + this.username = credentials.getUsername(); + this.password = credentials.getPassword(); + this.database = credentials.getDatabase(); + } + /** * The name of the server that hosts the RDBMS. */ diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/PropertyModel.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/PropertyModel.java index 77f4ab5c90d58a3298cfefdd2bdccecf63921ea7..393b337839db212845b45e967779266fec3cb8d9 100644 --- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/PropertyModel.java +++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/PropertyModel.java @@ -65,6 +65,8 @@ public class PropertyModel implements Serializable { defaultValue = Long.parseLong(strDefVal); } else if (type == Float.class) { defaultValue = Float.parseFloat(strDefVal); + } else if (type == Boolean.class) { + defaultValue = Boolean.parseBoolean(strDefVal); } else { throw new UnsupportedOperationException("Default value for type " + type.getCanonicalName() + " not supported yet."); } diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/TapSchemaModels.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/TapSchemaModels.java index 1721f6152041a229ebccb3787456a346e8f518fc..3f4f817eafc298161c99a82a1fdad25e374de508 100644 --- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/TapSchemaModels.java +++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/TapSchemaModels.java @@ -24,8 +24,10 @@ package it.inaf.ia2.tsm.model; import java.io.IOException; import java.io.InputStream; +import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import javax.xml.bind.JAXB; @@ -102,4 +104,14 @@ public class TapSchemaModels { public static TableModel getTableModel(String tableName, String version) { return getTapSchemaModel(version).getTables().get(tableName); } + + public static List<String> getAvailableVersions() { + List<String> versions = new ArrayList<>(); + Iterator<TapSchemaModel> ite = getIterator(); + while (ite.hasNext()) { + TapSchemaModel tapSchemaModel = ite.next(); + versions.add(tapSchemaModel.getVersion()); + } + return versions; + } } diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/Tasman.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/Tasman.java index 11fc66eaf444a1a8f42c2f47ee2266944145aa47..fa1c8f8639b8bc90817a91d6a4bc215a297cb6c4 100644 --- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/Tasman.java +++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/Tasman.java @@ -34,7 +34,6 @@ import java.util.Properties; public class Tasman { public static final String[] XML_MODEL_FILES; - public static final boolean ALLOWS_FICTITIOUS_KEYS; static { try (InputStream in = Tasman.class.getClassLoader().getResourceAsStream("core.properties")) { @@ -46,8 +45,6 @@ public class Tasman { String suffix = models[i]; XML_MODEL_FILES[i] = "tap_schema" + File.separator + "tap_schema-" + suffix + ".xml"; } - - ALLOWS_FICTITIOUS_KEYS = Boolean.parseBoolean(props.getProperty("allow_fictitious_keys")); } catch (IOException e) { throw new ExceptionInInitializerError(e); } diff --git a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/ConfigurationManager.java b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/ConfigurationManager.java index 75d560e27e30a09fda34805a6396695f51206845..8a11d973f428f7808bef1fe2dcc478f13eef3e2e 100644 --- a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/ConfigurationManager.java +++ b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/ConfigurationManager.java @@ -233,18 +233,11 @@ public class ConfigurationManager { * @return true if the credentials has been deleted from the list, false * otherwise. */ - public synchronized boolean deleteCredentials(String username, TapCredentials credentials) { + public synchronized boolean deleteCredentials(String username, int credentialsIndex) { for (UserConfiguration user : usersConfig.getUsers()) { if (user.getUsername().equals(username)) { - Iterator<TapCredentials> ite = user.getCredentialsInfo().iterator(); - while (ite.hasNext()) { - TapCredentials tapCredentials = ite.next(); - if (tapCredentials.equals(credentials)) { - ite.remove(); - updateUsersConfigurationFile(); - return true; - } - } + user.getCredentialsInfo().remove(credentialsIndex); + return true; } } return false; diff --git a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/CredentialsDialogResource.java b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/CredentialsDialogResource.java deleted file mode 100644 index 7916bb3204741b613af62aa250178edeb7b36cd6..0000000000000000000000000000000000000000 --- a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/CredentialsDialogResource.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * _____________________________________________________________________________ - * - * INAF - OATS National Institute for Astrophysics - Astronomical Observatory of - * Trieste INAF - IA2 Italian Center for Astronomical Archives - * _____________________________________________________________________________ - * - * Copyright (C) 2017 Istituto Nazionale di Astrofisica - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License Version 3 as published by the - * Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 51 - * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package it.inaf.ia2.tsm.webapp; - -import javax.ws.rs.Path; -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.ws.rs.POST; -import javax.ws.rs.QueryParam; - -/** - * REST Web Service for setting opening dialog status using JavaScript. This is - * necessary to conditionally disable JSF validation when dialog is closed. - * - * @author Sonia Zorba {@literal <zorba at oats.inaf.it>} - */ -@Path("credentialsDialog") -@RequestScoped -public class CredentialsDialogResource { - - @Inject - CredentialsEditing credentialsEditing; - - @POST - public void setOpened(@QueryParam("opened") boolean opened) { - credentialsEditing.setCredentialsDialogOpened(opened); - } -} diff --git a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/CredentialsEditing.java b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/CredentialsEditing.java index f2d9ad91c4f8c48c76e219c9eb55f1daf7075478..5bb68a68a61b0b4fc50fac21e2b84e1307d8a505 100644 --- a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/CredentialsEditing.java +++ b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/CredentialsEditing.java @@ -25,6 +25,10 @@ package it.inaf.ia2.tsm.webapp; import it.inaf.ia2.tsm.webapp.xmlconfig.SeparatedCredentials; import it.inaf.ia2.tsm.datalayer.Credentials; import it.inaf.ia2.tsm.datalayer.DBWrapper; +import it.inaf.ia2.tsm.model.TapSchemaModels; +import it.inaf.ia2.tsm.webapp.env.UIModal; +import it.inaf.ia2.tsm.webapp.xmlconfig.JoinedCredentials; +import it.inaf.ia2.tsm.webapp.xmlconfig.TapCredentials; import java.io.IOException; import java.io.Serializable; import java.sql.SQLException; @@ -58,54 +62,87 @@ public class CredentialsEditing implements Serializable { @Inject private SchemaSelectionBean schemaSelectionBean; + private Integer credentialsInEditing; + private Integer credentialsToRemove; + + private UIModal.StatusObserver credentialsDialogStatusObserver; private boolean credentialsDialogOpened; + private List<String> tapSchemaVersions; + + private boolean separateCredentials; private Credentials sourceCredentials; private Credentials tapSchemaCredentials; - private boolean separateCredentials; - private int currentEditingRow; + private String tapSchemaName; + private String tapSchemaVersion; + private boolean hasObscore; - public void test() { - String x = ""; - } - @PostConstruct public void init() { - sourceCredentials = new Credentials(); - tapSchemaCredentials = new Credentials(); + this.credentialsDialogStatusObserver = new UIModal.StatusObserver() { + @Override + public void statusChanged(boolean isOpen) { + credentialsDialogOpened = isOpen; + } + }; + this.tapSchemaVersions = TapSchemaModels.getAvailableVersions(); } - public List getSavedCredentials() { + public List<TapCredentials> getSavedCredentials() { return user.getUserConfiguration().getCredentialsInfo(); } - public void editCredentials(Credentials credentials, int index) { - this.sourceCredentials = credentials; - separateCredentials = false; - currentEditingRow = index; - } + public void editCredentials(int index) { + credentialsInEditing = index; + TapCredentials credentials = getSavedCredentials().get(index); + + if (credentials instanceof JoinedCredentials) { - public void editSeparateCredentials(SeparatedCredentials sc, int index) { - this.sourceCredentials = sc.getSourceCredentials(); - this.tapSchemaCredentials = sc.getTapSchemaCredentials(); - currentEditingRow = index; - separateCredentials = true; + JoinedCredentials joinedCredentials = (JoinedCredentials) credentials; + separateCredentials = false; + sourceCredentials = new Credentials(joinedCredentials.getCredentials()); + // in case the user wants to split credentials + tapSchemaCredentials = new Credentials(); + + } else if (credentials instanceof SeparatedCredentials) { + + SeparatedCredentials separatedCredentials = (SeparatedCredentials) credentials; + separateCredentials = true; + sourceCredentials = new Credentials(separatedCredentials.getSourceCredentials()); + tapSchemaCredentials = new Credentials(separatedCredentials.getTapSchemaCredentials()); + } + + tapSchemaName = credentials.getTapSchemaName(); + tapSchemaVersion = credentials.getTapSchemaVersion(); + hasObscore = credentials.isHasObscore(); } public void addNewCredentials() { separateCredentials = false; - this.sourceCredentials = new Credentials(); - this.tapSchemaCredentials = new Credentials(); - currentEditingRow = getSavedCredentials().size(); + sourceCredentials = new Credentials(); + tapSchemaCredentials = new Credentials(); + tapSchemaName = ""; + tapSchemaVersion = ""; + hasObscore = false; } - public String loginWithSingleCredentials(Credentials credentials) { - LOG.debug("Login with single credentials"); - return loginWithDBWrapper(new DBWrapper(credentials)); +// public void editCredentials(Credentials credentials, int index) { +// this.sourceCredentials = credentials; +// separateCredentials = false; +// currentEditingRow = index; +// } +// +// public void editSeparateCredentials(SeparatedCredentials sc, int index) { +// this.sourceCredentials = sc.getSourceCredentials(); +// this.tapSchemaCredentials = sc.getTapSchemaCredentials(); +// currentEditingRow = index; +// separateCredentials = true; +// } + public String loginWithJoinedCredentials(JoinedCredentials credentials) { + return loginWithDBWrapper(new DBWrapper(credentials.getCredentials())); } public String loginWithSeparatedCredentials(Credentials sourceCredentials, Credentials tapSchemaCredentials) { - LOG.debug("Login with separated credentials"); return loginWithDBWrapper(new DBWrapper(sourceCredentials, tapSchemaCredentials)); } @@ -144,6 +181,18 @@ public class CredentialsEditing implements Serializable { // config.updateUsersConfigurationFile(); } + public UIModal.StatusObserver getCredentialsDialogStatus() { + return credentialsDialogStatusObserver; + } + + public List<String> getTapSchemaVersions() { + return tapSchemaVersions; + } + + public void setTapSchemaVersions(List<String> tapSchemaVersions) { + this.tapSchemaVersions = tapSchemaVersions; + } + public boolean isSeparateCredentials() { return separateCredentials; } @@ -152,6 +201,41 @@ public class CredentialsEditing implements Serializable { this.separateCredentials = separateCredentials; } +// public void separateCredentialsChanged() { +// if (separateCredentials) { +// Credentials credentials = getJoinedCredentialsInEditing().getCredentials(); +// SeparatedCredentials separatedCredentials = new SeparatedCredentials(); +// separatedCredentials.setSourceCredentials(credentials); +// credentialsInEditing = separatedCredentials; +// } else { +// Credentials credentials = getSeparatedCredentialsInEditing().getSourceCredentials(); +// JoinedCredentials joinedCredentials = new JoinedCredentials(); +// joinedCredentials.setCredentials(credentials); +// credentialsInEditing = joinedCredentials; +// } +// } +// +// public JoinedCredentials getJoinedCredentialsInEditing() { +// if (credentialsInEditing instanceof JoinedCredentials) { +// return (JoinedCredentials) credentialsInEditing; +// } +// return null; +// } +// +// public SeparatedCredentials getSeparatedCredentialsInEditing() { +// if (credentialsInEditing instanceof SeparatedCredentials) { +// return (SeparatedCredentials) credentialsInEditing; +// } +// return null; +// } + public boolean isCredentialsDialogOpened() { + return credentialsDialogOpened; + } + + public void setCredentialsDialogOpened(boolean credentialsDialogOpened) { + this.credentialsDialogOpened = credentialsDialogOpened; + } + public Credentials getSourceCredentials() { return sourceCredentials; } @@ -168,11 +252,27 @@ public class CredentialsEditing implements Serializable { this.tapSchemaCredentials = tapSchemaCredentials; } - public boolean isCredentialsDialogOpened() { - return credentialsDialogOpened; + public String getTapSchemaName() { + return tapSchemaName; } - public void setCredentialsDialogOpened(boolean credentialsDialogOpened) { - this.credentialsDialogOpened = credentialsDialogOpened; + public void setTapSchemaName(String tapSchemaName) { + this.tapSchemaName = tapSchemaName; + } + + public String getTapSchemaVersion() { + return tapSchemaVersion; + } + + public void setTapSchemaVersion(String tapSchemaVersion) { + this.tapSchemaVersion = tapSchemaVersion; + } + + public boolean isHasObscore() { + return hasObscore; + } + + public void setHasObscore(boolean hasObscore) { + this.hasObscore = hasObscore; } } diff --git a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/env/ApplicationConfig.java b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/env/ApplicationConfig.java index c3259e8797ebf5d0992879f65c724fb7882d87e0..49143d69cdb37a76545b5a9ab81332d794770b7e 100644 --- a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/env/ApplicationConfig.java +++ b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/env/ApplicationConfig.java @@ -45,7 +45,6 @@ public class ApplicationConfig extends Application { * out calling this method in getClasses(). */ private void addRestResourceClasses(Set<Class<?>> resources) { - resources.add(it.inaf.ia2.tsm.webapp.CredentialsDialogResource.class); resources.add(it.inaf.ia2.tsm.webapp.TapSchemaLoaderResource.class); resources.add(it.inaf.ia2.tsm.webapp.env.KeepAliveResource.class); } diff --git a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/env/UIModal.java b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/env/UIModal.java new file mode 100644 index 0000000000000000000000000000000000000000..5444db324fd6b0cbe079556a6ad3fb74bdafda2a --- /dev/null +++ b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/env/UIModal.java @@ -0,0 +1,71 @@ +/* + * _____________________________________________________________________________ + * + * INAF - OATS National Institute for Astrophysics - Astronomical Observatory of + * Trieste INAF - IA2 Italian Center for Astronomical Archives + * _____________________________________________________________________________ + * + * Copyright (C) 2017 Istituto Nazionale di Astrofisica + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License Version 3 as published by the + * Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package it.inaf.ia2.tsm.webapp.env; + +import java.io.IOException; +import javax.faces.component.FacesComponent; +import javax.faces.component.UIComponentBase; +import javax.faces.context.FacesContext; +import javax.faces.context.ResponseWriter; + +/** + * + * @author Sonia Zorba {@literal <zorba at oats.inaf.it>} + */ +@FacesComponent(tagName = "modal", namespace = "http://ia2.inaf.it/component", createTag = true) +public class UIModal extends UIComponentBase { + + public static abstract class StatusObserver { + + public abstract void statusChanged(boolean isOpen); + } + + @Override + public void decode(FacesContext context) { + + if (getAttributes().containsKey("status-observer")) { + StatusObserver status = (StatusObserver) getAttributes().get("status-observer"); + boolean open = Boolean.parseBoolean((String) getAttributes().get("open")); + status.statusChanged(open); + } + } + + @Override + public String getFamily() { + return "modal"; + } + + @Override + public void encodeBegin(FacesContext context) throws IOException { + ResponseWriter writer = context.getResponseWriter(); + writer.write("<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" id=\""); + writer.write(getClientId()); + writer.write("\">"); + } + + @Override + public void encodeEnd(FacesContext context) throws IOException { + ResponseWriter writer = context.getResponseWriter(); + writer.write("</div>"); + } +} diff --git a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/xmlconfig/JoinedCredentials.java b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/xmlconfig/JoinedCredentials.java index 731c1bdfc58f6f26d8c5096c2da240b55585a5a7..818bcac398894c84175a451e3b9cb58a8bd3cf63 100644 --- a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/xmlconfig/JoinedCredentials.java +++ b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/xmlconfig/JoinedCredentials.java @@ -36,12 +36,19 @@ public class JoinedCredentials extends TapCredentials { private Credentials credentials; public JoinedCredentials() { + credentials = new Credentials(); } public JoinedCredentials(Credentials credentials) { this.credentials = credentials; } + // Copy constructor + public JoinedCredentials(JoinedCredentials joinedCredentials) { + super(joinedCredentials); + this.credentials = new Credentials(joinedCredentials.getCredentials()); + } + public Credentials getCredentials() { return credentials; } diff --git a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/xmlconfig/SeparatedCredentials.java b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/xmlconfig/SeparatedCredentials.java index 4024a60d5c65dc947719ebb8ed0064b01ac6c0ae..a8ecbbe349a4c41838061db84a84d04e4d3cedeb 100644 --- a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/xmlconfig/SeparatedCredentials.java +++ b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/xmlconfig/SeparatedCredentials.java @@ -38,6 +38,8 @@ public class SeparatedCredentials extends TapCredentials { private Credentials tapSchemaCredentials; public SeparatedCredentials() { + this.sourceCredentials = new Credentials(); + this.tapSchemaCredentials = new Credentials(); } public SeparatedCredentials(Credentials sourceCredentials, Credentials tapSchemaCredentials) { @@ -45,6 +47,13 @@ public class SeparatedCredentials extends TapCredentials { this.tapSchemaCredentials = tapSchemaCredentials; } + // Copy constructor + public SeparatedCredentials(SeparatedCredentials separatedCredentials) { + super(separatedCredentials); + this.sourceCredentials = new Credentials(separatedCredentials.getSourceCredentials()); + this.tapSchemaCredentials = new Credentials(separatedCredentials.getTapSchemaCredentials()); + } + @XmlElement(name = "source-credentials") public Credentials getSourceCredentials() { return sourceCredentials; diff --git a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/xmlconfig/TapCredentials.java b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/xmlconfig/TapCredentials.java index f4c8c1a6185b5b8f22f63e12438bd2cd5d41a1ec..2924a8176e9f86a7a0fbac50f11cdb57b8f7bf91 100644 --- a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/xmlconfig/TapCredentials.java +++ b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/xmlconfig/TapCredentials.java @@ -37,6 +37,16 @@ public abstract class TapCredentials implements Serializable { private String tapSchemaVersion; private boolean hasObscore; + public TapCredentials() { + } + + // Copy constructor + public TapCredentials(TapCredentials tapCredentials) { + this.tapSchemaName = tapCredentials.getTapSchemaName(); + this.tapSchemaVersion = tapCredentials.getTapSchemaVersion(); + this.hasObscore = tapCredentials.isHasObscore(); + } + @XmlElement(name = "tap_schema_name") public String getTapSchemaName() { return tapSchemaName; diff --git a/TASMAN-webapp/src/main/webapp/credentialsEditing.xhtml b/TASMAN-webapp/src/main/webapp/credentialsEditing.xhtml index 77a80ccf5b6561a052e8bbb2519ba8a579a7d160..fe29f2cf5ae6c8b08b214b81407d1684955eb53c 100644 --- a/TASMAN-webapp/src/main/webapp/credentialsEditing.xhtml +++ b/TASMAN-webapp/src/main/webapp/credentialsEditing.xhtml @@ -4,7 +4,8 @@ xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" - xmlns:tsm_components="http://xmlns.jcp.org/jsf/composite/tsm_components"> + xmlns:tsm_components="http://xmlns.jcp.org/jsf/composite/tsm_components" + xmlns:ia2="http://ia2.inaf.it/component"> <ui:define name="title">TASMAN - Credentials insertion page</ui:define> <ui:define name="scripts"> <h:outputScript library="js" name="credentials.js"></h:outputScript> @@ -41,7 +42,7 @@ (${c.databaseType eq 'MYSQL' ? 'MySQL' : 'Postgres'}) ${c.hostname}:${c.port} ${c.username} </div> <div class="col-xs-2 text-right"> - <h:commandLink action="#{credentialsInsertion.loginWithSingleCredentials(c)}" title="Login" immediate="true"> + <h:commandLink action="#{credentialsInsertion.loginWithJoinedCredentials(c)}" title="Login" immediate="true"> <span class="glyphicon glyphicon-log-in"></span> </h:commandLink> </div> @@ -83,7 +84,7 @@ </div> </h:panelGroup> - <div class="modal fade" tabindex="-1" role="dialog" id="credentials-modal"> + <ia2:modal id="credentials-modal" visibility-status="#{credentialsInsertion.credentialsDialogStatus}"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> @@ -92,127 +93,151 @@ </div> <h:panelGroup id="credentials-modal-body" layout="block" class="modal-body"> - <div class="panel panel-primary"> - <h:panelGroup id="source_credentials_title" layout="block" class="panel-heading#{credentialsInsertion.separateCredentials ? '' : ' hide'}"> - <h3 class="panel-title">Source credentials</h3> - </h:panelGroup> - <div class="panel-body"> - <h:panelGroup layout="block" class="form-horizontal" id="source_credentials"> - <div class="form-group"> - <h:outputLabel for="source_dbtype" class="col-sm-2 control-label">Database type</h:outputLabel> - <div class="col-sm-10"> - <h:selectOneMenu id="source_dbtype" value="#{credentialsInsertion.sourceCredentials.databaseType}" class="form-control"> - <f:selectItem itemValue="MYSQL" itemLabel="MySQL" /> - <f:selectItem itemValue="POSTGRES" itemLabel="Postgres" /> - <f:ajax execute="@this" render=":main:source_credentials" listener="#{credentialsInsertion.sourceCredentials.setDefaults()}" /> - </h:selectOneMenu> - </div> - </div> - <div class="form-group"> - <h:outputLabel for="source_hostname" class="col-sm-2 control-label">Hostname</h:outputLabel> - <div class="col-sm-10"> - <h:inputText id="source_hostname" value="#{credentialsInsertion.sourceCredentials.hostname}" class="form-control" required="#{credentialsInsertion.credentialsDialogOpened}" requiredMessage="Hostname is required"/> - <h:message for="source_hostname" class="text-danger" /> - </div> - </div> - <div class="form-group"> - <h:outputLabel for="source_port" class="col-sm-2 control-label">Port</h:outputLabel> - <div class="col-sm-10"> - <h:inputText id="source_port" value="#{credentialsInsertion.sourceCredentials.port}" class="form-control" required="#{credentialsInsertion.credentialsDialogOpened}" requiredMessage="Port is required"/> - <h:message for="source_port" class="text-danger" /> - </div> + <h:panelGroup class="row" layout="block" id="credentials_panels_wrapper"> + <div class="#{credentialsInsertion.separateCredentials ? 'col-xs-6':'col-xs-12'}"> + <div class="panel panel-primary"> + <div class="panel-heading#{credentialsInsertion.separateCredentials ? '' : ' hide'}"> + <h3 class="panel-title">Source credentials</h3> </div> - <div class="form-group"> - <h:outputLabel for="source_username" class="col-sm-2 control-label">Username</h:outputLabel> - <div class="col-sm-10"> - <h:inputText id="source_username" value="#{credentialsInsertion.sourceCredentials.username}" required="#{credentialsInsertion.credentialsDialogOpened}" class="form-control" requiredMessage="Username is required"/> - <h:message for="source_username" class="text-danger" /> - </div> + <div class="panel-body"> + <h:panelGroup layout="block" class="form-horizontal" id="source_credentials"> + <div class="form-group"> + <h:outputLabel for="source_dbtype" class="#{credentialsInsertion.separateCredentials ? 'col-xs-4': 'col-xs-3'} control-label">Database type</h:outputLabel> + <div class="#{credentialsInsertion.separateCredentials ? 'col-xs-8': 'col-xs-9'}"> + <h:selectOneMenu id="source_dbtype" value="#{credentialsInsertion.sourceCredentials.databaseType}" class="form-control"> + <f:selectItem itemValue="MYSQL" itemLabel="MySQL" /> + <f:selectItem itemValue="POSTGRES" itemLabel="Postgres" /> + <f:ajax execute="@this" render=":main:source_credentials" listener="#{credentialsInsertion.sourceCredentials.setDefaults()}" /> + </h:selectOneMenu> + </div> + </div> + <div class="form-group"> + <h:outputLabel for="source_hostname" class="#{credentialsInsertion.separateCredentials ? 'col-xs-4': 'col-xs-3'} control-label">Hostname</h:outputLabel> + <div class="#{credentialsInsertion.separateCredentials ? 'col-xs-8': 'col-xs-9'}"> + <h:inputText id="source_hostname" value="#{credentialsInsertion.sourceCredentials.hostname}" class="form-control" required="#{credentialsInsertion.credentialsDialogOpened}" requiredMessage="Hostname is required"/> + <h:message for="source_hostname" class="text-danger" /> + </div> + </div> + <div class="form-group"> + <h:outputLabel for="source_port" class="#{credentialsInsertion.separateCredentials ? 'col-xs-4': 'col-xs-3'} control-label">Port</h:outputLabel> + <div class="#{credentialsInsertion.separateCredentials ? 'col-xs-8': 'col-xs-9'}"> + <h:inputText id="source_port" value="#{credentialsInsertion.sourceCredentials.port}" class="form-control" required="#{credentialsInsertion.credentialsDialogOpened}" requiredMessage="Port is required"/> + <h:message for="source_port" class="text-danger" /> + </div> + </div> + <div class="form-group"> + <h:outputLabel for="source_username" class="#{credentialsInsertion.separateCredentials ? 'col-xs-4': 'col-xs-3'} control-label">Username</h:outputLabel> + <div class="#{credentialsInsertion.separateCredentials ? 'col-xs-8': 'col-xs-9'}"> + <h:inputText id="source_username" value="#{credentialsInsertion.sourceCredentials.username}" required="#{credentialsInsertion.credentialsDialogOpened}" class="form-control" requiredMessage="Username is required"/> + <h:message for="source_username" class="text-danger" /> + </div> + </div> + <div class="form-group"> + <h:outputLabel for="source_password" class="#{credentialsInsertion.separateCredentials ? 'col-xs-4': 'col-xs-3'} control-label">Password</h:outputLabel> + <div class="#{credentialsInsertion.separateCredentials ? 'col-xs-8': 'col-xs-9'}"> + <h:inputSecret id="source_password" value="#{credentialsInsertion.sourceCredentials.password}" class="form-control" redisplay="true" /> + <h:message for="source_password" class="text-danger" /> + </div> + </div> + <h:panelGroup class="form-group" layout="block" rendered="#{credentialsInsertion.sourceCredentials.databaseType eq 'POSTGRES'}"> + <h:outputLabel for="source_database" class="#{credentialsInsertion.separateCredentials ? 'col-xs-4': 'col-xs-3'} control-label">Database</h:outputLabel> + <div class="#{credentialsInsertion.separateCredentials ? 'col-xs-8': 'col-xs-9'}"> + <h:inputText id="source_database" value="#{credentialsInsertion.sourceCredentials.database}" class="form-control" /> + <h:message for="source_database" class="text-danger" /> + </div> + </h:panelGroup> + </h:panelGroup> </div> - <div class="form-group"> - <h:outputLabel for="source_password" class="col-sm-2 control-label">Password</h:outputLabel> - <div class="col-sm-10"> - <h:inputSecret id="source_password" value="#{credentialsInsertion.sourceCredentials.password}" class="form-control" redisplay="true" /> - <h:message for="source_password" class="text-danger" /> - </div> - </div> - <h:panelGroup class="form-group" layout="block" rendered="#{credentialsInsertion.sourceCredentials.databaseType eq 'POSTGRES'}"> - <h:outputLabel for="source_database" class="col-sm-2 control-label">Database</h:outputLabel> - <div class="col-sm-10"> - <h:inputText id="source_database" value="#{credentialsInsertion.sourceCredentials.database}" class="form-control" /> - <h:message for="source_database" class="text-danger" /> - </div> - </h:panelGroup> - </h:panelGroup> + </div> </div> - </div> - - <div> - <label> - <h:selectBooleanCheckbox value="#{credentialsInsertion.separateCredentials}"> - <f:ajax render="tap_schema_credentials source_credentials_title" execute="@this" /> - </h:selectBooleanCheckbox> - Separate credentials - </label> - </div> - - <h:panelGroup id="tap_schema_credentials"> - <h:panelGroup layout="block" class="panel panel-primary" rendered="#{credentialsInsertion.separateCredentials}"> - <h:panelGroup layout="block" class="panel-heading" rendered="#{credentialsInsertion.separateCredentials}"> - <h3 class="panel-title">TAP_SCHEMA credentials</h3> - </h:panelGroup> - <div class="panel-body"> - <div class="form-horizontal"> - <div class="form-group"> - <h:outputLabel for="tap_schema_dbtype" class="col-sm-2 control-label">Database type</h:outputLabel> - <div class="col-sm-10"> - <h:selectOneMenu id="tap_schema_dbtype" value="#{credentialsInsertion.tapSchemaCredentials.databaseType}" class="form-control"> - <f:selectItem itemValue="MYSQL" itemLabel="MySQL" /> - <f:selectItem itemValue="POSTGRES" itemLabel="Postgres" /> - <f:ajax execute="@this" render=":main:tap_schema_credentials" listener="#{credentialsInsertion.tapSchemaCredentials.setDefaults()}" /> - </h:selectOneMenu> + <div class="#{credentialsInsertion.separateCredentials ? 'col-xs-6':'col-xs-12'}"> + <h:panelGroup layout="block" class="panel panel-primary" rendered="#{credentialsInsertion.separateCredentials}"> + <h:panelGroup layout="block" class="panel-heading" rendered="#{credentialsInsertion.separateCredentials}"> + <h3 class="panel-title">TAP_SCHEMA credentials</h3> + </h:panelGroup> + <div class="panel-body"> + <div class="form-horizontal"> + <div class="form-group"> + <h:outputLabel for="tap_schema_dbtype" class="#{credentialsInsertion.separateCredentials ? 'col-xs-4': 'col-xs-3'} control-label">Database type</h:outputLabel> + <div class="#{credentialsInsertion.separateCredentials ? 'col-xs-8': 'col-xs-9'}"> + <h:selectOneMenu id="tap_schema_dbtype" value="#{credentialsInsertion.tapSchemaCredentials.databaseType}" class="form-control"> + <f:selectItem itemValue="MYSQL" itemLabel="MySQL" /> + <f:selectItem itemValue="POSTGRES" itemLabel="Postgres" /> + <f:ajax execute="@this" render=":main:credentials_panels_wrapper" listener="#{credentialsInsertion.tapSchemaCredentials.setDefaults()}" /> + </h:selectOneMenu> + </div> </div> - </div> - <div class="form-group"> - <h:outputLabel for="tap_schema_hostname" class="col-sm-2 control-label">Hostname</h:outputLabel> - <div class="col-sm-10"> - <h:inputText id="tap_schema_hostname" value="#{credentialsInsertion.tapSchemaCredentials.hostname}" required="#{credentialsInsertion.credentialsDialogOpened}" class="form-control" requiredMessage="Hostname is required"/> - <h:message for="tap_schema_hostname" class="text-danger" /> + <div class="form-group"> + <h:outputLabel for="tap_schema_hostname" class="#{credentialsInsertion.separateCredentials ? 'col-xs-4': 'col-xs-3'} control-label">Hostname</h:outputLabel> + <div class="#{credentialsInsertion.separateCredentials ? 'col-xs-8': 'col-xs-9'}"> + <h:inputText id="tap_schema_hostname" value="#{credentialsInsertion.tapSchemaCredentials.hostname}" required="#{credentialsInsertion.credentialsDialogOpened}" class="form-control" requiredMessage="Hostname is required"/> + <h:message for="tap_schema_hostname" class="text-danger" /> + </div> </div> - </div> - <div class="form-group"> - <h:outputLabel for="tap_schema_port" class="col-sm-2 control-label">Port</h:outputLabel> - <div class="col-sm-10"> - <h:inputText id="tap_schema_port" value="#{credentialsInsertion.tapSchemaCredentials.port}" required="#{credentialsInsertion.credentialsDialogOpened}" class="form-control" requiredMessage="Port is required"/> - <h:message for="tap_schema_port" class="text-danger" /> + <div class="form-group"> + <h:outputLabel for="tap_schema_port" class="#{credentialsInsertion.separateCredentials ? 'col-xs-4': 'col-xs-3'} control-label">Port</h:outputLabel> + <div class="#{credentialsInsertion.separateCredentials ? 'col-xs-8': 'col-xs-9'}"> + <h:inputText id="tap_schema_port" value="#{credentialsInsertion.tapSchemaCredentials.port}" required="#{credentialsInsertion.credentialsDialogOpened}" class="form-control" requiredMessage="Port is required"/> + <h:message for="tap_schema_port" class="text-danger" /> + </div> </div> - </div> - <div class="form-group"> - <h:outputLabel for="tap_schema_username" class="col-sm-2 control-label">Username</h:outputLabel> - <div class="col-sm-10"> - <h:inputText id="tap_schema_username" value="#{credentialsInsertion.tapSchemaCredentials.username}" required="#{credentialsInsertion.credentialsDialogOpened}" class="form-control" requiredMessage="Username is required"/> - <h:message for="tap_schema_username" class="text-danger" /> + <div class="form-group"> + <h:outputLabel for="tap_schema_username" class="#{credentialsInsertion.separateCredentials ? 'col-xs-4': 'col-xs-3'} control-label">Username</h:outputLabel> + <div class="#{credentialsInsertion.separateCredentials ? 'col-xs-8': 'col-xs-9'}"> + <h:inputText id="tap_schema_username" value="#{credentialsInsertion.tapSchemaCredentials.username}" required="#{credentialsInsertion.credentialsDialogOpened}" class="form-control" requiredMessage="Username is required"/> + <h:message for="tap_schema_username" class="text-danger" /> + </div> </div> - </div> - <div class="form-group"> - <h:outputLabel for="tap_schema_password" class="col-sm-2 control-label">Password</h:outputLabel> - <div class="col-sm-10"> - <h:inputSecret id="tap_schema_password" value="#{credentialsInsertion.tapSchemaCredentials.password}" class="form-control" redisplay="true" /> - <h:message for="tap_schema_password" class="text-danger" /> + <div class="form-group"> + <h:outputLabel for="tap_schema_password" class="#{credentialsInsertion.separateCredentials ? 'col-xs-4': 'col-xs-3'} control-label">Password</h:outputLabel> + <div class="#{credentialsInsertion.separateCredentials ? 'col-xs-8': 'col-xs-9'}"> + <h:inputSecret id="tap_schema_password" value="#{credentialsInsertion.tapSchemaCredentials.password}" class="form-control" redisplay="true" /> + <h:message for="tap_schema_password" class="text-danger" /> + </div> </div> + <h:panelGroup class="form-group" layout="block" rendered="#{credentialsInsertion.tapSchemaCredentials.databaseType eq 'POSTGRES'}"> + <h:outputLabel for="tap_schema_database" class="#{credentialsInsertion.separateCredentials ? 'col-xs-4': 'col-xs-3'} control-label">Database</h:outputLabel> + <div class="#{credentialsInsertion.separateCredentials ? 'col-xs-8': 'col-xs-9'}"> + <h:inputText id="tap_schema_database" value="#{credentialsInsertion.tapSchemaCredentials.database}" class="form-control" /> + <h:message for="tap_schema_database" class="text-danger" /> + </div> + </h:panelGroup> </div> - <h:panelGroup class="form-group" layout="block" rendered="#{credentialsInsertion.tapSchemaCredentials.databaseType eq 'POSTGRES'}"> - <h:outputLabel for="tap_schema_database" class="col-sm-2 control-label">Database</h:outputLabel> - <div class="col-sm-10"> - <h:inputText id="tap_schema_database" value="#{credentialsInsertion.tapSchemaCredentials.database}" class="form-control" /> - <h:message for="tap_schema_database" class="text-danger" /> - </div> - </h:panelGroup> </div> - </div> - </h:panelGroup> + </h:panelGroup> + </div> </h:panelGroup> + <div class="form-horizontal"> + <div class="form-group"> + <label class="col-xs-6 col-xs-offset-4"> + <h:selectBooleanCheckbox value="#{credentialsInsertion.separateCredentials}" id="separate-credentials"> + <f:ajax render="credentials_panels_wrapper" execute="@this" onevent="credentials.separateCredentialsChanged" /> + </h:selectBooleanCheckbox> + Separate credentials + </label> + </div> + <div class="form-group"> + <h:outputLabel for="tap_schema_name" class="control-label col-xs-4">TAP_SCHEMA name</h:outputLabel> + <div class="col-xs-6"> + <h:inputText value="#{credentialsInsertion.tapSchemaName}" class="form-control" /> + </div> + </div> + <div class="form-group"> + <h:outputLabel for="tap_schema_name" class="control-label col-xs-4">TAP_SCHEMA version</h:outputLabel> + <div class="col-xs-6"> + <h:selectOneMenu value="#{credentialsInsertion.tapSchemaVersion}" class="form-control"> + <f:selectItems value="#{credentialsInsertion.tapSchemaVersions}" var="version" itemLabel="#{version}" itemDescription="#{version}" /> + </h:selectOneMenu> + </div> + </div> + <div class="form-group"> + <label class="col-xs-6 col-xs-offset-4"> + <h:selectBooleanCheckbox value="#{credentialsInsertion.hasObscore}" id="has-obscore" /> + Has obscore + </label> + </div> + </div> </h:panelGroup> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> @@ -223,7 +248,7 @@ </div> </div> </div> - </div> + </ia2:modal> <tsm_components:ucd_editor id="ucd-editor" /> </div> diff --git a/TASMAN-webapp/src/main/webapp/resources/js/credentials.js b/TASMAN-webapp/src/main/webapp/resources/js/credentials.js index 068ce3357502a22565588f8b1cc5df3aafaf7395..5fb483c3ce425364b1ac9e6c5f5f00704a24965a 100644 --- a/TASMAN-webapp/src/main/webapp/resources/js/credentials.js +++ b/TASMAN-webapp/src/main/webapp/resources/js/credentials.js @@ -1,29 +1,42 @@ (function () { + function checkSeparateCredentials() { + var separateCredentials = $('#main\\:separate-credentials').is(':checked'); + $('#main\\:credentials-modal .modal-dialog').toggleClass('modal-lg', separateCredentials); + } + window.credentials = { editClicked: function (event) { if (event.status === 'success') { - $('#credentials-modal').modal('show'); + $('#main\\:credentials-modal').modal('show'); } }, credentialsSaved: function (event) { if (event.status === 'success') { - if ($('#credentials-modal .text-danger').length === 0) { - $('#credentials-modal').modal('hide'); + if ($('#main\\:credentials-modal .text-danger').length === 0) { + $('#main\\:credentials-modal').modal('hide'); } } + }, + separateCredentialsChanged: function (event) { + if (event.status === 'success') { + checkSeparateCredentials(); + } } }; $(document).ready(function () { - $('body').on('shown.bs.modal', '#credentials-modal', function ( ) { - $.post(TSM.getRestPath("credentialsDialog?opened=true")); - }); - $('body').on('hidden.bs.modal', '#credentials-modal', function ( ) { - $.post(TSM.getRestPath("credentialsDialog?opened=false")); + $('body').on('show.bs.modal', '#main\\:credentials-modal', function ( ) { + checkSeparateCredentials(); }); +// $('body').on('shown.bs.modal', '#main\\:credentials-modal', function ( ) { +// $.post(TSM.getRestPath("credentialsDialog?opened=true")); +// }); +// $('body').on('hidden.bs.modal', '#main\\:credentials-modal', function ( ) { +// $.post(TSM.getRestPath("credentialsDialog?opened=false")); +// }); - $('body').on('keyup', '#credentials-modal input', function (event) { + $('body').on('keyup', '#main\\:credentials-modal input', function (event) { if (event.keyCode === 13) { $('#main\\:save-credentials').click(); event.preventDefault();