package gr.upatras.ece.nam.fstoolkit.utils; import java.util.Vector; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import brokermodel.availabilityContract.ResourceServiceContract; import brokermodel.federationscenarios.RequestedFederationScenario; import brokermodel.federationscenarios.ResourceSettingInstance; import brokermodel.federationscenarios.ServiceRequest; import brokermodel.federationscenarios.ServiceSettingInstance; import brokermodel.federationscenarios.SettingInstance; public class ResourceAdvisor { private int planID=-1; private Vector<OfferedPlan> offeredPlans; private Vector<brokermodel.Broker> testbedBrokers; private IFile modelFile; private RequestedFederationScenario sourceFedScenario = null ; public ResourceAdvisor(){ offeredPlans = new Vector<OfferedPlan>(); testbedBrokers = new Vector<brokermodel.Broker>(); LoadModel(); CalculateOffers(); } /** * @return the targetFedScenario or null if no plan selected */ public RequestedFederationScenario getTargetFedScenario() { if (planID>=0) return this.getOfferedPlans().get(planID).getProposedScenario(); else return null; } /** * @return the targetFedScenario */ public RequestedFederationScenario getSourceFedScenario() { return sourceFedScenario; } /** * @return the planID */ public int getPlanID() { return planID; } /** * @param planID the planID to set */ public void setPlanID(int planID) { this.planID = planID; } public Vector<OfferedPlan> getOfferedPlans() { return offeredPlans; } public Vector<brokermodel.Broker> getTestbedBrokers() { return testbedBrokers; } private void LoadModel(){ IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow(); IWorkbenchPage page = workbenchWindow.getActivePage(); IEditorPart editor = page.getActiveEditor(); modelFile = (IFile) editor.getEditorInput().getAdapter(IFile.class); if (modelFile != null) { System.out.println("LoadModel()" + modelFile.getLocation().toString() ); } try { ResourceSet resourceSet = new ResourceSetImpl(); URI uri = URI.createFileURI(modelFile.getLocation().toString()); System.out.println("uri" + uri.toString() ); org.eclipse.emf.ecore.resource.Resource resource = resourceSet.getResource(uri, true); sourceFedScenario = (RequestedFederationScenario) resource.getContents().get(0); } catch (Exception e) { e.printStackTrace(); } } public void CalculateOffers(){ for (int j = 0; j < 7; j++) { //max 7 offers OfferedPlan offeredPlan= new OfferedPlan(sourceFedScenario);//ena offerPlan exei offers apo to ka8e imported Broker offeredPlans.add(offeredPlan); //pros8ese to sto vector me ola ta Plans }//for } public Double getTotalCostForAdvicedOffer(ResourceServiceContract contract) { java.util.Date lastDate, earlyDate; if ( (sourceFedScenario.getScheduledPlan()!=null)&& (sourceFedScenario.getScheduledPlan().getValidFrom()!=null)&& (sourceFedScenario.getScheduledPlan().getValidUntil()!=null) ){ earlyDate = sourceFedScenario.getScheduledPlan().getValidFrom(); lastDate = sourceFedScenario.getScheduledPlan().getValidUntil(); long deltaHours = ( lastDate.getTime() - earlyDate.getTime() )/ (60*60*1000); Double balanceDelta= (double) 0 ; if (contract.getAvailability().getCost().getPerUnit().getName().equals("HOUR") ){ balanceDelta = (deltaHours*contract.getAvailability().getCost().getAmount()) ; }else if (contract.getAvailability().getCost().getPerUnit().getName().equals("USAGE") ){ balanceDelta = (contract.getAvailability().getCost().getAmount()) ; }else if (contract.getAvailability().getCost().getPerUnit().getName().equals("DAY") ){ balanceDelta = (deltaHours*contract.getAvailability().getCost().getAmount()/24 ) ; } // StringBuilder sb = new StringBuilder(); // Formatter formatter = new Formatter(sb, Locale.US); return balanceDelta; } return (double) 0; } public IResource getModelFile() { return modelFile; } }