package org.gcube.portlets.admin.vredeployer.client.view.panels.builders; import java.util.ArrayList; import java.util.List; import org.gcube.portlets.admin.vredeployer.client.control.Controller; import org.gcube.portlets.admin.vredeployer.shared.GHNBean; import org.gcube.portlets.admin.vredeployer.shared.GHNProfile; import org.gcube.portlets.admin.vredeployer.shared.RunningInstance; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.Style.SortDir; import com.extjs.gxt.ui.client.data.ModelData; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.GridEvent; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.MessageBox; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.form.CheckBox; import com.extjs.gxt.ui.client.widget.grid.CellEditor; import com.extjs.gxt.ui.client.widget.grid.CheckColumnConfig; 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.layout.FitLayout; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.ui.HTML; /** * * @author massi * */ public class GhnGrid { private List myGHNList; private Controller controller; public GhnGrid(Controller controller, List list) { myGHNList = list; this.controller = controller; } public List getGHNList() { return myGHNList; } public ContentPanel getGrid() { List toShow = new ArrayList(); for (GHNProfile p : myGHNList) { toShow.add(new GHNBean(p.getId(), p.getHost(), p.getMemory().getVirtualAvailable(), p.getSite().getDomain(), p.isSelected(), p.getMemory().getLocalAvailableSpace(), p.getSite().getLocation(), p.getSite().getCountry(), p.isSecure())); } List configs = new ArrayList(); ColumnConfig column = new ColumnConfig(); column.setId("id"); column.setHeader("ID"); column.setWidth(50); column.setHidden(true); configs.add(column); column = new ColumnConfig(); column.setId("host"); column.setHeader("Host name"); column.setWidth(150); configs.add(column); column = new ColumnConfig(); column.setId("domain"); column.setHeader("Domain"); column.setHidden(true); column.setWidth(150); configs.add(column); column = new ColumnConfig(); column.setId("memory"); column.setHeader("mem avail."); column.setAlignment(HorizontalAlignment.CENTER); column.setWidth(40); configs.add(column); column = new ColumnConfig(); column.setId("diskspace"); column.setHeader("disk avail."); column.setAlignment(HorizontalAlignment.CENTER); column.setHidden(false); column.setWidth(50); configs.add(column); column = new ColumnConfig(); column.setId("country"); column.setHeader("Country"); column.setAlignment(HorizontalAlignment.CENTER); column.setHidden(true); column.setWidth(50); configs.add(column); column = new ColumnConfig(); column.setId("location"); column.setHeader("Location"); column.setHidden(true); column.setAlignment(HorizontalAlignment.CENTER); column.setWidth(50); configs.add(column); column = new ColumnConfig(); column.setId("isSecure"); column.setHeader("isSecure"); column.setAlignment(HorizontalAlignment.CENTER); column.setHidden(true); column.setWidth(40); configs.add(column); CheckColumnConfig checkColumn = new CheckColumnConfig("isSelected", "isSelected", 35) { @Override protected void onMouseDown(final GridEvent ge) { super.onMouseDown(ge); GHNBean bean = (GHNBean) ge.getModel(); showGHNAdditionalInfo(bean.getId(), myGHNList); } }; checkColumn.setHeader("Select"); checkColumn.setAlignment(HorizontalAlignment.CENTER); CheckBox checkbox = new CheckBox(); CellEditor checkBoxEditor = new CellEditor(checkbox); checkColumn.setEditor(checkBoxEditor); configs.add(checkColumn); final ColumnModel cm = new ColumnModel(configs); /** * load the grid data */ final ListStore store = new ListStore(); //store.groupBy("domain"); store.sort("isSelectable", SortDir.DESC); store.add(toShow); Grid grid = new Grid(store, cm); grid.addPlugin(checkColumn); grid.setStyleAttribute("borderTop", "none"); grid.setAutoExpandColumn("host"); grid.setBorders(true); grid.setStripeRows(true); grid.getView().setForceFit(true); ContentPanel gridPanel = new ContentPanel(new FitLayout()); gridPanel.setHeaderVisible(false); gridPanel.add(grid); gridPanel.addButton(new Button("Reset", new SelectionListener() { @Override public void componentSelected(ButtonEvent ce) { store.rejectChanges(); } })); gridPanel.addButton(new Button("Commit changes", new SelectionListener() { @Override public void componentSelected(ButtonEvent ce) { List ghns = store.getModels(); int selectedCounter = 0; for (GHNBean ghn : ghns) if (ghn.isSelected()) selectedCounter++; if (selectedCounter < 1) MessageBox.alert("Alert", "At least one node must be added for deploying ", null); else { GHNBean[] selectedGHNIds = new GHNBean[selectedCounter]; //get the selected ghnID int j = 0; for (int i = 0; i < ghns.size(); i++) if (ghns.get(i).isSelected()) { selectedGHNIds[j] = ghns.get(i);; j++; } GWT.log("Storing GHN List"); store.commitChanges(); controller.setGHNsSelected(selectedGHNIds); } } })); return gridPanel; } /** * * @param ghnID * @param ghnodes */ private void showGHNAdditionalInfo(String ghnID, List ghnodes) { for (GHNProfile ghn : ghnodes) { if (ghn.getId().compareTo(ghnID) == 0) { ContentPanel cp = new ContentPanel(); cp.setHeaderVisible(false); cp.setBodyBorder(false); String toAdd = "

" + ghn.getHost() + "

"; toAdd += "
Site:"; toAdd += "
    "; toAdd += "
  •   -   Location: " + ghn.getSite().getLocation() + "
  • " ; toAdd += "
  •   -   Country: " + ghn.getSite().getCountry() + "
  • " ; toAdd += "
  •   -   Domain: " + ghn.getSite().getDomain() + "
  • " ; toAdd += "
"; toAdd += "
Running Instances:"; List ris = ghn.getRunningInstances(); if (ris != null) { toAdd += "
    "; for (RunningInstance ri : ris) { toAdd += "
  •   -   "+ ri.getName()+ " (" + ri.getServiceClass() + ")
  • " ; } if (ris.size() == 0) toAdd += "
  •   -   none
  • " ; toAdd += "
"; } cp.add(new HTML(toAdd, true )); cp.setStyleAttribute("margin", "10px"); cp.setLayout(new FitLayout()); controller.setEastPanelContent(cp); break; } } } }