From 4c844011906dd5d56ce4814b996781b88cccee81 Mon Sep 17 00:00:00 2001 From: Lucio Lelii Date: Mon, 8 Jan 2018 11:52:10 +0000 Subject: [PATCH] git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/data-analysis/wps@161984 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../analysis/wps/GetCapabilitiesBuilder.java | 107 +++++++++++++----- 1 file changed, 77 insertions(+), 30 deletions(-) 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; } + + }