package gr.upatras.ece.nam.fstoolkit.wizards; import java.text.DateFormat; import org.eclipse.jface.dialogs.IDialogPage; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.ExpandBar; import org.eclipse.swt.widgets.ExpandItem; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import gr.upatras.ece.nam.fstoolkit.utils.AdvicedOffer; import gr.upatras.ece.nam.fstoolkit.utils.OfferedPlan; import gr.upatras.ece.nam.fstoolkit.utils.ResourceAdvisor; import brokermodel.availabilityContract.ResourceServiceContract; /** * The "New" wizard page allows setting the container for the new file as well * as the file name. The page will only accept file name without the extension * OR with the extension that matches the expected one . */ public class FSDLResourceAdvisorPageOne extends WizardPage { private ExpandBar bar; private ResourceAdvisor advisor; @Override public boolean canFlipToNextPage() { return advisor.getPlanID() >=0; } /** * Constructor for SampleNewWizardPage. * * @param pageName */ public FSDLResourceAdvisorPageOne(ISelection selection) { super("Resource Advisor FSDLResourceAdvisorPageOne"); setTitle("Please select a proposed implementation for your scenario "); setDescription( "This wizard creates a file with *.fsdl extension containing a request with detailed list of " + "resources, based on your initial scenario.\n" + "NOTICE:The displayed amount is tentative.Additional charges might applied.Please check the generated contract."); //this.selection = selection; advisor = new ResourceAdvisor(); } /** * @see IDialogPage#createControl(Composite) */ public void createControl(Composite parent) { bar = new ExpandBar (parent, SWT.V_SCROLL); Display display = parent.getShell().getDisplay(); //Image image = display.getSystemImage(SWT.ICON_INFORMATION); //getResourceLocator().getImage( "icons/alt_window_16.gif")); AddOfferedPlans(display); bar.setSpacing(8); initialize(); dialogChanged(); setControl(bar); } private void AddOfferedPlans(Display display){ Composite composite ; GridLayout layout; for ( int iOffPlan = advisor.getOfferedPlans().size()-1; iOffPlan >=0 ; iOffPlan--) { composite = new Composite (bar, SWT.NONE); layout = new GridLayout (); layout.marginLeft = layout.marginTop = layout.marginRight = layout.marginBottom = 10; layout.verticalSpacing = 10; composite.setLayout(layout); composite.setSize(400, 400); Color gray = display.getSystemColor(SWT.COLOR_INFO_BACKGROUND); OfferedPlan op = advisor.getOfferedPlans().get(iOffPlan); Table table = new Table(composite, SWT.BORDER | SWT.FULL_SELECTION); table.setBackground(gray); table.setLinesVisible (true); table.setHeaderVisible (true); GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.heightHint = 200; table.setLayoutData(data); String[] titles = {"alias: service", "Resource", "Provider", "Cost/usage", "Subtotal"}; for (int i=0; i<titles.length; i++) { TableColumn column; if (i>3) column = new TableColumn (table, SWT.RIGHT); else column = new TableColumn (table, SWT.LEFT); column.setText (titles [i]); } Double total=(double) 0; for (int ixAdvicedOffer = 0; ixAdvicedOffer < op.getAdvicedOffers().size(); ixAdvicedOffer++) { AdvicedOffer advoffer = op.getAdvicedOffers().get(ixAdvicedOffer); //for (int i = 0; i < advoffer.getAdvicedRSContracts().size(); i++) { ResourceServiceContract contract = advoffer.getAdvicedRSContract(); TableItem item = new TableItem (table, SWT.NONE); item.setText (0, advoffer.getResourceRequest().getName() +":"+ contract.getForOfferedService().getName() ); item.setText (1, advoffer.getOfferedResource().getName() ); item.setText (2, advoffer.getResourceProvider() ); item.setText (3, String.format( " � %(,.2f",contract.getAvailability().getCost().getAmount()) + "( �/"+ contract.getAvailability().getCost().getPerUnit().getName() +" )" ); total += advisor.getTotalCostForAdvicedOffer(contract); item.setText (4, String.format( " � %(,.2f", advisor.getTotalCostForAdvicedOffer(contract)) ); //} } Font font1 = new Font(display, "Tahoma", 10, SWT.BOLD); TableItem item = new TableItem (table, SWT.NONE); item.setText (3, "Total" ); item.setFont(font1); item.setText (4, String.format( " � %(,.2f", total ) ); item.setFont(font1); for (int i=0; i<titles.length; i++) { table.getColumn (i).pack (); } table.getColumn (0).setWidth(170); table.getColumn (1).setWidth(170); table.getColumn (2).setWidth(170);//set this to constant, because it might have a really huge qualified name from advoffer.getFullOfferedResourceID() Button button = new Button (composite, SWT.PUSH ); button.setText("Select This Plan >"); button.setAlignment(SWT.RIGHT); button.setData(iOffPlan); button.addListener( SWT.Selection, new Listener() { public void handleEvent(Event event) { Integer planID= (Integer) event.widget.getData() ; advisor.setPlanID(planID); ((FSDLResourceAdvisorPageTwo)getNextPage()).setOfferedPlanID( planID ); System.out.println("Button.PlanID selected= " +planID ); getWizard().getContainer().showPage( getNextPage() ); } }); ExpandItem item0 = new ExpandItem (bar, SWT.NONE, 0); String offerID="#"; if (advisor.getSourceFedScenario().getScheduledPlan() != null){ java.util.Date earlyDate= advisor.getSourceFedScenario().getScheduledPlan().getValidFrom() ; java.util.Date lastDate = advisor.getSourceFedScenario().getScheduledPlan().getValidUntil(); offerID="#"+iOffPlan+ " Period:" + DateFormat.getInstance().format(earlyDate) +"-"+ DateFormat.getInstance().format(lastDate)+ " Total:" + String.format( " � %(,.2f", total) ; } else{ offerID="#"+iOffPlan+ " Period: N/A Total: N/A (pay-as-you-go might apply, provisioning starts as soon as possible)" ; } item0.setText("Panlab Offer :"+offerID); item0.setHeight(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT).y); item0.setControl(composite); Image image = display.getSystemImage(SWT.ICON_INFORMATION); item0.setImage(image); item0.setExpanded( iOffPlan == 0 ); } } /** * Tests if the current workbench selection is a suitable container to use. */ private void initialize() { } /** * Uses the standard container selection dialog to choose the new value for * the container field. */ /** * Ensures that both text fields are set. */ private void dialogChanged() { updateStatus(null); } private void updateStatus(String message) { setErrorMessage(message); setPageComplete(message == null); } public ResourceAdvisor getResourceAdvisor(){ return advisor; } }