package org.gcube.portlets.user.reportgenerator.client.dialog; import java.util.ArrayList; import java.util.List; import org.gcube.portlets.user.reportgenerator.client.ReportService; import org.gcube.portlets.user.reportgenerator.client.ReportServiceAsync; import org.gcube.portlets.user.reportgenerator.client.events.SelectedReportEvent; import org.gcube.portlets.user.reportgenerator.shared.VMEReportBean; import org.gcube.portlets.user.reportgenerator.shared.VMETypeIdentifier; import com.extjs.gxt.ui.client.event.ButtonEvent; 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.store.Store; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.Html; import com.extjs.gxt.ui.client.widget.Window; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.form.StoreFilterField; 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.layout.FitLayout; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; public class ImportVMEReportDialog extends Window { private static final int WIDTH = 600; private static final int HEIGHT = 450; private ReportServiceAsync reportService = (ReportServiceAsync) GWT.create(ReportService.class); private ContentPanel mainPanel = new ContentPanel(); private HandlerManager eventBus; private HorizontalPanel hp = new HorizontalPanel(); private StoreFilterField filter; private VMETypeIdentifier type; /** * * @param eventBus the bus to fire events into */ public ImportVMEReportDialog(final HandlerManager eventBus, VMETypeIdentifier type) { this.eventBus = eventBus; this.type = type; mainPanel.setHeaderVisible(false); setWidth(WIDTH); setHeight(HEIGHT); mainPanel.setWidth(WIDTH-10); mainPanel.setHeight(HEIGHT-50); filter = new StoreFilterField() { @Override protected boolean doSelect(Store store, VMEReportBean parent, VMEReportBean record, String property, String filter) { String name = record.getName(); name = name.toLowerCase(); if (name.contains(filter.toLowerCase())) { return true; } return false; } }; filter.setEmptyText("Filter by Name"); filter.setWidth("250px"); hp.add(filter); hp.setPixelSize(250, 20); hp.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); add(hp); add(mainPanel); showLoading(); if (type == VMETypeIdentifier.Vme) reportService.listVMEReports(new AsyncCallback>() { @Override public void onFailure(Throwable caught) { mainPanel.unmask(); } @Override public void onSuccess(ArrayList reports) { mainPanel.unmask(); showAvailableReports(reports); } }); else { reportService.listVMEReportRefByType(type, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { mainPanel.unmask(); } @Override public void onSuccess(ArrayList refReports) { mainPanel.unmask(); showAvailableReferenceReports(refReports); } }); } } /** * * @param reports */ public void showAvailableReferenceReports(List reports) { ColumnModel cm = null; List configs = new ArrayList(); ColumnConfig column = new ColumnConfig(); column.setId("id"); column.setHeader("ID"); column.setHidden(false); column.setWidth(50); column.setRowHeader(true); configs.add(column); column = new ColumnConfig(); column.setId("name"); column.setHeader("Name"); column.setWidth(150); configs.add(column); cm = new ColumnModel(configs); /** * load the grid data */ ListStore store = new ListStore (); store.add(reports); filter.bind(store); final Grid grid = new Grid(store, cm); grid.getElement().getStyle().setBorderWidth(0, Unit.PX); grid.setAutoExpandColumn("name"); grid.setBorders(false); grid.setStripeRows(true); ContentPanel gridPanel = new ContentPanel(new FitLayout()); gridPanel.setHeaderVisible(false); gridPanel.add(grid); gridPanel.addButton(new Button("Cancel", new SelectionListener() { @Override public void componentSelected(ButtonEvent ce) { hide(); } })); gridPanel.addButton(new Button("Edit Selected", new SelectionListener() { @Override public void componentSelected(ButtonEvent ce) { hide(); eventBus.fireEvent(new SelectedReportEvent(grid.getSelectionModel().getSelectedItem().getId(), type)); } })); mainPanel.add(gridPanel); mainPanel.setLayout(new FitLayout()); mainPanel.layout(); } /** * view for collections step * @param vDesc */ public void showAvailableReports(List reports) { ColumnModel cm = null; List configs = new ArrayList(); ColumnConfig column = new ColumnConfig(); column.setId("id"); column.setHeader("ID"); column.setHidden(true); column.setWidth(50); column.setRowHeader(true); configs.add(column); column = new ColumnConfig(); column.setId("rfmo"); column.setHeader("RFMO"); column.setWidth(150); configs.add(column); column = new ColumnConfig(); column.setId("name"); column.setHeader("Name"); column.setWidth(150); configs.add(column); column = new ColumnConfig(); column.setId("year"); column.setHeader("Year"); column.setWidth(50); configs.add(column); cm = new ColumnModel(configs); /** * load the grid data */ GroupingStore store = new GroupingStore(); store.add(reports); store.groupBy("rfmo"); filter.bind(store); final Grid grid = new Grid(store, cm); grid.getElement().getStyle().setBorderWidth(0, Unit.PX); grid.setAutoExpandColumn("name"); grid.setBorders(false); grid.setStripeRows(true); GroupingView view = new GroupingView(); view.setShowGroupedColumn(false); grid.setView(view); view.setForceFit(true); ContentPanel gridPanel = new ContentPanel(new FitLayout()); gridPanel.setHeaderVisible(false); gridPanel.add(grid); gridPanel.addButton(new Button("Cancel", new SelectionListener() { @Override public void componentSelected(ButtonEvent ce) { hide(); } })); gridPanel.addButton(new Button("Import Selected", new SelectionListener() { @Override public void componentSelected(ButtonEvent ce) { hide(); eventBus.fireEvent(new SelectedReportEvent(grid.getSelectionModel().getSelectedItem().getId(), VMETypeIdentifier.Vme)); } })); mainPanel.add(gridPanel); mainPanel.setLayout(new FitLayout()); mainPanel.layout(); } /** * */ private void showLoading() { mainPanel.mask("Asking for available Reports, please wait ... ", "loading-indicator"); } }