You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
204 lines
7.5 KiB
Java
204 lines
7.5 KiB
Java
/****************************************************************************
|
|
* This software is part of the gCube Project.
|
|
* 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: GenericResourceManager.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.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 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.w3c.dom.Document;
|
|
|
|
|
|
/**
|
|
* @author Daniele Strollo (ISTI-CNR)
|
|
*
|
|
*/
|
|
public class GenericResourceManager extends AbstractResourceManager {
|
|
// Used internally to require static functionalities (e.g. deploy).
|
|
private static GenericResourceManager singleton = null;
|
|
private static final String LOG_PREFIX = "[GenericResource-MGR]";
|
|
|
|
static {
|
|
if (GenericResourceManager.singleton == null) {
|
|
try {
|
|
GenericResourceManager.singleton = new GenericResourceManager("dummyservice", "dummyservice");
|
|
} catch (Exception e) {
|
|
ServerConsole.error(LOG_PREFIX, e);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @deprecated discouraged use. With no ID some operations cannot be accessed.
|
|
*/
|
|
public GenericResourceManager()
|
|
throws ResourceParameterException,
|
|
ResourceAccessException {
|
|
super(AllowedResourceTypes.GenericResource);
|
|
}
|
|
|
|
public GenericResourceManager(final String id)
|
|
throws ResourceParameterException,
|
|
ResourceAccessException {
|
|
super(id, AllowedResourceTypes.GenericResource);
|
|
}
|
|
|
|
/**
|
|
* @param id
|
|
* @param name
|
|
* @param type
|
|
* @throws ResourceParameterException
|
|
* @throws ResourceAccessException
|
|
*/
|
|
public GenericResourceManager(final String id, final String name)
|
|
throws ResourceParameterException,
|
|
ResourceAccessException {
|
|
super(id, name, AllowedResourceTypes.GenericResource);
|
|
}
|
|
|
|
/**
|
|
* @param id
|
|
* @param name
|
|
* @param type
|
|
* @param subtype
|
|
* @throws ResourceParameterException
|
|
* @throws ResourceAccessException
|
|
*/
|
|
public GenericResourceManager(final String id, final String name, final String subtype)
|
|
throws ResourceParameterException, ResourceAccessException {
|
|
super(id, name, AllowedResourceTypes.GenericResource, subtype);
|
|
}
|
|
|
|
/**
|
|
* Updates the resource.
|
|
* @param name (Mandatory) the name to assign to the resource
|
|
* @param description (optional) if null it will not be changed
|
|
* @param body (optional) if null it will not be changed
|
|
* @param subType (optional) if null it will not be changed
|
|
* @param scope (optional) if null it will not be changed
|
|
* @throws AbstractResourceException
|
|
*/
|
|
public final void update(
|
|
final String name,
|
|
final String description,
|
|
final String body,
|
|
final String subType,
|
|
final GCUBEScope scope)
|
|
throws AbstractResourceException {
|
|
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());
|
|
if (description != null) {
|
|
res.setDescription(description.trim());
|
|
}
|
|
if (body != null) {
|
|
res.setBody(body.trim());
|
|
}
|
|
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());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 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)
|
|
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());
|
|
if (description != null) {
|
|
resource.setDescription(description.trim());
|
|
}
|
|
if (body != null) {
|
|
resource.setBody(body.trim());
|
|
}
|
|
resource.setSecondaryType(subType.trim());
|
|
resource.addScope(scope);
|
|
|
|
GenericResourceManager gm = new GenericResourceManager();
|
|
ISPublisher publisher = gm.getISPublisher();
|
|
String retval = publisher.registerGCUBEResource(resource, scope, gm.getSecurityManager());
|
|
|
|
if (retval == null || retval.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();
|
|
|
|
ServerConsole.info(LOG_PREFIX, "Resource Created with ID: " + id);
|
|
return id;
|
|
}
|
|
|
|
@Override
|
|
protected final GCUBEResource buildGCUBEResource(
|
|
final String xmlRepresentation) throws AbstractResourceException {
|
|
try {
|
|
GCUBEGenericResource impl = GHNContext.getImplementation(GCUBEGenericResource.class);
|
|
impl.load(new StringReader(xmlRepresentation));
|
|
return impl;
|
|
} catch (Exception e) {
|
|
throw new ResourceAccessException("Cannot load the stub for resource " + this.getType(), e);
|
|
}
|
|
}
|
|
|
|
}
|