package gr.upatras.ece.nam.fstoolkit.views; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.common.util.BasicEList; import org.eclipse.emf.common.util.EList; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.events.ExpansionAdapter; import org.eclipse.ui.forms.events.ExpansionEvent; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Hyperlink; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.forms.widgets.TableWrapData; import org.eclipse.ui.forms.widgets.TableWrapLayout; import org.eclipse.ui.part.ViewPart; import gr.upatras.ece.nam.fstoolkit.extensionpoint.WorkflowEnginesBrowser; import brokermodel.Broker; import brokermodel.extensionInterfaces.IWorkflowEngine; import brokermodel.federationscenarios.FederationscenariosFactory; import brokermodel.federationscenarios.RequestedFederationScenario; import brokermodel.federationscenarios.ResourceGroup; import brokermodel.federationscenarios.ResourceRequest; import brokermodel.federationscenarios.ResourceSettingInstance; import brokermodel.resources.ResourceSetting; public class ControlResourceView extends ViewPart { private FormToolkit toolkit; private ScrolledForm form; private ResourceRequest resourceRequest; private ResourceGroup resourceGroup; private ArrayList<Text> readValuesTextfields= new ArrayList<Text>(); private ArrayList<Text> updateValuesTextfields= new ArrayList<Text>(); public ControlResourceView() { } @Override public void createPartControl(Composite parent) { // this.setPartName( this.getViewSite().getSecondaryId() ); toolkit = new FormToolkit(parent.getDisplay()); form = toolkit.createScrolledForm(parent); } public void setResourceRequest(ResourceRequest resourceRequest) { if ( (this.resourceRequest!=null) || (this.resourceGroup!=null)) //we are already have associated resource here return; this.resourceRequest = resourceRequest; //we create here by default a group and add it here this.resourceGroup = FederationscenariosFactory.eINSTANCE.createResourceGroup(); this.resourceGroup.getGroupedResources().add(resourceRequest); createFormControls(); } public void setResourceGroup(ResourceGroup resGroup) { if ( (this.resourceRequest!=null) || (this.resourceGroup!=null))//we are already have associated resource here return; this.resourceGroup = resGroup; resourceRequest = resGroup.getGroupedResources().get(0);//we assign by default the first resource in group here createFormControls(); } public void createFormControls() { if (this.resourceRequest == null) return; if (this.resourceGroup.getGroupedResources().size()>1){ this.setPartName(resourceGroup.getName()); form.setText("Group of resources: "+resourceGroup.getName() ); }else{ this.setPartName(resourceRequest.getName()); form.setText(resourceRequest.getName() + " : "+ resourceRequest.getRuntimeInfo().getGUID()); } TableWrapLayout clayout = new TableWrapLayout (); form.getBody().setLayout(clayout); clayout.numColumns =2; AddInfoSection(); AddActionsSection(); AddSetValuesSection(); if (this.resourceGroup.getGroupedResources().size()==1) AddReadValuesSection(); //has no meaning to add for many resources form.reflow(true); } private void AddInfoSection() { Section section = toolkit.createSection(form.getBody(), Section.DESCRIPTION| Section.TITLE_BAR| Section.TWISTIE|Section.EXPANDED); TableWrapData td = new TableWrapData(TableWrapData.FILL); td.colspan = 2; section.setLayoutData(td); section.setText("Information"); if (this.resourceGroup.getGroupedResources().size()>1){ section.setDescription("Information for all resources of selected group"); }else section.setDescription("Information for selected resource"); Composite sectionClient = toolkit.createComposite(section); GridLayout gd = new GridLayout(); gd.verticalSpacing = 2; gd.horizontalSpacing=7; gd.numColumns = 6; sectionClient.setLayout(gd); section.setClient(sectionClient); Label label = toolkit.createLabel( sectionClient, "Name" ); FontData[] boldFontData= getModifiedFontData(label.getFont().getFontData(), SWT.BOLD); Font boldFont = new Font(Display.getCurrent(), boldFontData); label.setFont(boldFont); label = toolkit.createLabel( sectionClient, "Status" ); label.setFont(boldFont); label = toolkit.createLabel( sectionClient, "GUID" ); label.setFont(boldFont); label = toolkit.createLabel( sectionClient, "Description" ); label.setFont(boldFont); label = toolkit.createLabel( sectionClient, "Type" ); label.setFont(boldFont); label = toolkit.createLabel( sectionClient, "Provider" ); label.setFont(boldFont); for (ResourceRequest resource : resourceGroup.getGroupedResources()) { label = toolkit.createLabel( sectionClient, resource.getName() ); label = toolkit.createLabel( sectionClient, resource.getRuntimeInfo().getStatus().getName() ); label = toolkit.createLabel( sectionClient, resource.getRuntimeInfo().getGUID() ); label = toolkit.createLabel( sectionClient, resource.getDescription() ); label = toolkit.createLabel( sectionClient, resource.getRefOfferedResource().getImplOfferedService().getName() ); String provider = ( (Broker)resource.getRefOfferedResource().getBelongsToSite().getBelongsToProvider().eContainer()).getName() + "."+resource.getRefOfferedResource().getBelongsToSite().getBelongsToProvider().getName()+ "."+resource.getRefOfferedResource().getBelongsToSite().getName(); label = toolkit.createLabel( sectionClient, provider ); } } private static FontData[] getModifiedFontData(FontData[] originalData, int additionalStyle) { FontData[] styleData = new FontData[originalData.length]; for (int i = 0; i < styleData.length; i++) { FontData base = originalData[i]; styleData[i] = new FontData(base.getName(), base.getHeight(), base.getStyle() | additionalStyle); // System.out.println("FONT = "+ base.getName()); // System.out.println("FONT getHeight= "+ base.getHeight()); } return styleData; } private void AddActionsSection() { Section section = toolkit.createSection(form.getBody(), Section.DESCRIPTION| Section.TITLE_BAR| Section.TWISTIE|Section.EXPANDED); TableWrapData td = new TableWrapData(TableWrapData.FILL); td.colspan = 2; section.setLayoutData(td); section.setText("Actions"); if (this.resourceGroup.getGroupedResources().size()>1){ section.setDescription("Actions on all resources of selected group"); }else section.setDescription("Actions on selected resource"); Composite sectionClient = toolkit.createComposite(section); GridLayout gd = new GridLayout(); gd.numColumns = 4; sectionClient.setLayout(gd); section.setClient(sectionClient); Hyperlink link = toolkit.createHyperlink(sectionClient, "Restart", SWT.WRAP); link.addHyperlinkListener(new HyperlinkAdapter() { public void linkActivated(HyperlinkEvent e) { System.out.println("Restart Link activated!"); } }); Hyperlink link2 = toolkit.createHyperlink(sectionClient, "Shut down", SWT.WRAP); link2.addHyperlinkListener(new HyperlinkAdapter() { public void linkActivated(HyperlinkEvent e) { System.out.println("Shut down Link activated!"); } }); Hyperlink linkDelete = toolkit.createHyperlink(sectionClient, "Delete", SWT.WRAP); linkDelete.addHyperlinkListener(new HyperlinkAdapter() { public void linkActivated(HyperlinkEvent e) { System.out.println("Delete Link activated!"); } }); } private void AddSetValuesSection() { Section section = toolkit.createSection(form.getBody(), Section.DESCRIPTION| Section.TITLE_BAR| Section.TWISTIE|Section.EXPANDED); TableWrapData td = new TableWrapData (TableWrapData.FILL); td.colspan = 1; section.setLayoutData(td); section.addExpansionListener(new ExpansionAdapter() { public void expansionStateChanged(ExpansionEvent e) { form.reflow(true); } }); section.setText("Set parameters"); if (this.resourceGroup.getGroupedResources().size()>1){ section.setDescription("Set a value and press Post to provision it to all resources of group"); }else section.setDescription("Set a value and press Post to provision it to selected resource"); Composite sectionClient = toolkit.createComposite(section); GridLayout gd = new GridLayout(); gd.numColumns = 3; sectionClient.setLayout(gd); section.setClient(sectionClient); for (ResourceSetting resourceSetting : resourceRequest.getRefOfferedResource().getResourceSettings() ){ //find if there is in resourceSetting ResourceSettingInstance resResourceSettingInstance = null; for (ResourceSettingInstance s : resourceRequest.getReqResourceSettings()) { if (s.getRefResourceSetting().getName().equalsIgnoreCase(resourceSetting.getName()) ){ resResourceSettingInstance = s; break; } } Label label = toolkit.createLabel( sectionClient, resourceSetting.getName() +"("+ resResourceSettingInstance.getName() +")" ); final Text text = toolkit.createText(sectionClient, "" ); text.setEditable(resResourceSettingInstance.getRefResourceSetting().isWritable() ); text.setEnabled(text.getEditable()); text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Hyperlink link = toolkit.createHyperlink(sectionClient, "Update", SWT.WRAP); updateValuesTextfields.add(text); final ResourceSettingInstance settingToUpdate = resResourceSettingInstance; text.setData(settingToUpdate); link.addHyperlinkListener(new HyperlinkAdapter() { public void linkActivated(HyperlinkEvent e) { System.out.println("UPDATE Link activated!"); for (IWorkflowEngine wEngine : WorkflowEnginesBrowser.getInstance().getWorkflowEngines()) { //System.out.println("tearDownScenarioAction =" + viewer.getSelection().toString() ); RequestedFederationScenario scenario = null; if (resourceRequest.eContainer()!=null) if (resourceRequest.eContainer().eContainer()!=null) scenario =(RequestedFederationScenario)resourceRequest.eContainer().eContainer() ; settingToUpdate.setStaticValue(text.getText()); org.eclipse.emf.common.util.BasicEList<ResourceSettingInstance> settings = new BasicEList<ResourceSettingInstance>(); settings.add(settingToUpdate); wEngine.UpdateResource(scenario, resourceRequest, settings) ; } } }); } Hyperlink link = toolkit.createHyperlink(sectionClient, "Update All values", SWT.WRAP); link.addHyperlinkListener(new HyperlinkAdapter() { public void linkActivated(HyperlinkEvent e) { System.out.println("Post All values Link activated!"); org.eclipse.emf.common.util.BasicEList<ResourceSettingInstance> settings = new BasicEList<ResourceSettingInstance>(); for (Text t : updateValuesTextfields) { ResourceSettingInstance settingToUpdate = (ResourceSettingInstance)t.getData(); settingToUpdate.setStaticValue(t.getText()); settings.add(settingToUpdate); } for (IWorkflowEngine wEngine : WorkflowEnginesBrowser.getInstance().getWorkflowEngines()) { //System.out.println("tearDownScenarioAction =" + viewer.getSelection().toString() ); RequestedFederationScenario scenario = null; if (resourceRequest.eContainer()!=null) if (resourceRequest.eContainer().eContainer()!=null) scenario =(RequestedFederationScenario)resourceRequest.eContainer().eContainer() ; wEngine.UpdateResource(scenario, resourceRequest, settings ) ; } } }); //Button button = toolkit.createButton(sectionClient, "A checkbox in a form", SWT.CHECK); } private void AddReadValuesSection() { Section section = toolkit.createSection(form.getBody(), Section.DESCRIPTION| Section.TITLE_BAR| Section.TWISTIE|Section.EXPANDED); TableWrapData td = new TableWrapData(TableWrapData.FILL); td.colspan = 1; section.setLayoutData(td); section.addExpansionListener(new ExpansionAdapter() { public void expansionStateChanged(ExpansionEvent e) { form.reflow(true); } }); section.setText("Read parameters of resource"); section.setDescription("Description of section"); Composite sectionClient = toolkit.createComposite(section); GridLayout gd = new GridLayout(); gd.numColumns = 3; sectionClient.setLayout(gd); section.setClient(sectionClient); for (ResourceSetting resourceSetting : resourceRequest.getRefOfferedResource().getResourceSettings() ){ //find if there is in ResourceSettingInstance ResourceSettingInstance resResourceSettingInstance = null; for (ResourceSettingInstance s : resourceRequest.getReqResourceSettings()) { if (s.getRefResourceSetting().getName().equalsIgnoreCase(resourceSetting.getName()) ){ resResourceSettingInstance = s; break; } } if (resResourceSettingInstance!=null){ final Label label = toolkit.createLabel( sectionClient, resourceSetting.getName() +"("+ resResourceSettingInstance.getName() +")" ); final Text text = toolkit.createText(sectionClient, "" ); text.setEditable(false); text.setEnabled(text.getEditable()); text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Hyperlink link = toolkit.createHyperlink(sectionClient, "Refresh", SWT.WRAP); readValuesTextfields.add(text); final ResourceSettingInstance settingToRead = resResourceSettingInstance; text.setData(settingToRead); link.addHyperlinkListener(new HyperlinkAdapter() { public void linkActivated(HyperlinkEvent e) { System.out.println("Refresh Link activated for "+ label.getText() +"!"); for (IWorkflowEngine wEngine : WorkflowEnginesBrowser.getInstance().getWorkflowEngines()) { //System.out.println("tearDownScenarioAction =" + viewer.getSelection().toString() ); RequestedFederationScenario scenario = null; if (resourceRequest.eContainer()!=null) if (resourceRequest.eContainer().eContainer()!=null) scenario =(RequestedFederationScenario)resourceRequest.eContainer().eContainer() ; String val = wEngine.ReadResource(scenario, resourceRequest, settingToRead, true) ; text.setText(val); } } }); } } Hyperlink link = toolkit.createHyperlink(sectionClient, "Refresh All values", SWT.WRAP); link.addHyperlinkListener(new HyperlinkAdapter() { public void linkActivated(HyperlinkEvent e) { System.out.println("Refresh All values Link activated!"); for (Text t : readValuesTextfields) { ResourceSettingInstance settingToRead = (ResourceSettingInstance)t.getData(); for (IWorkflowEngine wEngine : WorkflowEnginesBrowser.getInstance().getWorkflowEngines()) { //System.out.println("tearDownScenarioAction =" + viewer.getSelection().toString() ); RequestedFederationScenario scenario = null; if (resourceRequest.eContainer()!=null) if (resourceRequest.eContainer().eContainer()!=null) scenario =(RequestedFederationScenario)resourceRequest.eContainer().eContainer() ; String val = wEngine.ReadResource(scenario, resourceRequest, settingToRead, true) ; t.setText(val); } } } }); //Button button = toolkit.createButton(sectionClient, "Refresh automatically", SWT.CHECK); } @Override public void setFocus() { form.setFocus(); } /** * Disposes the toolkit */ public void dispose() { toolkit.dispose(); super.dispose(); } }