361 lines
11 KiB
Java
361 lines
11 KiB
Java
package org.gcube.portlets.admin.vredeployer.client.view.panels;
|
|
|
|
import java.util.List;
|
|
|
|
import org.gcube.portlets.admin.vredeployer.client.VredeployerService;
|
|
import org.gcube.portlets.admin.vredeployer.client.VredeployerServiceAsync;
|
|
import org.gcube.portlets.admin.vredeployer.client.constants.ImagesConstants;
|
|
import org.gcube.portlets.admin.vredeployer.client.control.Controller;
|
|
import org.gcube.portlets.admin.vredeployer.client.model.VREFunctionalityModel;
|
|
import org.gcube.portlets.admin.vredeployer.client.util.CheckTimer;
|
|
import org.gcube.portlets.admin.vredeployer.client.view.panels.builders.CloudDeployStatus;
|
|
import org.gcube.portlets.admin.vredeployer.client.view.panels.builders.GhnGrid;
|
|
import org.gcube.portlets.admin.vredeployer.client.view.panels.builders.OverallDeployStatus;
|
|
import org.gcube.portlets.admin.vredeployer.client.view.panels.builders.ResourcesDeployStatus;
|
|
import org.gcube.portlets.admin.vredeployer.client.view.panels.builders.ServicesDeployStatus;
|
|
import org.gcube.portlets.admin.vredeployer.shared.GHNBean;
|
|
import org.gcube.portlets.admin.vredeployer.shared.GHNProfile;
|
|
import org.gcube.portlets.admin.vredeployer.shared.VREDescrBean;
|
|
|
|
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
|
|
import com.extjs.gxt.ui.client.Style.Orientation;
|
|
import com.extjs.gxt.ui.client.Style.SelectionMode;
|
|
import com.extjs.gxt.ui.client.data.ModelData;
|
|
import com.extjs.gxt.ui.client.data.ModelIconProvider;
|
|
import com.extjs.gxt.ui.client.event.ButtonEvent;
|
|
import com.extjs.gxt.ui.client.event.Events;
|
|
import com.extjs.gxt.ui.client.event.Listener;
|
|
import com.extjs.gxt.ui.client.event.SelectionListener;
|
|
import com.extjs.gxt.ui.client.event.TreePanelEvent;
|
|
import com.extjs.gxt.ui.client.store.TreeStore;
|
|
import com.extjs.gxt.ui.client.util.IconHelper;
|
|
import com.extjs.gxt.ui.client.util.Margins;
|
|
import com.extjs.gxt.ui.client.widget.ContentPanel;
|
|
import com.extjs.gxt.ui.client.widget.button.Button;
|
|
import com.extjs.gxt.ui.client.widget.form.FieldSet;
|
|
import com.extjs.gxt.ui.client.widget.form.FormPanel;
|
|
import com.extjs.gxt.ui.client.widget.form.TextArea;
|
|
import com.extjs.gxt.ui.client.widget.form.TextField;
|
|
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
|
|
import com.extjs.gxt.ui.client.widget.layout.FlowData;
|
|
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
|
|
import com.extjs.gxt.ui.client.widget.layout.FormData;
|
|
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
|
|
import com.extjs.gxt.ui.client.widget.layout.RowData;
|
|
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
|
|
import com.extjs.gxt.ui.client.widget.treepanel.TreePanel;
|
|
import com.google.gwt.core.client.GWT;
|
|
import com.google.gwt.user.client.ui.AbstractImagePrototype;
|
|
import com.google.gwt.user.client.ui.CellPanel;
|
|
import com.google.gwt.user.client.ui.HTML;
|
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
|
|
|
public class CenterPanel extends ContentPanel {
|
|
/**
|
|
* Create a remote service proxy to talk to the server-side Greeting service.
|
|
*/
|
|
private final VredeployerServiceAsync deployerService = GWT.create(VredeployerService.class);
|
|
|
|
private Controller controller;
|
|
/**
|
|
*
|
|
*/
|
|
private CheckTimer checkTimer = null;
|
|
|
|
private boolean showingSummary = false;
|
|
|
|
public CenterPanel(Controller c) {
|
|
controller = c;
|
|
this.setHeading("");
|
|
this.setFrame(true);
|
|
this.setBodyStyle("backgroundColor: white;");
|
|
setButtonAlign(HorizontalAlignment.CENTER);
|
|
this.mask("Loading VRE definition for Approval", "loading-indicator");
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public void emptyPanel() {
|
|
this.removeAll();
|
|
}
|
|
|
|
/**
|
|
* view for description vre step
|
|
* @param vDesc
|
|
*/
|
|
@SuppressWarnings("deprecation")
|
|
public void showVreDescription(VREDescrBean vDesc) {
|
|
|
|
FormData formData = new FormData("-20");
|
|
|
|
FormPanel form = new FormPanel();
|
|
form.setHeaderVisible(false);
|
|
form.setFrame(false);
|
|
form.setWidth("100%");
|
|
form.setLayout(new FlowLayout());
|
|
|
|
FieldSet fieldSet = new FieldSet();
|
|
fieldSet.setHeading("VRE Information");
|
|
//fieldSet.setCheckboxToggle(true);
|
|
|
|
FormLayout layout = new FormLayout();
|
|
layout.setLabelWidth(100);
|
|
fieldSet.setLayout(layout);
|
|
|
|
TextField<String> vrename = new TextField<String>();
|
|
vrename.setFieldLabel("Name");
|
|
vrename.setValue(vDesc.getName());
|
|
fieldSet.add(vrename, formData);
|
|
|
|
TextField<String> vredesigner = new TextField<String>();
|
|
vredesigner.setFieldLabel("Designer");
|
|
vredesigner.setValue(vDesc.getDesigner());
|
|
fieldSet.add(vredesigner, formData);
|
|
|
|
TextField<String> vremanager = new TextField<String>();
|
|
vremanager.setFieldLabel("Manager");
|
|
vremanager.setValue(vDesc.getManager());
|
|
fieldSet.add(vremanager, formData);
|
|
|
|
TextArea description = new TextArea();
|
|
description.setFieldLabel("Description");
|
|
description.setValue(vDesc.getDescription());
|
|
fieldSet.add(description, formData);
|
|
|
|
form.add(fieldSet);
|
|
form.setReadOnly(true);
|
|
|
|
fieldSet = new FieldSet();
|
|
fieldSet.setHeading("Life time");
|
|
fieldSet.setCollapsible(true);
|
|
|
|
layout = new FormLayout();
|
|
layout.setLabelWidth(100);
|
|
fieldSet.setLayout(layout);
|
|
|
|
TextField<String> from = new TextField<String>();
|
|
from.setFieldLabel("From");
|
|
from.setValue(vDesc.getStartTime().toGMTString());
|
|
fieldSet.add(from, formData);
|
|
|
|
TextField<String> to = new TextField<String>();
|
|
to.setFieldLabel("To");
|
|
to.setValue(vDesc.getEndTime().toGMTString());
|
|
fieldSet.add(to, formData);
|
|
|
|
form.add(fieldSet);
|
|
// form.setButtonAlign(HorizontalAlignment.CENTER);
|
|
// form.addButton(new Button("Save"));
|
|
// form.addButton(new Button("Cancel"));
|
|
|
|
this.add(form);
|
|
}
|
|
|
|
|
|
/**
|
|
* view for the functionality step
|
|
* @param root
|
|
*/
|
|
public void showFunctionality(VREFunctionalityModel root) {
|
|
GWT.log("root func: " + root.getChildCount());
|
|
TreePanel<ModelData> tree;
|
|
TreeStore<ModelData> store = new TreeStore<ModelData>();
|
|
// The root node will not be shown
|
|
store.add(root.getChildren(), true);
|
|
tree = new TreePanel<ModelData>(store);
|
|
tree.setWidth(300);
|
|
tree.setDisplayProperty("name");
|
|
add(tree);
|
|
// Handles the selection
|
|
tree.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
|
|
// The icon decorator
|
|
tree.setIconProvider(
|
|
new ModelIconProvider<ModelData>() {
|
|
public AbstractImagePrototype getIcon(final ModelData model) {
|
|
if (model.get("node") != null && model.get("icon") != null) {
|
|
return IconHelper.createStyle((String) model.get("icon"));
|
|
}
|
|
return IconHelper.createStyle("defaultleaf-icon");
|
|
}
|
|
});
|
|
setLayout(new FitLayout());
|
|
tree.expandAll();
|
|
tree.setAutoExpand(true);
|
|
|
|
controller.setEastPanelContent(getInitFuncInfo());
|
|
|
|
tree.addListener(Events.OnClick, new Listener<TreePanelEvent<ModelData>>() {
|
|
|
|
public void handleEvent(TreePanelEvent<ModelData> be) {
|
|
VREFunctionalityModel sm = (VREFunctionalityModel) be.getItem();
|
|
if (be.getType() == Events.OnClick) {
|
|
//do nothing
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
private ContentPanel getInitFuncInfo() {
|
|
ContentPanel cp = new ContentPanel();
|
|
cp.setHeaderVisible(false);
|
|
cp.setBodyBorder(false);
|
|
String toAdd = "<h3>Legend:</h3>";
|
|
toAdd += "<div class=\"extres-icon\" style=\"padding-left:25px; margin-top: 10px; background-repeat: no-repeat;\">Selected Resource</div>";
|
|
toAdd += "<div class=\"runninginstance-icon\" style=\"padding-left:25px; margin-top: 10px; background-repeat: no-repeat;\">Found Service</div>";
|
|
toAdd += "<div class=\"missing-ri\" style=\"padding-left:25px; margin-top: 10px; background-repeat: no-repeat;\">Missing Service</div>";
|
|
toAdd += "<div class=\"architecture-icon\" style=\"padding-left:25px; margin-top: 10px; background-repeat: no-repeat;\">gHN</div>";
|
|
cp.add(new HTML(toAdd, true ));
|
|
cp.setStyleAttribute("margin", "10px");
|
|
cp.setLayout(new FitLayout());
|
|
return cp;
|
|
}
|
|
/**
|
|
* view for architecture step
|
|
* @param vDesc
|
|
*/
|
|
public void showGHNList(final List<GHNProfile> ghnodes) {
|
|
|
|
GhnGrid ghnGrid = new GhnGrid(controller, ghnodes);
|
|
add(ghnGrid.getGrid());
|
|
|
|
setLayout(new FitLayout());
|
|
}
|
|
|
|
|
|
/**
|
|
* view for finalize step
|
|
* @param vDesc
|
|
*/
|
|
public void showFinalize(VREDescrBean desc, GHNBean[] ghns, boolean isCloudSelected) {
|
|
|
|
ContentPanel cp = new ContentPanel(new FitLayout());
|
|
cp.setHeaderVisible(false);
|
|
String toShow = "";
|
|
if ( (ghns == null && (! isCloudSelected) ) ) {
|
|
toShow = "<h3>Step Architecture Selection is Missing</h3>";
|
|
}
|
|
else {
|
|
unmask();
|
|
toShow = "<h3>" + desc.getName() + " is ready to be deployed.</h3>";
|
|
toShow += "<br/><br/>selected nodes:";
|
|
|
|
if (isCloudSelected) {
|
|
toShow += "<p><img src=\""+ ImagesConstants.CLOUD_IMAGE + " \" /></p>";
|
|
} else {
|
|
toShow += "<p><ul>";
|
|
|
|
for (int i = 0; i < ghns.length; i++) {
|
|
if (ghns[i].isSelected())
|
|
toShow += "<li> - <b>"+ ghns[i].getHost()+ "</b> (" + ghns[i].getCountry() + ")</li>" ;
|
|
}
|
|
toShow += "</ul></p>";
|
|
}
|
|
toShow += "<br/><br/>click create button to start the creation process";
|
|
|
|
cp.add(new HTML(toShow, true));
|
|
cp.addButton(new Button("Create", new SelectionListener<ButtonEvent>() {
|
|
@Override
|
|
public void componentSelected(ButtonEvent ce) {
|
|
controller.createVreButtonClicked();
|
|
}
|
|
}));
|
|
}
|
|
cp.setStyleAttribute("margin", "10px");
|
|
cp.add(new HTML(toShow, true));
|
|
add(cp);
|
|
setLayout(new FitLayout());
|
|
showingSummary = true;
|
|
|
|
}
|
|
|
|
/**
|
|
* view for finalize step
|
|
* @param vDesc
|
|
*/
|
|
public void showReport() {
|
|
if (showingSummary) {
|
|
removeAll();
|
|
layout();
|
|
showingSummary = false;
|
|
}
|
|
this.remove(this.getHeader(), true);
|
|
ContentPanel panel = new ContentPanel();
|
|
panel.setLayout(new RowLayout(Orientation.VERTICAL));
|
|
//panel.setSize(400, 300);
|
|
panel.setFrame(false);
|
|
panel.setCollapsible(false);
|
|
panel.setHeaderVisible(false);
|
|
|
|
|
|
CloudDeployStatus cloudPanel = new CloudDeployStatus();
|
|
ServicesDeployStatus resourceManagerPanel = new ServicesDeployStatus();
|
|
|
|
|
|
CellPanel cellp = new HorizontalPanel();
|
|
cellp.setWidth("100%");
|
|
|
|
ContentPanel p1 = cloudPanel.getCloudDeployStatusPanel();
|
|
ContentPanel p2 = resourceManagerPanel.getServicesDeployStatusPanel();
|
|
|
|
cellp.add(p1);
|
|
cellp.add(p2);
|
|
|
|
cellp.setCellWidth(p1, "50%");
|
|
cellp.setCellWidth(p2, "50%");
|
|
cellp.setSpacing(5);
|
|
|
|
//two rows
|
|
|
|
panel.add(cellp, new RowData(1, -1, new Margins()));
|
|
|
|
CellPanel cellp2 = new HorizontalPanel();
|
|
cellp2.setWidth("100%");
|
|
ResourcesDeployStatus resourceAndFuncPanel = new ResourcesDeployStatus();
|
|
OverallDeployStatus overPanel = new OverallDeployStatus();
|
|
|
|
ContentPanel p3 = resourceAndFuncPanel.getResourcesDeployStatusPanel();
|
|
ContentPanel p4 = overPanel.getOverallDeployStatusPanel();
|
|
|
|
|
|
cellp2.add(p3);
|
|
cellp2.add(p4);
|
|
|
|
cellp2.setCellWidth(p3, "50%");
|
|
cellp2.setCellWidth(p4, "50%");
|
|
cellp2.setSpacing(5);
|
|
|
|
|
|
panel.add(cellp, new RowData(1, -1, new Margins()));
|
|
panel.add(cellp2, new RowData(1, -1, new Margins()));
|
|
|
|
//two rows
|
|
Button button = new Button("See textual report", new SelectionListener<ButtonEvent>() {
|
|
@Override
|
|
public void componentSelected(ButtonEvent ce) {
|
|
mask("Retrieving Textual Report", "loading-indicator");
|
|
openTextualReport();
|
|
}
|
|
});
|
|
|
|
add(panel, new FlowData(0));
|
|
add(button, new FlowData(0));
|
|
|
|
|
|
|
|
layout();
|
|
|
|
/**
|
|
* starts the timer
|
|
*/
|
|
CheckTimer reportTimer = new CheckTimer(cloudPanel, resourceManagerPanel, resourceAndFuncPanel, overPanel);
|
|
reportTimer.scheduleTimer(10);
|
|
}
|
|
|
|
|
|
private void openTextualReport() {
|
|
new ReportPanel(this);
|
|
}
|
|
}
|