aslcore/src/org/gcube/application/framework/core/cache/factories/MetadataCacheEntryFactory.java

100 lines
4.5 KiB
Java

package org.gcube.application.framework.core.cache.factories;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.axis.message.addressing.Address;
import org.apache.axis.message.addressing.EndpointReferenceType;
import org.gcube.application.framework.core.cache.HarvestersManager;
import org.gcube.application.framework.core.security.PortalSecurityManager;
import org.gcube.application.framework.core.util.CacheEntryConstants;
import org.gcube.application.framework.core.util.QueryString;
import org.gcube.common.core.contexts.GCUBERemotePortTypeContext;
import org.gcube.common.core.scope.GCUBEScope;
import org.gcube.common.core.security.GCUBESecurityManager;
import org.gcube.metadatamanagement.metadatamanager.stubs.CreateManagerResponse;
import org.gcube.metadatamanagement.metadatamanager.stubs.GetElementItemResponse;
import org.gcube.metadatamanagement.metadatamanager.stubs.GetElementsResponse;
import org.gcube.metadatamanagement.metadatamanager.stubs.InformationObjectIDList;
import org.gcube.metadatamanagement.metadatamanager.stubs.MetadataManagerFactoryPortType;
import org.gcube.metadatamanagement.metadatamanager.stubs.MetadataManagerPortType;
import org.gcube.metadatamanagement.metadatamanager.stubs.MetadataObjectList;
import org.gcube.metadatamanagement.metadatamanager.stubs.service.MetadataManagerFactoryServiceAddressingLocator;
import org.gcube.metadatamanagement.metadatamanager.stubs.service.MetadataManagerServiceAddressingLocator;
import org.gcube.metadatamanagement.mmlibrary.model.BaseMetadata;
import net.sf.ehcache.constructs.blocking.CacheEntryFactory;
/**
* @author Valia Tsagkalidou (NKUA)
*
*/
public class MetadataCacheEntryFactory implements CacheEntryFactory {
/**
* An atomic integer to get the CMS EPRs round-robin
*/
protected static AtomicInteger mcId = new AtomicInteger(0);
/**
* @param key a QueryString representing pairs of keys and values.
* @return the metadata object of the corresponding ID
*/
public Object createEntry(Object key) throws Exception {
QueryString query = (QueryString) key;
try {
MetadataManagerPortType metaManager = null;
String[] mcURIs = HarvestersManager.getInstance().getISInfo(GCUBEScope.getScope(query.get(CacheEntryConstants.dl))).getEndPointForMMFactoryService("");
for(int i=0; i < mcURIs.length; i++)
{
try {
MetadataManagerServiceAddressingLocator instanceLocator = new MetadataManagerServiceAddressingLocator();
MetadataManagerFactoryPortType mcFactory = null;
EndpointReferenceType endpoint = new EndpointReferenceType();
endpoint.setAddress(new Address(mcURIs[mcId.getAndIncrement()%mcURIs.length]));
MetadataManagerFactoryServiceAddressingLocator mcflocator = new MetadataManagerFactoryServiceAddressingLocator();
mcFactory = mcflocator.getMetadataManagerFactoryPortTypePort(endpoint);
CreateManagerResponse createResponsefromcollection = mcFactory.createManagerFromCollection(query.get(CacheEntryConstants.metadataColID));
EndpointReferenceType instanceEPR = createResponsefromcollection.getEndpointReference();
metaManager = instanceLocator.getMetadataManagerPortTypePort(instanceEPR);
}
catch (Exception e) {
}
}
GCUBESecurityManager secManager = new PortalSecurityManager(GCUBEScope.getScope(query.get(CacheEntryConstants.dl)));
if(secManager.isSecurityEnabled())
{
try {
secManager.useCredentials(ApplicationCredentials.getInstance().getCredential(CacheEntryConstants.dl));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
metaManager = GCUBERemotePortTypeContext.getProxy(metaManager, GCUBEScope.getScope(CacheEntryConstants.dl), secManager);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String[] oids = new String[1];
oids[0] = query.get(CacheEntryConstants.oid);
InformationObjectIDList oidsList = new InformationObjectIDList(oids);
GetElementsResponse elements = metaManager.getElements(oidsList);
GetElementItemResponse element = elements.getGetElementsItemResponse(0);
MetadataObjectList moList = element.getMetadataObjectList();
String metadataXML = moList.getMetadataObject(0);
BaseMetadata metadata = new BaseMetadata();
metadata.fromXML(metadataXML);
return metadata;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}