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.
453 lines
14 KiB
Java
453 lines
14 KiB
Java
package org.gcube.application.framework.vremanagement.vremanagement.impl;
|
|
|
|
import java.rmi.RemoteException;
|
|
import java.util.ArrayList;
|
|
import java.util.Calendar;
|
|
import java.util.List;
|
|
import java.util.Random;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
import javax.xml.rpc.ServiceException;
|
|
|
|
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.session.ASLSession;
|
|
import org.gcube.application.framework.vremanagement.vremanagement.VREGeneratorInterface;
|
|
import org.gcube.common.core.scope.GCUBEScope;
|
|
import org.gcube.common.core.types.VOID;
|
|
import org.gcube.common.core.utils.logging.GCUBEClientLog;
|
|
import org.gcube.informationsystem.cache.SrvType;
|
|
import org.gcube.vremanagement.vremodeler.stubs.FunctionalityList;
|
|
import org.gcube.vremanagement.vremodeler.stubs.FunctionalityNodes;
|
|
import org.gcube.vremanagement.vremodeler.stubs.GHNArray;
|
|
import org.gcube.vremanagement.vremodeler.stubs.GHNList;
|
|
import org.gcube.vremanagement.vremodeler.stubs.GHNType;
|
|
import org.gcube.vremanagement.vremodeler.stubs.GHNsPerFunctionality;
|
|
import org.gcube.vremanagement.vremodeler.stubs.ModelerFactoryPortType;
|
|
import org.gcube.vremanagement.vremodeler.stubs.ModelerServicePortType;
|
|
import org.gcube.vremanagement.vremodeler.stubs.ReportList;
|
|
import org.gcube.vremanagement.vremodeler.stubs.RunningInstanceMessage;
|
|
import org.gcube.vremanagement.vremodeler.stubs.SelectedResourceDescriptionType;
|
|
import org.gcube.vremanagement.vremodeler.stubs.SetFunctionality;
|
|
import org.gcube.vremanagement.vremodeler.stubs.VREDescription;
|
|
import org.gcube.vremanagement.vremodeler.stubs.service.ModelerFactoryServiceAddressingLocator;
|
|
import org.gcube.vremanagement.vremodeler.stubs.service.ModelerServiceAddressingLocator;
|
|
|
|
|
|
/**
|
|
*
|
|
* @author Massimiliano Assante - ISTI-CNR
|
|
*
|
|
*/
|
|
public class VREGeneratorEvo implements VREGeneratorInterface {
|
|
|
|
GCUBEClientLog log = new GCUBEClientLog("ASL_VRE");
|
|
|
|
String scope;
|
|
ASLSession session;
|
|
ModelerServicePortType modelPortType;
|
|
|
|
private final static String MODELERS_NO = "MODELERS_NO";
|
|
|
|
protected static AtomicInteger vreId = new AtomicInteger(0);
|
|
|
|
/**
|
|
* @param session the d4s session
|
|
* @param epr the epr
|
|
*/
|
|
public VREGeneratorEvo(ASLSession session, String id) {
|
|
this(session);
|
|
|
|
EndpointReferenceType epr = getEprGivenID(id);
|
|
log.info("VREGeneratorEvo called on VRE id (epr)" + epr + " scope: " + session.getScope().toString());
|
|
this.scope = session.getScopeName();
|
|
this.session = session;
|
|
modelPortType = applySecurityEPR(epr);
|
|
|
|
}
|
|
|
|
public boolean isVreModelerServiceUp() {
|
|
return Integer.parseInt(session.getAttribute(MODELERS_NO).toString()) > 0;
|
|
}
|
|
|
|
/**
|
|
* @param session the d4s session
|
|
*/
|
|
public VREGeneratorEvo(ASLSession session) {
|
|
super();
|
|
log.info("VREGeneratorEvo scope: " + session.getScope().toString());
|
|
this.scope = session.getScopeName();
|
|
this.session = session;
|
|
modelPortType = null;
|
|
getModelPortType();
|
|
}
|
|
/**
|
|
* @param session the d4s session
|
|
* @return the VRE names
|
|
*
|
|
*/
|
|
public ReportList getAllVREs(ASLSession session) {
|
|
EndpointReferenceType serviceEPR = new EndpointReferenceType();
|
|
ModelerFactoryPortType mFPType = null;
|
|
ModelerFactoryServiceAddressingLocator mFSLocator = new ModelerFactoryServiceAddressingLocator();
|
|
EndpointReference[] modelerURIs;
|
|
try {
|
|
modelerURIs = RIsManager.getInstance().getISCache(GCUBEScope.getScope(scope)).getEPRsFor("VREManagement", "VREModeler", SrvType.FACTORY.name());
|
|
} catch (Exception e1) {
|
|
e1.printStackTrace();
|
|
return null;
|
|
}
|
|
for (int i = 0; i < modelerURIs.length; i++) {
|
|
try {
|
|
System.out.println("getModelFactoryPortTypePort(epr)");
|
|
session.setScope(scope);
|
|
serviceEPR.setAddress(new Address(modelerURIs[vreId.getAndIncrement() % modelerURIs.length].getAddress().toString()));
|
|
mFPType = (ModelerFactoryPortType) ServiceContextManager.applySecurity(mFSLocator.getModelerFactoryPortTypePort(serviceEPR), session);
|
|
return mFPType.getAllVREs(new VOID());
|
|
|
|
} catch (ServiceException e) {
|
|
e.printStackTrace();
|
|
} catch (RemoteException e) {
|
|
e.printStackTrace();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* @param session the d4s session
|
|
* @param id the id of the VRE to be removed
|
|
*/
|
|
public void removeVRE(ASLSession session, String id) {
|
|
|
|
|
|
EndpointReferenceType serviceEPR = new EndpointReferenceType();
|
|
ModelerFactoryPortType mFPType = null;
|
|
ModelerFactoryServiceAddressingLocator mFSLocator = new ModelerFactoryServiceAddressingLocator();
|
|
EndpointReference[] modelerURIs;
|
|
try {
|
|
modelerURIs = RIsManager.getInstance().getISCache(GCUBEScope.getScope(scope)).getEPRsFor("VREManagement", "VREModeler", SrvType.FACTORY.name());
|
|
} catch (Exception e1) {
|
|
e1.printStackTrace();
|
|
return;
|
|
}
|
|
for (int i = 0; i < modelerURIs.length; i++) {
|
|
try {
|
|
System.out.println("getModelFactoryPortTypePort(epr)");
|
|
|
|
serviceEPR.setAddress(new Address(modelerURIs[vreId.getAndIncrement() % modelerURIs.length].getAddress().toString()));
|
|
session.setScope(scope);
|
|
mFPType = (ModelerFactoryPortType) ServiceContextManager.applySecurity(mFSLocator.getModelerFactoryPortTypePort(serviceEPR), session);
|
|
|
|
System.out.println("ID RECEIVED TO REMOVE:" + id);
|
|
|
|
mFPType.removeVRE(id);
|
|
break;
|
|
|
|
} catch (ServiceException e) {
|
|
e.printStackTrace();
|
|
} catch (RemoteException e) {
|
|
e.printStackTrace();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
*
|
|
* @param epr
|
|
* @return
|
|
*/
|
|
protected ModelerServicePortType applySecurityEPR(EndpointReferenceType epr) {
|
|
try {
|
|
ModelerServiceAddressingLocator mSALocator = new ModelerServiceAddressingLocator();
|
|
session.setScope(scope);
|
|
modelPortType = ServiceContextManager.applySecurity(mSALocator.getModelerServicePortTypePort(epr),session);
|
|
return modelPortType;
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
|
|
}
|
|
@Override
|
|
public String checkVREStatus() throws RemoteException {
|
|
return modelPortType.checkStatus(new VOID());
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
@Override
|
|
public void deployVRE() throws RemoteException {
|
|
modelPortType.deployVRE(new VOID());
|
|
|
|
}
|
|
|
|
public String[] getExistingNamesVREs() {
|
|
// TODO Auto-generated method stub
|
|
return null;
|
|
}
|
|
|
|
public FunctionalityNodes getSelectedFunctionality() throws Exception {
|
|
FunctionalityNodes list = modelPortType.getFunctionalityNodes(new VOID());
|
|
return list;
|
|
}
|
|
|
|
@Override
|
|
public List<GHNType> getGHNs() throws RemoteException {
|
|
|
|
log.debug("Asking gHN list to service");
|
|
|
|
List<GHNType> toReturn = new ArrayList<GHNType>();
|
|
FunctionalityNodes list = modelPortType.getFunctionalityNodes(new VOID());
|
|
|
|
GHNList ghns = list.getSelectableGHNs(); //selezionabili per le missing func.
|
|
GHNType[] types = ghns.getList();
|
|
|
|
for (int i = 0; i < types.length; i++) {
|
|
try {
|
|
log.debug("returned GHN: " + types[i].getHost());
|
|
toReturn.add(new GHNType(types[i].getHost(), types[i].getId(), types[i].getMemory(), types[i].getRelatedRIs(), types[i].isSecurityEnabled(),
|
|
types[i].isSelected(), types[i].getSite()));
|
|
|
|
} catch (NullPointerException e) {
|
|
e.printStackTrace();
|
|
return toReturn;
|
|
}
|
|
}
|
|
return toReturn;
|
|
}
|
|
|
|
@Override
|
|
public GHNsPerFunctionality[] getGHNsPerFunctionality() throws RemoteException {
|
|
FunctionalityNodes list = modelPortType.getFunctionalityNodes(new VOID());
|
|
return list.getFunctionalities();
|
|
|
|
}
|
|
// RunningInstanceMessage[] ris = list.getFunctionalities()[1].getMissingServices(); //ci sono n RunningInstances (Service) Mancanti
|
|
// ris[0].
|
|
// list.getFunctionalities()[1].getGhns(); //verranno aggiunti per la funzionalit
|
|
|
|
|
|
@Override
|
|
public void setFunctionality(int[] funcIds, SelectedResourceDescriptionType[] selResDesc) throws RemoteException {
|
|
SetFunctionality sf = new SetFunctionality(funcIds, selResDesc);
|
|
modelPortType.setFunctionality(sf);
|
|
}
|
|
|
|
@Override
|
|
public FunctionalityList getFunctionality() throws Exception {
|
|
FunctionalityList list = modelPortType.getFunctionality(new VOID());
|
|
return list;
|
|
}
|
|
|
|
public String getMetadataRelatedToCollection() throws RemoteException {
|
|
return null;
|
|
}
|
|
|
|
public String getQuality() throws RemoteException {
|
|
// TODO Auto-generated method stub
|
|
return null;
|
|
}
|
|
|
|
|
|
/**
|
|
* first call
|
|
*/
|
|
@Override
|
|
public VREDescription getVREModel() throws RemoteException {
|
|
VREDescription desc = modelPortType.getDescription(new VOID());
|
|
|
|
return desc;
|
|
}
|
|
|
|
|
|
@Override
|
|
public void setGHNs(String[] selectedGHNIds) throws RemoteException {
|
|
modelPortType.setUseCloud(false);
|
|
GHNArray ghnArray = new GHNArray(selectedGHNIds);
|
|
modelPortType.setGHNs(ghnArray);
|
|
}
|
|
|
|
@Override
|
|
public void setVREModel(String VREName, String VREDescription,
|
|
String VREDesigner, String VREManager, long startTime, long endTime)
|
|
throws RemoteException {
|
|
VREDescription vreDesc = new VREDescription();
|
|
vreDesc.setDescription(VREDescription);
|
|
vreDesc.setDesigner(VREDesigner);
|
|
vreDesc.setManager(VREManager);
|
|
vreDesc.setName(VREName);
|
|
Calendar start = Calendar.getInstance();
|
|
start.setTimeInMillis(startTime);
|
|
vreDesc.setStartTime(start);
|
|
Calendar end = Calendar.getInstance();
|
|
end.setTimeInMillis(endTime);
|
|
vreDesc.setEndTime(end);
|
|
|
|
log.debug("StartTime = " + start.getTime());
|
|
log.debug("EndTime = " + end.getTime());
|
|
|
|
modelPortType.setDescription(vreDesc);
|
|
}
|
|
|
|
public void setVREtoPendingState() throws RemoteException {
|
|
modelPortType.setVREtoPendingState(new VOID());
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
private synchronized void getModelPortType() {
|
|
|
|
EndpointReferenceType serviceEPR = new EndpointReferenceType();
|
|
ModelerFactoryPortType mFPType = null;
|
|
|
|
EndpointReferenceType VREEndpointReferenceType;
|
|
if (modelPortType == null) {
|
|
|
|
log.warn("VREEndpointReferenceType is null");
|
|
ModelerFactoryServiceAddressingLocator mFSLocator = new ModelerFactoryServiceAddressingLocator();
|
|
|
|
EndpointReference[] modelerURIs;
|
|
try {
|
|
|
|
modelerURIs = RIsManager.getInstance().getISCache(GCUBEScope.getScope(scope)).getEPRsFor("VREManagement", "VREModeler", SrvType.FACTORY.name());
|
|
|
|
|
|
} catch (Exception e1) {
|
|
e1.printStackTrace();
|
|
return;
|
|
}
|
|
log.debug("vre modelers: " + modelerURIs.length);
|
|
session.setAttribute(MODELERS_NO, modelerURIs.length);
|
|
for (int i = 0; i < modelerURIs.length; i++) {
|
|
try {
|
|
System.out.println("getModelFactoryPortTypePort(epr)");
|
|
|
|
serviceEPR.setAddress(new Address(modelerURIs[vreId.getAndIncrement() % modelerURIs.length].getAddress().toString()));
|
|
session.setScope(scope);
|
|
mFPType = ServiceContextManager.applySecurity(mFSLocator.getModelerFactoryPortTypePort(serviceEPR), session);
|
|
VREEndpointReferenceType = mFPType.createResource(new VOID());
|
|
mFPType.getAllVREs(new VOID());
|
|
ModelerServiceAddressingLocator mSALocator = new ModelerServiceAddressingLocator();
|
|
session.setScope(scope);
|
|
modelPortType = ServiceContextManager.applySecurity(mSALocator.getModelerServicePortTypePort(VREEndpointReferenceType), session);
|
|
// Attaching Credential to port type
|
|
System.out.println("Attaching Credential to port type");
|
|
break;
|
|
} catch (ServiceException e) {
|
|
e.printStackTrace();
|
|
} catch (RemoteException e) {
|
|
e.printStackTrace();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
new Random(System.currentTimeMillis()).nextInt(modelerURIs.length);
|
|
}
|
|
}
|
|
} else
|
|
log.debug("modelPortType!=null");
|
|
|
|
}
|
|
|
|
/** {@inheritDoc}*/
|
|
public String getVREepr() {
|
|
return modelPortType.toString();
|
|
}
|
|
|
|
/**
|
|
* return the per given an id
|
|
* @param id
|
|
* @return
|
|
*/
|
|
private EndpointReferenceType getEprGivenID(String id) {
|
|
EndpointReferenceType serviceEPR = new EndpointReferenceType();
|
|
ModelerFactoryPortType mFPType = null;
|
|
ModelerFactoryServiceAddressingLocator mFSLocator = new ModelerFactoryServiceAddressingLocator();
|
|
EndpointReference[] modelerURIs;
|
|
try {
|
|
session.setScope(scope);
|
|
modelerURIs = RIsManager.getInstance().getISCache(session.getScope()).getEPRsFor("VREManagement", "VREModeler", SrvType.FACTORY.name());
|
|
} catch (Exception e1) {
|
|
e1.printStackTrace();
|
|
return null;
|
|
}
|
|
for (int i = 0; i < modelerURIs.length; i++) {
|
|
try {
|
|
log.debug("getModelFactoryPortTypePort(epr)");
|
|
|
|
serviceEPR.setAddress(new Address(modelerURIs[vreId.getAndIncrement() % modelerURIs.length].getAddress().toString()));
|
|
session.setScope(scope);
|
|
mFPType = (ModelerFactoryPortType) ServiceContextManager.applySecurity(mFSLocator.getModelerFactoryPortTypePort(serviceEPR), session);
|
|
return mFPType.getEPRbyId(id);
|
|
|
|
} catch (ServiceException e) {
|
|
e.printStackTrace();
|
|
} catch (RemoteException e) {
|
|
e.printStackTrace();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public boolean isCloudAvailable() {
|
|
//TODO: check actual availability
|
|
return true;
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public boolean isCloudSelected() {
|
|
System.out.println("isCloudSelected()");
|
|
boolean toReturn = false;
|
|
try {
|
|
toReturn = modelPortType.isUseCloud(new VOID());
|
|
} catch (RemoteException e) {
|
|
e.printStackTrace();
|
|
return false;
|
|
}
|
|
return toReturn;
|
|
}
|
|
|
|
|
|
public boolean setCloudDeploy(int virtualMachines) {
|
|
try {
|
|
log.debug("setUseCloud(true)");
|
|
modelPortType.setUseCloud(true);
|
|
log.debug("setCloudVMs #: " + virtualMachines);
|
|
modelPortType.setCloudVMs(virtualMachines);
|
|
} catch (RemoteException e) {
|
|
e.printStackTrace();
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public int getCloudVMSelected() {
|
|
int toReturn = -1;
|
|
try {
|
|
toReturn = modelPortType.getCloudVMs(new VOID());
|
|
} catch (RemoteException e) {
|
|
e.printStackTrace();
|
|
return toReturn;
|
|
}
|
|
return toReturn;
|
|
}
|
|
|
|
|
|
|
|
}
|