100 lines
4.5 KiB
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;
|
|
}
|
|
|
|
}
|