diff --git a/.settings/org.eclipse.wst.validation.prefs b/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 0000000..04cad8c --- /dev/null +++ b/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,2 @@ +disabled=06target +eclipse.preferences.version=1 diff --git a/pom.xml b/pom.xml index 1d69431..89fa6c9 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ org.gcube.portlets.admin rmp-common-library - 1.2.0-SNAPSHOT + 2.0.0-SNAPSHOT Resource Management Library gCube Resource Management Library is a common library containing shared code for Information System Operations @@ -24,7 +24,7 @@ - 2.4.0 + 2.5.1 distro 1.6 @@ -61,11 +61,33 @@ [2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT) provided + + + + + + + + org.gcube.resources.discovery + ic-client + 1.0.1-SNAPSHOT + org.gcube.resourcemanagement - resource-manager-stubs - [2.0.1-SNAPSHOT, 3.0.0-SNAPSHOT) + resourcemanager-client + [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + + org.gcube.resources + registry-publisher + [1.1.0-SNAPSHOT, 2.0.0-SNAPSHOT) + + + org.gcube.resourcemanagement + ghn-manager-client + [1.1.0-SNAPSHOT, 2.0.0-SNAPSHOT) + + org.gcube.resourcemanagement ghnmanager-stubs diff --git a/src/main/java/org/gcube/resourcemanagement/support/client/views/ResourceTypeDecorator.java b/src/main/java/org/gcube/resourcemanagement/support/client/views/ResourceTypeDecorator.java index f06e366..485e9bb 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/client/views/ResourceTypeDecorator.java +++ b/src/main/java/org/gcube/resourcemanagement/support/client/views/ResourceTypeDecorator.java @@ -24,53 +24,52 @@ public enum ResourceTypeDecorator { /**************************************** * RESOURCES IN THE TREE ****************************************/ - GHN("gCube Hosting Node", "ghn-icon"), - RunningInstance("Running Instances", "runninginstance-icon"), - Service("Software", "service-icon"), - VIEW("View", "metadatacollection-icon"), - GenericResource("Generic Resources", "genericresource-icon"), - Collection("Collection", "collection-icon"), - WSResource("WSResource", "wsresources-icon"), - Empty("Empty Tree", "empty-icon"), - RuntimeResource("Runtime Resources", "runtimeresource-icon"), + GHN("gCube Hosting Node", "ghn-icon","Hosting Node"), + RunningInstance("Running Instances", "runninginstance-icon", "GCore Endpoint"), + Service("Software", "service-icon","Software"), + VIEW("View", "metadatacollection-icon",""), + GenericResource("Generic Resources", "genericresource-icon","Generic Resource"), + Collection("Collection", "collection-icon",""), + WSResource("WSResource", "wsresources-icon",""), + Empty("Empty Tree", "empty-icon",""), + RuntimeResource("Runtime Resources", "runtimeresource-icon", "Service Endpoint"), /**************************************** * Other components ****************************************/ // For deploying services - similar to the software but with an // extension to handle checkbox for install - InstallableSoftware("InstallableSoftware", "empty-icon"), + InstallableSoftware("InstallableSoftware", "empty-icon",""), // In the taskbar for handlig the refresh of deployment reports - DeployReport("Deploy Report", "report-big-icon"), - AddScopeReport("Add Scope Report", "report-big-icon"), + DeployReport("Deploy Report", "report-big-icon",""), + AddScopeReport("Add Scope Report", "report-big-icon",""), /**************************************** * Related resources ****************************************/ - GHNRelated("Running Instances", "runninginstance-icon"), - ServiceRelated("Running Instances", "runninginstance-icon"), - RunningInstanceRelated("Running Instances", "runninginstance-icon"), + GHNRelated("Running Instances", "runninginstance-icon",""), + ServiceRelated("Running Instances", "runninginstance-icon",""), + RunningInstanceRelated("Running Instances", "runninginstance-icon",""), /**************************************** * Models for SWEEPER ***************************************/ - Sweeper_GHN("gCube Hosting Node", "ghn-icon"), - Sweeper_RI("Running Instance", "runninginstance-icon"), - Sweeper_RI_Orphan("Orphan Running Instance", "orphan-runninginstance-icon"), - Sweeper_GHN_Expired("Expired gHN", "expired-ghn-icon"), - Sweeper_GHN_Dead("Dead gHN", "dead-ghn-icon"); - + Sweeper_GHN("gCube Hosting Node", "ghn-icon",""), + Sweeper_RI("Running Instance", "runninginstance-icon",""), + Sweeper_RI_Orphan("Orphan Running Instance", "orphan-runninginstance-icon",""), + Sweeper_GHN_Expired("Expired gHN", "expired-ghn-icon",""), + Sweeper_GHN_Dead("Dead gHN", "dead-ghn-icon",""); + private String fwsName = null; private String label = null; private String icon = null; - ResourceTypeDecorator( - final String label, - final String icon) { + ResourceTypeDecorator(final String label, final String icon, final String fwsName) { this.label = label; this.icon = icon; + this.fwsName = fwsName; } public String getLabel() { @@ -80,4 +79,10 @@ public enum ResourceTypeDecorator { public String getIcon() { return this.icon; } + + public String getFWSName() { + if (this.fwsName == null || this.fwsName.equals("")) + return this.label; + return this.fwsName; + } } diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/ISClientRequester.java b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/ISClientRequester.java index f228710..96e3a28 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/ISClientRequester.java +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/ISClientRequester.java @@ -16,9 +16,12 @@ package org.gcube.resourcemanagement.support.server.gcube; +import static org.gcube.resources.discovery.icclient.ICFactory.client; + import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.FileInputStream; +import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringReader; @@ -30,6 +33,8 @@ import java.util.Map; import java.util.StringTokenizer; import java.util.Vector; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Templates; import javax.xml.transform.Transformer; @@ -39,17 +44,16 @@ import javax.xml.transform.stream.StreamSource; import org.gcube.common.core.contexts.GHNContext; import org.gcube.common.core.informationsystem.client.ISClient; -import org.gcube.common.core.informationsystem.client.QueryParameter; import org.gcube.common.core.informationsystem.client.XMLResult; -import org.gcube.common.core.informationsystem.client.XMLResult.ISResultEvaluationException; import org.gcube.common.core.informationsystem.client.queries.GCUBEGenericQuery; import org.gcube.common.core.scope.GCUBEScope; import org.gcube.common.core.utils.logging.GCUBEClientLog; +import org.gcube.common.resources.gcore.utils.XPathHelper; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.scope.impl.ScopeBean; import org.gcube.resourcemanagement.support.client.views.ResourceTypeDecorator; import org.gcube.resourcemanagement.support.server.gcube.queries.QueryLoader; import org.gcube.resourcemanagement.support.server.gcube.queries.QueryLocation; - - import org.gcube.resourcemanagement.support.server.managers.scope.ScopeManager; import org.gcube.resourcemanagement.support.server.utils.ServerConsole; import org.gcube.resourcemanagement.support.shared.plugins.GenericResourcePlugin; @@ -57,10 +61,16 @@ import org.gcube.resourcemanagement.support.shared.plugins.TMPluginFormField; import org.gcube.resourcemanagement.support.shared.types.Tuple; import org.gcube.resourcemanagement.support.shared.types.datamodel.CompleteResourceProfile; import org.gcube.resourcemanagement.support.shared.types.datamodel.ResourceDescriptor; +import org.gcube.resources.discovery.client.api.DiscoveryClient; +import org.gcube.resources.discovery.client.queries.api.Query; +import org.gcube.resources.discovery.client.queries.impl.QueryBox; +import org.gcube.resources.discovery.client.queries.impl.QueryTemplate; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; /** @@ -78,43 +88,47 @@ public class ISClientRequester { CACHE.empty(); } - private static final ArrayList getResourceTypes( - final CacheManager status, - final GCUBEScope queryScope) - throws Exception { - List results = null; - ISClient client = GHNContext.getImplementation(ISClient.class); - GCUBEGenericQuery isQuery = null; - isQuery = client.getQuery(GCUBEGenericQuery.class); - isQuery.setExpression(QueryLoader.getQuery(QueryLocation.GET_TREE_TYPES)); + private static final ArrayList getResourceTypes(final CacheManager status, final ScopeBean queryScope) throws Exception { + + List resultz = null; + + //set the scope + String currScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(queryScope.toString()); + + Query isQuery = new QueryBox(QueryLoader.getQuery(QueryLocation.GET_TREE_TYPES)); + DiscoveryClient client = client(); // Handles the cache ISQueryCacheKeyT cacheKey = new ISQueryCacheKeyT(queryScope.toString(), - isQuery.getExpression(), + isQuery.expression(), "getResourcesTypes"); if (status.isUsingCache() && CACHE.contains(cacheKey) && CACHE.get(cacheKey) != null) { - results = CACHE.get(cacheKey); + resultz = CACHE.get(cacheKey); } else { try { - results = client.execute(isQuery, queryScope); + + resultz = client.submit(isQuery); if (status.isUsingCache()) { - CACHE.insert(cacheKey, results); + CACHE.insert(cacheKey, resultz); } } catch (Exception e) { throw new Exception(e.getMessage()); } } - if (results == null || results.size() == 0) { + if (resultz == null || resultz.size() == 0) { return null; } String type = null; ArrayList types = new ArrayList(); try { - for (XMLResult elem : results) { - - type = elem.evaluate("/type/text()").get(0); + for (String elem : resultz) { + DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Node node = docBuilder.parse(new InputSource(new StringReader(elem))).getDocumentElement(); + XPathHelper helper = new XPathHelper(node); + type = helper.evaluate("/type/text()").get(0); if (type != null && type.trim().length() > 0) { types.add(type.trim()); } @@ -122,37 +136,39 @@ public class ISClientRequester { //**** CHANGES TO KNOW IF VIEWS AND GCUBECollection are present types.remove("MetadataCollection"); - isQuery.setExpression("declare namespace vm = 'http://gcube-system.org/namespaces/contentmanagement/viewmanager';"+ + isQuery = new QueryBox("declare namespace vm = 'http://gcube-system.org/namespaces/contentmanagement/viewmanager';"+ "declare namespace gc = 'http://gcube-system.org/namespaces/common/core/porttypes/GCUBEProvider';"+ "declare namespace is = 'http://gcube-system.org/namespaces/informationsystem/registry';" + "for $data in collection(\"/db/Properties\")//Document, $view in $data/Data where $view/gc:ServiceName/string() eq \"ViewManager\" " + " and $view/gc:ServiceClass/string() eq \"ContentManagement\" and count($view//vm:View)>0 return true"); - if (client.execute(isQuery, queryScope).size() > 0) + if (client.submit(isQuery).size() > 0) types.add("VIEW"); - isQuery.setExpression("declare namespace gc = 'http://gcube-system.org/namespaces/common/core/porttypes/GCUBEProvider';"+ + isQuery = new QueryBox("declare namespace gc = 'http://gcube-system.org/namespaces/common/core/porttypes/GCUBEProvider';"+ "declare namespace is = 'http://gcube-system.org/namespaces/informationsystem/registry';" + "for $data in collection(\"/db/Profiles/GenericResource\")//Document/Data/is:Profile/Resource where $data/Profile/SecondaryType eq \"GCUBECollection\" " + " return true"); - if (client.execute(isQuery, queryScope).size() > 0) + if (client.submit(isQuery).size() > 0) types.add("Collection"); - } catch (ISResultEvaluationException e) { - _log.error("error during getResourcesTypes"); } catch (IndexOutOfBoundsException e) { // ignore exception } - + ScopeProvider.instance.set(currScope); return types; } - private static final ArrayList getResourceSubTypes( - final CacheManager status, - final GCUBEScope queryScope, - final String resourceType) - throws Exception { + /** + * + * @param status + * @param queryScope + * @param resourceType + * @return + * @throws Exception + */ + private static final ArrayList getResourceSubTypes(final CacheManager status, final ScopeBean queryScope, final String resourceType) throws Exception { ArrayList subtypes = new ArrayList(); if (resourceType.equals("Collection")) { @@ -165,52 +181,58 @@ public class ISClientRequester { return subtypes; } - List results = null; - ISClient client = GHNContext.getImplementation(ISClient.class); - GCUBEGenericQuery isQuery = null; - isQuery = client.getQuery(GCUBEGenericQuery.class); - isQuery.setExpression(QueryLoader.getQuery(QueryLocation.GET_TREE_SUBTYPES)); - isQuery.addParameters(new QueryParameter("RES_TYPE", resourceType)); + List resultz = null; + + //set the scope + String currScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(queryScope.toString()); + + QueryTemplate isQuery = new QueryTemplate(QueryLoader.getQuery(QueryLocation.GET_TREE_SUBTYPES)); + DiscoveryClient client = client(); + + isQuery.addParameter("RES_TYPE", resourceType); + isQuery.addParameter("SUBTYPE", "{$subtype}"); // Handles the cache ISQueryCacheKeyT cacheKey = new ISQueryCacheKeyT(queryScope.toString(), - isQuery.getExpression(), + isQuery.expression(), "getResourcesSubTypes"); if (status.isUsingCache() && CACHE.contains(cacheKey) && CACHE.get(cacheKey) != null) { - results = CACHE.get(cacheKey); + resultz = CACHE.get(cacheKey); } else { try { - results = client.execute(isQuery, queryScope); + resultz = client.submit(isQuery); if (status.isUsingCache()) { - CACHE.insert(cacheKey, results); + CACHE.insert(cacheKey, resultz); } } catch (Exception e) { throw new Exception(e.getMessage()); } } - if (results == null || results.size() == 0) { + if (resultz == null || resultz.size() == 0) return null; - } - String subtype = null; - - for (XMLResult elem : results) { + for (String elem : resultz) { try { - subtype = elem.evaluate("/subtype/text()").get(0); + DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Node node = docBuilder.parse(new InputSource(new StringReader(elem))).getDocumentElement(); + XPathHelper helper = new XPathHelper(node); + String subtype = helper.evaluate("/subtype/text()").get(0); if (subtype != null && subtype.trim().length() > 0) { subtypes.add(subtype.trim()); } - } catch (ISResultEvaluationException e) { - _log.error("error during getResourcesTypes"); + } catch (IndexOutOfBoundsException e) { // ignore exception } } + ScopeProvider.instance.set(currScope); return subtypes; } + /** * For all the resource in the scope retrieves their * (type, subtype) values. @@ -218,10 +240,7 @@ public class ISClientRequester { * @return a list of string tuples (type, subtype) * @throws Exception */ - public static final HashMap> getResourcesTree( //qui si perde - final CacheManager status, - final GCUBEScope queryScope) - throws Exception { + public static final HashMap> getResourcesTree(final CacheManager status, final ScopeBean queryScope) throws Exception { HashMap> retval = new HashMap>(); // Loads the Resources @@ -240,35 +259,32 @@ public class ISClientRequester { } // Loads the WSResources - // This types is statically handled since it is a particular - // case of resource. - List results = null; - ISClient client = GHNContext.getImplementation(ISClient.class); - GCUBEGenericQuery isQuery = null; - isQuery = client.getQuery(GCUBEGenericQuery.class); - isQuery.setExpression(QueryLoader.getQuery(QueryLocation.GET_WSRES_TYPES)); - results = client.execute(isQuery, queryScope); - if (results == null || results.size() == 0) { + // This types is statically handled since it is a particular case of resource. + + + List resultz = null; + + //set the scope + String currScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(queryScope.toString()); + + Query isQuery = new QueryBox(QueryLoader.getQuery(QueryLocation.GET_WSRES_TYPES)); + DiscoveryClient client = client(); + + resultz = client.submit(isQuery); + if (resultz == null || resultz.size() == 0) { return retval; } subtypes = new ArrayList(); - for (XMLResult elem : results) { + for (String elem : resultz) { subtypes.add(elem.toString()); } retval.put("WSResource", subtypes); + ScopeProvider.instance.set(currScope); return retval; } - public static final List getRelatedResources( - final CacheManager status, - final String type, - final String id, - final GCUBEScope queryScope) - throws Exception { - ISClient client = GHNContext.getImplementation(ISClient.class); - GCUBEGenericQuery isQuery = null; - isQuery = client.getQuery(GCUBEGenericQuery.class); - + public static final List getRelatedResources(final CacheManager status, final String type, final String id, final ScopeBean queryScope) throws Exception { QueryLocation queryPath = null; try { queryPath = QueryLocation.valueOf("LIST_RELATED_" + type); @@ -276,31 +292,38 @@ public class ISClientRequester { ServerConsole.error(LOG_PREFIX, "Getting the resource query.", e); throw new Exception(e.getMessage()); } - isQuery.setExpression(QueryLoader.getQuery(queryPath)); - isQuery.addParameters(new QueryParameter("RES_ID", id.trim())); - ISQueryCacheKeyT cacheKey = new ISQueryCacheKeyT(queryScope.toString(), - isQuery.getExpression(), - "getResourceRelated"); + //set the scope + String currScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(queryScope.toString()); - List results = null; + QueryTemplate isQuery = new QueryTemplate(QueryLoader.getQuery(queryPath)); + DiscoveryClient client = client(); + + isQuery.addParameter("RES_ID", id.trim()); + + + + ISQueryCacheKeyT cacheKey = new ISQueryCacheKeyT(queryScope.toString(), isQuery.expression(), "getResourceRelated"); + + List resultz = null; // Handle cache if (status.isUsingCache() && CACHE.contains(cacheKey) && CACHE.get(cacheKey) != null) { - results = CACHE.get(cacheKey); + resultz = CACHE.get(cacheKey); } else { - results = client.execute(isQuery, queryScope); + resultz = client.submit(isQuery); if (status.isUsingCache()) { - CACHE.insert(cacheKey, results); + CACHE.insert(cacheKey, resultz); } } - if (results == null || results.size() == 0) { + if (resultz == null || resultz.size() == 0) { return null; } // ENDOF Handle cache - List retval = new Vector(); + List retval = new ArrayList(); - for (XMLResult elem : results) { + for (String elem : resultz) { // Removes the resources with no ID or empty try { String toAdd = elem.toString(); @@ -313,71 +336,83 @@ public class ISClientRequester { ServerConsole.debug(LOG_PREFIX, "[getResourcesRelated] found and invalid resource"); } } - //ServerConsole.trace(LOG_PREFIX, "Retrieved (" + retval.size() + ") ServiceDetails for type: " + type); + ScopeProvider.instance.set(currScope); + ServerConsole.trace(LOG_PREFIX, "Retrieved (" + retval.size() + ") ServiceDetails for type: " + type); return retval; } - - public static final List getResourcesByType( - final CacheManager status, - final GCUBEScope queryScope, - final String type, - final String subType) - throws Exception { - ISClient client = GHNContext.getImplementation(ISClient.class); - GCUBEGenericQuery isQuery = null; - isQuery = client.getQuery(GCUBEGenericQuery.class); + /** + * + * @param status + * @param queryScope + * @param type + * @param subType + * @return + * @throws Exception + */ + public static final List getResourcesByType(final CacheManager status, final ScopeBean queryScope, final String type, final String subType) throws Exception { QueryLocation queryPath = null; + QueryLocation returnPath = null; try { if (type.equals(ResourceTypeDecorator.WSResource.name())) { queryPath = QueryLocation.GET_WSRES_DETAILS_BYSUBTYPE; } else { queryPath = QueryLocation.valueOf("LIST_" + type); + returnPath = QueryLocation.valueOf("RETURN_" + type); + } } catch (Exception e) { ServerConsole.error(LOG_PREFIX, "Getting the resource query.", e); throw new Exception(e.getMessage()); } - isQuery.setExpression(QueryLoader.getQuery(queryPath)); + //set the scope + String currScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(queryScope.toString()); + + QueryTemplate isQuery = new QueryTemplate(QueryLoader.getQuery(queryPath)); + DiscoveryClient client = client(); + if (type.equals(ResourceTypeDecorator.WSResource.name())) { if (subType != null && subType.length() > 0) { - isQuery.addParameters(new QueryParameter("RES_SUBTYPE", - subType.trim())); + isQuery.addParameter("RES_SUBTYPE", subType.trim()); } } else { if (subType != null && subType.length() > 0) { if (subType.equalsIgnoreCase("User") || subType.equalsIgnoreCase("System")) { - isQuery.addParameters(new QueryParameter("RES_SUBTYPE", " and $profiles/Profile/Body/CollectionInfo/user/text() = \"" + ((subType.trim().equals("User")) ? "true" : "false") + "\"")); + isQuery.addParameter("RES_SUBTYPE", " and $profiles/Profile/Body/CollectionInfo/user/text() = \"" + ((subType.trim().equals("User")) ? "true" : "false") + "\""); } else - isQuery.addParameters(new QueryParameter("RES_SUBTYPE", "where $subtype = \"" + subType.trim() + "\"")); + isQuery.addParameter("RES_SUBTYPE", "where $subtype = \"" + subType.trim() + "\""); } } + //add the return statement + isQuery.addParameter("RESOURCE", QueryLoader.getQuery(returnPath)); - ISQueryCacheKeyT cacheKey = new ISQueryCacheKeyT(queryScope.toString(), - isQuery.getExpression(), - "getResourcesTypes"); + ISQueryCacheKeyT cacheKey = new ISQueryCacheKeyT(queryScope.toString(), isQuery.expression(), "getResourcesTypes"); - List results = null; + List resultz = null; if (status.isUsingCache() && CACHE.contains(cacheKey) && CACHE.get(cacheKey) != null) { - results = CACHE.get(cacheKey); + resultz = CACHE.get(cacheKey); } else { - results = client.execute(isQuery, queryScope); + resultz = client.submit(isQuery); if (status.isUsingCache()) { - CACHE.insert(cacheKey, results); + CACHE.insert(cacheKey, resultz); } } - if (results == null || results.size() == 0) { + if (resultz == null || resultz.size() == 0) { return null; } List retval = new Vector(); - for (XMLResult elem : results) { + for (String elem : resultz) { // Removes the resources with no ID or empty + DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Node node = docBuilder.parse(new InputSource(new StringReader(elem))).getDocumentElement(); + XPathHelper helper = new XPathHelper(node); try { - if (elem.evaluate("//ID").get(0) != null && elem.evaluate("//ID").get(0).trim().length() > 0) { + if (helper.evaluate("//ID").get(0) != null && helper.evaluate("//ID").get(0).trim().length() > 0) { retval.add(elem.toString()); //ServerConsole.debug("", elem.toString());// Print the result } else { @@ -389,45 +424,54 @@ public class ISClientRequester { } } //ServerConsole.trace(LOG_PREFIX, "Retrieved (" + retval.size() + ") ServiceDetails for type: " + type); + ScopeProvider.instance.set(currScope); return retval; } + /** + * @param queryScope + * @param type + * @param subType + * @param additionalMaps + * @return + * @throws Exception + */ + public static final List getResourceModels(final ScopeBean queryScope, final String type, final String subType, final List> additionalMaps) throws Exception { + + //set the scope + String currScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(queryScope.toString()); + + QueryTemplate isQuery = null; + DiscoveryClient client = client(); - public static final List getResourceModels( - final GCUBEScope queryScope, - final String type, - final String subType, - final List> additionalMaps) - throws Exception { - ISClient client = GHNContext.getImplementation(ISClient.class); - GCUBEGenericQuery isQuery = null; - isQuery = client.getQuery(GCUBEGenericQuery.class); if (subType != null && subType.trim().length() > 0) { - isQuery.setExpression(QueryLoader.getQuery(QueryLocation.GET_RES_DETAILS_BYSUBTYPE)); - isQuery.addParameters( - new QueryParameter("RES_TYPE", type) - ); - isQuery.addParameters( - new QueryParameter("RES_SUBTYPE", subType) - ); + isQuery = new QueryTemplate(QueryLoader.getQuery(QueryLocation.GET_RES_DETAILS_BYSUBTYPE)); + isQuery.addParameter("RES_TYPE", type.trim()); + isQuery.addParameter("RES_SUBTYPE", subType.trim()); + //add the return statement + isQuery.addParameter("RESOURCE", QueryLoader.getQuery(QueryLocation.RETURN_GET_RES_DETAILS_BYSUBTYPE)); } else { - isQuery.setExpression(QueryLoader.getQuery(QueryLocation.GET_RES_DETAILS_BYTYPE)); - isQuery.addParameters( - new QueryParameter("RES_TYPE", type) - ); + isQuery = new QueryTemplate(QueryLoader.getQuery(QueryLocation.GET_RES_DETAILS_BYTYPE)); + isQuery.addParameter("RES_TYPE", type); + isQuery.addParameter("RESOURCE", QueryLoader.getQuery(QueryLocation.RETURN_GET_RES_DETAILS_BYTYPE)); } - List results = client.execute(isQuery, queryScope); + List resultz = client.submit(isQuery); List retval = new Vector(); ResourceDescriptor toAdd = null; - for (XMLResult elem : results) { + for (String elem : resultz) { // Removes the resources with no ID or empty try { - if (elem.evaluate("//ID").get(0) != null) { + DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Node node = docBuilder.parse(new InputSource(new StringReader(elem))).getDocumentElement(); + XPathHelper helper = new XPathHelper(node); + + if (helper.evaluate("//ID").get(0) != null) { toAdd = new ResourceDescriptor( - elem.evaluate("//Type/text()").get(0), - elem.evaluate("//SubType/text()").get(0), - elem.evaluate("//ID/text()").get(0), - elem.evaluate("//Name/text()").get(0)); + helper.evaluate("//Type/text()").get(0), + helper.evaluate("//SubType/text()").get(0), + helper.evaluate("//ID/text()").get(0), + helper.evaluate("//Name/text()").get(0)); // Additional mappings can be defined by the requester. // e.g. new Tuple("description", "//Profile/Description/text()"); @@ -435,7 +479,7 @@ public class ISClientRequester { for (Tuple map : additionalMaps) { try { toAdd.addProperty(map.get(0), - elem.evaluate(map.get(1)).get(0)); + helper.evaluate(map.get(1)).get(0)); } catch (final Exception e) { toAdd.addProperty(map.get(0), ""); @@ -450,55 +494,68 @@ public class ISClientRequester { } } //ServerConsole.trace(LOG_PREFIX, "Retrieved (" + retval.size() + ") ServiceDetails for type: " + type); + ScopeProvider.instance.set(currScope); return retval; } + /** + * + * @param queryScope + * @return + * @throws Exception + */ + public static final List getWSResources(final ScopeBean queryScope) throws Exception { - public static final List getWSResources( - final GCUBEScope queryScope) - throws Exception { - ISClient client = GHNContext.getImplementation(ISClient.class); - GCUBEGenericQuery isQuery = null; - isQuery = client.getQuery(GCUBEGenericQuery.class); - isQuery.setExpression(QueryLoader.getQuery(QueryLocation.GET_WSRES_DETAILS_BYTYPE)); - List results = client.execute(isQuery, queryScope); + List resultz = null; + + //set the scope + String currScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(queryScope.toString()); + + Query isQuery = new QueryBox(QueryLoader.getQuery(QueryLocation.GET_WSRES_DETAILS_BYTYPE)); + DiscoveryClient client = client(); List retval = new Vector(); + resultz = client.submit(isQuery); - for (XMLResult elem : results) { + for (String elem : resultz) { retval.add(elem.toString()); } //ServerConsole.trace(LOG_PREFIX, "Retrieved (" + retval.size() + ") ServiceDetails for type: " + ResourceTypeDecorator.WSResource.name()); + ScopeProvider.instance.set(currScope); return retval; } + /** + * + * @param xmlFilePath + * @param queryScope + * @param resType + * @param resID + * @return + * @throws Exception + */ + public static final CompleteResourceProfile getResourceByID(String xmlFilePath, ScopeBean queryScope, String resType, String resID) throws Exception { + + //set the scope + String currScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(queryScope.toString()); + + QueryTemplate isQuery = null; + DiscoveryClient client = client(); + - public static final CompleteResourceProfile getResourceByID( - final String xmlFilePath, - final GCUBEScope queryScope, - final String resType, - final String resID) - throws Exception { - ISClient client = GHNContext.getImplementation(ISClient.class); - GCUBEGenericQuery isQuery = null; - isQuery = client.getQuery(GCUBEGenericQuery.class); if (resType == null) { - isQuery.setExpression(QueryLoader.getQuery(QueryLocation.GET_RESOURCE_BYID)); - isQuery.addParameters( - new QueryParameter("RES_ID", resID) - ); + isQuery = new QueryTemplate(QueryLoader.getQuery(QueryLocation.GET_RESOURCE_BYID)); + isQuery.addParameter("RES_ID", resID); } else if (resType.equalsIgnoreCase(ResourceTypeDecorator.WSResource.name())) { - isQuery.setExpression(QueryLoader.getQuery(QueryLocation.GET_WSRESOURCE_BYID)); - isQuery.addParameters( - new QueryParameter("RES_ID", resID) - ); + isQuery = new QueryTemplate(QueryLoader.getQuery(QueryLocation.GET_WSRESOURCE_BYID)); + isQuery.addParameter("RES_ID", resID); } else { - isQuery.setExpression(QueryLoader.getQuery(QueryLocation.GET_RESOURCE_BYID)); - isQuery.addParameters( - new QueryParameter("RES_ID", resID), - new QueryParameter("RES_TYPE", resType) - ); + isQuery = new QueryTemplate(QueryLoader.getQuery(QueryLocation.GET_RESOURCE_BYID)); + isQuery.addParameter("RES_ID", resID); + isQuery.addParameter("RES_TYPE", resType); } - List results = client.execute(isQuery, queryScope); + List results = client.submit(isQuery); //ServerConsole.trace(LOG_PREFIX, "Retrieved (" + retval.size() + ") Resource for ID: " + resID); @@ -507,7 +564,10 @@ public class ISClientRequester { String type = null; if (resType == null) { try { - type = results.get(0).evaluate("/Resource/Type/text()").get(0); + DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Node node = docBuilder.parse(new InputSource(new StringReader(results.get(0)))).getDocumentElement(); + XPathHelper helper = new XPathHelper(node); + type = helper.evaluate("/Resource/Type/text()").get(0); } catch (Exception e) { ServerConsole.error(LOG_PREFIX, e); } @@ -516,8 +576,10 @@ public class ISClientRequester { } String xmlRepresentation = results.get(0).toString(); String htmlRepresentation = XML2HTML(xmlRepresentation, xmlFilePath); + ScopeProvider.instance.set(currScope); return new CompleteResourceProfile(resID, ResourceTypeDecorator.valueOf(type), getResourceName(type, resID, results.get(0)), xmlRepresentation, htmlRepresentation); } + ScopeProvider.instance.set(currScope); return null; } @@ -656,7 +718,7 @@ public class ISClientRequester { NodeList params = doc.getElementsByTagName("param"); ArrayList formFields = new ArrayList(); - + for (int i = 0; i < params.getLength(); i++) { NodeList paramTree = params.item(i).getChildNodes(); @@ -683,14 +745,14 @@ public class ISClientRequester { formFields = getPluginFormFromXml(xmlToParse); } } -// if (params.getLength()>1) + // if (params.getLength()>1) retval.put(name + ":" + requestName, formFields); - + } if (foundRequest == false){ - retval.put(name, formFields); + retval.put(name, formFields); } - + } } catch (RuntimeException e) { continue gonext; @@ -762,69 +824,80 @@ public class ISClientRequester { * @param ID the identifier of the resource * @param node the XML node from which retrieve the information * @return + * @throws IOException + * @throws SAXException */ - private static String getResourceName(String type, String ID, XMLResult node) { + private static String getResourceName(String type, String ID, String node) throws Exception { + DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Node xnode = docBuilder.parse(new InputSource(new StringReader(node))).getDocumentElement(); + XPathHelper helper = new XPathHelper(xnode); + if (type.equalsIgnoreCase(ResourceTypeDecorator.GHN.name())) { try { - return node.evaluate("/Resource/Profile/GHNDescription/Name/text()").get(0); + return helper.evaluate("/Resource/Profile/GHNDescription/Name/text()").get(0); } catch (Exception e) { return ID; } } if (type.equalsIgnoreCase(ResourceTypeDecorator.Collection.name())) { try { - return node.evaluate("/Resource/Profile/Name/text()").get(0); + return helper.evaluate("/Resource/Profile/Name/text()").get(0); } catch (Exception e) { return ID; } } if (type.equalsIgnoreCase(ResourceTypeDecorator.Service.name())) { try { - return node.evaluate("/Resource/Profile/Name/text()").get(0); + return helper.evaluate("/Resource/Profile/Name/text()").get(0); } catch (Exception e) { return ID; } } if (type.equalsIgnoreCase(ResourceTypeDecorator.RunningInstance.name())) { try { - return node.evaluate("/Resource/Profile/ServiceName/text()").get(0); + return helper.evaluate("/Resource/Profile/ServiceName/text()").get(0); } catch (Exception e) { return ID; } } if (type.equalsIgnoreCase(ResourceTypeDecorator.VIEW.name())) { try { - return node.evaluate("/Resource/Profile/Name/text()").get(0); + return helper.evaluate("/Resource/Profile/Name/text()").get(0); } catch (Exception e) { return ID; } } if (type.equalsIgnoreCase(ResourceTypeDecorator.RuntimeResource.name())) { try { - return node.evaluate("/Resource/Profile/Name/text()").get(0); + return helper.evaluate("/Resource/Profile/Name/text()").get(0); } catch (Exception e) { return ID; } } if (type.equalsIgnoreCase(ResourceTypeDecorator.GenericResource.name())) { try { - return node.evaluate("/Resource/Profile/Name/text()").get(0); + return helper.evaluate("/Resource/Profile/Name/text()").get(0); } catch (Exception e) { return ID; } } if (type.equalsIgnoreCase(ResourceTypeDecorator.WSResource.name())) { try { - return node.evaluate("/Document/Data/child::*[local-name()='ServiceName']/text()").get(0); + return helper.evaluate("/Document/Data/child::*[local-name()='ServiceName']/text()").get(0); } catch (Exception e) { return ID; } } return null; } - - public static String XML2HTML(final String xml, final String xslt) - throws Exception { + /** + * transform an xml in a readable xml by using HTML + * @param xml + * @param xslt + * @return + * @throws Exception + */ + public static String XML2HTML(final String xml, final String xslt) throws Exception { TransformerFactory tf = TransformerFactory.newInstance(); InputStream stream = new FileInputStream(xslt); diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/ISQueryCache.java b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/ISQueryCache.java index 2227abc..3b087a5 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/ISQueryCache.java +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/ISQueryCache.java @@ -67,9 +67,9 @@ class ISQueryCacheKeyT { * */ public class ISQueryCache { - Map> results = new HashMap>(); + Map> results = new HashMap>(); - public void insert(ISQueryCacheKeyT key, List elem) { + public void insert(ISQueryCacheKeyT key, List elem) { this.results.put(key, elem); } @@ -80,7 +80,7 @@ public class ISQueryCache { return this.results.containsKey(key); } - public List get(ISQueryCacheKeyT key) { + public List get(ISQueryCacheKeyT key) { if (key != null && this.results.containsKey(key)) { return this.results.get(key); } diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/QueryLocation.java b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/QueryLocation.java index b9c95db..31b54e4 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/QueryLocation.java +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/QueryLocation.java @@ -33,12 +33,18 @@ public enum QueryLocation { // Customized queries to retrieve the relevant data from resources // according to their type LIST_GHN("resources/GHN.xq"), + RETURN_GHN("resources/RETURN_GHN.xq"), LIST_Collection("resources/Collection.xq"), + RETURN_Collection("resources/RETURN_Collection.xq"), LIST_VIEW("resources/VIEW.xq"), LIST_Service("resources/Service.xq"), + RETURN_Service("resources/RETURN_Service.xq"), LIST_GenericResource("resources/GenericResource.xq"), + RETURN_GenericResource("resources/RETURN_GenericResource.xq"), LIST_RunningInstance("resources/RunningInstance.xq"), + RETURN_RunningInstance("resources/RETURN_RunningInstance.xq"), LIST_RuntimeResource("resources/RuntimeResource.xq"), + RETURN_RuntimeResource("resources/RETURN_RuntimeResource.xq"), // To retrieve the list of generic resources publishing plugins // to deploy activation records @@ -60,7 +66,9 @@ public enum QueryLocation { // Used to build the gwt model representation inside dialogs. // see getResourceModels inside ISClientRequester. GET_RES_DETAILS_BYTYPE("getResourcesDetails.xq"), + RETURN_GET_RES_DETAILS_BYTYPE("RETURN_getResourcesDetails.xq"), GET_RES_DETAILS_BYSUBTYPE("getResourcesDetailsSubtype.xq"), + RETURN_GET_RES_DETAILS_BYSUBTYPE("RETURN_getResourcesDetailsSubtype.xq"), GET_RESOURCE_BYID("getResourceByID.xq"), GET_WSRES_TYPES("getWSResourcesTypes.xq"), diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/RETURN_getResourcesDetails.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/RETURN_getResourcesDetails.xq new file mode 100644 index 0000000..56da18a --- /dev/null +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/RETURN_getResourcesDetails.xq @@ -0,0 +1,8 @@ + + {$profiles//Resource/child::*} + {$subtype} + {$gcf-version} + {$ghn-version} + {$scopes} + {$ghn-name} + \ No newline at end of file diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/RETURN_getResourcesDetailsSubtype.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/RETURN_getResourcesDetailsSubtype.xq new file mode 100644 index 0000000..56da18a --- /dev/null +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/RETURN_getResourcesDetailsSubtype.xq @@ -0,0 +1,8 @@ + + {$profiles//Resource/child::*} + {$subtype} + {$gcf-version} + {$ghn-version} + {$scopes} + {$ghn-name} + \ No newline at end of file diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/getResourceByID.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/getResourceByID.xq index ed81f47..316ff83 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/getResourceByID.xq +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/getResourceByID.xq @@ -1,8 +1,3 @@ -# -# Params: RES_ID the ID of looked up resource -# RES_TYPE (option) the type of searched resource - - -for $resource in collection('/db/Profiles/')//Resource +for $resource in collection('/db/Profiles/')//Resource where $resource/ID/string() eq '' return $resource \ No newline at end of file diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/getResourcesDetails.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/getResourcesDetails.xq index f6f9bbf..b732bc4 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/getResourcesDetails.xq +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/getResourcesDetails.xq @@ -4,7 +4,7 @@ # RES_TYPE the main type of the resource # This query is used by forms -for $profiles in collection('/db/Profiles/')//Resource +for $profiles in collection('/db/Profiles/')//Resource let $ghn-name := $profiles//Resource/Profile/GHN/@UniqueID/string() let $gcf-version := $profiles//Resource/Profile/GHNDescription/RunTimeEnv/Variable[Key/text() = 'gCF-version']/Value/text() let $ghn-version := $profiles//Resource/Profile/GHNDescription/RunTimeEnv/Variable[Key/text() = 'GHN-distribution-version']/Value/text() @@ -26,11 +26,4 @@ let $subtype := then "System" else "" return - - {$profiles//Resource/child::*} - {$subtype} - {$gcf-version} - {$ghn-version} - {$scopes} - {$ghn-name} - \ No newline at end of file + \ No newline at end of file diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/getResourcesDetailsSubtype.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/getResourcesDetailsSubtype.xq index 11451f0..3ce789f 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/getResourcesDetailsSubtype.xq +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/getResourcesDetailsSubtype.xq @@ -4,7 +4,7 @@ # RES_TYPE the main type of the resource # This query is used by forms -for $profiles in collection('/db/Profiles/')//Resource +for $profiles in collection('/db/Profiles/')//Resource let $ghn-name := $profiles//Resource/Profile/GHN/@UniqueID/string() let $gcf-version := $profiles//Resource/Profile/GHNDescription/RunTimeEnv/Variable[Key/text() = 'gCF-version']/Value/text() let $ghn-version := $profiles//Resource/Profile/GHNDescription/RunTimeEnv/Variable[Key/text() = 'GHN-distribution-version']/Value/text() @@ -27,11 +27,4 @@ let $subtype := else "" where $subtype eq '' return - - {$profiles//Resource/child::*} - {$subtype} - {$gcf-version} - {$ghn-version} - {$scopes} - {$ghn-name} - \ No newline at end of file + \ No newline at end of file diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/getSubTypes.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/getSubTypes.xq index af546be..640f883 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/getSubTypes.xq +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/getSubTypes.xq @@ -24,4 +24,4 @@ let $subtypes := --> for $subtype in distinct-values($subtypes) return - {$subtype} \ No newline at end of file + \ No newline at end of file diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/Collection.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/Collection.xq index d173bd4..2b8c939 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/Collection.xq +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/Collection.xq @@ -1,23 +1,8 @@ - - for $profiles in collection('/db/Profiles/GenericResource')//Resource, $wsresource in collection('/db/Properties')//Document let $scopes := string-join( $profiles/Scopes//Scope/text(), ';') let $subtype := $profiles//Resource/Profile/SecondaryType/text() where $subtype = "DataSource" and $profiles//Resource/ID eq $wsresource/SourceKey and $wsresource/Data//child::*[local-name()='ServiceName']/string() eq 'tree-manager-service' return - - {$profiles//Resource/ID} - {$profiles//Resource/Type/text()} - {$subtype} - {$scopes} - {$profiles//Resource/Profile/Name/text()} - {$profiles//Resource/Profile/Body/SourceProperties/creationTime/text()} - {$profiles//Resource/Profile/Body/SourceProperties/user/text()} - {$wsresource/LastUpdateHuman/text()} - {$wsresource//child::*[local-name()='Cardinality']/text()} - \ No newline at end of file + + \ No newline at end of file diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/GHN.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/GHN.xq index 675a2d8..6122539 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/GHN.xq +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/GHN.xq @@ -1,8 +1,3 @@ - - - for $profiles in collection('/db/Profiles/GHN')//Resource let $gcf-version := $profiles//Resource/Profile/GHNDescription/RunTimeEnv/Variable[Key/text() = 'gCF-version']/Value/text() let $ghn-version := $profiles//Resource/Profile/GHNDescription/RunTimeEnv/Variable[Key/text() = 'GHN-distribution-version']/Value/text() @@ -10,21 +5,4 @@ let $scopes := string-join( $profiles/Scopes//Scope/text(), ';') let $subtype := $profiles//Resource/Profile/Site/Domain/text() return - - {$profiles//Resource/ID} - {$profiles//Resource/Type/text()} - {$subtype} - {$profiles//Resource/Profile/GHNDescription/Status/text()} - {$profiles//Resource/Profile/GHNDescription/Name/text()} - {$profiles//Resource/Profile/GHNDescription/Uptime/text()} - {$profiles//Resource/Profile/GHNDescription/LastUpdate/text()} - {$profiles//Resource/Profile/GHNDescription/LocalAvailableSpace/text()} - {$profiles//Resource/Profile/GHNDescription/MainMemory/string(@VirtualSize)} - {$profiles//Resource/Profile/GHNDescription/MainMemory/string(@VirtualAvailable)} - {$profiles//Resource/Profile/GHNDescription/Load/string(@Last1Min)} - {$profiles//Resource/Profile/GHNDescription/Load/string(@Last5Min)} - {$profiles//Resource/Profile/GHNDescription/Load/string(@Last15Min)} - {$gcf-version} - {$ghn-version} - {$scopes} - \ No newline at end of file + diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/GenericResource.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/GenericResource.xq index 8b5945d..02a3ebb 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/GenericResource.xq +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/GenericResource.xq @@ -1,16 +1,6 @@ - - - for $profiles in collection('/db/Profiles/GenericResource')//Resource let $scopes := string-join( $profiles/Scopes//Scope/text(), ';') let $subtype := $profiles//Resource/Profile/SecondaryType/text() return - - {$profiles//Resource/ID} - {$profiles//Resource/Type/text()} - {$subtype} - {$scopes} - {$profiles//Resource/Profile/Name/text()} - {$profiles//Resource/Profile/Description/text()} - \ No newline at end of file + \ No newline at end of file diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_Collection.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_Collection.xq new file mode 100644 index 0000000..7342462 --- /dev/null +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_Collection.xq @@ -0,0 +1,11 @@ + + {$profiles//Resource/ID} + {$profiles//Resource/Type/text()} + {$subtype} + {$scopes} + {$profiles//Resource/Profile/Name/text()} + {$profiles//Resource/Profile/Body/SourceProperties/creationTime/text()} + {$profiles//Resource/Profile/Body/SourceProperties/user/text()} + {$wsresource/LastUpdateHuman/text()} + {$wsresource//child::*[local-name()='Cardinality']/text()} + \ No newline at end of file diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_GHN.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_GHN.xq new file mode 100644 index 0000000..b86ec60 --- /dev/null +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_GHN.xq @@ -0,0 +1,18 @@ + + {$profiles//Resource/ID} + {$profiles//Resource/Type/text()} + {$subtype} + {$profiles//Resource/Profile/GHNDescription/Status/text()} + {$profiles//Resource/Profile/GHNDescription/Name/text()} + {$profiles//Resource/Profile/GHNDescription/Uptime/text()} + {$profiles//Resource/Profile/GHNDescription/LastUpdate/text()} + {$profiles//Resource/Profile/GHNDescription/LocalAvailableSpace/text()} + {$profiles//Resource/Profile/GHNDescription/MainMemory/string(@VirtualSize)} + {$profiles//Resource/Profile/GHNDescription/MainMemory/string(@VirtualAvailable)} + {$profiles//Resource/Profile/GHNDescription/Load/string(@Last1Min)} + {$profiles//Resource/Profile/GHNDescription/Load/string(@Last5Min)} + {$profiles//Resource/Profile/GHNDescription/Load/string(@Last15Min)} + {$gcf-version} + {$ghn-version} + {$scopes} + \ No newline at end of file diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_GenericResource.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_GenericResource.xq new file mode 100644 index 0000000..e7862a4 --- /dev/null +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_GenericResource.xq @@ -0,0 +1,8 @@ + + {$profiles//Resource/ID} + {$profiles//Resource/Type/text()} + {$subtype} + {$scopes} + {$profiles//Resource/Profile/Name/text()} + {$profiles//Resource/Profile/Description/text()} + \ No newline at end of file diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_RunningInstance.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_RunningInstance.xq new file mode 100644 index 0000000..705214b --- /dev/null +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_RunningInstance.xq @@ -0,0 +1,11 @@ + + {$profiles/ID} + {$profiles/Type/text()} + {$subtype} + {$scopes} + {$profiles/Profile/ServiceClass/text()} + {$profiles/Profile/ServiceName/text()} + {$profiles/Profile/Version/text()} + {$profiles/Profile/DeploymentData/Status/text()} + {$ghn-name} + \ No newline at end of file diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_RuntimeResource.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_RuntimeResource.xq new file mode 100644 index 0000000..4eb9e97 --- /dev/null +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_RuntimeResource.xq @@ -0,0 +1,7 @@ + + {$profiles//Resource/ID} + {$profiles//Resource/Type/text()} + {$subtype} + {$scopes} + {$profiles//Resource/Profile/Name/text()} + \ No newline at end of file diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_Service.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_Service.xq new file mode 100644 index 0000000..42f770f --- /dev/null +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RETURN_Service.xq @@ -0,0 +1,10 @@ + + {$profiles//Resource/ID} + {$profiles//Resource/Type/text()} + {$subtype} + {$scopes} + {$profiles//Resource/Profile/Class/text()} + {$profiles//Resource/Profile/Name/text()} + {$profiles//Resource/Profile/Packages/Software[1]/Version/text()} + {$profiles//Resource/Profile/Packages/Software/Shareable/string(@level)} + \ No newline at end of file diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RunningInstance.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RunningInstance.xq index ac8dd3a..0fbceb3 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RunningInstance.xq +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RunningInstance.xq @@ -1,9 +1,4 @@ - - for $profiles in collection('/db/Profiles/RunningInstance')//Resource - let $ghns := collection('/db/Profiles/GHN')//Resource let $_ghn-name := for $ghn in $ghns where $ghn/ID/string() eq $profiles/Profile/GHN/@UniqueID/string() @@ -13,14 +8,4 @@ let $scopes := string-join( $profiles/Scopes//Scope/text(), ';') let $subtype := $profiles/Profile/ServiceClass/text() return - - {$profiles/ID} - {$profiles/Type/text()} - {$subtype} - {$scopes} - {$profiles/Profile/ServiceClass/text()} - {$profiles/Profile/ServiceName/text()} - {$profiles/Profile/Version/text()} - {$profiles/Profile/DeploymentData/Status/text()} - {$ghn-name} - \ No newline at end of file + diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RuntimeResource.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RuntimeResource.xq index 7e36fe7..8dba6fc 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RuntimeResource.xq +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/RuntimeResource.xq @@ -3,10 +3,5 @@ let $scopes := string-join( $profiles/Scopes//Scope/text(), ';') let $subtype := $profiles//Resource/Profile/Category/text() return - - {$profiles//Resource/ID} - {$profiles//Resource/Type/text()} - {$subtype} - {$scopes} - {$profiles//Resource/Profile/Name/text()} - \ No newline at end of file + + \ No newline at end of file diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/Service.xq b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/Service.xq index 215ea0d..e08ff29 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/Service.xq +++ b/src/main/java/org/gcube/resourcemanagement/support/server/gcube/queries/xquery/resources/Service.xq @@ -1,18 +1,6 @@ - - for $profiles in collection('/db/Profiles/Service')//Resource let $scopes := string-join( $profiles/Scopes//Scope/text(), ';') let $subtype := $profiles//Resource/Profile/Class/text() return - - {$profiles//Resource/ID} - {$profiles//Resource/Type/text()} - {$subtype} - {$scopes} - {$profiles//Resource/Profile/Class/text()} - {$profiles//Resource/Profile/Name/text()} - - {$profiles//Resource/Profile/Packages/Software[1]/Version/text()} - {$profiles//Resource/Profile/Packages/Software/Shareable/string(@level)} - \ No newline at end of file + \ No newline at end of file diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/AbstractResourceManager.java b/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/AbstractResourceManager.java index 0e41d26..a93c173 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/AbstractResourceManager.java +++ b/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/AbstractResourceManager.java @@ -16,24 +16,20 @@ package org.gcube.resourcemanagement.support.server.managers.resources; +import static org.gcube.resources.discovery.icclient.ICFactory.client; + import java.util.ArrayList; import java.util.List; -import java.util.Random; import java.util.Vector; -import org.apache.axis.message.addressing.EndpointReferenceType; -import org.gcube.common.core.contexts.GCUBERemotePortTypeContext; -import org.gcube.common.core.contexts.GHNContext; -import org.gcube.common.core.informationsystem.client.AtomicCondition; -import org.gcube.common.core.informationsystem.client.ISClient; -import org.gcube.common.core.informationsystem.client.XMLResult; -import org.gcube.common.core.informationsystem.client.queries.GCUBEGenericQuery; -import org.gcube.common.core.informationsystem.client.queries.GCUBERIQuery; -import org.gcube.common.core.informationsystem.publisher.ISPublisher; -import org.gcube.common.core.resources.GCUBEResource; -import org.gcube.common.core.resources.GCUBERunningInstance; -import org.gcube.common.core.scope.GCUBEScope; -import org.gcube.common.core.scope.GCUBEScope.Type; + import org.gcube.common.core.security.GCUBESecurityManagerImpl; +import org.gcube.common.resources.gcore.Resource; +import org.gcube.common.resources.gcore.ScopeGroup; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.scope.impl.ScopeBean; +import org.gcube.common.scope.impl.ScopeBean.Type; +import org.gcube.informationsystem.publisher.RegistryPublisher; +import org.gcube.informationsystem.publisher.RegistryPublisherFactory; import org.gcube.resourcemanagement.support.server.exceptions.AbstractResourceException; import org.gcube.resourcemanagement.support.server.exceptions.ResourceAccessException; import org.gcube.resourcemanagement.support.server.exceptions.ResourceOperationException; @@ -41,20 +37,19 @@ import org.gcube.resourcemanagement.support.server.exceptions.ResourceParameterE import org.gcube.resourcemanagement.support.server.managers.report.ReportBuilder; import org.gcube.resourcemanagement.support.server.managers.report.ReportEntry; import org.gcube.resourcemanagement.support.server.managers.report.ReportOperation; -import org.gcube.resourcemanagement.support.server.managers.scope.ScopeManager; import org.gcube.resourcemanagement.support.server.types.AllowedResourceTypes; import org.gcube.resourcemanagement.support.server.utils.Assertion; import org.gcube.resourcemanagement.support.server.utils.ServerConsole; - -import org.gcube.vremanagement.resourcemanager.stubs.binder.AddResourcesParameters; -import org.gcube.vremanagement.resourcemanager.stubs.binder.RemoveResourcesParameters; -import org.gcube.vremanagement.resourcemanager.stubs.binder.ResourceBinderPortType; -import org.gcube.vremanagement.resourcemanager.stubs.binder.ResourceItem; -import org.gcube.vremanagement.resourcemanager.stubs.binder.ResourceList; -import org.gcube.vremanagement.resourcemanager.stubs.binder.service.ResourceBinderServiceAddressingLocator; -import org.gcube.vremanagement.resourcemanager.stubs.reporting.ReportingPortType; -import org.gcube.vremanagement.resourcemanager.stubs.reporting.service.ReportingServiceAddressingLocator; - +import org.gcube.resources.discovery.client.api.DiscoveryClient; +import org.gcube.resources.discovery.client.queries.api.Query; +import org.gcube.resources.discovery.client.queries.impl.QueryBox; +import org.gcube.vremanagement.resourcemanager.client.RMBinderLibrary; +import org.gcube.vremanagement.resourcemanager.client.RMReportingLibrary; +import org.gcube.vremanagement.resourcemanager.client.fws.Types.AddResourcesParameters; +import org.gcube.vremanagement.resourcemanager.client.fws.Types.RemoveResourcesParameters; +import org.gcube.vremanagement.resourcemanager.client.fws.Types.ResourceItem; +import org.gcube.vremanagement.resourcemanager.client.fws.Types.ResourceList; +import org.gcube.vremanagement.resourcemanager.client.proxies.Proxies; /** * The minimal interface all the resource managers must implement. @@ -68,16 +63,15 @@ public abstract class AbstractResourceManager { private String name = null; private AllowedResourceTypes type = null; private String subType = null; - private ISClient client = null; private GCUBESecurityManagerImpl managerSec = null; - private ISPublisher publisher = null; + private RegistryPublisher publisher = null; private static final String LOG_PREFIX = "[AbstractResMgr]"; /** * @deprecated discouraged use. With no ID some operations cannot be accessed. For internal use only. */ public AbstractResourceManager(final AllowedResourceTypes type) - throws ResourceParameterException, ResourceAccessException { + throws ResourceParameterException, ResourceAccessException { Assertion checker = new Assertion(); checker.validate(type != null, new ResourceParameterException("Invalid Parameter type")); @@ -93,13 +87,7 @@ public abstract class AbstractResourceManager { }; try { - client = GHNContext.getImplementation(ISClient.class); - } catch (Exception e) { - throw new ResourceAccessException("Cannot instantiate the ISClient"); - } - - try { - this.publisher = GHNContext.getImplementation(ISPublisher.class); + this.publisher = RegistryPublisherFactory.create(); } catch (Exception e) { ServerConsole.error(LOG_PREFIX, e); } @@ -114,10 +102,7 @@ public abstract class AbstractResourceManager { * @throws ResourceParameterException * @throws ResourceAccessException */ - public AbstractResourceManager( - final String id, - final AllowedResourceTypes type) - throws ResourceParameterException, ResourceAccessException { + public AbstractResourceManager(String id, AllowedResourceTypes type) throws ResourceParameterException, ResourceAccessException { this(type); Assertion checker = new Assertion(); @@ -126,45 +111,27 @@ public abstract class AbstractResourceManager { this.id = id.trim(); } - public AbstractResourceManager( - final String id, - final String name, - final AllowedResourceTypes type) throws ResourceParameterException, ResourceAccessException { + public AbstractResourceManager(String id, String name, AllowedResourceTypes type) throws ResourceParameterException, ResourceAccessException { this(id, type); Assertion checker = new Assertion(); checker.validate(name != null && name.trim().length() > 0, new ResourceParameterException("Invalid Parameter name")); this.name = name; } - public AbstractResourceManager( - final String id, - final String name, - final AllowedResourceTypes type, - final String subtype) - throws ResourceParameterException, ResourceAccessException { + public AbstractResourceManager(String id, String name, AllowedResourceTypes type, String subtype) throws ResourceParameterException, ResourceAccessException { this(id, name, type); if (subtype != null) { this.subType = subtype.trim(); } } - /** - * The singleton ISClient instance is preferred. - * All resource managers can internally access this instance - * to make queries to the IS. - * @return - */ - protected final ISClient getISClient() { - return this.client; - } - /** * The singleton ISPublisher instance is preferred. * All resource managers can internally access this instance * to interact with ISPublisher to handle resources. * @return */ - public final ISPublisher getISPublisher() { + public final RegistryPublisher getRegistryPublisher() { return publisher; } @@ -226,134 +193,6 @@ public abstract class AbstractResourceManager { return this.subType; } - /** - * Internally used by {@link AbstractResourceManager#getResourceManager(GCUBEScope)}. - * @param scope - * @return a raw list of resource manager descriptors. - * @throws Exception - */ - private List getResourceManagerFromScope(final GCUBEScope scope) throws Exception { - System.out.println("Looking for ResourceManager in scope: " + scope); - GCUBERIQuery query = this.client.getQuery(GCUBERIQuery.class); - query.addAtomicConditions(new AtomicCondition("//Profile/ServiceClass", "VREManagement")); - query.addAtomicConditions(new AtomicCondition("//Profile/ServiceName", "ResourceManager")); - - List result = client.execute(query, scope); - List toReturn = new ArrayList(); - for (GCUBERunningInstance ri : result) { - if (ri.getScopes().containsValue(scope)) { - toReturn.add(ri); - } - } - System.out.println("Found " + toReturn.size() +" ResourceManager in scope: " + scope); - return toReturn; - } - - /** - * The the list of resource managers able to handle the resource in a given scope. - * @param scope the scope in which to operate - * @return all the available managers - * @throws ResourceAccessException if no manager can be instantiated - * @throws ResourceParameterException if the parameters are invalid - */ - public final List getResourceManagers(final GCUBEScope scope) throws ResourceAccessException, ResourceParameterException { - Assertion checker = new Assertion(); - checker.validate(scope != null, new ResourceParameterException("Invalid scope")); - - - List resourceManagerList = null; - try { - resourceManagerList = this.getResourceManagerFromScope(scope); - } catch (Exception e) { - e.printStackTrace(); - throw new ResourceAccessException("Cannot retrieve the managers for resource: " + this.getID()); - } - List retval = new Vector(); - - if (resourceManagerList.isEmpty()) { - System.out.println("\n\n\n\n\n****** Schianta qui size: " + resourceManagerList.size() + " scope: " + scope); - throw new ResourceAccessException("Unable to find ResourceManagers for resource " + this.getType() + " in scope: " + scope.toString()); - } - - EndpointReferenceType endpoint = null; - ResourceBinderPortType pt = null; - - for (GCUBERunningInstance resourceManager : resourceManagerList) { - try { - endpoint = resourceManager.getAccessPoint().getEndpoint("gcube/vremanagement/resourcemanager/binder"); - - pt = GCUBERemotePortTypeContext.getProxy( - new ResourceBinderServiceAddressingLocator() - .getResourceBinderPortTypePort(endpoint), - scope, - this.managerSec); - if (pt != null) { - retval.add(pt); - } - } catch (Throwable e) { - // trying on next entry - ServerConsole.error(LOG_PREFIX, e); - } - } - if (retval != null && retval.size() > 0) { - // Return a random manager from the available ones - return retval; - } - // no managers found - throw new ResourceAccessException("Unable to find ResourceManagers for resource " + this.getID() + "in scope: " + scope.toString()); - } - - /** - * The the list of resource report managers able to handle the resource in a given scope. - * @param scope the scope in which to operate - * @return all the available managers - * @throws ResourceAccessException if no manager can be instantiated - * @throws ResourceParameterException if the parameters are invalid - */ - public final List getResourceReportManagers(final GCUBEScope scope) throws ResourceAccessException, ResourceParameterException { - Assertion checker = new Assertion(); - checker.validate(scope != null, new ResourceParameterException("Invalid scope")); - - List resourceManagerList = null; - try { - resourceManagerList = this.getResourceManagerFromScope(scope); - } catch (Exception e) { - e.printStackTrace(); - throw new ResourceAccessException("Cannot retrieve the managers for resource: " + this.getID()); - } - List retval = new Vector(); - - if (resourceManagerList.isEmpty()) { - throw new ResourceAccessException("Unable to find ResourceManagers for resource " + this.getType() + " in scope: " + scope.toString()); - } - - EndpointReferenceType endpoint = null; - ReportingPortType pt = null; - - for (GCUBERunningInstance resourceManager : resourceManagerList) { - try { - endpoint = resourceManager.getAccessPoint().getEndpoint("gcube/vremanagement/resourcemanager/reporting"); - - pt = GCUBERemotePortTypeContext.getProxy( - new ReportingServiceAddressingLocator().getReportingPortTypePort(endpoint), - scope, - this.managerSec); - if (pt != null) { - retval.add(pt); - } - } catch (Throwable e) { - // trying on next entry - ServerConsole.error(LOG_PREFIX, e); - } - } - if (retval != null && retval.size() > 0) { - // Return a random report manager from the available ones - return retval; - } - // no managers found - throw new ResourceAccessException("Unable to find ReportResourceManagers for resource " + this.getID() + "in scope: " + scope.toString()); - } - /** * The resource manager needed to handle the resource in a given scope. * @param scope the scope in which to operate @@ -361,21 +200,22 @@ public abstract class AbstractResourceManager { * @throws ResourceAccessException if no manager can be instantiated * @throws ResourceParameterException if the parameters are invalid */ - public final ResourceBinderPortType getResourceManager(final GCUBEScope scope) - throws AbstractResourceException { - ServerConsole.info(LOG_PREFIX, "Getting Resource Manager in scope [" + scope.toString() + "]"); - - List retval = this.getResourceManagers(scope); - if (retval != null && retval.size() > 0) { - Random generator = new Random(); - // Return a random manager from the available ones - ResourceBinderPortType manager = retval.get(generator.nextInt(retval.size())); - return manager; + public final RMBinderLibrary getResourceManager(String scope) throws AbstractResourceException { + String currScope = ScopeProvider.instance.get(); + ScopeBean bscope = new ScopeBean(scope); + if (bscope.is(Type.VRE)) { + scope = bscope.enclosingScope().toString(); } - // no managers found - throw new ResourceAccessException("Unable to find ResourceManagers for resource " + this.getType() + " in scope: " + scope.toString()); + ScopeProvider.instance.set(scope); + ServerConsole.info(LOG_PREFIX, "Getting Resource Manager in scope [" + scope.toString() + "]"); + RMBinderLibrary rml = Proxies.binderService().build(); + if (rml == null) { // no managers found + throw new ResourceAccessException("Unable to find ResourceManagers for resource " + this.getType() + " in scope: " + scope.toString()); + } + ScopeProvider.instance.set(currScope); + return rml; } - + /** * The report resource manager needed to handle the resource in a given scope. * @param scope the scope in which to operate @@ -383,19 +223,21 @@ public abstract class AbstractResourceManager { * @throws ResourceAccessException if no manager can be instantiated * @throws ResourceParameterException if the parameters are invalid */ - public final ReportingPortType getReportResourceManager(final GCUBEScope scope) - throws AbstractResourceException { - ServerConsole.info(LOG_PREFIX, "Getting Resource Manager in scope [" + scope.toString() + "]"); - - List retval = this.getResourceReportManagers(scope); - if (retval != null && retval.size() > 0) { - Random generator = new Random(); - // Return a random manager from the available ones - ReportingPortType manager = retval.get(generator.nextInt(retval.size())); - return manager; + public final RMReportingLibrary getReportResourceManager(String scope) throws AbstractResourceException { + String currScope = ScopeProvider.instance.get(); + ScopeBean bscope = new ScopeBean(scope); + if (bscope.is(Type.VRE)) { + scope = bscope.enclosingScope().toString(); } - // no managers found - throw new ResourceAccessException("Unable to find ResourceManagers for resource " + this.getType() + " in scope: " + scope.toString()); + ScopeProvider.instance.set(scope); + + ServerConsole.info(LOG_PREFIX, "Getting Resource Manager in scope [" + scope.toString() + "]"); + RMReportingLibrary rml = Proxies.reportingService().build(); + if (rml == null) { // no managers found + throw new ResourceAccessException("Unable to find ResourceManagers for resource " + this.getType() + " in scope: " + scope.toString()); + } + ScopeProvider.instance.set(currScope); + return rml; } /** @@ -408,7 +250,7 @@ public abstract class AbstractResourceManager { * @return * @throws ResourceOperationException */ - private String bindToScope(final GCUBEScope targetScope) throws AbstractResourceException { + private String bindToScope(final String targetScope) throws AbstractResourceException { Assertion checker = new Assertion(); checker.validate(targetScope != null, new ResourceParameterException("Invalid parameter targetScope. null not allowed.")); checker.validate(this.getID() != null, new ResourceOperationException("Invalid resource ID. null not allowed.")); @@ -416,37 +258,47 @@ public abstract class AbstractResourceManager { ServerConsole.trace( LOG_PREFIX, "[BIND-SCOPE-ENTER] Adding " + this.getType() + " " + this.getID() + " to scope [" + - targetScope.toString() + "]"); + targetScope.toString() + "]"); AddResourcesParameters addParam = new AddResourcesParameters(); ResourceItem toAdd = new ResourceItem(); - toAdd.setID(this.getID()); + toAdd.setId(this.getID()); toAdd.setType(this.getType().name()); ResourceList r = new ResourceList(); - - - r.setResource(new ResourceItem[]{toAdd}); + + ArrayList temp = new ArrayList(); + temp.add(toAdd); + r.setResource(temp); addParam.setResources(r); addParam.setTargetScope(targetScope.toString()); - ResourceBinderPortType manager = this.getResourceManager(targetScope); - + RMBinderLibrary manager = this.getResourceManager(targetScope); + try { + String curr = ScopeProvider.instance.get(); + ScopeBean scope = new ScopeBean(targetScope); + if (scope.is(Type.VRE)) { + ScopeProvider.instance.set(scope.enclosingScope().toString()); + } else + ScopeProvider.instance.set(targetScope); String reportID = manager.addResources(addParam); ServerConsole.trace( LOG_PREFIX, "[BIND-SCOPE-EXIT] Applyed Adding " + this.getType() + " " + this.getID() + " to scope [" + - targetScope.toString() + "]... reportID: " + reportID); + targetScope.toString() + "]... reportID: " + reportID); + + RMReportingLibrary pt = this.getReportResourceManager(scope.toString()); - ReportingPortType pt = this.getReportResourceManager(targetScope); - return pt.getReport(reportID); + String toReturn = pt.getReport(reportID); + ScopeProvider.instance.set(curr); + return toReturn; } catch (Exception e) { e.printStackTrace(); ServerConsole.trace( LOG_PREFIX, - "[BIND-SCOPE-EXIT] [FAILURE]"); - throw new ResourceOperationException("During resource::addToScope: " + e.getMessage()); + "[BIND-SCOPE-EXIT] [FAILURE]"); + throw new ResourceOperationException("During resource::addToScope: "+ targetScope + " Message: \n" + e.getMessage()); } } @@ -457,9 +309,7 @@ public abstract class AbstractResourceManager { * @param nestingPublication true for resources different from gHN and RI. * @return the reportID generated */ - public final String addToExistingScope( - final GCUBEScope sourceScope, final GCUBEScope targetScope) - throws AbstractResourceException { + public final String addToExistingScope(final ScopeBean sourceScope, final ScopeBean targetScope) throws AbstractResourceException { Assertion checker = new Assertion(); checker.validate(sourceScope != null, new ResourceParameterException("Invalid parameter sourceScope. null not allowed.")); checker.validate(targetScope != null, new ResourceParameterException("Invalid parameter targetScope. null not allowed.")); @@ -470,34 +320,36 @@ public abstract class AbstractResourceManager { ServerConsole.trace( LOG_PREFIX, "[ADD-ToExistingScope] Adding from scope [" + - sourceScope.toString() + - "] to existing scope [" + - targetScope.toString() + - "] " + this.getType() + " " + this.getID()); + sourceScope.toString() + + "] to existing scope [" + + targetScope.toString() + + "] " + this.getType() + " " + this.getID()); // If not RI or GHN and the scopes are sibling and VO copyFromToVO if (!(this.getType() == AllowedResourceTypes.GHN) && !(this.getType() == AllowedResourceTypes.RunningInstance) && - sourceScope.getType() == Type.VO && targetScope.getType() == Type.VO) { + sourceScope.type() == Type.VO && targetScope.type() == Type.VO) { return copyFromToVO(sourceScope, targetScope); } // Add a gCube Resource to // (i) a VRE scope from the parent VO or // (ii) a VO scope from the infrastructure scope - if (!targetScope.isEnclosedIn(sourceScope)) { + if (!targetScope.toString().contains(sourceScope.toString())) { throw new ResourceOperationException( - "You are not allowed to apply to this scope. Target scope is not enclosed in the source one."); + "You are not allowed to apply to this scope. Target scope is not enclosed in the source one."); } report.addEntry(new ReportEntry(ReportOperation.AddToScope, this, "Added " + this.getType() + " " + this.getID() + " to parent scope " + - targetScope.toString() + " the remote report ID is: " + - this.bindToScope(targetScope), true)); + targetScope.toString() + " the remote report ID is: " + + this.bindToScope(targetScope.toString()), true)); return report.getXML(); } + + /** * Similar to the {@link AbstractResourceManager#addToExistingScope} method but involves * two scopes of type VO. @@ -510,17 +362,16 @@ public abstract class AbstractResourceManager { * @return * @throws AbstractResourceException */ - public final String copyFromToVO(final GCUBEScope sourceScope, final GCUBEScope targetScope) - throws AbstractResourceException { + public final String copyFromToVO(final ScopeBean sourceScope, final ScopeBean targetScope) throws AbstractResourceException { Assertion checker = new Assertion(); checker.validate( - sourceScope != null && sourceScope.getType() == Type.VO, + sourceScope != null && sourceScope.type() == Type.VO, new ResourceParameterException("The sourceScope is invalid or not of type VO.")); checker.validate( - targetScope != null && targetScope.getType() == Type.VO, + targetScope != null && targetScope.type() == Type.VO, new ResourceParameterException("The targetScope is invalid or not of type VO.")); checker.validate( - sourceScope.getEnclosingScope() == targetScope.getEnclosingScope(), + sourceScope.enclosingScope() == targetScope.enclosingScope(), new ResourceParameterException("The sourceScope and targetScope must be children of the same root VO.")); checker.validate(this.getType() != AllowedResourceTypes.GHN && this.getType() != AllowedResourceTypes.RunningInstance, new ResourceAccessException("Operation not allowed for RI and GHNs.")); @@ -528,18 +379,24 @@ public abstract class AbstractResourceManager { new ResourceAccessException("Operation not allowed on resources with no ID.")); // Phase 1. retrieve the resource to copy - GCUBEResource resStub = this.getGCUBEResource(sourceScope); + Resource resStub = this.getResource(sourceScope); - // Phase 2. Before to register the resource, the scope must be + // Phase 2. Before registering the resource, the scope must be // bound to the local GCUBEResource - this.bindToScope(targetScope); + this.bindToScope(targetScope.toString()); // Phase 3. Register to the new VO through the ISPublisher + + String currentScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(targetScope.toString()); + Resource toReturn = null; try { - return this.getISPublisher().registerGCUBEResource(resStub, targetScope, this.getSecurityManager()); + toReturn = this.getRegistryPublisher().create(resStub); } catch (Exception e) { throw new ResourceAccessException(e.getMessage()); } + ScopeProvider.instance.set(currentScope); + return toReturn.id(); } /** @@ -550,7 +407,7 @@ public abstract class AbstractResourceManager { * @return * @throws AbstractResourceException */ - protected abstract GCUBEResource buildGCUBEResource(final String xmlRepresentation) throws AbstractResourceException; + protected abstract Resource buildResource(final String xmlRepresentation) throws AbstractResourceException; /** * From a resource retrieves its GCUBEResource depending on the scope in which it is @@ -559,8 +416,8 @@ public abstract class AbstractResourceManager { * @return * @throws AbstractResourceException */ - public final GCUBEResource getGCUBEResource(final GCUBEScope scope) throws AbstractResourceException { - return this.buildGCUBEResource(this.getXMLDescription(scope)); + public final Resource getResource(final ScopeBean scope) throws AbstractResourceException { + return this.buildResource(this.getXMLDescription(scope)); } /** @@ -570,44 +427,39 @@ public abstract class AbstractResourceManager { * @return * @throws AbstractResourceException */ - protected final String getXMLDescription(final GCUBEScope scope) throws AbstractResourceException { + protected final String getXMLDescription(final ScopeBean scope) throws AbstractResourceException { Assertion checker = new Assertion(); checker.validate(this.getID() != null, new ResourceAccessException("Cannot execute on resources with no ID.")); - + + String currScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(scope.toString()); + // Phase 1. retrieve the resource to copy - GCUBEGenericQuery query = null; - try { - query = this.getISClient().getQuery(GCUBEGenericQuery.class); - query.setExpression( - "for $resource in collection('/db/Profiles/" + this.getType().name() + "')//Resource " + - "where ( $resource/ID/string() eq '" + - this.getID() + - "') " + - "return $resource" - ); - } catch (Exception e) { - throw new ResourceAccessException(e); - } + Query query = new QueryBox("for $resource in collection('/db/Profiles/" + this.getType().name() + "')//Resource " + + "where ( $resource/ID/string() eq '" + + this.getID() + + "') " + + "return $resource"); - XMLResult resDescription = null; - try { - resDescription = this.getISClient().execute(query, scope).get(0); - return resDescription.toString(); - } catch (Exception e) { + DiscoveryClient client = client(); + + List results = client.submit(query); + if (results == null || results.isEmpty()) throw new ResourceAccessException("Cannot retrieve the IS profile for resource: " + this.getID() + " in scope: " + scope.toString()); - } + ScopeProvider.instance.set(currScope); + + return results.get(0).toString(); } /** - * The first phase of remove form scope. + * The first phase of remove from scope. * This is common to all the resources (RI and GHNs). * @param scope * @return * @throws AbstractResourceException */ - private String basicRemoveFromScope(final GCUBEScope scope) - throws AbstractResourceException { + private String basicRemoveFromScope(final ScopeBean scope) throws AbstractResourceException { Assertion checker = new Assertion(); checker.validate(scope != null, new ResourceParameterException("Invalid parameter scope. null not allowed.")); checker.validate(this.getID() != null, new ResourceOperationException("Invalid ID. null not allowed.")); @@ -618,17 +470,22 @@ public abstract class AbstractResourceManager { RemoveResourcesParameters params = new RemoveResourcesParameters(); ResourceItem toRemove = new ResourceItem(); - toRemove.setID(this.getID()); + toRemove.setId(this.getID()); toRemove.setType(this.getType().name()); ResourceList resourcesToRemove = new ResourceList(); - resourcesToRemove.setResource(new ResourceItem[]{toRemove}); - params.setResources(resourcesToRemove); - params.setTargetScope(scope.toString()); + ArrayList temp = new ArrayList(); + temp.add(toRemove); + resourcesToRemove.setResource(temp); + params.resources = resourcesToRemove; + params.targetScope = scope.toString(); ServerConsole.trace(LOG_PREFIX, "[REMOVE-FROM-SCOPE] Sending the Remove Resource request...."); try { - ResourceBinderPortType manager = this.getResourceManager(scope); + RMBinderLibrary manager = this.getResourceManager(scope.toString()); + String currScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(scope.toString()); retval = manager.removeResources(params); + ScopeProvider.instance.set(currScope); } catch (Exception e) { throw new ResourceOperationException("During removeFrom scope of " + this.getType() @@ -641,59 +498,17 @@ public abstract class AbstractResourceManager { * Removes the current resource from the scope. * @param nestingRemoval true for resources different from gHN and RI */ - public final String removeFromScope(final GCUBEScope scope) - throws AbstractResourceException { + public final String removeFromScope(final ScopeBean scope) throws AbstractResourceException { Assertion checker = new Assertion(); checker.validate(scope != null, new ResourceParameterException("Invalid parameter scope. null not allowed.")); checker.validate(this.getID() != null, new ResourceOperationException("Invalid ID. null not allowed.")); - + + String currScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(scope.toString()); + String retval = this.basicRemoveFromScope(scope); - - // -- PHASE 2 - optional - - // Builds the stub without the removed scope - GCUBEResource resStub = this.getGCUBEResource(scope); - // Refreshes the local profile - resStub.removeScope(scope); - - /* - * These steps are for resources different from GHN and RI - */ - if (!this.getType().equals(AllowedResourceTypes.GHN.name()) && - !this.getType().equals(AllowedResourceTypes.RunningInstance.name())) { - // Phase 1 - // if the resource joins only the current scope, after the removal it has also to be deleted - try { - List boundedScopes = this.validateScopes(resStub.getScopes().values().toArray(new GCUBEScope[]{})); - if (boundedScopes == null) { - ServerConsole.warn(LOG_PREFIX, "[REMOVE-FROM-SCOPE] The resource " + this.getType() + " has no bound scopes"); - return retval; - } - - if (boundedScopes.size() == 0) { - ServerConsole.trace(LOG_PREFIX, "[REMOVE-FROM-SCOPE] [DELETE-BRANCH] deleting resource since no more scopes remained"); - this.getISPublisher().removeGCUBEResource( - this.getID(), this.getType().name(), scope, this.getSecurityManager()); - return retval; - } else { - // requires the update of the resources in all other scopes - for (GCUBEScope _scope : boundedScopes) { - if (!scope.equals(_scope)) { - try { - ServerConsole.trace(LOG_PREFIX, "[REMOVE-FROM-SCOPE] [UPDATE-BRANCH] Updating profile in scope [" + _scope.toString() + "]"); - this.getISPublisher().updateGCUBEResource(resStub, _scope, getSecurityManager()); - } catch (Exception e) { - ServerConsole.error(LOG_PREFIX, e); - } - } - } - } - - } catch (Exception e) { - throw new ResourceOperationException(e); - } - } - + + ScopeProvider.instance.set(currScope); return retval; } @@ -704,14 +519,10 @@ public abstract class AbstractResourceManager { * @param scopes * @return */ - protected List validateScopes(final GCUBEScope[] scopes) { - List retval = new Vector(); - for (GCUBEScope scope : scopes) { - try { - retval.add(ScopeManager.getScope(scope.toString())); - } catch (Exception e) { - ServerConsole.error(LOG_PREFIX, e); - } + protected List validateScopes(final String[] scopes) { + List retval = new Vector(); + for (int i = 0; i < scopes.length; i++) { + retval.add(new ScopeBean(scopes[i])); } return retval; } @@ -722,11 +533,11 @@ public abstract class AbstractResourceManager { * @param scope where the resource is bound * @throws AbstractResourceException */ - public final void forceDelete(final GCUBEScope scope) throws AbstractResourceException { + public final void forceDelete(final ScopeBean scope) throws AbstractResourceException { ServerConsole.trace(LOG_PREFIX, "[DELETE] [DELETE-BRANCH] deleting resource since no more scopes remained"); + Resource resStub = this.getResource(scope); try { - this.getISPublisher().removeGCUBEResource( - this.getID(), this.getType().name(), scope, this.getSecurityManager()); + this.getRegistryPublisher().remove(resStub); } catch (Exception e) { ServerConsole.error(LOG_PREFIX, e); } @@ -737,64 +548,37 @@ public abstract class AbstractResourceManager { * According to the * * official wiki the resource is deleted only if is not bound in other scopes. Otherwise this - * operation simply corresponds to the in deep remove from scope. + * operation simply corresponds to remove from scope. * @param scope * @throws ResourceOperationException */ - public final void delete(final GCUBEScope scope) throws AbstractResourceException { + public final void delete(final ScopeBean scope) throws AbstractResourceException { Assertion checker = new Assertion(); checker.validate(scope != null, new ResourceParameterException("Invalid parameter scope. null not allowed.")); checker.validate(this.getID() != null, new ResourceOperationException("Invalid ID. null not allowed.")); System.out.println("DELETING TYPE: "+ this.getType()); + String currScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(scope.toString()); - GCUBEResource resStub = this.getGCUBEResource(scope); - List boundedScopes = this.validateScopes(resStub.getScopes().values().toArray(new GCUBEScope[]{})); + Resource resStub = this.getResource(scope); + + List boundedScopes = this.validateScopes(resStub.scopes().toArray(new String[0])); ServerConsole.trace(LOG_PREFIX, "[DELETE] " + this.getType() + " " + this.getID() + " in scope [" + scope + "]"); ServerConsole.trace(LOG_PREFIX, "[DELETE] " + this.getType() + " " + this.getID() + " is bound to (" + boundedScopes.size() + ") scopes"); - /* - * Removefromscope accetta un boolean piu la resource gia ottenuta. - * boolean per decidere se saltare fase due di update che la ripeto piu volte - * rispetto a qui che lo faccio una volta sola. - */ - for (GCUBEScope _scope : boundedScopes) { - // Removing from the children scopes - if (_scope.isEnclosedIn(scope) || scope.equals(_scope)) { - this.basicRemoveFromScope(_scope); - resStub.removeScope(_scope); - } - } - - // Phase 2 - // after the removal, the resource must be also updated in the other scopes it belongs to, - // otherwise it will wrongly report there a scope where actually it is not registered anymore. - // In order to do so, the just removed scope must be removed from the local - // GCUBEResource object by invoking the method GCUBEResource.removeScope() - // and then the resource must be updated in all the remaining scopes. - - - if (resStub.getScopes().isEmpty()) { - ServerConsole.trace(LOG_PREFIX, "[DELETE] [DELETE-BRANCH] deleting resource since no more scopes remained"); - try { - this.getISPublisher().removeGCUBEResource( - this.getID(), this.getType().name(), scope, this.getSecurityManager()); - } catch (Exception e) { - - } - } else { - boundedScopes = this.validateScopes(resStub.getScopes().values().toArray(new GCUBEScope[]{})); - for (GCUBEScope _scope : boundedScopes) { - try { - ServerConsole.trace(LOG_PREFIX, "[DELETE] [UPDATE-BRANCH]" + this.getType() + " " + this.getID() + " in scope [" + _scope + "]"); - this.getISPublisher().updateGCUBEResource(resStub, _scope, getSecurityManager()); - } catch (Exception e) { - ServerConsole.error(LOG_PREFIX, e); - } - } + if (boundedScopes.size() > 1) + ServerConsole.trace(LOG_PREFIX, "[DELETE] [DELETE-BRANCH] deleting resource is a remove from scope since more than 1 scope is present " + resStub.id()); + else if (boundedScopes.size() == 1) + ServerConsole.trace(LOG_PREFIX, "[DELETE] [DELETE-BRANCH] deleting resource since is bound to 1 scope only " + resStub.id()); + try { + this.getRegistryPublisher().remove(resStub); + } catch (Exception e) { + } + ScopeProvider.instance.set(currScope); } } diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/CollectionManager.java b/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/CollectionManager.java index 7a58927..5bc8bda 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/CollectionManager.java +++ b/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/CollectionManager.java @@ -17,9 +17,11 @@ package org.gcube.resourcemanagement.support.server.managers.resources; import java.io.StringReader; + import org.gcube.common.core.contexts.GHNContext; import org.gcube.common.core.resources.GCUBECollection; import org.gcube.common.core.resources.GCUBEResource; +import org.gcube.common.resources.gcore.Resource; import org.gcube.resourcemanagement.support.server.exceptions.AbstractResourceException; import org.gcube.resourcemanagement.support.server.exceptions.ResourceAccessException; import org.gcube.resourcemanagement.support.server.exceptions.ResourceParameterException; @@ -66,19 +68,13 @@ public class CollectionManager extends AbstractResourceManager { super(id, name, AllowedResourceTypes.Collection, subtype); } - /** - * {@inheritDoc} - */ + + @Override - protected final GCUBEResource buildGCUBEResource(final String xmlRepresentation) - throws AbstractResourceException { - try { - GCUBECollection impl = GHNContext.getImplementation(GCUBECollection.class); - impl.load(new StringReader(xmlRepresentation)); - return impl; - } catch (Exception e) { - throw new ResourceAccessException("Cannot load the stub for resource " + this.getType(), e); - } + protected Resource buildResource(String xmlRepresentation) + throws AbstractResourceException { + // TODO Auto-generated method stub + return null; } } diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/GHNManager.java b/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/GHNManager.java index edb97f3..2c0fad5 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/GHNManager.java +++ b/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/GHNManager.java @@ -18,17 +18,17 @@ package org.gcube.resourcemanagement.support.server.managers.resources; import java.io.StringReader; -import org.apache.axis.message.addressing.Address; -import org.apache.axis.message.addressing.EndpointReferenceType; -import org.gcube.common.core.contexts.GCUBERemotePortTypeContext; -import org.gcube.common.core.contexts.GHNContext; -import org.gcube.common.core.resources.GCUBEHostingNode; -import org.gcube.common.core.resources.GCUBEResource; -import org.gcube.common.core.scope.GCUBEScope; -import org.gcube.common.vremanagement.ghnmanager.stubs.AddScopeInputParams; -import org.gcube.common.vremanagement.ghnmanager.stubs.GHNManagerPortType; -import org.gcube.common.vremanagement.ghnmanager.stubs.ShutdownOptions; -import org.gcube.common.vremanagement.ghnmanager.stubs.service.GHNManagerServiceAddressingLocator; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Unmarshaller; + +import org.gcube.common.resources.gcore.HostingNode; +import org.gcube.common.resources.gcore.Resource; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.scope.impl.ScopeBean; +import org.gcube.common.vremanagement.ghnmanager.client.GHNManagerLibrary; +import org.gcube.common.vremanagement.ghnmanager.client.fws.Types.AddScopeInputParams; +import org.gcube.common.vremanagement.ghnmanager.client.fws.Types.ShutdownOptions; +import org.gcube.common.vremanagement.ghnmanager.client.proxies.Proxies; import org.gcube.resourcemanagement.support.server.exceptions.AbstractResourceException; import org.gcube.resourcemanagement.support.server.exceptions.ResourceAccessException; import org.gcube.resourcemanagement.support.server.exceptions.ResourceOperationException; @@ -100,10 +100,7 @@ public class GHNManager extends AbstractResourceManager { * @throws ResourceParameterException * @throws ResourceOperationException */ - public final String addToNewScope( - final GCUBEScope sourceScope, - final GCUBEScope targetScope, - final String scopeMap) + public final String addToNewScope(final ScopeBean sourceScope, final ScopeBean targetScope, final String scopeMap) throws AbstractResourceException { Assertion checker = new Assertion(); checker.validate(sourceScope != null, new ResourceParameterException("Parameter sourceScope null not allowed.")); @@ -111,7 +108,7 @@ public class GHNManager extends AbstractResourceManager { checker.validate(scopeMap != null && scopeMap.trim().length() > 0, new ResourceParameterException("Invalid scopeMap parameter.")); checker.validate(this.getID() != null, new ResourceOperationException("This operation cannot be applied to resources with no ID.")); - if (!targetScope.isEnclosedIn(sourceScope)) { + if (!sourceScope.toString().contains(targetScope.toString())) { throw new ResourceOperationException( "You are not allowed to apply to this scope. Target scope is not enclosed in the source one."); } @@ -144,22 +141,20 @@ public class GHNManager extends AbstractResourceManager { * @return * @throws AbstractResourceException */ - public final GHNManagerPortType getGHNManager(final GCUBEScope scope) - throws AbstractResourceException { + public final GHNManagerLibrary getGHNManager(final ScopeBean scope) throws AbstractResourceException { Assertion checker = new Assertion(); checker.validate(scope != null, new ResourceParameterException("Invalid scope")); checker.validate(this.getName() != null, new ResourceOperationException("This operation cannot be applied to resources with no name.")); - - EndpointReferenceType endpoint = new EndpointReferenceType(); - try { - endpoint.setAddress(new Address("http://" + this.getName() + "/wsrf/services/gcube/common/vremanagement/GHNManager")); - GHNManagerServiceAddressingLocator locator = new GHNManagerServiceAddressingLocator(); - GHNManagerPortType pt = locator.getGHNManagerPortTypePort(endpoint); - pt = GCUBERemotePortTypeContext.getProxy(pt, scope, this.getSecurityManager()); - return pt; - } catch (Exception e) { - throw new ResourceAccessException(e.getMessage()); + + String currScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(scope.toString()); + ServerConsole.info(LOG_PREFIX, "Getting Resource Manager in scope [" + scope.toString() + "]"); + GHNManagerLibrary ghnMan = Proxies.service().build(); + if (ghnMan == null) { // no managers found + throw new ResourceAccessException("Unable to find GHNManagers for resource " + this.getType() + " in scope: " + scope.toString()); } + ScopeProvider.instance.set(currScope); + return ghnMan; } /** @@ -176,12 +171,12 @@ public class GHNManager extends AbstractResourceManager { * @throws ResourceAccessException * @throws ResourceParameterException */ - public final void shutDown(final GCUBEScope scope, final boolean restart, final boolean clean) + public final void shutDown(final ScopeBean scope, final boolean restart, final boolean clean) throws AbstractResourceException { Assertion checker = new Assertion(); checker.validate(this.getID() != null, new ResourceAccessException("This operation cannot be applied to resources with no ID.")); - GHNManagerPortType ghnManager = this.getGHNManager(scope); + GHNManagerLibrary ghnManager = this.getGHNManager(scope); ServerConsole.trace(LOG_PREFIX, "Shutting down " + scope.toString() + " " + this.getType() + " " + this.getID()); @@ -196,12 +191,13 @@ public class GHNManager extends AbstractResourceManager { } @Override - protected final GCUBEResource buildGCUBEResource(final String xmlRepresentation) - throws AbstractResourceException { + protected final Resource buildResource(final String xmlRepresentation) throws AbstractResourceException { try { - GCUBEHostingNode impl = GHNContext.getImplementation(GCUBEHostingNode.class); - impl.load(new StringReader(xmlRepresentation)); - return impl; + JAXBContext ctx = JAXBContext.newInstance(HostingNode.class); + Unmarshaller unmarshaller = ctx.createUnmarshaller(); + StringReader reader = new StringReader(xmlRepresentation); + HostingNode deserialised = (HostingNode) unmarshaller.unmarshal(reader); + return deserialised; } catch (Exception e) { throw new ResourceAccessException("Cannot load the stub for resource " + this.getType(), e); } diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/GenericResourceManager.java b/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/GenericResourceManager.java index 5d51b20..36c6ba7 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/GenericResourceManager.java +++ b/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/GenericResourceManager.java @@ -16,21 +16,36 @@ package org.gcube.resourcemanagement.support.server.managers.resources; +import static org.gcube.resources.discovery.icclient.ICFactory.clientFor; +import static org.gcube.resources.discovery.icclient.ICFactory.queryFor; + +import java.io.IOException; import java.io.StringReader; -import org.gcube.common.core.contexts.GHNContext; -import org.gcube.common.core.informationsystem.publisher.ISPublisher; -import org.gcube.common.core.resources.GCUBEGenericResource; -import org.gcube.common.core.resources.GCUBEResource; -import org.gcube.common.core.scope.GCUBEScope; +import java.util.List; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Unmarshaller; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.gcube.common.resources.gcore.GenericResource; +import org.gcube.common.resources.gcore.Resource; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.scope.impl.ScopeBean; +import org.gcube.informationsystem.publisher.RegistryPublisher; import org.gcube.resourcemanagement.support.server.exceptions.AbstractResourceException; import org.gcube.resourcemanagement.support.server.exceptions.ResourceAccessException; -import org.gcube.resourcemanagement.support.server.exceptions.ResourceOperationException; import org.gcube.resourcemanagement.support.server.exceptions.ResourceParameterException; -import org.gcube.resourcemanagement.support.server.managers.scope.ScopeManager; import org.gcube.resourcemanagement.support.server.types.AllowedResourceTypes; import org.gcube.resourcemanagement.support.server.utils.Assertion; import org.gcube.resourcemanagement.support.server.utils.ServerConsole; +import org.gcube.resources.discovery.client.api.DiscoveryClient; +import org.gcube.resources.discovery.client.queries.api.SimpleQuery; import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; /** @@ -101,103 +116,123 @@ public class GenericResourceManager extends AbstractResourceManager { * @param subType (optional) if null it will not be changed * @param scope (optional) if null it will not be changed * @throws AbstractResourceException + * @throws ParserConfigurationException + * @throws SAXException + * @throws IOException */ - public final void update( - final String name, - final String description, - final String body, - final String subType, - final GCUBEScope scope) - throws AbstractResourceException { + public final void update(final String name, final String description, final String body, final String subType, final ScopeBean scope) throws Exception { + Assertion checker = new Assertion(); checker.validate(name != null && name.trim().length() != 0, new ResourceParameterException("Invalid field name. Null or empty value not allowed")); ServerConsole.trace(LOG_PREFIX, "[RES-UPDATE] updating resource " + this.getType() + " " + this.getID()); - GCUBEGenericResource res = (GCUBEGenericResource) this.getGCUBEResource(scope); - res.setName(name.trim()); + GenericResource resource = getResourceToEditById(this.getID(), scope); + resource.profile().name(name.trim()); + if (description != null) { - res.setDescription(description.trim()); + resource.profile().description(description.trim()); } if (body != null) { - res.setBody(body.trim()); + appendXmlFragment(resource.profile().newBody(), body); } - if (subType != null) { - res.setSecondaryType(subType.trim()); - } - try { - this.getISPublisher().updateGCUBEResource(res, scope, this.getSecurityManager()); - - /* FIXME old release - * List boundedScopes = this.validateScopes(res.getScopes().values().toArray(new GCUBEScope[]{})); - - - for (GCUBEScope _scope : boundedScopes) { - ServerConsole.trace(LOG_PREFIX, "[RES-UPDATE] ISPublisher updating resource " + this.getType() + " " + this.getID() + " in scope: [" + _scope + "]"); - this.getISPublisher().updateGCUBEResource(res, _scope, this.getSecurityManager()); - } - */ - } catch (Exception e) { - throw new ResourceOperationException(e.getMessage()); + if (subType != null) + resource.profile().type(subType.trim()); + + String currScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(scope.toString()); + RegistryPublisher publisher = getRegistryPublisher(); + String id = publisher.update(resource).id(); + + if (id == null || id.length() == 0) { + throw new Exception("The GenericResource has not been updated"); } + ScopeProvider.instance.set(currScope); + ServerConsole.info(LOG_PREFIX, "Resource Updated with ID: " + id); } + private GenericResource getResourceToEditById(String id, ScopeBean scope) throws Exception { + + String currScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(scope.toString()); + + SimpleQuery query = queryFor(GenericResource.class); + query.addCondition("$resource/ID/text() eq '"+ id +"'"); + + DiscoveryClient client = clientFor(GenericResource.class); + + List r = client.submit(query); + + ScopeProvider.instance.set(currScope); + if (r == null || r.isEmpty()) + throw new Exception("Could not retrieve GenericResource profile with id " + id + " in scope + " +scope); + else + return r.get(0); + } /** * Creates a Generic Resource and returns the ID given by the * resource manager at creation phase. * @return the id assigned to the newly created resource */ - public static final synchronized String create( - final String ID, - final GCUBEScope scope, - final String name, - final String description, - final String body, - final String subType) + public static final synchronized String create(final String ID, final ScopeBean scope, final String name, final String description, final String body, final String subType) throws Exception { Assertion checker = new Assertion(); checker.validate(name != null && name.trim().length() != 0, new ResourceParameterException("Invalid field name. Null or empty value not allowed")); checker.validate(subType != null && subType.trim().length() != 0, new ResourceParameterException("Invalid field subType. Null or empty value not allowed")); - GCUBEGenericResource resource = GHNContext.getImplementation(GCUBEGenericResource.class); - if (ID != null) { - resource.setID(ID); - } - resource.setName(name.trim()); + GenericResource resource = new GenericResource(); + resource.newProfile().name(name.trim()); + if (description != null) { - resource.setDescription(description.trim()); + resource.profile().description(description.trim()); } if (body != null) { - resource.setBody(body.trim()); + appendXmlFragment(resource.profile().newBody(), body); } - resource.setSecondaryType(subType.trim()); - resource.addScope(scope); + resource.profile().type(subType.trim()); + GenericResourceManager gm = new GenericResourceManager(); - ISPublisher publisher = gm.getISPublisher(); - String retval = publisher.registerGCUBEResource(resource, scope, gm.getSecurityManager()); - - if (retval == null || retval.length() == 0) { + + String currScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(scope.toString()); + RegistryPublisher publisher = gm.getRegistryPublisher(); + String id = publisher.create(resource).id(); + + if (id == null || id.length() == 0) { throw new Exception("The GenericResource has not been created"); } - - Document doc = ScopeManager.getDocumentGivenXML(retval); - String id = doc.getElementsByTagName("ID").item(0).getFirstChild().getNodeValue(); - + ScopeProvider.instance.set(currScope); ServerConsole.info(LOG_PREFIX, "Resource Created with ID: " + id); return id; } @Override - protected final GCUBEResource buildGCUBEResource( - final String xmlRepresentation) throws AbstractResourceException { + protected final Resource buildResource(final String xmlRepresentation) throws AbstractResourceException { try { - GCUBEGenericResource impl = GHNContext.getImplementation(GCUBEGenericResource.class); - impl.load(new StringReader(xmlRepresentation)); - return impl; + JAXBContext ctx = JAXBContext.newInstance(GenericResource.class); + Unmarshaller unmarshaller = ctx.createUnmarshaller(); + StringReader reader = new StringReader(xmlRepresentation); + GenericResource deserialised = (GenericResource) unmarshaller.unmarshal(reader); + return deserialised; } catch (Exception e) { - throw new ResourceAccessException("Cannot load the stub for resource " + this.getType(), e); + throw new ResourceAccessException("Cannot load the resource " + this.getType(), e); } } + /** + * append a well formed xml string to the body + * @param parent + * @param fragment + * @throws IOException + * @throws SAXException + * @throws ParserConfigurationException + */ + public static void appendXmlFragment(Node parent, String fragment) throws IOException, SAXException, ParserConfigurationException { + DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document doc = parent.getOwnerDocument(); + Node fragmentNode = docBuilder.parse(new InputSource(new StringReader(fragment))).getDocumentElement(); + fragmentNode = doc.importNode(fragmentNode, true); + parent.appendChild(fragmentNode); + } } diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/ManagementUtils.java b/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/ManagementUtils.java index 5c3ed3c..9aa4539 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/ManagementUtils.java +++ b/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/ManagementUtils.java @@ -16,18 +16,21 @@ package org.gcube.resourcemanagement.support.server.managers.resources; +import static org.gcube.resources.discovery.icclient.ICFactory.clientFor; +import static org.gcube.resources.discovery.icclient.ICFactory.queryFor; + import java.io.File; -import java.rmi.RemoteException; +import java.util.ArrayList; import java.util.List; import java.util.Vector; -import org.gcube.common.core.faults.GCUBEFault; -import org.gcube.common.core.informationsystem.client.AtomicCondition; -import org.gcube.common.core.informationsystem.client.queries.GCUBEServiceQuery; -import org.gcube.common.core.resources.GCUBEResource; -import org.gcube.common.core.resources.GCUBEService; -import org.gcube.common.core.scope.GCUBEScope; -import org.gcube.common.core.scope.GCUBEScope.Type; +import org.gcube.common.resources.gcore.Resource; +import org.gcube.common.resources.gcore.Software; +import org.gcube.common.resources.gcore.Software.Profile.ServicePackage; +import org.gcube.common.resources.gcore.Software.Profile.SoftwarePackage; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.scope.impl.ScopeBean; +import org.gcube.common.scope.impl.ScopeBean.Type; import org.gcube.resourcemanagement.support.server.exceptions.AbstractResourceException; import org.gcube.resourcemanagement.support.server.exceptions.ResourceAccessException; import org.gcube.resourcemanagement.support.server.exceptions.ResourceOperationException; @@ -36,12 +39,15 @@ import org.gcube.resourcemanagement.support.server.managers.scope.ScopeManager; import org.gcube.resourcemanagement.support.server.types.AllowedResourceTypes; import org.gcube.resourcemanagement.support.server.utils.Assertion; import org.gcube.resourcemanagement.support.server.utils.ServerConsole; -import org.gcube.vremanagement.resourcemanager.stubs.binder.AddResourcesParameters; -import org.gcube.vremanagement.resourcemanager.stubs.binder.PackageItem; -import org.gcube.vremanagement.resourcemanager.stubs.binder.ResourceBinderPortType; -import org.gcube.vremanagement.resourcemanager.stubs.binder.ResourceItem; -import org.gcube.vremanagement.resourcemanager.stubs.binder.ResourceList; -import org.gcube.vremanagement.resourcemanager.stubs.binder.SoftwareList; +import org.gcube.resources.discovery.client.api.DiscoveryClient; +import org.gcube.resources.discovery.client.queries.api.SimpleQuery; +import org.gcube.vremanagement.resourcemanager.client.RMBinderLibrary; +import org.gcube.vremanagement.resourcemanager.client.fws.Types.AddResourcesParameters; +import org.gcube.vremanagement.resourcemanager.client.fws.Types.PackageItem; +import org.gcube.vremanagement.resourcemanager.client.fws.Types.ResourceItem; +import org.gcube.vremanagement.resourcemanager.client.fws.Types.ResourceList; +import org.gcube.vremanagement.resourcemanager.client.fws.Types.SoftwareList; + /** * A support class containing operations to manage multiple resources. @@ -63,8 +69,8 @@ public class ManagementUtils { public static final synchronized String addToExistingScope( final AllowedResourceTypes type, final String[] resourceIDs, - final GCUBEScope sourceScope, - final GCUBEScope targetScope) + final ScopeBean sourceScope, + final ScopeBean targetScope) throws Exception { ServerConsole.trace( LOG_PREFIX, @@ -77,7 +83,7 @@ public class ManagementUtils { // 1 - If not RI or GHN and the scopes are sibling and VO copyFromToVO if (!(type == AllowedResourceTypes.GHN) && !(type == AllowedResourceTypes.RunningInstance) && - sourceScope.getType() == Type.VO && targetScope.getType() == Type.VO) { + sourceScope.type() == Type.VO && targetScope.type() == Type.VO) { // Phase 1. retrieve the resource to copy //GCUBEResource resStub = this.getGCUBEResource(sourceScope); @@ -90,8 +96,11 @@ public class ManagementUtils { try { for (String id : resourceIDs) { AbstractResourceManager res = ResourceFactory.createResourceManager(type, id); - GCUBEResource resStub = res.getGCUBEResource(sourceScope); - res.getISPublisher().registerGCUBEResource(resStub, targetScope, res.getSecurityManager()); + Resource resStub = res.getResource(sourceScope); + String curr = ScopeProvider.instance.get(); + ScopeProvider.instance.set(targetScope.toString()); + res.getRegistryPublisher().update(resStub); + ScopeProvider.instance.set(curr); } } catch (Exception e) { throw new ResourceAccessException(e.getMessage()); @@ -102,7 +111,7 @@ public class ManagementUtils { // Add a gCube Resource to // (i) a VRE scope from the parent VO or // (ii) a VO scope from the infrastructure scope - if (!targetScope.isEnclosedIn(sourceScope)) { + if (sourceScope.toString().contains(targetScope.toString())) { throw new ResourceOperationException( "You are not allowed to apply to this scope. Target scope is not enclosed in the source one."); } @@ -120,7 +129,7 @@ public class ManagementUtils { * @return the generated report ID */ public static final synchronized String removeFromExistingScope(final AllowedResourceTypes type, final String[] resourceIDs, - final GCUBEScope sourceScope, final GCUBEScope targetScope) throws Exception { + final ScopeBean sourceScope, final ScopeBean targetScope) throws Exception { ServerConsole.trace( LOG_PREFIX, @@ -154,23 +163,20 @@ public class ManagementUtils { * @return the ID of generated report * @throws AbstractResourceException */ - private static synchronized String bindToScope( - final AllowedResourceTypes type, - final String[] resourceIDs, - final GCUBEScope targetScope) - throws AbstractResourceException { + private static synchronized String bindToScope(final AllowedResourceTypes type, final String[] resourceIDs, final ScopeBean targetScope)throws AbstractResourceException { AddResourcesParameters addParam = new AddResourcesParameters(); - ResourceBinderPortType manager = ResourceFactory.createResourceManager(type).getResourceManager(targetScope); - List resToBind = new Vector(); + RMBinderLibrary manager = ResourceFactory.createResourceManager(type).getResourceManager(targetScope.toString()); + ArrayList resToBind = new ArrayList(); for (String id : resourceIDs) { ResourceItem toAdd = new ResourceItem(); - toAdd.setID(id); + toAdd.id = id; toAdd.setType(type.name()); resToBind.add(toAdd); } ResourceList r = new ResourceList(); - r.setResource(resToBind.toArray(new ResourceItem[]{})); + + r.setResource(resToBind); addParam.setResources(r); addParam.setTargetScope(targetScope.toString()); @@ -191,11 +197,7 @@ public class ManagementUtils { } } - public static synchronized void delete( - final AllowedResourceTypes type, - final String[] resourceIDs, - final GCUBEScope scope) - throws AbstractResourceException { + public static synchronized void delete(final AllowedResourceTypes type, final String[] resourceIDs, final ScopeBean scope) throws AbstractResourceException { AbstractResourceManager resource = ResourceFactory.createResourceManager(type); for (String id : resourceIDs) { try { @@ -214,18 +216,14 @@ public class ManagementUtils { * @return the generated report ID * @throws Exception */ - public static final synchronized String deploy( - final GCUBEScope scope, - final String[] ghnsID, - final String[] servicesID) - throws Exception { + public static final synchronized String deploy(final ScopeBean scope, final String[] ghnsID, final String[] servicesID) throws Exception { Assertion checker = new Assertion(); checker.validate(ghnsID != null && ghnsID.length != 0, new ResourceParameterException("Invalid ghnsID parameter. It cannot be null or empty.")); checker.validate(servicesID != null && servicesID.length != 0, new ResourceParameterException("Invalid servicesID parameter. It cannot be null or empty.")); checker.validate(scope != null, new Exception("Cannot retrieve the scope.")); AbstractResourceManager resource = ResourceFactory.createResourceManager(AllowedResourceTypes.Service); - ResourceBinderPortType manager = ResourceFactory.createResourceManager(AllowedResourceTypes.Service).getResourceManager(scope); + RMBinderLibrary manager = ResourceFactory.createResourceManager(AllowedResourceTypes.Service).getResourceManager(scope.toString()); System.out.println("\n\n**** These are the service ids to deploy on SCOPE " + scope); for (String sid : servicesID) { @@ -236,21 +234,26 @@ public class ManagementUtils { System.out.println(ghn); } - List serviceProfiles = new Vector(); + ArrayList serviceProfiles = new ArrayList(); + + // Retrieves the profiles of services - final GCUBEServiceQuery query = resource.getISClient().getQuery(GCUBEServiceQuery.class); + SimpleQuery query = null; + DiscoveryClient client = clientFor(Software.class); + prepareServices: for (String serviceID : servicesID) { - System.out.println("\n\n**** Query the IsClient to get the profile"); - query.clearConditions(); - query.addAtomicConditions(new AtomicCondition("/ID", serviceID)); - - System.out.println("**** Query : " + query.getExpression()); - - List results = resource.getISClient().execute(query, scope); + System.out.println("\n\n**** Query the ICClient to get the profile"); + query = queryFor(Software.class); + query.addCondition("$resource/Profile/ID/text() eq '" + serviceID + "'"); + System.out.println("**** Query : " + query.toString()); + String curr = ScopeProvider.instance.get(); + ScopeProvider.instance.set(scope.toString()); + List results = client.submit(query); + ScopeProvider.instance.set(curr); System.out.println("**** results received : " + results.size()); - GCUBEService ret = null; + Software ret = null; if (results != null && results.size() > 0) { ret = results.get(0); } else { @@ -258,26 +261,26 @@ public class ManagementUtils { } if (ret == null || - ret.getServiceClass() == null || - ret.getServiceName() == null || - ret.getVersion() == null) { + ret.profile() == null || + ret.profile().softwareClass() == null || + ret.profile().softwareName() == null) { ServerConsole.error(LOG_PREFIX, "found an invalid service profile"); continue; } PackageItem toAdd = new PackageItem(); - toAdd.setServiceClass(ret.getServiceClass()); - toAdd.setServiceName(ret.getServiceName()); - toAdd.setServiceVersion(ret.getVersion()); - if (ret.getPackages().size() == 1) { - toAdd.setPackageName(ret.getPackages().get(0).getName()); - toAdd.setPackageVersion(ret.getPackages().get(0).getVersion()); + toAdd.serviceClass = ret.profile().softwareClass(); + toAdd.serviceName = ret.profile().softwareName(); + toAdd.serviceVersion ="1.0.0"; + if (ret.profile().packages().size() == 1) { + toAdd.packageName = ret.profile().packages().iterator().next().name(); + toAdd.packageVersion = ret.profile().packages().iterator().next().version(); } else { - for (org.gcube.common.core.resources.service.Package p : ret.getPackages()) { - if (p.getClass().isAssignableFrom(org.gcube.common.core.resources.service.MainPackage.class)) { - toAdd.setPackageName(p.getName()); - toAdd.setPackageVersion(p.getVersion()); + for (SoftwarePackage p : ret.profile().packages()) { + if (p.getClass().isAssignableFrom(ServicePackage.class)) { + toAdd.packageName = p.name(); + toAdd.packageVersion = p.version(); break; } } @@ -287,29 +290,25 @@ public class ManagementUtils { } SoftwareList serviceList = new SoftwareList(); - serviceList.setSuggestedTargetGHNNames(ghnsID); - serviceList.setSoftware(serviceProfiles.toArray(new PackageItem[0])); - + ArrayList arrayGHNSids = new ArrayList(); + for (int i = 0; i < ghnsID.length; i++) { + arrayGHNSids.add(ghnsID[i]); + } + serviceList.suggestedTargetGHNNames = arrayGHNSids; + serviceList.software = serviceProfiles; + AddResourcesParameters addResourcesParameters = new AddResourcesParameters(); - addResourcesParameters.setSoftware(serviceList); + addResourcesParameters.softwareList = serviceList; addResourcesParameters.setTargetScope(scope.toString()); System.out.println("\n\n**** These is the ServiceList i pass to ResourceManagerPortType: "); - for (int i = 0; i < serviceList.getSoftware().length; i++) { - System.out.println(serviceList.getSoftware()[i]); + for (int i = 0; i < serviceList.software.size(); i++) { + System.out.println(serviceList.software.get(i)); } String id = ""; - try { - id = manager.addResources(addResourcesParameters); - ServerConsole.debug(LOG_PREFIX, "Report ID = " + id); - } catch (GCUBEFault e) { - ServerConsole.error(LOG_PREFIX, "during deployment.", e); - throw e; - } catch (RemoteException e) { - ServerConsole.error(LOG_PREFIX, "during deployment.", e); - throw e; - } + id = manager.addResources(addResourcesParameters); + ServerConsole.debug(LOG_PREFIX, "Report ID = " + id); System.out.println("Returning.... no exceptions"); return id; } @@ -332,7 +331,7 @@ public class ManagementUtils { null, "test" }, - ScopeManager.getScope("/gcube/devsec/devVRE")); + new ScopeBean("/gcube/devsec/devVRE")); } catch (Exception e) { ServerConsole.error(LOG_PREFIX, e); } diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/RunningInstanceManager.java b/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/RunningInstanceManager.java index 74b097a..f62e6e1 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/RunningInstanceManager.java +++ b/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/RunningInstanceManager.java @@ -16,17 +16,23 @@ package org.gcube.resourcemanagement.support.server.managers.resources; -import java.io.StringReader; -import java.util.List; -import java.util.Vector; +import static org.gcube.resources.discovery.icclient.ICFactory.clientFor; +import static org.gcube.resources.discovery.icclient.ICFactory.queryFor; -import org.gcube.common.core.contexts.GHNContext; -import org.gcube.common.core.informationsystem.client.AtomicCondition; -import org.gcube.common.core.informationsystem.client.queries.GCUBEServiceQuery; -import org.gcube.common.core.resources.GCUBEResource; -import org.gcube.common.core.resources.GCUBERunningInstance; -import org.gcube.common.core.resources.GCUBEService; -import org.gcube.common.core.scope.GCUBEScope; +import java.io.StringReader; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Unmarshaller; + +import org.gcube.common.resources.gcore.GCoreEndpoint; +import org.gcube.common.resources.gcore.Resource; +import org.gcube.common.resources.gcore.Software; +import org.gcube.common.resources.gcore.Software.Profile.ServicePackage; +import org.gcube.common.resources.gcore.Software.Profile.SoftwarePackage; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.scope.impl.ScopeBean; import org.gcube.resourcemanagement.support.server.exceptions.AbstractResourceException; import org.gcube.resourcemanagement.support.server.exceptions.ResourceAccessException; import org.gcube.resourcemanagement.support.server.exceptions.ResourceOperationException; @@ -34,15 +40,16 @@ import org.gcube.resourcemanagement.support.server.exceptions.ResourceParameterE import org.gcube.resourcemanagement.support.server.types.AllowedResourceTypes; import org.gcube.resourcemanagement.support.server.utils.Assertion; import org.gcube.resourcemanagement.support.server.utils.ServerConsole; -import org.gcube.vremanagement.resourcemanager.stubs.binder.AddResourcesParameters; -import org.gcube.vremanagement.resourcemanager.stubs.binder.PackageItem; -import org.gcube.vremanagement.resourcemanager.stubs.binder.RemoveResourcesParameters; -import org.gcube.vremanagement.resourcemanager.stubs.binder.ResourceBinderPortType; -import org.gcube.vremanagement.resourcemanager.stubs.binder.ResourceItem; -import org.gcube.vremanagement.resourcemanager.stubs.binder.ResourceList; -import org.gcube.vremanagement.resourcemanager.stubs.binder.SoftwareList; -import org.gcube.vremanagement.resourcemanager.stubs.reporting.ReportingPortType; - +import org.gcube.resources.discovery.client.api.DiscoveryClient; +import org.gcube.resources.discovery.client.queries.api.SimpleQuery; +import org.gcube.vremanagement.resourcemanager.client.RMBinderLibrary; +import org.gcube.vremanagement.resourcemanager.client.RMReportingLibrary; +import org.gcube.vremanagement.resourcemanager.client.fws.Types.AddResourcesParameters; +import org.gcube.vremanagement.resourcemanager.client.fws.Types.PackageItem; +import org.gcube.vremanagement.resourcemanager.client.fws.Types.RemoveResourcesParameters; +import org.gcube.vremanagement.resourcemanager.client.fws.Types.ResourceItem; +import org.gcube.vremanagement.resourcemanager.client.fws.Types.ResourceList; +import org.gcube.vremanagement.resourcemanager.client.fws.Types.SoftwareList; /** * @author Daniele Strollo (ISTI-CNR) @@ -56,43 +63,57 @@ public class RunningInstanceManager extends AbstractResourceManager { * @deprecated discouraged use. With no ID some operations cannot be accessed. */ public RunningInstanceManager() - throws ResourceParameterException, ResourceAccessException { + throws ResourceParameterException, ResourceAccessException { super(AllowedResourceTypes.RunningInstance); } public RunningInstanceManager(final String id) - throws ResourceParameterException, ResourceAccessException { + throws ResourceParameterException, ResourceAccessException { super(id, AllowedResourceTypes.RunningInstance); } public RunningInstanceManager(final String id, final String name) - throws ResourceParameterException, ResourceAccessException { + throws ResourceParameterException, ResourceAccessException { super(id, name, AllowedResourceTypes.RunningInstance); } public RunningInstanceManager(final String id, final String name, final String subType) - throws ResourceParameterException, ResourceAccessException { + throws ResourceParameterException, ResourceAccessException { super(id, name, AllowedResourceTypes.RunningInstance, subType); } - - public final String deploy( - final GCUBEScope scope, final String[] ghnsID, final String[] servicesID) - throws ResourceParameterException, ResourceOperationException { + /** + * + * @param scope + * @param ghnsID + * @param servicesID + * @return + * @throws ResourceParameterException + * @throws ResourceOperationException + */ + public final String deploy(final ScopeBean scope, final String[] ghnsID, final String[] servicesID) throws ResourceParameterException, ResourceOperationException { Assertion checker = new Assertion(); checker.validate(servicesID != null && servicesID.length != 0, new ResourceParameterException("Invalid servicesID parameter. It cannot be null or empty.")); checker.validate(scope != null, new ResourceParameterException("Cannot retrieve the scope.")); - List serviceProfiles = new Vector(); + ArrayList serviceProfiles = new ArrayList(); try { - // Retrieves the profiles of services - final GCUBEServiceQuery query = this.getISClient().getQuery(GCUBEServiceQuery.class); + + SimpleQuery query = null; + DiscoveryClient client = clientFor(Software.class); + prepareServices: for (String serviceID : servicesID) { - query.addAtomicConditions(new AtomicCondition("/ID", serviceID)); - List results = this.getISClient().execute(query, scope); - GCUBEService ret = null; + query = queryFor(Software.class); + query.addCondition("$resource/Profile/ID/text() eq '" + serviceID + "'"); + System.out.println("**** Query : " + query.toString()); + String curr = ScopeProvider.instance.get(); + ScopeProvider.instance.set(scope.toString()); + List results = client.submit(query); + ScopeProvider.instance.set(curr); + System.out.println("**** results received : " + results.size()); + Software ret = null; if (results != null && results.size() > 0) { ret = results.get(0); } else { @@ -100,26 +121,25 @@ public class RunningInstanceManager extends AbstractResourceManager { } if (ret == null || - ret.getServiceClass() == null || - ret.getServiceName() == null || - ret.getVersion() == null) { + ret.profile() == null || + ret.profile().softwareClass() == null || + ret.profile().softwareName() == null) { ServerConsole.error(LOG_PREFIX, "found an invalid service profile"); continue; } - PackageItem toAdd = new PackageItem(); - toAdd.setServiceClass(ret.getServiceClass()); - toAdd.setServiceName(ret.getServiceName()); - toAdd.setServiceVersion(ret.getVersion()); - if (ret.getPackages().size() == 1) { - toAdd.setPackageName(ret.getPackages().get(0).getName()); - toAdd.setPackageVersion(ret.getPackages().get(0).getVersion()); + toAdd.serviceClass = ret.profile().softwareClass(); + toAdd.serviceName = ret.profile().softwareName(); + toAdd.serviceVersion ="1.0.0"; + if (ret.profile().packages().size() == 1) { + toAdd.packageName = ret.profile().packages().iterator().next().name(); + toAdd.packageVersion = ret.profile().packages().iterator().next().version(); } else { - for (org.gcube.common.core.resources.service.Package p : ret.getPackages()) { - if (p.getClass().isAssignableFrom(org.gcube.common.core.resources.service.MainPackage.class)) { - toAdd.setPackageName(p.getName()); - toAdd.setPackageVersion(p.getVersion()); + for (SoftwarePackage p : ret.profile().packages()) { + if (p.getClass().isAssignableFrom(ServicePackage.class)) { + toAdd.packageName = p.name(); + toAdd.packageVersion = p.version(); break; } } @@ -130,29 +150,41 @@ public class RunningInstanceManager extends AbstractResourceManager { SoftwareList serviceList = new SoftwareList(); - // The GHNs are optional, suggested gHNs to use. - if (ghnsID != null && ghnsID.length > 0) { - serviceList.setSuggestedTargetGHNNames(ghnsID); + ArrayList arrayGHNSids = new ArrayList(); + for (int i = 0; i < ghnsID.length; i++) { + arrayGHNSids.add(ghnsID[i]); } - - serviceList.setSoftware(serviceProfiles.toArray(new PackageItem[0])); + serviceList.suggestedTargetGHNNames = arrayGHNSids; + serviceList.software = serviceProfiles; AddResourcesParameters addResourcesParameters = new AddResourcesParameters(); - addResourcesParameters.setSoftware(serviceList); + addResourcesParameters.softwareList = serviceList; addResourcesParameters.setTargetScope(scope.toString()); - String reportID = this.getResourceManager(scope).addResources(addResourcesParameters); - ServerConsole.debug(LOG_PREFIX, "Report ID = " + reportID); - return reportID; + System.out.println("\n\n**** These is the ServiceList i pass to ResourceManagerPortType: "); + for (int i = 0; i < serviceList.software.size(); i++) { + System.out.println(serviceList.software.get(i)); + } + + String id = ""; + RMBinderLibrary manager = ResourceFactory.createResourceManager(AllowedResourceTypes.Service).getResourceManager(scope.toString()); + String curr = ScopeProvider.instance.get(); + ScopeProvider.instance.set(scope.toString()); + id = manager.addResources(addResourcesParameters); + ScopeProvider.instance.set(curr); + return id; } catch (Exception e) { ServerConsole.error(LOG_PREFIX, "Error during deployment.", e); throw new ResourceOperationException("Software deployment failure: " + e.getMessage()); } } - - public final String undeploy( - final GCUBEScope scope) - throws AbstractResourceException { + /** + * + * @param scope + * @return + * @throws AbstractResourceException + */ + public final String undeploy(final ScopeBean scope) throws AbstractResourceException { Assertion checker = new Assertion(); checker.validate(scope != null, new ResourceParameterException("Cannot retrieve the scope.")); @@ -160,17 +192,19 @@ public class RunningInstanceManager extends AbstractResourceManager { new ResourceOperationException("Invalid ID.")); try { - ResourceBinderPortType rm = this.getResourceManager(scope); + RMBinderLibrary rm = ResourceFactory.createResourceManager(AllowedResourceTypes.Service).getResourceManager(scope.toString()); //prepare the parameters RemoveResourcesParameters params = new RemoveResourcesParameters(); ResourceItem[] resourcelist = new ResourceItem[1]; resourcelist[0] = new ResourceItem(); - resourcelist[0].setID(this.getID()); - resourcelist[0].setType(this.getType().name()); + resourcelist[0].id = this.getID(); + resourcelist[0].type = this.getType().name(); ResourceList r = new ResourceList(); - r.setResource(resourcelist); - params.setResources(r); - params.setTargetScope(scope.toString()); + ArrayList temp =new ArrayList(); + temp.add(resourcelist[0]); + r.setResource(temp); + params.resources = r; + params.targetScope = scope.toString(); //sending the request ServerConsole.info(LOG_PREFIX, "Sending the Remove Resource request...."); @@ -183,15 +217,15 @@ public class RunningInstanceManager extends AbstractResourceManager { } } - public final String checkDeployStatus(final GCUBEScope scope, final String deployID) - throws AbstractResourceException { + public final String checkDeployStatus(final ScopeBean scope, final String deployID) + throws AbstractResourceException { Assertion checker = new Assertion(); checker.validate(scope != null, new ResourceParameterException("Invalid scope passed")); checker.validate(deployID != null && deployID.trim().length() > 0, new ResourceParameterException("Invalid reportID passed")); - ReportingPortType vreManagerPortType = this.getReportResourceManager(scope); + RMReportingLibrary vreManagerPortType = this.getReportResourceManager(scope.toString()); try { return vreManagerPortType.getReport(deployID); @@ -202,14 +236,16 @@ public class RunningInstanceManager extends AbstractResourceManager { } @Override - protected final GCUBEResource buildGCUBEResource(final String xmlRepresentation) - throws AbstractResourceException { + protected final Resource buildResource(final String xmlRepresentation) throws AbstractResourceException { try { - GCUBERunningInstance impl = GHNContext.getImplementation(GCUBERunningInstance.class); - impl.load(new StringReader(xmlRepresentation)); - return impl; + JAXBContext ctx = JAXBContext.newInstance(GCoreEndpoint.class); + Unmarshaller unmarshaller = ctx.createUnmarshaller(); + StringReader reader = new StringReader(xmlRepresentation); + GCoreEndpoint deserialised = (GCoreEndpoint) unmarshaller.unmarshal(reader); + return deserialised; } catch (Exception e) { throw new ResourceAccessException("Cannot load the stub for resource " + this.getType(), e); - } + } + } } diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/RuntimeResourceManager.java b/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/RuntimeResourceManager.java index 897c8b5..fe885e2 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/RuntimeResourceManager.java +++ b/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/RuntimeResourceManager.java @@ -18,10 +18,12 @@ package org.gcube.resourcemanagement.support.server.managers.resources; import java.io.StringReader; -import org.gcube.common.core.contexts.GHNContext; -import org.gcube.common.core.resources.GCUBEResource; -import org.gcube.common.core.resources.GCUBERuntimeResource; -import org.gcube.common.core.scope.GCUBEScope; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Unmarshaller; + +import org.gcube.common.resources.gcore.Resource; +import org.gcube.common.resources.gcore.ServiceEndpoint; +import org.gcube.common.scope.impl.ScopeBean; import org.gcube.resourcemanagement.support.server.exceptions.AbstractResourceException; import org.gcube.resourcemanagement.support.server.exceptions.ResourceAccessException; import org.gcube.resourcemanagement.support.server.exceptions.ResourceOperationException; @@ -29,8 +31,7 @@ import org.gcube.resourcemanagement.support.server.exceptions.ResourceParameterE import org.gcube.resourcemanagement.support.server.types.AllowedResourceTypes; import org.gcube.resourcemanagement.support.server.utils.Assertion; import org.gcube.resourcemanagement.support.server.utils.ServerConsole; -import org.gcube.vremanagement.resourcemanager.stubs.binder.ResourceBinderPortType; -import org.gcube.vremanagement.resourcemanager.stubs.reporting.ReportingPortType; +import org.gcube.vremanagement.resourcemanager.client.RMReportingLibrary; @@ -77,7 +78,7 @@ public class RuntimeResourceManager extends AbstractResourceManager { } - public final String checkDeployStatus(final GCUBEScope scope, final String deployID) + public final String checkDeployStatus(final ScopeBean scope, final String deployID) throws AbstractResourceException { Assertion checker = new Assertion(); checker.validate(scope != null, @@ -85,7 +86,7 @@ public class RuntimeResourceManager extends AbstractResourceManager { checker.validate(deployID != null && deployID.trim().length() > 0, new ResourceParameterException("Invalid reportID passed")); - ReportingPortType vreManagerPortType = this.getReportResourceManager(scope); + RMReportingLibrary vreManagerPortType = this.getReportResourceManager(scope.name()); try { return vreManagerPortType.getReport(deployID); @@ -96,14 +97,16 @@ public class RuntimeResourceManager extends AbstractResourceManager { } @Override - protected final GCUBEResource buildGCUBEResource(final String xmlRepresentation) - throws AbstractResourceException { + protected final Resource buildResource(final String xmlRepresentation) throws AbstractResourceException { try { - GCUBERuntimeResource impl = GHNContext.getImplementation(GCUBERuntimeResource.class); - impl.load(new StringReader(xmlRepresentation)); - return impl; + JAXBContext ctx = JAXBContext.newInstance(ServiceEndpoint.class); + Unmarshaller unmarshaller = ctx.createUnmarshaller(); + StringReader reader = new StringReader(xmlRepresentation); + ServiceEndpoint deserialised = (ServiceEndpoint) unmarshaller.unmarshal(reader); + return deserialised; } catch (Exception e) { throw new ResourceAccessException("Cannot load the stub for resource " + this.getType(), e); - } + } + } } diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/ServiceManager.java b/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/ServiceManager.java index c68a1df..ad6259b 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/ServiceManager.java +++ b/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/ServiceManager.java @@ -17,9 +17,12 @@ package org.gcube.resourcemanagement.support.server.managers.resources; import java.io.StringReader; -import org.gcube.common.core.contexts.GHNContext; -import org.gcube.common.core.resources.GCUBEResource; -import org.gcube.common.core.resources.GCUBEService; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Unmarshaller; + +import org.gcube.common.resources.gcore.Resource; +import org.gcube.common.resources.gcore.Software; import org.gcube.resourcemanagement.support.server.exceptions.AbstractResourceException; import org.gcube.resourcemanagement.support.server.exceptions.ResourceAccessException; import org.gcube.resourcemanagement.support.server.exceptions.ResourceParameterException; @@ -70,14 +73,16 @@ public class ServiceManager extends AbstractResourceManager { } @Override - protected final GCUBEResource buildGCUBEResource(final String xmlRepresentation) - throws AbstractResourceException { + protected final Resource buildResource(final String xmlRepresentation) throws AbstractResourceException { try { - GCUBEService impl = GHNContext.getImplementation(GCUBEService.class); - impl.load(new StringReader(xmlRepresentation)); - return impl; + JAXBContext ctx = JAXBContext.newInstance(Software.class); + Unmarshaller unmarshaller = ctx.createUnmarshaller(); + StringReader reader = new StringReader(xmlRepresentation); + Software deserialised = (Software) unmarshaller.unmarshal(reader); + return deserialised; } catch (Exception e) { throw new ResourceAccessException("Cannot load the stub for resource " + this.getType(), e); - } + } + } } diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/ViewManager.java b/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/ViewManager.java deleted file mode 100644 index 7fbf7f8..0000000 --- a/src/main/java/org/gcube/resourcemanagement/support/server/managers/resources/ViewManager.java +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** - * This software is part of the gCube System. - * Site: http://www.gcube-system.org/ - **************************************************************************** - * The gCube/gCore software is licensed as Free Open Source software - * conveying to the EUPL (http://ec.europa.eu/idabc/eupl). - * The software and documentation is provided by its authors/distributors - * "as is" and no expressed or - * implied warranty is given for its use, quality or fitness for a - * particular case. - **************************************************************************** - * Filename: MetadataCollectionManager.java - **************************************************************************** - * @author Daniele Strollo - ***************************************************************************/ - -package org.gcube.resourcemanagement.support.server.managers.resources; - -import java.io.StringReader; -import org.gcube.common.core.contexts.GHNContext; -import org.gcube.common.core.resources.GCUBEMCollection; -import org.gcube.common.core.resources.GCUBEResource; -import org.gcube.resourcemanagement.support.server.exceptions.AbstractResourceException; -import org.gcube.resourcemanagement.support.server.exceptions.ResourceAccessException; -import org.gcube.resourcemanagement.support.server.exceptions.ResourceParameterException; -import org.gcube.resourcemanagement.support.server.types.AllowedResourceTypes; - -/** - * @author Daniele Strollo (ISTI-CNR) - * - */ -public class ViewManager extends AbstractResourceManager { - - /** - * @deprecated discouraged use. With no ID some operations cannot be accessed. - */ - public ViewManager() - throws ResourceParameterException, - ResourceAccessException { - super(AllowedResourceTypes.VIEW); - } - - public ViewManager(final String id) - throws ResourceParameterException, - ResourceAccessException { - super(id, AllowedResourceTypes.VIEW); - } - - /** - * @param id - * @param name - * @param type - * @throws ResourceParameterException - * @throws ResourceAccessException - */ - public ViewManager(final String id, final String name) - throws ResourceParameterException, - ResourceAccessException { - super(id, name, AllowedResourceTypes.VIEW); - } - - /** - * @param id - * @param name - * @param type - * @param subtype - * @throws ResourceParameterException - * @throws ResourceAccessException - */ - public ViewManager(final String id, final String name, final String subtype) - throws ResourceParameterException, ResourceAccessException { - super(id, name, AllowedResourceTypes.VIEW, subtype); - } - - @Override - protected final GCUBEResource buildGCUBEResource(final String xmlRepresentation) - throws AbstractResourceException { - try { - GCUBEMCollection impl = GHNContext.getImplementation(GCUBEMCollection.class); - impl.load(new StringReader(xmlRepresentation)); - return impl; - } catch (Exception e) { - throw new ResourceAccessException("Cannot load the stub for resource " + this.getType(), e); - } - } -} diff --git a/src/main/java/org/gcube/resourcemanagement/support/server/tests/GenericTest.java b/src/main/java/org/gcube/resourcemanagement/support/server/tests/GenericTest.java index f7fe746..7974db6 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/server/tests/GenericTest.java +++ b/src/main/java/org/gcube/resourcemanagement/support/server/tests/GenericTest.java @@ -1,4 +1,10 @@ /**************************************************************************** + + + * + * + * + * * This software is part of the gCube Project. * Site: http://www.gcube-system.org/ **************************************************************************** @@ -16,19 +22,30 @@ package org.gcube.resourcemanagement.support.server.tests; -import java.io.File; -import java.util.Map; +import static org.gcube.resources.discovery.icclient.ICFactory.client; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; -import org.gcube.common.core.contexts.GHNContext.Status; -import org.gcube.common.core.resources.GCUBEHostingNode; import org.gcube.common.core.scope.GCUBEScope; -import org.gcube.common.core.scope.GCUBEScope.Type; +import org.gcube.common.resources.gcore.HostingNode; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.scope.impl.ScopeBean; +import org.gcube.resourcemanagement.support.client.utils.StatusHandler; +import org.gcube.resourcemanagement.support.server.gcube.CacheManager; +import org.gcube.resourcemanagement.support.server.gcube.ISClientRequester; +import org.gcube.resourcemanagement.support.server.gcube.queries.QueryLoader; +import org.gcube.resourcemanagement.support.server.gcube.queries.QueryLocation; import org.gcube.resourcemanagement.support.server.managers.resources.GHNManager; import org.gcube.resourcemanagement.support.server.managers.resources.GenericResourceManager; -import org.gcube.resourcemanagement.support.server.managers.resources.ResourceFactory; import org.gcube.resourcemanagement.support.server.managers.scope.ScopeManager; -import org.gcube.resourcemanagement.support.server.types.AllowedResourceTypes; import org.gcube.resourcemanagement.support.server.utils.ServerConsole; +import org.gcube.resourcemanagement.support.shared.types.datamodel.ResourceDescriptor; +import org.gcube.resources.discovery.client.api.DiscoveryClient; +import org.gcube.resources.discovery.client.queries.api.Query; +import org.gcube.resources.discovery.client.queries.impl.QueryBox; /** * @author Daniele Strollo (ISTI-CNR) @@ -37,37 +54,6 @@ import org.gcube.resourcemanagement.support.server.utils.ServerConsole; public class GenericTest { private static final String LOG_PREFIX = "[SW-SUPPORT-TEST]"; - public static void testScope() { - - try { - Map scopes = ScopeManager.getAvailableScopes(); - - System.out.println("\n\n\n******************** TEST SCOPE ***************\n"); - for (GCUBEScope scope : scopes.values()) { - if ((scope.getType().compareTo(Type.INFRASTRUCTURE) == 0) - || (scope.getType().compareTo(Type.VO) == 0)) { - if (scope.getServiceMap() != null) { - ServerConsole.trace(null, "*** Map loaded for " + scope.getType() + " " + scope.toString() + " [OK]"); - } else { - ServerConsole.trace(null, "*** Map loaded for " + scope.getType() + " " + scope.toString() + " [ERR]"); - } - } else { - try { - if (scope.getEnclosingScope().getServiceMap() != null) { - ServerConsole.trace(null, "*** Map loaded for " + scope.getType() + scope.toString() + " [OK]"); - } - } catch (Exception e) { - ServerConsole.trace(null, "*** Map loaded for " + scope.getType() + scope.toString() + " [ERR]"); - } - } - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - System.out.println("\n******************** TEST SCOPE END ***************\n"); - } - } - public static String testCreation() { System.out.println("\n\n\n******************** TEST CREATION ***************"); @@ -76,11 +62,11 @@ public class GenericTest { try { resID = GenericResourceManager.create( null, - ScopeManager.getScope("/gcube/devsec"), - "GR Test", - "GR Test Description", + new ScopeBean("/gcube/devsec"), + "RMP Test", + "RMP Test Description", "Hello", - "XXX"); + "test"); ServerConsole.trace(null, "Generic Resource Created with ID: " + resID); } catch (Exception e) { ServerConsole.error(LOG_PREFIX, e); @@ -95,7 +81,7 @@ public class GenericTest { try { GenericResourceManager res = new GenericResourceManager(resID); ServerConsole.trace(null, - res.addToExistingScope(ScopeManager.getScope(fromScope), ScopeManager.getScope(toScope)) + res.addToExistingScope(new ScopeBean(fromScope), new ScopeBean(toScope)) ); } catch (Exception e) { ServerConsole.error(LOG_PREFIX, e); @@ -104,11 +90,11 @@ public class GenericTest { } } - public static void testResourceEdit(final String resID, final GCUBEScope scope) { + public static void testResourceEdit(final String resID, final ScopeBean scope) { System.out.println("\n\n\n******************** TEST RESEDIT COPY ***************"); try { GenericResourceManager res = new GenericResourceManager(resID); - res.update("New Name", "updated description", null, null, scope); + res.update(res.getName()+" Edited", "updated description", "updated body", "test2", scope); } catch (Exception e) { ServerConsole.error(LOG_PREFIX, e); } finally { @@ -118,18 +104,19 @@ public class GenericTest { public static void testModeGHN(final String resID, final String scope) throws Exception { - GCUBEScope queryScope = ScopeManager.getScope(scope); + ScopeBean queryScope = new ScopeBean(scope); GHNManager ghnManager = new GHNManager(resID); - GCUBEHostingNode res = (GCUBEHostingNode) ghnManager.getGCUBEResource(queryScope); - res.getNodeDescription().setStatus(Status.UNREACHABLE); - ghnManager.getISPublisher().updateGCUBEResource(res, queryScope, ghnManager.getSecurityManager()); + HostingNode res = (HostingNode) ghnManager.getResource(queryScope); + res.profile().description().status("CERTIFIED"); + ScopeProvider.instance.set(queryScope.name()); + ghnManager.getRegistryPublisher().update(res); } public static void testGHN() { System.out.println("\n\n\n******************** TEST GHN ***************"); try { - GHNManager ghn1 = new GHNManager("20ddb210-b779-11df-96c9-a66904b26e27", "pc-strollo"); - ghn1.addToExistingScope(ScopeManager.getScope("/gcube"), ScopeManager.getScope("/gcube/devsec")); + GHNManager ghn1 = new GHNManager("796f0680-3937-11e2-9d5f-ae6a92affb51", "pcd4science3.cern.ch"); + ghn1.addToExistingScope(new ScopeBean("/gcube"), new ScopeBean("/gcube/devsec")); } catch (Exception e) { ServerConsole.error(LOG_PREFIX, e); } finally { @@ -137,7 +124,7 @@ public class GenericTest { } } - public static void testRemoveFromScope(final String resID, final GCUBEScope scope) { + public static void testRemoveFromScope(final String resID, final ScopeBean scope) { System.out.println("\n\n\n******************** TEST RESOURCE REMOVEFROMSCOPE ***************"); try { GenericResourceManager res = new GenericResourceManager(resID); @@ -148,8 +135,9 @@ public class GenericTest { System.out.println("\n******************** TEST RESOURCE REMOVEFROMSCOPE END ***************\n"); } } + - public static void testDelete(final String resID, final GCUBEScope scope) { + public static void testDelete(final String resID, final ScopeBean scope) { System.out.println("\n\n\n******************** TEST RESOURCE DELETE ***************"); try { GenericResourceManager res = new GenericResourceManager(resID); @@ -161,27 +149,50 @@ public class GenericTest { } } + private static void testTree(ScopeBean scope) throws Exception { + + CacheManager cm = new CacheManager(); + cm.setUseCache(false); + HashMap> results = ISClientRequester.getResourcesTree(cm, scope); + for (String res : results.keySet()) { + System.out.println(res); + for (String sub : results.get(res)) { + System.out.println(sub); + } + } + + List descs = ISClientRequester.getResourceModels(scope, "GenericResource", null, null); + for (ResourceDescriptor resourceDescriptor : descs) { + System.out.println(resourceDescriptor); + } + } + @SuppressWarnings("deprecation") public static void main(final String[] args) throws Exception { // The scopes must be initialized ScopeManager.setScopeConfigFile("test-suite" + File.separator + "scopes" + File.separator + "scopedata_admin.xml"); - - boolean deepTest = false; - // testScope(); - // testGHN(); - if (deepTest) { + + ScopeProvider.instance.set("/gcube/devsec"); + + //testTree( new ScopeBean("/gcube")); + +// boolean deepTest = true; +// +// // testGHN(); +// if (deepTest) { String resID = testCreation(); testScopeCopy(resID, "/gcube/devsec", "/gcube/devsec/devVRE"); - - System.out.println("\n\nWaiting for resource refresh 60secs.\n\n\n"); - Thread.sleep(60000); - - //testResourceEdit(resID, ScopeManager.getScope("/gcube/devsec")); - testDelete(resID, ScopeManager.getScope("/gcube/devsec/devVRE")); - - // testRemoveFromScope(resID, ScopeManager.getScope("/gcube/devsec")); - } else { - testModeGHN("f5cb0640-f1a7-11df-93d0-fc409084cf46", "/gcube/devsec/devVRE"); - } +////// +// System.out.println("\n\nWaiting for resource refresh 20secs.\n\n\n"); +// Thread.sleep(20000); +// +// +// //testResourceEdit(resID, new ScopeBean("/gcube/devsec")); +// //testDelete(resID, new ScopeBean("/gcube/devsec")); +// +// testRemoveFromScope(resID, new ScopeBean("/gcube/devsec/devVRE")); +// } else { +// testModeGHN("796f0680-3937-11e2-9d5f-ae6a92affb51", "/gcube/devsec/devVRE"); +// } } } diff --git a/src/main/java/org/gcube/resourcemanagement/support/shared/types/datamodel/CompleteResourceProfile.java b/src/main/java/org/gcube/resourcemanagement/support/shared/types/datamodel/CompleteResourceProfile.java index f942de7..7a23cec 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/shared/types/datamodel/CompleteResourceProfile.java +++ b/src/main/java/org/gcube/resourcemanagement/support/shared/types/datamodel/CompleteResourceProfile.java @@ -20,7 +20,6 @@ import java.io.Serializable; import org.gcube.resourcemanagement.support.client.views.ResourceTypeDecorator; - import com.google.gwt.user.client.rpc.IsSerializable; /** @@ -30,8 +29,8 @@ import com.google.gwt.user.client.rpc.IsSerializable; * @author Daniele Strollo (ISTI-CNR) * */ -public class CompleteResourceProfile implements Serializable, IsSerializable { - private static final long serialVersionUID = 1L; +@SuppressWarnings("serial") +public class CompleteResourceProfile implements Serializable { private String xmlRepresentation = null; private String htmlRepresentation = null; private ResourceTypeDecorator type = null; diff --git a/src/main/java/org/gcube/resourcemanagement/support/shared/types/datamodel/ResourceDescriptor.java b/src/main/java/org/gcube/resourcemanagement/support/shared/types/datamodel/ResourceDescriptor.java index 6946c5a..703e934 100644 --- a/src/main/java/org/gcube/resourcemanagement/support/shared/types/datamodel/ResourceDescriptor.java +++ b/src/main/java/org/gcube/resourcemanagement/support/shared/types/datamodel/ResourceDescriptor.java @@ -23,16 +23,18 @@ import org.gcube.resourcemanagement.support.shared.util.Assertion; + import com.extjs.gxt.ui.client.data.BaseModelData; import com.google.gwt.user.client.rpc.IsSerializable; /** * All the resources that want to access resource management * operations must be described through this data type. - * @author Daniele Strollo (ISTI-CNR) + * @author Massimiliano Assante (ISTI-CNR) + * @author Daniele Strollo */ -public class ResourceDescriptor extends BaseModelData implements Serializable, IsSerializable { - private static final long serialVersionUID = 6435512868470974421L; +@SuppressWarnings("serial") +public class ResourceDescriptor extends BaseModelData implements Serializable { public ResourceDescriptor() { super(); @@ -46,11 +48,7 @@ public class ResourceDescriptor extends BaseModelData implements Serializable, I * @param name the short name assigned to the resource (mandatory). * @throws InvalidParameterException */ - public ResourceDescriptor( - final String type, - final String subtype, - final String id, - final String name) throws InvalidParameterException { + public ResourceDescriptor(String type, String subtype, String id, String name) throws InvalidParameterException { super(); Assertion checker = new Assertion(); checker.validate(name != null && name.length() > 0, new InvalidParameterException("The ghnName is null or empty")); @@ -110,4 +108,13 @@ public class ResourceDescriptor extends BaseModelData implements Serializable, I public final Object getProperty(final String property) { return get(property); } + + @Override + public String toString() { + return "ResourceDescriptor [getType()=" + getType() + ", getSubtype()=" + + getSubtype() + ", getID()=" + getID() + ", getName()=" + + getName() + "]"; + } + + } diff --git a/war/WEB-INF/lib/gwt-servlet.jar b/war/WEB-INF/lib/gwt-servlet.jar index b3c62e4..b154974 100644 Binary files a/war/WEB-INF/lib/gwt-servlet.jar and b/war/WEB-INF/lib/gwt-servlet.jar differ