This repository has been archived on 2021-11-25. You can view files and clone it, but cannot push or open issues or pull requests.
vmereports-manager-portlet/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/ImportVMEReportDialog.java

272 lines
8.0 KiB
Java

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.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<VMEReportBean> filter;
private VMETypeIdentifier type;
/**
*
* @param eventBus the bus to fire events into
*/
public ImportVMEReportDialog(final HandlerManager eventBus, VMETypeIdentifier type, final boolean isAssociation) {
this.eventBus = eventBus;
this.type = type;
setModal(true);
mainPanel.setHeaderVisible(false);
setWidth(WIDTH);
setHeight(HEIGHT);
mainPanel.setWidth(WIDTH-10);
mainPanel.setHeight(HEIGHT-50);
filter = new StoreFilterField<VMEReportBean>() {
@Override
protected boolean doSelect(Store<VMEReportBean> 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 Title");
filter.setWidth("250px");
hp.add(filter);
hp.setPixelSize(250, 20);
hp.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
add(hp);
add(mainPanel);
showLoading();
if (type == VMETypeIdentifier.Vme) {
setHeading("Select the VME");
reportService.listVMEReports(new AsyncCallback<ArrayList<VMEReportBean>>() {
@Override
public void onFailure(Throwable caught) {
mainPanel.unmask();
}
@Override
public void onSuccess(ArrayList<VMEReportBean> reports) {
mainPanel.unmask();
showAvailableReports(reports);
}
});
}
else {
setHeading("Select the " + type.getId());
reportService.listVMEReportRefByType(type, new AsyncCallback<ArrayList<VMEReportBean>>() {
@Override
public void onFailure(Throwable caught) {
mainPanel.unmask();
}
@Override
public void onSuccess(ArrayList<VMEReportBean> refReports) {
mainPanel.unmask();
showAvailableReferenceReports(refReports, isAssociation);
}
});
}
}
/**
*
* @param reports
*/
public void showAvailableReferenceReports(List<VMEReportBean> reports, boolean isAssociation) {
ColumnModel cm = null;
List<ColumnConfig> configs = new ArrayList<ColumnConfig>();
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("Indentifier");
column.setWidth(150);
configs.add(column);
cm = new ColumnModel(configs);
/**
* load the grid data
*/
ListStore<VMEReportBean> store = new ListStore <VMEReportBean>();
store.add(reports);
filter.bind(store);
filter.setEmptyText("Filter by Identifier");
final Grid<VMEReportBean> grid = new Grid<VMEReportBean>(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<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
hide();
}
}));
if (isAssociation) {
gridPanel.addButton(new Button("Associate Selected", new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
hide();
eventBus.fireEvent(new SelectedReportEvent(grid.getSelectionModel().getSelectedItem().getId(), grid.getSelectionModel().getSelectedItem().getName(), type, true));
}
}));
}
else {
gridPanel.addButton(new Button("Edit Selected", new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
hide();
eventBus.fireEvent(new SelectedReportEvent(grid.getSelectionModel().getSelectedItem().getId(), grid.getSelectionModel().getSelectedItem().getName(), type, false));
}
}));
}
mainPanel.add(gridPanel);
mainPanel.setLayout(new FitLayout());
mainPanel.layout();
}
/**
* view for collections step
* @param vDesc
*/
public void showAvailableReports(List<VMEReportBean> reports) {
ColumnModel cm = null;
List<ColumnConfig> configs = new ArrayList<ColumnConfig>();
ColumnConfig column = new ColumnConfig();
column.setId("rfmo");
column.setHeader("Owner");
column.setWidth(50);
configs.add(column);
column = new ColumnConfig();
column.setId("name");
column.setHeader("VME Title");
column.setWidth(150);
configs.add(column);
column = new ColumnConfig();
column.setId("id");
column.setHeader("ID");
column.setWidth(30);
configs.add(column);
cm = new ColumnModel(configs);
/**
* load the grid data
*/
GroupingStore<VMEReportBean> store = new GroupingStore<VMEReportBean>();
store.add(reports);
store.groupBy("rfmo");
filter.bind(store);
final Grid<VMEReportBean> grid = new Grid<VMEReportBean>(store, cm);
grid.getElement().getStyle().setBorderWidth(0, Unit.PX);
grid.setAutoExpandColumn("name");
grid.setBorders(false);
grid.setStripeRows(true);
GroupingView view = new GroupingView();
view.setShowGroupedColumn(true);
view.setStartCollapsed(true);
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<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
hide();
}
}));
gridPanel.addButton(new Button("Import Selected", new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
hide();
eventBus.fireEvent(new SelectedReportEvent(grid.getSelectionModel().getSelectedItem().getId(), grid.getSelectionModel().getSelectedItem().getName(), VMETypeIdentifier.Vme, false));
}
}));
mainPanel.add(gridPanel);
mainPanel.setLayout(new FitLayout());
mainPanel.layout();
}
/**
*
*/
private void showLoading() {
mainPanel.mask("Asking for available Reports, please wait ... ", "loading-indicator");
}
}