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.

414 lines
15 KiB
Java

package org.gcube.application.framework.vremanagement.vremanagement.impl;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.axis.message.addressing.Address;
import org.apache.axis.message.addressing.EndpointReferenceType;
import org.gcube.application.framework.core.security.PortalSecurityManager;
import org.gcube.application.framework.core.security.ServiceContextManager;
import org.gcube.application.framework.core.session.ASLSession;
import org.gcube.application.framework.vremanagement.vremanagement.ISInfoI;
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.RPDocument;
import org.gcube.common.core.informationsystem.client.XMLResult;
import org.gcube.common.core.informationsystem.client.queries.GCUBECollectionQuery;
import org.gcube.common.core.informationsystem.client.queries.GCUBEGenericQuery;
import org.gcube.common.core.informationsystem.client.queries.GCUBEMCollectionQuery;
import org.gcube.common.core.informationsystem.client.queries.WSResourceQuery;
import org.gcube.common.core.informationsystem.publisher.ISPublisher;
import org.gcube.common.core.informationsystem.publisher.ISPublisherException;
import org.gcube.common.core.resources.GCUBECollection;
import org.gcube.common.core.resources.GCUBEExternalRunningInstance;
import org.gcube.common.core.resources.GCUBEMCollection;
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.ScopeRIParams;
import org.gcube.common.vremanagement.ghnmanager.stubs.service.GHNManagerServiceAddressingLocator;
/**
* @author Valia Tsaqgkalidou (NKUA)
*/
public class ISInfo implements ISInfoI {
/**
* ASLSession to be used
*/
protected ASLSession session;
/**
* is client in order to query IS
*/
protected static ISClient client = null;
protected static ISPublisher publisher = null;
/**
* Constructs a ISInfo object
* @param session the D4Science session to be used for retrieving information needed
*/
public ISInfo(ASLSession session)
{
this.session = session;
try {
publisher = GHNContext.getImplementation(ISPublisher.class);
} catch (Exception e) {
e.printStackTrace();
}
if(client == null)
{
try {
client = GHNContext.getImplementation(ISClient.class);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
client = null;
}
}
}
/** {@inheritDoc}*/
public List<XMLResult> queryIS(String query) {
try {
GCUBEGenericQuery queryMan = client.getQuery(GCUBEGenericQuery.class);
queryMan.setExpression(query);
System.out.println(session.getOriginalScopeName());
return client.execute(queryMan, session.getScope());
} catch (Exception e) {
e.printStackTrace();
}
return new ArrayList<XMLResult>();
}
/** {@inheritDoc}*/
public List<RPDocument> getWS(String type)
{
WSResourceQuery query = null;
try {
query = client.getQuery(WSResourceQuery.class);
query.addAtomicConditions(new AtomicCondition("/gc:ServiceClass", type));
return client.execute(query, session.getScope());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return new ArrayList<RPDocument>();
}
/** {@inheritDoc}*/
public void addGHNToScope(String url) {
//TODO: this will probably change...
EndpointReferenceType endpoint = new EndpointReferenceType();
try {
url = "http://" + url + "/wsrf/services/gcube/common/vremanagement/GHNManager";
String[] vos = session.getOriginalScopeName().split("/");
System.out.println("querying for vo: /" + vos[1]);
endpoint.setAddress(new Address(url));
GHNManagerServiceAddressingLocator locator = new GHNManagerServiceAddressingLocator();
GHNManagerPortType pt = locator.getGHNManagerPortTypePort(endpoint);
pt = (GHNManagerPortType) ServiceContextManager.applySecurity(pt, GCUBEScope.getScope("/" + vos[1]), session.getCredential());
AddScopeInputParams params = new AddScopeInputParams();
params.setScope(session.getOriginalScopeName());
params.setMap(""); //eventually, set here the new Service Map
pt.addScope(params);
} catch (Exception e) {
e.printStackTrace();
}
}
/** {@inheritDoc}*/
public void removeGHNToScope(String url) {
//TODO: this will probably change...
EndpointReferenceType endpoint = new EndpointReferenceType();
try {
url = "http://" + url + "/wsrf/services/gcube/common/vremanagement/GHNManager";
String[] vos = session.getOriginalScopeName().split("/");
System.out.println("querying for vo: /" + vos[1]);
endpoint.setAddress(new Address(url));
GHNManagerServiceAddressingLocator locator = new GHNManagerServiceAddressingLocator();
GHNManagerPortType pt = locator.getGHNManagerPortTypePort(endpoint);
pt = (GHNManagerPortType) ServiceContextManager.applySecurity(pt, GCUBEScope.getScope("/" + vos[1]), session.getCredential());
pt.removeScope(session.getOriginalScopeName());
} catch (Exception e) {
e.printStackTrace();
}
}
/** {@inheritDoc}*/
public void addRIToScope(String url, String className, String name) {
//TODO: this will probably change...
EndpointReferenceType endpoint = new EndpointReferenceType();
try {
endpoint.setAddress(new Address(url));
GHNManagerServiceAddressingLocator locator = new GHNManagerServiceAddressingLocator();
GHNManagerPortType pt = locator.getGHNManagerPortTypePort(endpoint);
pt = (GHNManagerPortType) ServiceContextManager.applySecurity(pt, session);
ScopeRIParams params = new ScopeRIParams();
params.setClazz(className);
params.setName(name);
params.setScope(session.getOriginalScopeName());
pt.addRIToScope(params);
} catch (Exception e) {
e.printStackTrace();
}
}
/** {@inheritDoc}*/
public void addExternalRIToVRE(File file)
{
GCUBEExternalRunningInstance ri = null;
try {
ri = GHNContext.getImplementation(GCUBEExternalRunningInstance.class);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String ret = "";
if(file.exists()){
try {
ri.load(new FileReader(file));
} catch (Exception e) {
String message = "Error while loading profile for the External Running Instance with id=" + ri.getID() + "\n";
System.out.println(message);
e.printStackTrace();
ret += message;
}
}else{
String message = "An error occur during the approval of the External Running Instance with id=" + ri.getID() + "\n";
System.out.println(message);
ret += message;
}
try {
// TODO Change this
publisher.registerGCUBEResource(ri, session.getScope(), new PortalSecurityManager(session));
} catch (ISPublisherException e) {
String message = "Registration error for the External Running Instance with id=" + ri.getID() + "\n";
System.out.println(message);
e.printStackTrace();
ret += message;
}
}
/** {@inheritDoc}*/
public void removeExternalRIToVRE(String id)
{
try {
// TODO Change this
publisher.removeGCUBEResource(id, GCUBEExternalRunningInstance.TYPE, session.getScope(), new PortalSecurityManager(session));
} catch (ISPublisherException e) {
String message = "Registration error for the External Running Instance with id=" +id + "\n";
System.out.println(message);
e.printStackTrace();
}
}
/** {@inheritDoc}*/
public boolean existsGHN(String namePort)
{
GCUBEGenericQuery query;
try {
System.out.println("GHN: " + namePort);
query = client.getQuery(GCUBEGenericQuery.class);query.setExpression("for $ghn in collection(\"/db/Profiles/GHN\")//Document/Data/child::*[local-name()='Profile']/Resource where $ghn/Profile/GHNDescription/Name/string() eq '" + namePort + "' return $ghn");
String[] vos = session.getOriginalScopeName().split("/");
System.out.println("querying for vo: /" + vos[1]);
List<XMLResult> resources = client.execute(query, GCUBEScope.getScope("/" + vos[1]));
if(resources == null || resources.size() == 0)
{
System.out.println("Resources are null or empty");
return false;
}
else
{
System.out.println("Found resources!!!!");
return true;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
/**
* Returns all profiles of collections present in the given scope.
* @param scope the scope of the collections.
* @return a list of collections profile.
* @throws Exception when an error occurs.
*/
public List<GCUBECollection> getCollections(GCUBEScope scope) throws Exception
{
try {
GCUBECollectionQuery collectionquery = client.getQuery(GCUBECollectionQuery.class);
return client.execute(collectionquery,scope);
} catch (Exception e) {
System.out.println("Error during Collections retrieving in scope "+scope.getName());
e.printStackTrace();
throw new Exception("Error during Collections retrieving in scope "+scope.getName(), e);
}
}
/**
* Return all metadata-collections associated with the given collection.
* @param scope the scope of the metadata collections.
* @param collectionID the associated collection.
* @return a list of metadata collections profile.
* @throws Exception
*/
public List<GCUBEMCollection> getMCollections(GCUBEScope scope, String collectionID) throws Exception
{
try {
GCUBEMCollectionQuery mcolQuery = client.getQuery(GCUBEMCollectionQuery.class);
mcolQuery.addGenericCondition("$result/child::*[local-name()='Profile']/RelatedCollection/CollectionID/string() eq '"+collectionID+"'");
return client.execute(mcolQuery,scope);
} catch (Exception e) {
System.out.println("Error during MCollections retrieving in scope "+scope.getName());
e.printStackTrace();
throw new Exception("Error during MCollections retrieving in scope "+scope.getName(), e);
}
}
/**
* Return all XML indices associated with the given metadata collection.
* @param scope the indices scope.
* @param mcollectionID the metadata collection id.
* @return a list of Resource document.
* @throws Exception
*/
public List<RPDocument> getXMLIndices(GCUBEScope scope, String mcollectionID) throws Exception
{
try {
WSResourceQuery queryXMLIndices = client.getQuery(WSResourceQuery.class);
queryXMLIndices.addAtomicConditions(new AtomicCondition("//gc:ServiceClass", "MetadataManagement"),
new AtomicCondition("//gc:ServiceName","XMLIndexer"),
new AtomicCondition("/child::*[local-name()='Id']", mcollectionID),
new AtomicCondition("/child::*[local-name()='AccessType']", "GCUBEDaix"));
return client.execute(queryXMLIndices, scope);
} catch (Exception e) {
System.out.println("Error during Indices retrieving in scope "+scope.getName());
e.printStackTrace();
throw new Exception("Error during Indices retrieving in scope "+scope.getName(), e);
}
}
/**
* Return all indices associated with a given metadata collection.
* @param scope the indices scope.
* @param mcollectionID the metadata collection id.
* @return a list of Resource document.
* @throws Exception
*/
public List<RPDocument> getIndices(GCUBEScope scope, String mcollectionID) throws Exception
{
try {
WSResourceQuery queryXMLIndices = client.getQuery(WSResourceQuery.class);
queryXMLIndices.addAtomicConditions(new AtomicCondition("//gc:ServiceClass", "Index"),
new AtomicCondition("/child::*[local-name()='CollectionID']",mcollectionID));
return client.execute(queryXMLIndices, scope);
} catch (Exception e) {
System.out.println("Error during Indices retrieving in scope "+scope.getName());
e.printStackTrace();
throw new Exception("Error during Indices retrieving in scope "+scope.getName(), e);
}
}
/**
* Return all indices associated with a given collection.
* @param scope the indices scope.
* @param collectionID the collection id.
* @return a list of Resource document.
* @throws Exception
*/
public List<RPDocument> getCollectionIndices(GCUBEScope scope, String collectionID) throws Exception
{
try {
WSResourceQuery queryXMLIndices = client.getQuery(WSResourceQuery.class);
queryXMLIndices.addAtomicConditions(new AtomicCondition("//gc:ServiceClass", "Index"),
new AtomicCondition("/child::*[local-name()='CollectionID']",collectionID));
return client.execute(queryXMLIndices, scope);
} catch (Exception e) {
System.out.println("Error during collection Indices retrieving in scope "+scope.getName());
e.printStackTrace();
throw new Exception("Error during collection Indices retrieving in scope "+scope.getName(), e);
}
}
/**
* Return a collection profile.
* @param scope the collection scope.
* @param collectionID the collection id.
* @return a collection profile.
* @throws Exception
*/
public GCUBECollection getCollection(GCUBEScope scope, String collectionID) throws Exception
{
try {
GCUBECollectionQuery Collectionquery = client.getQuery(GCUBECollectionQuery.class);
Collectionquery.addAtomicConditions(new AtomicCondition("//ID",collectionID));
return client.execute(Collectionquery,scope).get(0);
} catch (Exception e) {
System.out.println("Error during Collection (by ID "+collectionID+") retrieving in scope "+scope.getName());
e.printStackTrace();
throw new Exception("Error during Collection (by ID "+collectionID+") retrieving in scope "+scope.getName(), e);
}
}
}