diff --git a/src/main/java/org/gcube/data/analysis/wps/GetCapabilitiesBuilder.java b/src/main/java/org/gcube/data/analysis/wps/GetCapabilitiesBuilder.java
index f7c3f56..98da539 100644
--- a/src/main/java/org/gcube/data/analysis/wps/GetCapabilitiesBuilder.java
+++ b/src/main/java/org/gcube/data/analysis/wps/GetCapabilitiesBuilder.java
@@ -1,6 +1,7 @@
package org.gcube.data.analysis.wps;
import java.io.InputStream;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
@@ -8,9 +9,10 @@ import java.util.Map;
import java.util.Set;
import org.apache.commons.io.IOUtils;
+import org.gcube.common.authorization.library.provider.AuthorizationProvider;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.data.analysis.wps.repository.GcubeAlgorithmRepository;
-import org.gcube.dataanalysis.wps.statisticalmanager.synchserver.algorithms.AlgorithmClassification;
+import org.gcube.dataanalysis.ecoengine.processing.factories.ProcessorsFactory;
import org.gcube.dataanalysis.wps.statisticalmanager.synchserver.infrastructure.InfrastructureDialoguer;
import org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mapping.ConfigurationManager;
import org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mapping.TokenManager;
@@ -20,14 +22,43 @@ import org.slf4j.LoggerFactory;
public class GetCapabilitiesBuilder {
- public static final String processString = "\n\t#CLASS#\n\t#TITLE#\n";
-
+ public static String processString = "\n\t#CLASS#\n\t#TITLE#\n";
+
private static final Logger LOGGER= LoggerFactory.getLogger(GetCapabilitiesBuilder.class);
-
-
+
+ public String getClassification(String algorithmName, ConfigurationManager configManager) throws Exception{
+ //get algorithms classification:
+ LOGGER.debug("Searching for a classification of "+algorithmName);
+ HashMap> algorithmsClassification = ProcessorsFactory.getAllFeaturesUser(configManager.getConfig());
+ String rightClassification = "Others";
+ for (String classification:algorithmsClassification.keySet()){
+ List algorithms = algorithmsClassification.get(classification);
+ if (algorithms.contains(algorithmName)){
+ LOGGER.debug("Found classification"+classification);
+ return classification;
+ }
+ }
+ LOGGER.debug("No classification found for "+algorithmName);
+ return rightClassification;
+ }
+
public String buildGetCapabilities(Map parameters) throws Exception {
LinkedHashMap basicInputs = new LinkedHashMap();
+ //DONE get scope and username from SmartGears to build the get capabilities
+ /* OLD CODE
+ if (parameters != null) {
+ if (parameters.get(ConfigurationManager.scopeParameter) != null)
+ basicInputs.put(ConfigurationManager.scopeParameter, parameters.get(ConfigurationManager.scopeParameter)[0]);
+ if (parameters.get(ConfigurationManager.usernameParameter) != null)
+ basicInputs.put(ConfigurationManager.usernameParameter, parameters.get(ConfigurationManager.usernameParameter)[0]);
+ } else {// case for testing purposes only
+ if (AbstractEcologicalEngineMapper.simulationMode){
+ basicInputs.put(ConfigurationManager.scopeParameter, ConfigurationManager.defaultScope);
+ basicInputs.put(ConfigurationManager.usernameParameter, ConfigurationManager.defaultUsername);
+ }
+ }
+ */
ConfigurationManager configManager = new ConfigurationManager();
TokenManager tokenm = new TokenManager();
tokenm.getCredentials();
@@ -37,50 +68,64 @@ public class GetCapabilitiesBuilder {
basicInputs.put(ConfigurationManager.scopeParameter, scope);
basicInputs.put(ConfigurationManager.usernameParameter, username);
basicInputs.put(ConfigurationManager.tokenParameter, token);
-
+
configManager.configAlgorithmEnvironment(basicInputs);
LOGGER.debug("Initializing Capabilities Skeleton in scope " + configManager.getScope() + " with user " + configManager.getUsername());
InputStream is = this.getClass().getClassLoader().getResourceAsStream("templates/wpsCapabilitiesSkeleton.xml");
String stringTemplate = IOUtils.toString(is, "UTF-8");
-
+
//TODO: GET HOSTNAME AND PORT from container
String host = WPSConfig.getInstance().getWPSConfig().getServer().getHostname();
String port = WPSConfig.getInstance().getWPSConfig().getServer().getHostport();
stringTemplate = stringTemplate.replace("#HOST#", host).replace("#PORT#", port);
LOGGER.debug("Host: " + host + " Port: " + port);
+
+ LinkedHashMap allalgorithms = new LinkedHashMap();
+ /*
+ String packageS = "org.gcube.dataanalysis.wps.statisticalmanager.synchserver.mappedclasses";
+ List> classes = null;
+ try{
+ LOGGER.debug("Taking classes from /classes");
+ classes = GetCapabilitiesChecker.find(packageS);
+ }catch(Exception e){
+ LOGGER.debug("Taking classes from the Jar");
+ classes=GetCapabilitiesChecker.getClassesInSamePackageFromJar(packageS);
+ }*/
+
+ LOGGER.info("using classloader class {} ",Thread.currentThread().getContextClassLoader().getClass().getSimpleName());
+
+
+ Set> algorithmsClass = GcubeAlgorithmRepository.getAllAlgorithms();
+
+ LOGGER.info("class found with annotation Algorithm are {}",algorithmsClass.size());
+
+ for (Class> classfind : algorithmsClass) {
+ org.n52.wps.algorithm.annotation.Algorithm algorithmInfo = classfind.getAnnotation(org.n52.wps.algorithm.annotation.Algorithm.class);
+ if (algorithmInfo != null) {
+ LOGGER.debug("Retrieving local declared Algorithm: " + algorithmInfo.title());
+ allalgorithms.put(algorithmInfo.title(), classfind.getName());
+ }
+ }
LOGGER.debug("Getting algorithms from the infrastructure");
InfrastructureDialoguer dialoguer = new InfrastructureDialoguer(configManager.getScope());
List algorithmsInScope = dialoguer.getAlgorithmsInScope();
LOGGER.debug("Found {} algorithms in scope {} ",algorithmsInScope.size() ,ScopeProvider.instance.get());
StringBuffer capabilities = new StringBuffer();
-
+
//TO eliminate duplicate coming from IS
Set algorithmsSet = new HashSet(algorithmsInScope);
-
-
- LOGGER.info("using classloader class {} ",Thread.currentThread().getContextClassLoader().getClass().getSimpleName());
-
- Set> algorithmsClass = GcubeAlgorithmRepository.getAllAlgorithms();
-
- LOGGER.info("class found with annotation Algorithm are {}",algorithmsClass.size());
-
- for (Class> classfound : algorithmsClass) {
- org.n52.wps.algorithm.annotation.Algorithm algorithmInfo = classfound.getAnnotation(org.n52.wps.algorithm.annotation.Algorithm.class);
- if (algorithmInfo != null) {
- LOGGER.debug("Retrieving local declared Algorithm: " + algorithmInfo.title());
- String classification = "Others";
- if (classfound.isAnnotationPresent(AlgorithmClassification.class))
- classification = classfound.getAnnotation(AlgorithmClassification.class).value();
-
- if (algorithmsSet.contains(algorithmInfo.title())){
- String algorithmTitle = String.format("%s:%s", classification, algorithmInfo.title());
- capabilities.append(processString.replace("#TITLE#", algorithmTitle).replace("#CLASS#", classfound.getName()));
- }
+ algorithmsSet.addAll(dialoguer.getPrivateAlgorithmsInScope(AuthorizationProvider.instance.get().getClient().getId()));
+
+ for (String algorithmInScope : algorithmsSet ) {
+ String classAlgorithm = allalgorithms.get(algorithmInScope);
+ if (classAlgorithm != null) {
+ LOGGER.debug("Approving " + classAlgorithm + " to capabilities ");
+ String algorithmTitle = getClassification(algorithmInScope, configManager)+":"+algorithmInScope;
+// String algorithmTitle = algorithmInScope;
+ capabilities.append(processString.replace("#TITLE#", algorithmTitle).replace("#CLASS#", classAlgorithm));
}
-
-
}
stringTemplate = stringTemplate.replace("#PROCESSES#", capabilities.toString());
@@ -88,4 +133,6 @@ public class GetCapabilitiesBuilder {
return stringTemplate;
}
+
+
}