367 lines
11 KiB
Java
367 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.rpc.AsyncCallback;
|
||
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;
|
||
/**
|
||
*
|
||
* @param c -
|
||
*/
|
||
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<62>/><br<62>/>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<62>/><br<62>/>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);
|
||
}
|
||
}
|