diff --git a/src/main/java/org/gcube/data/analysis/dataminermanagercl/server/dmservice/SClient.java b/src/main/java/org/gcube/data/analysis/dataminermanagercl/server/dmservice/SClient.java index 446d4a9..6369d34 100644 --- a/src/main/java/org/gcube/data/analysis/dataminermanagercl/server/dmservice/SClient.java +++ b/src/main/java/org/gcube/data/analysis/dataminermanagercl/server/dmservice/SClient.java @@ -12,7 +12,6 @@ import org.gcube.data.analysis.dataminermanagercl.shared.process.ComputationStat import org.gcube.data.analysis.dataminermanagercl.shared.process.Operator; import org.gcube.data.analysis.dataminermanagercl.shared.process.OperatorsClassification; - /** * * Client of service @@ -21,15 +20,14 @@ import org.gcube.data.analysis.dataminermanagercl.shared.process.OperatorsClassi * href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it * */ -public abstract class SClient implements Serializable{ +public abstract class SClient implements Serializable { - private static final long serialVersionUID = 7087349607933493388L; public SClient() { super(); } - + /** * Retrieve the list of operators * @@ -38,31 +36,44 @@ public abstract class SClient implements Serializable{ */ public abstract List getOperatorsClassifications() throws Exception; - + /** * Retrieve the operator by id * - * @param id operator id + * @param id + * operator id * @return * @throws Exception */ public abstract Operator getOperatorById(String id) throws Exception; - - + /** * Get input paramters of the operator * - * @param operator operator + * @param operator + * operator * @return * @throws Exception */ public abstract List getInputParameters(Operator operator) throws Exception; + /** + * + * Get output paramters of the operator + * + * @param operator + * @return + * @throws Exception + */ + public abstract List getOutputParameters(Operator operator) + throws Exception; + /** * Start Computation * - * @param operator operator + * @param operator + * operator * @return * @throws Exception */ @@ -72,19 +83,19 @@ public abstract class SClient implements Serializable{ /** * Cancel a computation * - * @param computationId computation Id + * @param computationId + * computation Id * @return * @throws Exception */ public abstract String cancelComputation(ComputationId computationId) throws Exception; - - /** * Get Computation Status * - * @param computationId computation Id + * @param computationId + * computation Id * @return * @throws Exception */ @@ -104,13 +115,14 @@ public abstract class SClient implements Serializable{ /** * Get Computation Data by computation properties * - * @param computationProperties computation properties + * @param computationProperties + * computation properties * @return * @throws Exception */ public abstract ComputationData getComputationDataByComputationProperties( Map computationProperties) throws Exception; - + /** * Resubmit a computation only by computation properties * @@ -120,10 +132,10 @@ public abstract class SClient implements Serializable{ */ public abstract ComputationId resubmitComputation( Map computationProperties) throws Exception; - - + @Override public String toString() { return "SClient"; } + } \ No newline at end of file diff --git a/src/main/java/org/gcube/data/analysis/dataminermanagercl/server/dmservice/SClient4WPS.java b/src/main/java/org/gcube/data/analysis/dataminermanagercl/server/dmservice/SClient4WPS.java index 1e2bbff..43dc3e5 100644 --- a/src/main/java/org/gcube/data/analysis/dataminermanagercl/server/dmservice/SClient4WPS.java +++ b/src/main/java/org/gcube/data/analysis/dataminermanagercl/server/dmservice/SClient4WPS.java @@ -783,7 +783,7 @@ public class SClient4WPS extends SClient { public List getInputParameters(Operator operator) throws ServiceException { try { - logger.debug("Parameters of algorithm " + operator.getId()); + logger.debug("Input Parameters of algorithm " + operator.getId()); ProcessInformations processInformations; try { @@ -810,12 +810,50 @@ public class SClient4WPS extends SClient { return parameters; } catch (Throwable e) { - logger.error(e.getLocalizedMessage()); - e.printStackTrace(); + logger.error("Error in getInputParameters: "+e.getLocalizedMessage(),e); throw new ServiceException(e.getLocalizedMessage()); } } + + + @Override + public List getOutputParameters(Operator operator) + throws Exception { + try { + logger.debug("Output Parameters of algorithm " + operator.getId()); + + ProcessInformations processInformations; + try { + processInformations = describeProcess(operator.getId()); + } catch (Throwable e) { + logger.error("GetParameters: " + e.getLocalizedMessage()); + e.printStackTrace(); + throw new ServiceException(e.getLocalizedMessage()); + } + + logger.debug("ProcessInformation: " + processInformations); + + List parameters = new ArrayList<>(); + + Parameter outputParameter; + for (OutputDescriptionType outputDesc : processInformations + .getOutputs()) { + outputParameter = WPS2DM.convert2DMType(outputDesc); + logger.debug("OutputParameter: " + outputParameter); + parameters.add(outputParameter); + } + + logger.debug("Parameters: " + parameters); + return parameters; + + } catch (Throwable e) { + logger.error("Error in getOutputParameters: "+e.getLocalizedMessage(),e); + throw new ServiceException(e.getLocalizedMessage()); + } + + } + @Override public ComputationId startComputation(Operator operator) diff --git a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/BionymLocalTest.java b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/BionymLocalTest.java index 1619d68..c18053c 100644 --- a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/BionymLocalTest.java +++ b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/BionymLocalTest.java @@ -38,7 +38,7 @@ public class BionymLocalTest extends TestCase { DataMinerService dataMinerService = new DataMinerService(); SClient sClient = dataMinerService.getClient(); Operator operator = sClient - .getOperatorById("org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.BIONYM_LOCAL"); + .getOperatorById(OperatorId.BIONYM_LOCAL.toString()); if (operator == null) { logger.error("Operator not found"); diff --git a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/CsquareColumnCreatorTest.java b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/CsquareColumnCreatorTest.java index 636c206..2de6bfb 100644 --- a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/CsquareColumnCreatorTest.java +++ b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/CsquareColumnCreatorTest.java @@ -38,7 +38,7 @@ public class CsquareColumnCreatorTest extends TestCase { DataMinerService dataMinerService = new DataMinerService(); SClient sClient = dataMinerService.getClient(); Operator csquareColumnCreatorOperator = sClient - .getOperatorById("org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.CSQUARE_COLUMN_CREATOR"); + .getOperatorById(OperatorId.CSQUARE_COLUMN_CREATOR.toString()); if (csquareColumnCreatorOperator == null) { logger.error("Operator not found"); diff --git a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/DBScanTest.java b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/DBScanTest.java index c73214e..43c2736 100644 --- a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/DBScanTest.java +++ b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/DBScanTest.java @@ -1,7 +1,11 @@ package org.gcube.data.analysis.dataminermanagercl.test; +import java.net.HttpURLConnection; +import java.net.URL; import java.util.ArrayList; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import junit.framework.TestCase; @@ -12,6 +16,8 @@ import org.gcube.data.analysis.dataminermanagercl.server.monitor.DMMonitorListen import org.gcube.data.analysis.dataminermanagercl.shared.Constants; import org.gcube.data.analysis.dataminermanagercl.shared.data.OutputData; import org.gcube.data.analysis.dataminermanagercl.shared.data.computations.ComputationId; +import org.gcube.data.analysis.dataminermanagercl.shared.data.output.FileResource; +import org.gcube.data.analysis.dataminermanagercl.shared.data.output.ImageResource; import org.gcube.data.analysis.dataminermanagercl.shared.data.output.MapResource; import org.gcube.data.analysis.dataminermanagercl.shared.data.output.Resource; import org.gcube.data.analysis.dataminermanagercl.shared.parameters.ColumnListParameter; @@ -39,7 +45,7 @@ public class DBScanTest extends TestCase { DataMinerService dataMinerService = new DataMinerService(); SClient sClient = dataMinerService.getClient(); Operator dBScanOperator = sClient - .getOperatorById("org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.clusterers.DBSCAN"); + .getOperatorById(OperatorId.DBSCAN.toString()); if (dBScanOperator == null) { logger.error("Operator not found"); @@ -129,8 +135,43 @@ public class DBScanTest extends TestCase { if (resource.isMap()) { MapResource mapResource = (MapResource) resource; for (String key : mapResource.getMap().keySet()) { - logger.debug("Entry: " + key + " = " - + mapResource.getMap().get(key)); + + + Resource res = mapResource.getMap().get(key); + switch (res.getResourceType()) { + case FILE: + FileResource fileResource = (FileResource) res; + String fileName=retrieveFileName(fileResource.getUrl()); + logger.debug("Entry: " + key + " = " + + mapResource.getMap().get(key)+", FileName="+fileName); + break; + case IMAGE: + ImageResource imageResource = (ImageResource) res; + String imageName=retrieveFileName(imageResource.getLink()); + logger.debug("Entry: " + key + " = " + + mapResource.getMap().get(key)+", ImageName="+imageName); + break; + case MAP: + logger.debug("Entry: " + key + " = " + + mapResource.getMap().get(key)); + break; + case OBJECT: + logger.debug("Entry: " + key + " = " + + mapResource.getMap().get(key)); + break; + case TABULAR: + //TableResource tableResource = (TableResource) res; + //String tableName=retrieveFileName(tableResource.getLink()); + logger.debug("Entry: " + key + " = " + + mapResource.getMap().get(key)); + break; + default: + logger.debug("Entry: " + key + " = " + + mapResource.getMap().get(key)); + break; + + } + } } @@ -187,4 +228,36 @@ public class DBScanTest extends TestCase { } + private String retrieveFileName(String url) { + String fileName = "output"; + + try { + + URL urlObj; + urlObj = new URL(url); + + HttpURLConnection connection = (HttpURLConnection) urlObj + .openConnection(); + connection.setRequestMethod("GET"); + String contentDisposition = connection + .getHeaderField("Content-Disposition"); + Pattern regex = Pattern.compile("(?<=filename=\").*?(?=\")"); + Matcher regexMatcher = regex.matcher(contentDisposition); + if (regexMatcher.find()) { + fileName = regexMatcher.group(); + } + + if (fileName == null || fileName.isEmpty()) { + fileName = "output"; + } + + return fileName; + } catch (Throwable e) { + logger.error( + "Error retrieving file name: " + e.getLocalizedMessage(), e); + return fileName; + } + + } + } diff --git a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/DataMinerParametersTest.java b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/DataMinerParametersTest.java new file mode 100644 index 0000000..458743d --- /dev/null +++ b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/DataMinerParametersTest.java @@ -0,0 +1,70 @@ +package org.gcube.data.analysis.dataminermanagercl.test; + +import java.util.List; + +import junit.framework.TestCase; + +import org.gcube.data.analysis.dataminermanagercl.server.DataMinerService; +import org.gcube.data.analysis.dataminermanagercl.server.dmservice.SClient; +import org.gcube.data.analysis.dataminermanagercl.shared.Constants; +import org.gcube.data.analysis.dataminermanagercl.shared.parameters.Parameter; +import org.gcube.data.analysis.dataminermanagercl.shared.process.Operator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class DataMinerParametersTest extends TestCase { + private static Logger logger = LoggerFactory + .getLogger(DataMinerParametersTest.class); + + + public void testExecute() { + + if (Constants.TEST_ENABLE) { + logger.debug("Test Parameters"); + try { + DataMinerService dataMinerService = new DataMinerService(); + SClient sClient = dataMinerService.getClient(); + Operator dBScanOperator = sClient + .getOperatorById(OperatorId.DBSCAN.toString()); + + if (dBScanOperator == null) { + logger.error("Operator not found"); + } else { + logger.debug("Operator Name: " + dBScanOperator.getName() + + " (" + dBScanOperator.getId() + ")"); + logger.debug("Operator: " + dBScanOperator); + List inputParameters = sClient + .getInputParameters(dBScanOperator); + logger.debug("Parameters: " + inputParameters); + for (Parameter parameter : inputParameters) { + logger.debug("Input Parameter:" + parameter); + } + + List outputParameters = sClient + .getOutputParameters(dBScanOperator); + logger.debug("Output Parameters: " + inputParameters); + for (Parameter parameter : outputParameters) { + logger.debug("Output Parameter:" + parameter); + } + + } + + assertTrue("Success", true); + + } catch (Throwable e) { + logger.error(e.getLocalizedMessage(),e); + assertTrue("Error", false); + } + + } else { + assertTrue("Success", true); + } + } + +} diff --git a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/DataMinerServiceTest.java b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/DataMinerServiceTest.java index afa3e5c..92ec953 100644 --- a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/DataMinerServiceTest.java +++ b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/DataMinerServiceTest.java @@ -38,9 +38,11 @@ public class DataMinerServiceTest extends TestCase { if(firstCategory.getOperators()!=null&& !firstCategory.getOperators().isEmpty()){ Operator operator=firstCategory.getOperators().get(0); logger.debug("First Operator: "+operator); - List parameters=sClient.getInputParameters(operator); - logger.debug("Parameters: "+parameters); + List inputParameters=sClient.getInputParameters(operator); + logger.debug("Input Parameters: "+inputParameters); + List outputParameters=sClient.getOutputParameters(operator); + logger.debug("Output Parameters: "+outputParameters); } else { logger.debug("Operators void"); @@ -67,7 +69,7 @@ public class DataMinerServiceTest extends TestCase { public void testOperarorName() { if (Constants.TEST_ENABLE) { - logger.debug("Test DBScan"); + logger.debug("Test Operators Name"); try { DataMinerService dataMinerService=new DataMinerService(); SClient sClient = dataMinerService.getClient(); diff --git a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/ListDBInfoTest.java b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/ListDBInfoTest.java index 6900451..20faf7c 100644 --- a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/ListDBInfoTest.java +++ b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/ListDBInfoTest.java @@ -37,7 +37,7 @@ public class ListDBInfoTest extends TestCase { DataMinerService dataMinerService=new DataMinerService(); SClient sClient = dataMinerService.getClient(); Operator operator = sClient - .getOperatorById("org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.LISTDBINFO"); + .getOperatorById(OperatorId.LISTDBINFO.toString()); if (operator == null) { logger.error("Operator not found"); diff --git a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/ListDBNameTest.java b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/ListDBNameTest.java index 917e8cf..becc44d 100644 --- a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/ListDBNameTest.java +++ b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/ListDBNameTest.java @@ -37,7 +37,7 @@ public class ListDBNameTest extends TestCase { DataMinerService dataMinerService=new DataMinerService(); SClient sClient = dataMinerService.getClient(); Operator operator = sClient - .getOperatorById("org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.LISTDBNAMES"); + .getOperatorById(OperatorId.LISTDBNAMES.toString()); if (operator == null) { logger.error("Operator not found"); diff --git a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/ListDBSchemaTest.java b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/ListDBSchemaTest.java index 6ec71f8..df1e022 100644 --- a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/ListDBSchemaTest.java +++ b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/ListDBSchemaTest.java @@ -38,7 +38,7 @@ public class ListDBSchemaTest extends TestCase { DataMinerService dataMinerService=new DataMinerService(); SClient sClient = dataMinerService.getClient(); Operator operator = sClient - .getOperatorById("org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.LISTDBSCHEMA"); + .getOperatorById(OperatorId.LISTDBSCHEMA.toString()); if (operator == null) { logger.error("Operator not found"); diff --git a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/ListTablesTest.java b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/ListTablesTest.java index 7c041fb..374a980 100644 --- a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/ListTablesTest.java +++ b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/ListTablesTest.java @@ -35,10 +35,10 @@ public class ListTablesTest extends TestCase { if (Constants.TEST_ENABLE) { logger.debug("Test ListTables"); try { - DataMinerService dataMinerService=new DataMinerService(); + DataMinerService dataMinerService = new DataMinerService(); SClient sClient = dataMinerService.getClient(); Operator operator = sClient - .getOperatorById("org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.LISTTABLES"); + .getOperatorById(OperatorId.LISTTABLES.toString()); if (operator == null) { logger.error("Operator not found"); diff --git a/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/OperatorId.java b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/OperatorId.java new file mode 100644 index 0000000..be269ef --- /dev/null +++ b/src/test/java/org/gcube/data/analysis/dataminermanagercl/test/OperatorId.java @@ -0,0 +1,46 @@ +package org.gcube.data.analysis.dataminermanagercl.test; + +/** + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public enum OperatorId { + DBSCAN( + "org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.clusterers.DBSCAN"), CSQUARE_COLUMN_CREATOR( + "org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.CSQUARE_COLUMN_CREATOR"), BIONYM_LOCAL( + "org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.BIONYM_LOCAL"), LISTDBINFO( + "org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.LISTDBINFO"), LISTDBNAMES( + "org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.LISTDBNAMES"), LISTDBSCHEMA( + "org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.LISTDBSCHEMA"), LISTTABLES( + "org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses.transducerers.LISTTABLES"); + ; + /** + * @param text + */ + private OperatorId(final String id) { + this.id = id; + } + + private final String id; + + @Override + public String toString() { + return id; + } + + public String getLabel() { + return id; + } + + public static OperatorId getOperatorIdFromId(String id) { + for (OperatorId operatorId : values()) { + if (operatorId.id.compareToIgnoreCase(id) == 0) { + return operatorId; + } + } + return null; + } + +}