Skip to content
Snippets Groups Projects
Commit 471f2ac7 authored by Sonia Zorba's avatar Sonia Zorba
Browse files

Added VOUnit validation

parent f7b86f98
Branches
Tags
No related merge requests found
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<groupId>it.inaf.ia2.tap</groupId> <groupId>it.inaf.ia2.tap</groupId>
<artifactId>TapSchemaManagerWebApp</artifactId> <artifactId>TapSchemaManagerWebApp</artifactId>
<version>1.0.1</version> <version>1.0.2</version>
<packaging>war</packaging> <packaging>war</packaging>
<name>TapSchemaManagerWebApp</name> <name>TapSchemaManagerWebApp</name>
...@@ -87,7 +87,7 @@ ...@@ -87,7 +87,7 @@
<dependency> <dependency>
<groupId>it.inaf.ia2.tap</groupId> <groupId>it.inaf.ia2.tap</groupId>
<artifactId>TapSchemaManagerAPI</artifactId> <artifactId>TapSchemaManagerAPI</artifactId>
<version>1.0.1</version> <version>1.0.2</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>ari.ucd</groupId> <groupId>ari.ucd</groupId>
...@@ -100,6 +100,11 @@ ...@@ -100,6 +100,11 @@
<version>7.0</version> <version>7.0</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>uk.me.nxg</groupId>
<artifactId>unity</artifactId>
<version>1.0</version>
</dependency>
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
......
...@@ -72,6 +72,7 @@ public class TapSchemaEditingBean implements Serializable { ...@@ -72,6 +72,7 @@ public class TapSchemaEditingBean implements Serializable {
private EntitiesContainer currentAddingContainer; private EntitiesContainer currentAddingContainer;
private List<AddableItem> currentAddables; private List<AddableItem> currentAddables;
private VOUnitValidator voUnitValidator;
@Inject @Inject
private SearchUCDDialog searchUCDDialog; private SearchUCDDialog searchUCDDialog;
...@@ -88,6 +89,10 @@ public class TapSchemaEditingBean implements Serializable { ...@@ -88,6 +89,10 @@ public class TapSchemaEditingBean implements Serializable {
return selectedColumn; return selectedColumn;
} }
public VOUnitValidator getVoUnitValidator() {
return voUnitValidator;
}
public void setSelectedSchema(Schema selectedSchema) { public void setSelectedSchema(Schema selectedSchema) {
this.selectedSchema = selectedSchema; this.selectedSchema = selectedSchema;
if (selectedSchema == null) { if (selectedSchema == null) {
...@@ -118,6 +123,7 @@ public class TapSchemaEditingBean implements Serializable { ...@@ -118,6 +123,7 @@ public class TapSchemaEditingBean implements Serializable {
public void setSelectedColumn(Column selectedColumn) { public void setSelectedColumn(Column selectedColumn) {
this.selectedColumn = selectedColumn; this.selectedColumn = selectedColumn;
selectedColumnChanged();
} }
public UpdateOperations getUpdateOperations() { public UpdateOperations getUpdateOperations() {
...@@ -218,6 +224,15 @@ public class TapSchemaEditingBean implements Serializable { ...@@ -218,6 +224,15 @@ public class TapSchemaEditingBean implements Serializable {
} }
} }
} }
selectedColumnChanged();
}
private void selectedColumnChanged() {
if (selectedColumn == null) {
voUnitValidator = new VOUnitValidator(null);
} else {
voUnitValidator = new VOUnitValidator(selectedColumn.getUnit());
}
} }
public void setTapSchema(TapSchema tapSchema) { public void setTapSchema(TapSchema tapSchema) {
...@@ -328,6 +343,9 @@ public class TapSchemaEditingBean implements Serializable { ...@@ -328,6 +343,9 @@ public class TapSchemaEditingBean implements Serializable {
public void textInputChanged(TapSchemaEntity entity, String key) { public void textInputChanged(TapSchemaEntity entity, String key) {
final boolean isChanged = entity.isChanged(key); final boolean isChanged = entity.isChanged(key);
if (key.equals("unit")) {
voUnitValidator = new VOUnitValidator(entity.getValue(key, String.class));
}
CustomPartialResponseWriter.getCurrentInstance().addCustomJSUpdate(new JSUpdateHandler() { CustomPartialResponseWriter.getCurrentInstance().addCustomJSUpdate(new JSUpdateHandler() {
@Override @Override
......
/*
* _____________________________________________________________________________
*
* 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 java.io.Serializable;
import uk.me.nxg.unity.Syntax;
import uk.me.nxg.unity.UnitExpr;
import uk.me.nxg.unity.UnitParser;
/**
* Serializable wrapper for VOUnit UnitExpr
*
* @author Sonia Zorba <zorba at oats.inaf.it>
*/
public class VOUnitValidator implements Serializable {
private static final long serialVersionUID = -1019359441934896102L;
private static final Syntax syntax = Syntax.lookup("vounits");
private final boolean unset;
private boolean parsable;
private boolean allUnitsRecognised;
private boolean allUnitsRecommended;
private boolean allUsageConstraintsSatisfied;
private String exceptionMessage;
public VOUnitValidator(String value) {
unset = value == null || value.isEmpty();
if (!unset) {
try {
UnitParser parser = new UnitParser(syntax, value);
UnitExpr expr = parser.getParsed();
allUnitsRecognised = expr.allUnitsRecognised(syntax);
allUnitsRecommended = expr.allUnitsRecommended(syntax);
allUsageConstraintsSatisfied = expr.allUsageConstraintsSatisfied(syntax);
parsable = true;
} catch (Throwable t) {
exceptionMessage = t.getMessage();
}
}
}
public boolean isUnset() {
return unset;
}
public boolean isParsable() {
return parsable;
}
public boolean isAllUnitsRecognised() {
return allUnitsRecognised;
}
public boolean isAllUnitsRecommended() {
return allUnitsRecommended;
}
public boolean isAllUsageConstraintsSatisfied() {
return allUsageConstraintsSatisfied;
}
public String getExceptionMessage() {
return exceptionMessage;
}
}
ucd_service_url=http://ia2-vo.oats.inaf.it:8080/ucd/ ucd_service_url=http://ia2-vo.oats.inaf.it/ucd/
credentials_config_path=/home/sonia/.tsm/config.xml credentials_config_path=/home/sonia/.tsm/config.xml
password=pippo password=pippo
\ No newline at end of file
...@@ -314,10 +314,44 @@ ...@@ -314,10 +314,44 @@
<h:inputText <h:inputText
id="column_unit" id="column_unit"
class="form-control #{tapSchemaEditing.selectedColumn.isChanged('unit') ? 'changed' : ''}" class="form-control #{tapSchemaEditing.selectedColumn.isChanged('unit') ? 'changed' : ''}"
value="#{tapSchemaEditing.selectedColumn.unit}"> value="#{tapSchemaEditing.selectedColumn.unit}"
autocomplete="off">
<f:converter converterId="it.inaf.ia2.NullOrEmptyConverter" /> <f:converter converterId="it.inaf.ia2.NullOrEmptyConverter" />
<f:ajax event="keyup" execute="@form" listener="#{tapSchemaEditing.textInputChanged(tapSchemaEditing.selectedColumn, 'unit')}" onevent="TSM.textInputChanged" /> <f:ajax event="keyup" execute="@form" listener="#{tapSchemaEditing.textInputChanged(tapSchemaEditing.selectedColumn, 'unit')}" onevent="TSM.textInputChanged" render="vounit-validator" />
</h:inputText> </h:inputText>
<h:panelGroup id="vounit-validator">
<h:panelGroup rendered="#{!tapSchemaEditing.voUnitValidator.unset}">
<h:panelGroup rendered="#{tapSchemaEditing.voUnitValidator.parsable}">
<ul>
<li>
all units recognised
<span class="#{tapSchemaEditing.voUnitValidator.allUnitsRecognised ? 'text-success' : 'text-danger'}">
<span class="glyphicon glyphicon-#{tapSchemaEditing.voUnitValidator.allUnitsRecognised ? 'ok' : 'remove'}"></span>
</span>
</li>
<li>
all units recommended
<span class="#{tapSchemaEditing.voUnitValidator.allUnitsRecommended ? 'text-success' : 'text-danger'}">
<span class="glyphicon glyphicon-#{tapSchemaEditing.voUnitValidator.allUnitsRecommended ? 'ok' : 'remove'}"></span>
</span>
</li>
<li>
all constraints satisfied
<span class="#{tapSchemaEditing.voUnitValidator.allUsageConstraintsSatisfied ? 'text-success' : 'text-danger'}">
<span class="glyphicon glyphicon-#{tapSchemaEditing.voUnitValidator.allUsageConstraintsSatisfied ? 'ok' : 'remove'}"></span>
</span>
</li>
</ul>
</h:panelGroup>
<h:panelGroup rendered="#{!tapSchemaEditing.voUnitValidator.parsable}">
<p class="text-danger">
<span class="glyphicon glyphicon-remove"></span>
<strong>Invalid VOUnit</strong>:
#{tapSchemaEditing.voUnitValidator.exceptionMessage}
</p>
</h:panelGroup>
</h:panelGroup>
</h:panelGroup>
</div> </div>
<div class="form-group"> <div class="form-group">
<h:outputLabel for="column_description" class="control-label">Description:</h:outputLabel> <h:outputLabel for="column_description" class="control-label">Description:</h:outputLabel>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment