diff --git a/org/gcube/informationsystem/registry/impl/util/ProfileManager.java b/org/gcube/informationsystem/registry/impl/util/ProfileManager.java new file mode 100644 index 0000000..d1c228f --- /dev/null +++ b/org/gcube/informationsystem/registry/impl/util/ProfileManager.java @@ -0,0 +1,101 @@ +package org.gcube.informationsystem.registry.impl.util; + +import java.net.MalformedURLException; +import java.net.URL; +import java.rmi.RemoteException; + +import javax.xml.rpc.ServiceException; + +import org.diligentproject.informationservice.disic.stubs.DISICServiceLocator; +import org.diligentproject.informationservice.disic.stubs.DISICServicePortType; +import org.diligentproject.informationservice.disic.stubs.DeleteProfileParams; +import org.gcube.common.core.scope.GCUBEScope; +import org.gcube.common.core.scope.GCUBEScopeNotSupportedException; +import org.gcube.common.core.scope.ServiceMap; +import org.gcube.common.core.scope.ServiceMap.ServiceType; +import org.gcube.common.core.utils.logging.GCUBELog; +import org.gcube.common.informationsystem.publisher.impl.GCUBEPublisherException; +import org.gcube.common.informationsystem.publisher.impl.ProfileManager.ResourceTypes; +import org.gcube.informationsystem.registry.impl.core.ServiceContext; +import org.gridforum.jgss.ExtendedGSSCredential; +import org.ietf.jgss.GSSCredential; + +public class ProfileManager { + + protected static final GCUBELog logger=new GCUBELog(ProfileManager.class); + + protected static final String ISICpostfix = "ISICService"; + + protected URL isIcAddress; + + protected String VOMapName; + + public ProfileManager() throws Exception { + + GCUBEScope scope = ServiceContext.getContext().getScope(); + + ServiceMap map; + try { + map = scope.getServiceMap(); + } catch (GCUBEScopeNotSupportedException e1) { + logger.error("error retrieving service map for scope " + scope.toString(), e1); + throw new Exception(e1); + } + isIcAddress = this.getICRegistratinAddress(map); + VOMapName = scope.getName(); + } + + /** + * Removes from IS-IC a GCUBEResource profile ( not knowing the Resurce Type the removal has been done once for every type of GCUBE Resource + * + * @param uniqueID the uniqueID to of the GCUBEResource to remove + * @param type the type of Profile + + * @throws Exception if the unregistration fails + */ + + public void removeFromISIC(String uniqueID, String type, GSSCredential ... credentials) throws Exception { + + + logger.debug(" Removing profile from IS-IC " + isIcAddress.toString()); + + //check if the type has been specified + DISICServiceLocator locator_disic = new DISICServiceLocator(); + DeleteProfileParams params = new DeleteProfileParams(); + params.setDILIGENTResourceID(uniqueID); + if (type != null && type.compareTo("") !=0) { + params.setProfileType(type); + try { + DISICServicePortType dis_ic = locator_disic.getDISICServicePortTypePort(isIcAddress); + dis_ic.deleteProfile(params); + } catch (Exception e) { + logger.error("An error occurs while trying to remove the GCUBE Profile with ID " + uniqueID, e); + throw new Exception("Unregistration failed for the GCUBE Profile with ID " + uniqueID); + } + + } else { + try { + //the typeof the resource to delete is not specified, try all the resource types + logger.debug(" trying to remove profile with UniqueID" + uniqueID); + for ( int n = 0 ; n < ResourceTypes.values().length ;n++) { + params.setProfileType(ResourceTypes.values()[n].toString()); + logger.debug(" Removing profile from IS-IC " + isIcAddress.toString()); + DISICServicePortType dis_ic = locator_disic.getDISICServicePortTypePort(isIcAddress); + dis_ic.deleteProfile(params); + } + } catch (Exception e) { + logger.error(" An error occurs while trying to remove the GCUBE Profile with ID " + + uniqueID, e); + throw new Exception("Unregistration failed for the GCUBE Profile with ID " + uniqueID); + } + } + + } + + private URL getICRegistratinAddress(ServiceMap map) throws MalformedURLException { + + String addressISIC = (String) map.getEndpoint(ServiceType.ISPublishService).getAddress().toString(); + addressISIC = addressISIC.substring(0, addressISIC.lastIndexOf("/") + 1) + ISICpostfix; + return new URL(addressISIC); + } +}