369 lines
11 KiB
Java
369 lines
11 KiB
Java
package org.gcube.portlets.admin.vredeployment.client.view;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import org.gcube.portlets.admin.vredeployment.client.VREDeploymentApp;
|
|
import org.gcube.portlets.admin.vredeployment.shared.VREDefinitionBean;
|
|
import org.gcube.portlets.user.gcubewidgets.client.GCubePanel;
|
|
|
|
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
|
|
import com.extjs.gxt.ui.client.Style.Scroll;
|
|
import com.extjs.gxt.ui.client.event.ComponentEvent;
|
|
import com.extjs.gxt.ui.client.fx.FxConfig;
|
|
import com.extjs.gxt.ui.client.store.GroupingStore;
|
|
import com.extjs.gxt.ui.client.widget.ContentPanel;
|
|
import com.extjs.gxt.ui.client.widget.Dialog;
|
|
import com.extjs.gxt.ui.client.widget.Html;
|
|
import com.extjs.gxt.ui.client.widget.button.Button;
|
|
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
|
|
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
|
|
import com.extjs.gxt.ui.client.widget.grid.Grid;
|
|
import com.extjs.gxt.ui.client.widget.grid.GridGroupRenderer;
|
|
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
|
|
import com.extjs.gxt.ui.client.widget.grid.GroupColumnData;
|
|
import com.extjs.gxt.ui.client.widget.grid.GroupingView;
|
|
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
|
|
import com.extjs.gxt.ui.client.widget.menu.Menu;
|
|
import com.extjs.gxt.ui.client.widget.menu.MenuItem;
|
|
import com.google.gwt.user.client.Window;
|
|
import com.google.gwt.user.client.ui.Composite;
|
|
import com.google.gwt.user.client.ui.RootPanel;
|
|
import com.google.gwt.user.client.ui.Widget;
|
|
|
|
public class VREDeploymentView extends Composite implements Display {
|
|
private GCubePanel mainPanel;
|
|
private final ContentPanel tablePanel;
|
|
|
|
private GroupingStore<VREDefinitionBean> store;
|
|
private Grid<VREDefinitionBean> grid;
|
|
|
|
private Button viewButton;
|
|
private Button editButton;
|
|
private Button removeButton;
|
|
private Button approveButton;
|
|
private Button viewReportButton;
|
|
private Button refreshButton;
|
|
private Button viewTextualReportButton;
|
|
private Button postPoneExpiration;
|
|
|
|
private MenuItem viewMenu;
|
|
private MenuItem editMenu;
|
|
private MenuItem removeMenu;
|
|
private MenuItem approveMenu;
|
|
private MenuItem viewReportMenu;
|
|
|
|
|
|
private Menu gridMenu;
|
|
/**
|
|
*
|
|
*/
|
|
public VREDeploymentView() {
|
|
mainPanel = new GCubePanel("VRE Manager", "https://gcube.wiki.gcube-system.org/gcube/index.php/VRE_Administration#VRE_Approval");
|
|
|
|
tablePanel = new ContentPanel(new FitLayout());
|
|
tablePanel.setHeaderVisible(false);
|
|
tablePanel.setFrame(false);
|
|
tablePanel.setStyleAttribute("Margin", "5px");
|
|
mainPanel.add(tablePanel);
|
|
|
|
store = new GroupingStore<VREDefinitionBean>();
|
|
|
|
GroupingView view = new GroupingView();
|
|
view.setShowGroupedColumn(false);
|
|
view.setForceFit(true);
|
|
final ColumnModel cm = getVREListColumnModel();
|
|
view.setGroupRenderer(new GridGroupRenderer() {
|
|
public String render(GroupColumnData data) {
|
|
String f = cm.getColumnById(data.field).getHeader();
|
|
String l = data.models.size() == 1 ? "VRE" : "VREs";
|
|
return f + ": " + data.group + " (" + data.models.size() + " " + l + ")";
|
|
}
|
|
});
|
|
grid = new Grid<VREDefinitionBean>(store, cm);
|
|
grid.setView(view);
|
|
|
|
viewMenu = new MenuItem("View details");
|
|
viewMenu.setIconStyle("view-icon");
|
|
editMenu = new MenuItem("Edit");
|
|
editMenu.setIconStyle("edit-icon");
|
|
approveMenu = new MenuItem("Approve");
|
|
approveMenu.setIconStyle("approve-icon");
|
|
viewReportMenu = new MenuItem("View Report");
|
|
viewReportMenu.setIconStyle("viewreport-icon");
|
|
removeMenu = new MenuItem("Remove from infrastructure");
|
|
removeMenu.setIconStyle("remove-icon");
|
|
|
|
gridMenu = new Menu();
|
|
grid.setContextMenu(gridMenu);
|
|
|
|
viewButton = new Button("View details");
|
|
editButton = new Button("Edit");
|
|
approveButton = new Button("Approve");
|
|
viewReportButton = new Button("View Report");
|
|
removeButton = new Button("Remove from infrastructure");
|
|
refreshButton = new Button("Refresh");
|
|
viewTextualReportButton = new Button("View Text-Only Report");
|
|
|
|
postPoneExpiration = new Button("Postpone Expiration Time");
|
|
|
|
viewButton.setEnabled(false);
|
|
editButton.setEnabled(false);
|
|
approveButton.setEnabled(false);
|
|
viewReportButton.setEnabled(false);
|
|
removeButton.setEnabled(false);
|
|
refreshButton.setEnabled(true);
|
|
viewTextualReportButton.setEnabled(false);
|
|
postPoneExpiration.setEnabled(false);
|
|
|
|
|
|
initWidget(mainPanel);
|
|
updateSize();
|
|
}
|
|
|
|
/**
|
|
* display the list of wfDocuments
|
|
*/
|
|
private void displayDocuments() {
|
|
tablePanel.removeAll();
|
|
grid.setStyleAttribute("borderTop", "none");
|
|
grid.setAutoExpandColumn("name");
|
|
grid.setBorders(true);
|
|
grid.setStripeRows(true);
|
|
grid.getView().setForceFit(true);
|
|
|
|
ContentPanel gridPanel = new ContentPanel(new FitLayout());
|
|
gridPanel.setHeaderVisible(false);
|
|
gridPanel.add(grid);
|
|
gridPanel.setButtonAlign(HorizontalAlignment.CENTER);
|
|
gridPanel.setButtonAlign(HorizontalAlignment.CENTER);
|
|
gridPanel.addButton(viewButton);
|
|
gridPanel.addButton(editButton);
|
|
|
|
gridPanel.addButton(approveButton);
|
|
gridPanel.addButton(viewReportButton);
|
|
gridPanel.addButton(viewTextualReportButton);
|
|
gridPanel.addButton(removeButton);
|
|
gridPanel.addButton(postPoneExpiration);
|
|
gridPanel.addButton(refreshButton);
|
|
|
|
gridPanel.setBorders(false);
|
|
tablePanel.add(gridPanel);
|
|
tablePanel.setLayout(new FitLayout());
|
|
tablePanel.layout();
|
|
}
|
|
|
|
@Override
|
|
public void maskCenterPanel(String message, boolean mask) {
|
|
if (mask)
|
|
tablePanel.mask(message, "loading-indicator");
|
|
else
|
|
tablePanel.unmask();
|
|
}
|
|
|
|
@Override
|
|
public void setData(List<VREDefinitionBean> data) {
|
|
store.removeAll();
|
|
// store.setDefaultSort("lastDate", SortDir.DESC);
|
|
// store.sort("lastDate", SortDir.DESC);
|
|
store.groupBy("status");
|
|
store.add(data);
|
|
displayDocuments();
|
|
}
|
|
|
|
public Widget asWidget() {
|
|
return this;
|
|
}
|
|
@Override
|
|
public void updateSize() {
|
|
RootPanel workspace = RootPanel.get(VREDeploymentApp.CONTAINER_DIV);
|
|
int topBorder = workspace.getAbsoluteTop();
|
|
int leftBorder = workspace.getAbsoluteLeft();
|
|
int rightScrollBar = 17;
|
|
int rootHeight = Window.getClientHeight() - topBorder - 4;
|
|
int rootWidth = Window.getClientWidth() - 2* leftBorder - rightScrollBar;
|
|
tablePanel.setPixelSize(rootWidth-30, rootHeight-30);
|
|
mainPanel.setPixelSize(rootWidth-30, rootHeight-30);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
*
|
|
* @return the Column Model for the table
|
|
*/
|
|
private ColumnModel getVREListColumnModel() {
|
|
|
|
List<ColumnConfig> configs = new ArrayList<ColumnConfig>();
|
|
|
|
ColumnConfig column = new ColumnConfig();
|
|
column = new ColumnConfig();
|
|
column.setId("name");
|
|
column.setHeader("VRE name");
|
|
column.setWidth(100);
|
|
configs.add(column);
|
|
|
|
column = new ColumnConfig();
|
|
column.setId("status");
|
|
column.setHeader("Status");
|
|
column.setHidden(false);
|
|
column.setWidth(75);
|
|
column.setRowHeader(true);
|
|
configs.add(column);
|
|
|
|
column = new ColumnConfig("description", "Description", 300);
|
|
column.setHidden(false);
|
|
column.setRowHeader(true);
|
|
configs.add(column);
|
|
|
|
column = new ColumnConfig("endingDate", "Expires", 100);
|
|
column.setHidden(false);
|
|
column.setRowHeader(true);
|
|
configs.add(column);
|
|
|
|
return new ColumnModel(configs);
|
|
}
|
|
|
|
|
|
/**
|
|
* change the button to enable in the bottom bar depending on the status of the selected VRE
|
|
*/
|
|
@Override
|
|
public void enableActionButtons(VREDefinitionBean selectedItem) {
|
|
if (selectedItem != null) {
|
|
if ((selectedItem.getStatus().compareTo("Failed") == 0) || (selectedItem.getStatus().compareTo("Finished") == 0) || (selectedItem.getStatus().compareTo("Deployed") == 0)) {
|
|
getViewButton().setEnabled(true);
|
|
getEditButton().setEnabled(false);
|
|
getApproveButton().setEnabled(false);
|
|
getRemoveButton().setEnabled(true);
|
|
getViewReportButton().setEnabled(true);
|
|
getViewTextualReportButton().setEnabled(true);
|
|
}
|
|
else if ((selectedItem.getStatus().compareTo("Running") == 0) || (selectedItem.getStatus().compareTo("Deploying") == 0)) {
|
|
getViewButton().setEnabled(true);
|
|
getEditButton().setEnabled(false);
|
|
getApproveButton().setEnabled(false);
|
|
getRemoveButton().setEnabled(false);
|
|
getViewReportButton().setEnabled(true);
|
|
getViewTextualReportButton().setEnabled(true);
|
|
}
|
|
else if (selectedItem.getStatus().compareTo("Pending") == 0 || selectedItem.getStatus().compareTo("Incomplete") == 0 || selectedItem.getStatus().compareTo("Disposed") == 0) {
|
|
getViewButton().setEnabled(true);
|
|
getEditButton().setEnabled(true);
|
|
getApproveButton().setEnabled(true);
|
|
getRemoveButton().setEnabled(true);
|
|
getViewReportButton().setEnabled(false);
|
|
}
|
|
|
|
//also enable postpone just for deployed VREs
|
|
if (selectedItem.getStatus().compareTo("Deployed") == 0) {
|
|
getPostPoneButton().setEnabled(true);
|
|
}
|
|
}
|
|
else {
|
|
getViewButton().setEnabled(false);
|
|
getEditButton().setEnabled(false);
|
|
getApproveButton().setEnabled(false);
|
|
getRemoveButton().setEnabled(false);
|
|
getViewReportButton().setEnabled(false);
|
|
getViewTextualReportButton().setEnabled(false);
|
|
getPostPoneButton().setEnabled(false);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void showDetailsDialog(String html2Show) {
|
|
final Dialog simple = new Dialog();
|
|
simple.setHeading("VRE Details");
|
|
simple.setButtons(Dialog.CLOSE);
|
|
simple.setBodyStyleName("pad-text");
|
|
Html toDisplay = new Html(html2Show);
|
|
simple.add(toDisplay);
|
|
simple.getItem(0).getFocusSupport().setIgnore(true);
|
|
simple.setScrollMode(Scroll.AUTO);
|
|
simple.setHideOnButtonClick(true);
|
|
simple.setModal(true);
|
|
simple.setSize(600, 450);
|
|
simple.setMaximizable(true);
|
|
simple.show();
|
|
simple.el().fadeIn(FxConfig.NONE);
|
|
|
|
}
|
|
|
|
/**
|
|
* change the items to show in the menu depending on the status of the selected VRE
|
|
*/
|
|
@Override
|
|
public void setGridContextMenu(String vreStatus) {
|
|
gridMenu.removeAll();
|
|
if (vreStatus.compareTo("Failed") == 0 || (vreStatus.compareTo("Finished") == 0) || (vreStatus.compareTo("Deployed") == 0)) {
|
|
gridMenu.add(viewMenu);
|
|
gridMenu.add(removeMenu);
|
|
gridMenu.add(viewReportMenu);
|
|
}
|
|
else if ((vreStatus.compareTo("Running") == 0) || (vreStatus.compareTo("Deploying") == 0)) {
|
|
gridMenu.add(viewReportMenu);
|
|
gridMenu.add(viewMenu);
|
|
}
|
|
else if (vreStatus.compareTo("Pending") == 0) {
|
|
gridMenu.add(approveMenu);
|
|
gridMenu.add(viewMenu);
|
|
gridMenu.add(editMenu);
|
|
gridMenu.add(removeMenu);
|
|
}
|
|
else if (vreStatus.compareTo("Incomplete") == 0 || vreStatus.compareTo("Disposed") == 0) {
|
|
gridMenu.add(approveMenu);
|
|
gridMenu.add(viewMenu);
|
|
gridMenu.add(editMenu);
|
|
gridMenu.add(removeMenu);
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
public Button getApproveButton() { return approveButton;
|
|
}
|
|
@Override
|
|
public Button getEditButton() {return editButton;
|
|
}
|
|
@Override
|
|
public Button getPostPoneButton() {return postPoneExpiration;
|
|
}
|
|
@Override
|
|
public GridSelectionModel<VREDefinitionBean> getGridSelectionModel() { return grid.getSelectionModel();
|
|
}
|
|
@Override
|
|
public Button getRefreshButton() {return refreshButton;
|
|
}
|
|
@Override
|
|
public Button getRemoveButton() {return removeButton;
|
|
}
|
|
@Override
|
|
public Button getViewButton() {return viewButton;
|
|
}
|
|
@Override
|
|
public Button getViewReportButton() {return viewReportButton;
|
|
}
|
|
@Override
|
|
public Button getViewTextualReportButton() {return viewTextualReportButton;
|
|
}
|
|
@Override
|
|
public MenuItem getApproveMenu() { return approveMenu;
|
|
}
|
|
@Override
|
|
public MenuItem getEditMenu() { return editMenu;
|
|
}
|
|
@Override
|
|
public MenuItem getRemoveMenu() { return removeMenu;
|
|
}
|
|
@Override
|
|
public MenuItem getViewMenu() { return viewMenu;
|
|
}
|
|
@Override
|
|
public MenuItem getViewReportMenu() {return viewReportMenu;
|
|
}
|
|
|
|
}
|