104 lines
5.1 KiB
Java
104 lines
5.1 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.EndpointReference;
|
|
import org.apache.axis.message.addressing.EndpointReferenceType;
|
|
import org.gcube.application.framework.core.cache.RIsManager;
|
|
import org.gcube.application.framework.core.security.ServiceContextManager;
|
|
import org.gcube.application.framework.core.util.CacheEntryConstants;
|
|
import org.gcube.application.framework.core.util.QueryString;
|
|
import org.gcube.common.core.scope.GCUBEScope;
|
|
import org.gcube.common.core.utils.logging.GCUBELog;
|
|
import org.gcube.informationsystem.cache.SrvType;
|
|
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);
|
|
|
|
/** Object logger. */
|
|
protected final GCUBELog logger = new GCUBELog(this);
|
|
|
|
/**
|
|
* @param key a QueryString representing pairs of keys and values. Needed keys are "vre", "metadataColID", "oid"
|
|
* @return the metadata object of the corresponding ID
|
|
*/
|
|
public Object createEntry(Object key) throws Exception {
|
|
QueryString query = (QueryString) key;
|
|
|
|
try {
|
|
MetadataManagerPortType metaManager = null;
|
|
EndpointReference[] mcURIs = RIsManager.getInstance().getISCache(GCUBEScope.getScope(query.get(CacheEntryConstants.vre))).getEPRsFor("MetadataManagement", "MetadataManager", SrvType.FACTORY.name());
|
|
logger.info("Number of available mms factories: " + mcURIs.length);
|
|
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].getAddress().toString()));
|
|
MetadataManagerFactoryServiceAddressingLocator mcflocator = new MetadataManagerFactoryServiceAddressingLocator();
|
|
mcFactory = mcflocator.getMetadataManagerFactoryPortTypePort(endpoint);
|
|
mcFactory = ServiceContextManager.applySecurity(mcFactory, GCUBEScope.getScope(query.get(CacheEntryConstants.vre)), ApplicationCredentials.getInstance().getCredential(query.get(CacheEntryConstants.vre)));
|
|
CreateManagerResponse createResponsefromcollection = mcFactory.createManagerFromCollection(query.get(CacheEntryConstants.metadataColID));
|
|
EndpointReferenceType instanceEPR = createResponsefromcollection.getEndpointReference();
|
|
metaManager = instanceLocator.getMetadataManagerPortTypePort(instanceEPR);
|
|
break;
|
|
}
|
|
catch (Exception e) {
|
|
logger.error("",e);
|
|
}
|
|
}
|
|
|
|
try {
|
|
metaManager = ServiceContextManager.applySecurity(metaManager, GCUBEScope.getScope(query.get(CacheEntryConstants.vre)), ApplicationCredentials.getInstance().getCredential(query.get(CacheEntryConstants.vre)));
|
|
} catch (Exception e) {
|
|
logger.error("",e);
|
|
}
|
|
logger.info("get metadata for oid: " + query.get(CacheEntryConstants.oid) + " and metadta col ID: " + query.get(CacheEntryConstants.metadataColID));
|
|
String[] oids = new String[1];
|
|
oids[0] = query.get(CacheEntryConstants.oid);
|
|
InformationObjectIDList oidsList = new InformationObjectIDList(oids);
|
|
GetElementsResponse elements = metaManager.getElements(oidsList);
|
|
for(int i=0; i < elements.getGetElementsItemResponse().length; i++)
|
|
{
|
|
GetElementItemResponse element = elements.getGetElementsItemResponse(i);
|
|
MetadataObjectList moList = element.getMetadataObjectList();
|
|
if (moList != null) {
|
|
for(int j=0; j < moList.getMetadataObject().length; j++)
|
|
{
|
|
String metadataXML = moList.getMetadataObject(0);
|
|
logger.debug("metadata:" + metadataXML);
|
|
if(metadataXML != null)
|
|
return metadataXML;
|
|
}
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
logger.error("",e);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
}
|