vre-definition/src/main/java/org/gcube/portlets/admin/vredefinition/client/view/ResourcesGrid.java

159 lines
4.9 KiB
Java

package org.gcube.portlets.admin.vredefinition.client.view;
import java.util.ArrayList;
import java.util.List;
import org.gcube.portlets.admin.vredefinition.client.AppController;
import org.gcube.portlets.admin.vredefinition.client.event.ExternalResourceSelectionEvent;
import org.gcube.portlets.admin.vredefinition.client.model.VREFunctionalityModel;
import org.gcube.portlets.admin.vredefinition.shared.ExternalResourceModel;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.core.XTemplate;
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.GroupingStore;
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.grid.GroupingView;
import com.extjs.gxt.ui.client.widget.grid.RowExpander;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.google.gwt.core.client.GWT;
/**
*
* @author Massimiliano Assante ISTI-CNR
* @version 0.2 Sep 2012
*
*/
public class ResourcesGrid {
private List<ExternalResourceModel> myResourcesList;
private VREFunctionalityModel myFunc;
public ResourcesGrid(VREFunctionalityModel func, List<ExternalResourceModel> list) {
myFunc = func;
myResourcesList = list;
}
public ContentPanel getGrid() {
ArrayList<ColumnConfig> configs = new ArrayList<ColumnConfig>();
XTemplate tpl = XTemplate.create("<div class=\"resourceText\"><b>Resource name:</b> {name}</div><div class=\"resourceText\"><b>Description:</b> {description}<div>");
RowExpander expander = new RowExpander();
expander.setTemplate(tpl);
configs.add(expander);
ColumnConfig column = new ColumnConfig();
column.setId("id");
column.setHeader("ID");
column.setWidth(50);
column.setHidden(true);
configs.add(column);
column = new ColumnConfig();
column.setId("name");
column.setHeader("Name");
column.setWidth(100);
configs.add(column);
column = new ColumnConfig();
column.setId("description");
column.setHeader("Description");
column.setWidth(200);
configs.add(column);
column = new ColumnConfig();
column.setId("category");
column.setHeader("Type");
column.setHidden(true);
column.setAlignment(HorizontalAlignment.CENTER);
column.setWidth(30);
configs.add(column);
CheckColumnConfig checkColumn = new CheckColumnConfig("isSelected", "isSelected", 35) {
@Override
protected void onMouseDown(final GridEvent<ModelData> ge) {
super.onMouseDown(ge);
ExternalResourceModel bean = (ExternalResourceModel) ge.getModel();
//TODO:
}
};
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 GroupingStore<ExternalResourceModel> store = new GroupingStore<ExternalResourceModel>();
store.groupBy("category");
//store.sort("isSelectable", SortDir.DESC);
store.add(myResourcesList);
Grid<ExternalResourceModel> grid = new Grid<ExternalResourceModel>(store, cm);
GroupingView view = new GroupingView();
view.setShowGroupedColumn(false);
view.setForceFit(true);
grid.setView(view);
grid.addPlugin(expander);
grid.addPlugin(checkColumn);
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.setHeight(400);
gridPanel.addButton(new Button("Reset", new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
store.rejectChanges();
}
}));
gridPanel.addButton(new Button("Commit changes", new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
List<ExternalResourceModel> resources = store.getModels();
store.commitChanges();
AppController.getAppController().getBus().fireEvent(new ExternalResourceSelectionEvent(myFunc, resources));
}
}));
return gridPanel;
}
}