in the way to the FWS, 50 percent ported so far

git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/admin/rmp-common-library@81279 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Massimiliano Assante 2013-09-11 16:40:58 +00:00
parent 274dbf124a
commit 878cc7ffc5
37 changed files with 1051 additions and 1173 deletions

View File

@ -0,0 +1,2 @@
disabled=06target
eclipse.preferences.version=1

30
pom.xml
View File

@ -11,7 +11,7 @@
<groupId>org.gcube.portlets.admin</groupId>
<artifactId>rmp-common-library</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>2.0.0-SNAPSHOT</version>
<name>Resource Management Library</name>
<description>
gCube Resource Management Library is a common library containing shared code for Information System Operations
@ -24,7 +24,7 @@
</scm>
<properties>
<!-- Convenience property to set the GWT version -->
<gwtVersion>2.4.0</gwtVersion>
<gwtVersion>2.5.1</gwtVersion>
<distroDirectory>distro</distroDirectory>
<!-- GWT needs at least java 1.6 -->
<maven.compiler.source>1.6</maven.compiler.source>
@ -61,11 +61,33 @@
<version>[2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version>
<scope>provided</scope>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.gcube.resourcemanagement</groupId> -->
<!-- <artifactId>resource-manager-stubs</artifactId> -->
<!-- <version>[2.0.1-SNAPSHOT, 3.0.0-SNAPSHOT)</version> -->
<!-- </dependency> -->
<!-- FWS DEPS -->
<dependency>
<groupId>org.gcube.resources.discovery</groupId>
<artifactId>ic-client</artifactId>
<version>1.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.gcube.resourcemanagement</groupId>
<artifactId>resource-manager-stubs</artifactId>
<version>[2.0.1-SNAPSHOT, 3.0.0-SNAPSHOT)</version>
<artifactId>resourcemanager-client</artifactId>
<version>[1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
</dependency>
<dependency>
<groupId>org.gcube.resources</groupId>
<artifactId>registry-publisher</artifactId>
<version>[1.1.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
</dependency>
<dependency>
<groupId>org.gcube.resourcemanagement</groupId>
<artifactId>ghn-manager-client</artifactId>
<version>[1.1.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
</dependency>
<!-- END FWS -->
<dependency>
<groupId>org.gcube.resourcemanagement</groupId>
<artifactId>ghnmanager-stubs</artifactId>

View File

@ -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;
}
}

View File

@ -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<String> getResourceTypes(
final CacheManager status,
final GCUBEScope queryScope)
throws Exception {
List<XMLResult> 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<String> getResourceTypes(final CacheManager status, final ScopeBean queryScope) throws Exception {
List<String> 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<String> 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<String> types = new ArrayList<String>();
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 <a>true</a>");
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 <a>true</a>");
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<String> 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<String> getResourceSubTypes(final CacheManager status, final ScopeBean queryScope, final String resourceType) throws Exception {
ArrayList<String> subtypes = new ArrayList<String>();
if (resourceType.equals("Collection")) {
@ -165,52 +181,58 @@ public class ISClientRequester {
return subtypes;
}
List<XMLResult> 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<String> 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<String> client = client();
isQuery.addParameter("RES_TYPE", resourceType);
isQuery.addParameter("SUBTYPE", "<subtype>{$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<String, ArrayList<String>> getResourcesTree( //qui si perde
final CacheManager status,
final GCUBEScope queryScope)
throws Exception {
public static final HashMap<String, ArrayList<String>> getResourcesTree(final CacheManager status, final ScopeBean queryScope) throws Exception {
HashMap<String, ArrayList<String>> retval = new HashMap<String, ArrayList<String>>();
// 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<XMLResult> 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<String> 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<String> client = client();
resultz = client.submit(isQuery);
if (resultz == null || resultz.size() == 0) {
return retval;
}
subtypes = new ArrayList<String>();
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<String> 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<String> 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<XMLResult> results = null;
QueryTemplate isQuery = new QueryTemplate(QueryLoader.getQuery(queryPath));
DiscoveryClient<String> client = client();
isQuery.addParameter("RES_ID", id.trim());
ISQueryCacheKeyT cacheKey = new ISQueryCacheKeyT(queryScope.toString(), isQuery.expression(), "getResourceRelated");
List<String> 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<String> retval = new Vector<String>();
List<String> retval = new ArrayList<String>();
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<String> 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<String> 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<String> 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<XMLResult> results = null;
List<String> 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<String> retval = new Vector<String>();
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<ResourceDescriptor> getResourceModels(final ScopeBean queryScope, final String type, final String subType, final List<Tuple<String>> additionalMaps) throws Exception {
//set the scope
String currScope = ScopeProvider.instance.get();
ScopeProvider.instance.set(queryScope.toString());
QueryTemplate isQuery = null;
DiscoveryClient<String> client = client();
public static final List<ResourceDescriptor> getResourceModels(
final GCUBEScope queryScope,
final String type,
final String subType,
final List<Tuple<String>> 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<XMLResult> results = client.execute(isQuery, queryScope);
List<String> resultz = client.submit(isQuery);
List<ResourceDescriptor> retval = new Vector<ResourceDescriptor>();
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<String> 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<String> getWSResources(final ScopeBean queryScope) throws Exception {
public static final List<String> 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<XMLResult> results = client.execute(isQuery, queryScope);
List<String> 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<String> client = client();
List<String> retval = new Vector<String>();
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<String> 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<XMLResult> results = client.execute(isQuery, queryScope);
List<String> 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<TMPluginFormField> formFields = new ArrayList<TMPluginFormField>();
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);

View File

@ -67,9 +67,9 @@ class ISQueryCacheKeyT {
*
*/
public class ISQueryCache {
Map<ISQueryCacheKeyT, List<XMLResult>> results = new HashMap<ISQueryCacheKeyT, List<XMLResult>>();
Map<ISQueryCacheKeyT, List<String>> results = new HashMap<ISQueryCacheKeyT, List<String>>();
public void insert(ISQueryCacheKeyT key, List<XMLResult> elem) {
public void insert(ISQueryCacheKeyT key, List<String> elem) {
this.results.put(key, elem);
}
@ -80,7 +80,7 @@ public class ISQueryCache {
return this.results.containsKey(key);
}
public List<XMLResult> get(ISQueryCacheKeyT key) {
public List<String> get(ISQueryCacheKeyT key) {
if (key != null && this.results.containsKey(key)) {
return this.results.get(key);
}

View File

@ -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"),

View File

@ -0,0 +1,8 @@
<Resource>
{$profiles//Resource/child::*}
<SubType>{$subtype}</SubType>
<gcf-version>{$gcf-version}</gcf-version>
<ghn-version>{$ghn-version}</ghn-version>
<scopes>{$scopes}</scopes>
<ghn-name>{$ghn-name}</ghn-name>
</Resource>

View File

@ -0,0 +1,8 @@
<Resource>
{$profiles//Resource/child::*}
<SubType>{$subtype}</SubType>
<gcf-version>{$gcf-version}</gcf-version>
<ghn-version>{$ghn-version}</ghn-version>
<scopes>{$scopes}</scopes>
<ghn-name>{$ghn-name}</ghn-name>
</Resource>

View File

@ -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/<RES_TYPE ISdefault =''>')//Resource
for $resource in collection('/db/Profiles/<RES_TYPE ISdefault ='' />')//Resource
where $resource/ID/string() eq '<RES_ID/>'
return $resource

View File

@ -4,7 +4,7 @@
# RES_TYPE the main type of the resource
# This query is used by forms
for $profiles in collection('/db/Profiles/<RES_TYPE ISdefault ='GHN'>')//Resource
for $profiles in collection('/db/Profiles/<RES_TYPE ISdefault ='GHN' />')//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
<Resource>
{$profiles//Resource/child::*}
<SubType>{$subtype}</SubType>
<gcf-version>{$gcf-version}</gcf-version>
<ghn-version>{$ghn-version}</ghn-version>
<scopes>{$scopes}</scopes>
<ghn-name>{$ghn-name}</ghn-name>
</Resource>
<RESOURCE/>

View File

@ -4,7 +4,7 @@
# RES_TYPE the main type of the resource
# This query is used by forms
for $profiles in collection('/db/Profiles/<RES_TYPE ISdefault ='GHN'>')//Resource
for $profiles in collection('/db/Profiles/<RES_TYPE ISdefault ='GHN' />')//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 '<RES_SUBTYPE ISdefault='isti.cnr.it'/>'
return
<Resource>
{$profiles//Resource/child::*}
<SubType>{$subtype}</SubType>
<gcf-version>{$gcf-version}</gcf-version>
<ghn-version>{$ghn-version}</ghn-version>
<scopes>{$scopes}</scopes>
<ghn-name>{$ghn-name}</ghn-name>
</Resource>
<RESOURCE/>

View File

@ -24,4 +24,4 @@ let $subtypes :=
-->
for $subtype in distinct-values($subtypes)
return
<subtype>{$subtype}</subtype>
<SUBTYPE/>

View File

@ -1,23 +1,8 @@
<!--
RES_SUBTYPE subtype parameters can be passed by expressing:
where $subtype = "TheSubType" and $wsresource/Data//child::*[local-name()='Type'][0]/string() eq 'gDocRead'
-->
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'
<RES_SUBTYPE ISdefault =''/>
return
<Resource>
{$profiles//Resource/ID}
<Type>{$profiles//Resource/Type/text()}</Type>
<SubType>{$subtype}</SubType>
<Scopes>{$scopes}</Scopes>
<Name>{$profiles//Resource/Profile/Name/text()}</Name>
<CreationTime>{$profiles//Resource/Profile/Body/SourceProperties/creationTime/text()}</CreationTime>
<UserCollection>{$profiles//Resource/Profile/Body/SourceProperties/user/text()}</UserCollection>
<LastUpdateTime>{$wsresource/LastUpdateHuman/text()}</LastUpdateTime>
<NumberOfMembers>{$wsresource//child::*[local-name()='Cardinality']/text()}</NumberOfMembers>
</Resource>
<RESOURCE/>

View File

@ -1,8 +1,3 @@
<!--
gets the compressed description of all GHNs published in a scope
-->
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()
<RES_SUBTYPE ISdefault =''/>
return
<Resource>
{$profiles//Resource/ID}
<Type>{$profiles//Resource/Type/text()}</Type>
<SubType>{$subtype}</SubType>
<Status>{$profiles//Resource/Profile/GHNDescription/Status/text()}</Status>
<Name>{$profiles//Resource/Profile/GHNDescription/Name/text()}</Name>
<Uptime>{$profiles//Resource/Profile/GHNDescription/Uptime/text()}</Uptime>
<LastUpdate>{$profiles//Resource/Profile/GHNDescription/LastUpdate/text()}</LastUpdate>
<LocalAvailableSpace>{$profiles//Resource/Profile/GHNDescription/LocalAvailableSpace/text()}</LocalAvailableSpace>
<VirtualSize>{$profiles//Resource/Profile/GHNDescription/MainMemory/string(@VirtualSize)}</VirtualSize>
<VirtualAvailable>{$profiles//Resource/Profile/GHNDescription/MainMemory/string(@VirtualAvailable)}</VirtualAvailable>
<LoadLast1Min>{$profiles//Resource/Profile/GHNDescription/Load/string(@Last1Min)}</LoadLast1Min>
<LoadLast5Min>{$profiles//Resource/Profile/GHNDescription/Load/string(@Last5Min)}</LoadLast5Min>
<LoadLast15Min>{$profiles//Resource/Profile/GHNDescription/Load/string(@Last15Min)}</LoadLast15Min>
<gcf-version>{$gcf-version}</gcf-version>
<ghn-version>{$ghn-version}</ghn-version>
<Scopes>{$scopes}</Scopes>
</Resource>
<RESOURCE/>

View File

@ -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()
<RES_SUBTYPE ISdefault =''/>
return
<Resource>
{$profiles//Resource/ID}
<Type>{$profiles//Resource/Type/text()}</Type>
<SubType>{$subtype}</SubType>
<Scopes>{$scopes}</Scopes>
<Name>{$profiles//Resource/Profile/Name/text()}</Name>
<Description>{$profiles//Resource/Profile/Description/text()}</Description>
</Resource>
<RESOURCE/>

View File

@ -0,0 +1,11 @@
<Resource>
{$profiles//Resource/ID}
<Type>{$profiles//Resource/Type/text()}</Type>
<SubType>{$subtype}</SubType>
<Scopes>{$scopes}</Scopes>
<Name>{$profiles//Resource/Profile/Name/text()}</Name>
<CreationTime>{$profiles//Resource/Profile/Body/SourceProperties/creationTime/text()}</CreationTime>
<UserCollection>{$profiles//Resource/Profile/Body/SourceProperties/user/text()}</UserCollection>
<LastUpdateTime>{$wsresource/LastUpdateHuman/text()}</LastUpdateTime>
<NumberOfMembers>{$wsresource//child::*[local-name()='Cardinality']/text()}</NumberOfMembers>
</Resource>

View File

@ -0,0 +1,18 @@
<Resource>
{$profiles//Resource/ID}
<Type>{$profiles//Resource/Type/text()}</Type>
<SubType>{$subtype}</SubType>
<Status>{$profiles//Resource/Profile/GHNDescription/Status/text()}</Status>
<Name>{$profiles//Resource/Profile/GHNDescription/Name/text()}</Name>
<Uptime>{$profiles//Resource/Profile/GHNDescription/Uptime/text()}</Uptime>
<LastUpdate>{$profiles//Resource/Profile/GHNDescription/LastUpdate/text()}</LastUpdate>
<LocalAvailableSpace>{$profiles//Resource/Profile/GHNDescription/LocalAvailableSpace/text()}</LocalAvailableSpace>
<VirtualSize>{$profiles//Resource/Profile/GHNDescription/MainMemory/string(@VirtualSize)}</VirtualSize>
<VirtualAvailable>{$profiles//Resource/Profile/GHNDescription/MainMemory/string(@VirtualAvailable)}</VirtualAvailable>
<LoadLast1Min>{$profiles//Resource/Profile/GHNDescription/Load/string(@Last1Min)}</LoadLast1Min>
<LoadLast5Min>{$profiles//Resource/Profile/GHNDescription/Load/string(@Last5Min)}</LoadLast5Min>
<LoadLast15Min>{$profiles//Resource/Profile/GHNDescription/Load/string(@Last15Min)}</LoadLast15Min>
<gcf-version>{$gcf-version}</gcf-version>
<ghn-version>{$ghn-version}</ghn-version>
<Scopes>{$scopes}</Scopes>
</Resource>

View File

@ -0,0 +1,8 @@
<Resource>
{$profiles//Resource/ID}
<Type>{$profiles//Resource/Type/text()}</Type>
<SubType>{$subtype}</SubType>
<Scopes>{$scopes}</Scopes>
<Name>{$profiles//Resource/Profile/Name/text()}</Name>
<Description>{$profiles//Resource/Profile/Description/text()}</Description>
</Resource>

View File

@ -0,0 +1,11 @@
<Resource>
{$profiles/ID}
<Type>{$profiles/Type/text()}</Type>
<SubType>{$subtype}</SubType>
<Scopes>{$scopes}</Scopes>
<ServiceClass>{$profiles/Profile/ServiceClass/text()}</ServiceClass>
<ServiceName>{$profiles/Profile/ServiceName/text()}</ServiceName>
<Version>{$profiles/Profile/Version/text()}</Version>
<Status>{$profiles/Profile/DeploymentData/Status/text()}</Status>
<ghn-name>{$ghn-name}</ghn-name>
</Resource>

View File

@ -0,0 +1,7 @@
<Resource>
{$profiles//Resource/ID}
<Type>{$profiles//Resource/Type/text()}</Type>
<SubType>{$subtype}</SubType>
<Scopes>{$scopes}</Scopes>
<Name>{$profiles//Resource/Profile/Name/text()}</Name>
</Resource>

View File

@ -0,0 +1,10 @@
<Resource>
{$profiles//Resource/ID}
<Type>{$profiles//Resource/Type/text()}</Type>
<SubType>{$subtype}</SubType>
<Scopes>{$scopes}</Scopes>
<ServiceClass>{$profiles//Resource/Profile/Class/text()}</ServiceClass>
<ServiceName>{$profiles//Resource/Profile/Name/text()}</ServiceName>
<Version>{$profiles//Resource/Profile/Packages/Software[1]/Version/text()}</Version>
<Shareable>{$profiles//Resource/Profile/Packages/Software/Shareable/string(@level)}</Shareable>
</Resource>

View File

@ -1,9 +1,4 @@
for $profiles in collection('/db/Profiles/RunningInstance')//Resource
<!--
let $ghn-name := $profiles/Profile/GHN/@UniqueID/string()
-->
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()
<RES_SUBTYPE ISdefault =''/>
return
<Resource>
{$profiles/ID}
<Type>{$profiles/Type/text()}</Type>
<SubType>{$subtype}</SubType>
<Scopes>{$scopes}</Scopes>
<ServiceClass>{$profiles/Profile/ServiceClass/text()}</ServiceClass>
<ServiceName>{$profiles/Profile/ServiceName/text()}</ServiceName>
<Version>{$profiles/Profile/Version/text()}</Version>
<Status>{$profiles/Profile/DeploymentData/Status/text()}</Status>
<ghn-name>{$ghn-name}</ghn-name>
</Resource>
<RESOURCE/>

View File

@ -3,10 +3,5 @@ let $scopes := string-join( $profiles/Scopes//Scope/text(), ';')
let $subtype := $profiles//Resource/Profile/Category/text()
<RES_SUBTYPE ISdefault =''/>
return
<Resource>
{$profiles//Resource/ID}
<Type>{$profiles//Resource/Type/text()}</Type>
<SubType>{$subtype}</SubType>
<Scopes>{$scopes}</Scopes>
<Name>{$profiles//Resource/Profile/Name/text()}</Name>
</Resource>
<RESOURCE/>

View File

@ -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()
<RES_SUBTYPE ISdefault =''/>
return
<Resource>
{$profiles//Resource/ID}
<Type>{$profiles//Resource/Type/text()}</Type>
<SubType>{$subtype}</SubType>
<Scopes>{$scopes}</Scopes>
<ServiceClass>{$profiles//Resource/Profile/Class/text()}</ServiceClass>
<ServiceName>{$profiles//Resource/Profile/Name/text()}</ServiceName>
<!-- if many software defined takes the version of the first one -->
<Version>{$profiles//Resource/Profile/Packages/Software[1]/Version/text()}</Version>
<Shareable>{$profiles//Resource/Profile/Packages/Software/Shareable/string(@level)}</Shareable>
</Resource>
<RESOURCE/>

View File

@ -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<ResourceParameterException> checker = new Assertion<ResourceParameterException>();
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<ResourceParameterException> checker = new Assertion<ResourceParameterException>();
@ -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<ResourceParameterException> checker = new Assertion<ResourceParameterException>();
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<GCUBERunningInstance> 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<GCUBERunningInstance> result = client.execute(query, scope);
List<GCUBERunningInstance> toReturn = new ArrayList<GCUBERunningInstance>();
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<ResourceBinderPortType> getResourceManagers(final GCUBEScope scope) throws ResourceAccessException, ResourceParameterException {
Assertion<ResourceParameterException> checker = new Assertion<ResourceParameterException>();
checker.validate(scope != null, new ResourceParameterException("Invalid scope"));
List<GCUBERunningInstance> resourceManagerList = null;
try {
resourceManagerList = this.getResourceManagerFromScope(scope);
} catch (Exception e) {
e.printStackTrace();
throw new ResourceAccessException("Cannot retrieve the managers for resource: " + this.getID());
}
List<ResourceBinderPortType> retval = new Vector<ResourceBinderPortType>();
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<ReportingPortType> getResourceReportManagers(final GCUBEScope scope) throws ResourceAccessException, ResourceParameterException {
Assertion<ResourceParameterException> checker = new Assertion<ResourceParameterException>();
checker.validate(scope != null, new ResourceParameterException("Invalid scope"));
List<GCUBERunningInstance> resourceManagerList = null;
try {
resourceManagerList = this.getResourceManagerFromScope(scope);
} catch (Exception e) {
e.printStackTrace();
throw new ResourceAccessException("Cannot retrieve the managers for resource: " + this.getID());
}
List<ReportingPortType> retval = new Vector<ReportingPortType>();
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<ResourceBinderPortType> 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<ReportingPortType> 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<AbstractResourceException> checker = new Assertion<AbstractResourceException>();
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<ResourceItem> temp = new ArrayList<ResourceItem>();
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<AbstractResourceException> checker = new Assertion<AbstractResourceException>();
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<AbstractResourceException> checker = new Assertion<AbstractResourceException>();
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<AbstractResourceException> checker = new Assertion<AbstractResourceException>();
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<String> client = client();
List<String> 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<AbstractResourceException> checker = new Assertion<AbstractResourceException>();
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<ResourceItem> temp = new ArrayList<ResourceItem>();
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<AbstractResourceException> checker = new Assertion<AbstractResourceException>();
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<GCUBEScope> 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<GCUBEScope> validateScopes(final GCUBEScope[] scopes) {
List<GCUBEScope> retval = new Vector<GCUBEScope>();
for (GCUBEScope scope : scopes) {
try {
retval.add(ScopeManager.getScope(scope.toString()));
} catch (Exception e) {
ServerConsole.error(LOG_PREFIX, e);
}
protected List<ScopeBean> validateScopes(final String[] scopes) {
List<ScopeBean> retval = new Vector<ScopeBean>();
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
* <a href="https://gcube.wiki.gcube-system.org/gcube/index.php/Programmatic_Administration_Interface">
* official wiki</a> 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<AbstractResourceException> checker = new Assertion<AbstractResourceException>();
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<GCUBEScope> boundedScopes = this.validateScopes(resStub.getScopes().values().toArray(new GCUBEScope[]{}));
Resource resStub = this.getResource(scope);
List<ScopeBean> 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(<scope to remove>)
// 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);
}
}

View File

@ -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;
}
}

View File

@ -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<AbstractResourceException> checker = new Assertion<AbstractResourceException>();
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<AbstractResourceException> checker = new Assertion<AbstractResourceException>();
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<ResourceAccessException> checker = new Assertion<ResourceAccessException>();
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);
}

View File

@ -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<AbstractResourceException> checker = new Assertion<AbstractResourceException>();
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<GCUBEScope> 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<GenericResource> client = clientFor(GenericResource.class);
List<GenericResource> 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<AbstractResourceException> checker = new Assertion<AbstractResourceException>();
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);
}
}

View File

@ -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<ResourceItem> resToBind = new Vector<ResourceItem>();
RMBinderLibrary manager = ResourceFactory.createResourceManager(type).getResourceManager(targetScope.toString());
ArrayList<ResourceItem> resToBind = new ArrayList<ResourceItem>();
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<Exception> checker = new Assertion<Exception>();
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<PackageItem> serviceProfiles = new Vector<PackageItem>();
ArrayList<PackageItem> serviceProfiles = new ArrayList<PackageItem>();
// Retrieves the profiles of services
final GCUBEServiceQuery query = resource.getISClient().getQuery(GCUBEServiceQuery.class);
SimpleQuery query = null;
DiscoveryClient<Software> 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<GCUBEService> 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<Software> 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<String> arrayGHNSids = new ArrayList<String>();
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);
}

View File

@ -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<ResourceParameterException> checker = new Assertion<ResourceParameterException>();
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<PackageItem> serviceProfiles = new Vector<PackageItem>();
ArrayList<PackageItem> serviceProfiles = new ArrayList<PackageItem>();
try {
// Retrieves the profiles of services
final GCUBEServiceQuery query = this.getISClient().getQuery(GCUBEServiceQuery.class);
SimpleQuery query = null;
DiscoveryClient<Software> client = clientFor(Software.class);
prepareServices: for (String serviceID : servicesID) {
query.addAtomicConditions(new AtomicCondition("/ID", serviceID));
List<GCUBEService> 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<Software> 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<String> arrayGHNSids = new ArrayList<String>();
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<AbstractResourceException> checker = new Assertion<AbstractResourceException>();
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<ResourceItem> temp =new ArrayList<ResourceItem>();
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<ResourceParameterException> checker = new Assertion<ResourceParameterException>();
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);
}
}
}
}

View File

@ -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<ResourceParameterException> checker = new Assertion<ResourceParameterException>();
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);
}
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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 <a href="mailto:daniele.strollo@isti.cnr.it">Daniele Strollo</a>
***************************************************************************/
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);
}
}
}

View File

@ -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<String, GCUBEScope> 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",
"<TestBody>Hello</TestBody>",
"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", "<update>updated body</update>", "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<String, ArrayList<String>> 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<ResourceDescriptor> 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");
// }
}
}

View File

@ -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;

View File

@ -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<InvalidParameterException> checker = new Assertion<InvalidParameterException>();
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() + "]";
}
}

Binary file not shown.