package org.activityinfo.ui.client.component.report.editor.pivotTable;
/*
* #%L
* ActivityInfo Server
* %%
* Copyright (C) 2009 - 2013 UNICEF
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
import com.extjs.gxt.ui.client.Style;
import com.extjs.gxt.ui.client.util.Margins;
import com.extjs.gxt.ui.client.widget.Component;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
import com.google.inject.Inject;
import org.activityinfo.i18n.shared.I18N;
import org.activityinfo.legacy.client.AsyncMonitor;
import org.activityinfo.legacy.client.Dispatcher;
import org.activityinfo.legacy.client.monitor.MaskingAsyncMonitor;
import org.activityinfo.legacy.client.state.StateProvider;
import org.activityinfo.legacy.shared.command.Filter;
import org.activityinfo.legacy.shared.command.RenderElement.Format;
import org.activityinfo.legacy.shared.reports.content.PivotContent;
import org.activityinfo.legacy.shared.reports.model.PivotTableReportElement;
import org.activityinfo.ui.client.EventBus;
import org.activityinfo.ui.client.component.report.editor.chart.PivotFilterPanel;
import org.activityinfo.ui.client.component.report.view.PivotGridPanel;
import org.activityinfo.ui.client.component.report.view.ReportViewBinder;
import org.activityinfo.ui.client.page.report.editor.ReportElementEditor;
import java.util.Arrays;
import java.util.List;
public class PivotTableEditor extends LayoutContainer implements ReportElementEditor<PivotTableReportElement> {
private final EventBus eventBus;
private final Dispatcher service;
private final StateProvider stateMgr;
private PivotTrayPanel pivotPanel;
private PivotFilterPanel filterPane;
private ReportViewBinder<PivotContent, PivotTableReportElement> viewBinder;
private DimensionPruner pruner;
private LayoutContainer center;
private PivotGridPanel gridPanel;
private PivotTableReportElement model;
@Inject
public PivotTableEditor(EventBus eventBus, Dispatcher service, StateProvider stateMgr) {
this.eventBus = eventBus;
this.service = service;
this.stateMgr = stateMgr;
initializeComponent();
createPane();
createFilterPane();
createGridContainer();
this.pruner = new DimensionPruner(eventBus, service);
// initialDrillDownListener = new Listener<PivotCellEvent>() {
// @Override
// public void handleEvent(PivotCellEvent be) {
// createDrilldownPanel(be);
// }
// };
// eventBus.addListener(AppEvents.DRILL_DOWN, initialDrillDownListener);
}
private void initializeComponent() {
BorderLayout borderLayout = new BorderLayout();
borderLayout.setEnableState(true);
setStateId("pivotPage");
setLayout(borderLayout);
}
private void createPane() {
pivotPanel = new PivotTrayPanel(eventBus, service);
BorderLayoutData east = new BorderLayoutData(Style.LayoutRegion.EAST);
east.setCollapsible(true);
east.setSplit(true);
east.setMargins(new Margins(0, 5, 0, 0));
add(pivotPanel, east);
}
private void createFilterPane() {
filterPane = new PivotFilterPanel(eventBus, service);
filterPane.applyBaseFilter(new Filter());
BorderLayoutData west = new BorderLayoutData(Style.LayoutRegion.WEST);
west.setMinSize(250);
west.setSize(250);
west.setCollapsible(true);
west.setSplit(true);
west.setMargins(new Margins(0, 0, 0, 0));
add(filterPane, west);
}
private void createGridContainer() {
center = new LayoutContainer();
center.setLayout(new BorderLayout());
add(center, new BorderLayoutData(Style.LayoutRegion.CENTER));
gridPanel = new PivotGridPanel(service);
gridPanel.setHeaderVisible(true);
gridPanel.setHeadingText(I18N.CONSTANTS.preview());
center.add(gridPanel, new BorderLayoutData(Style.LayoutRegion.CENTER));
viewBinder = ReportViewBinder.create(eventBus, service, gridPanel);
}
public AsyncMonitor getMonitor() {
return new MaskingAsyncMonitor(this, I18N.CONSTANTS.loading());
}
@Override
public PivotTableReportElement getModel() {
return model;
}
@Override
public void bind(PivotTableReportElement model) {
this.model = model;
pivotPanel.bind(model);
filterPane.bind(model);
viewBinder.bind(model);
pruner.bind(model);
}
@Override
public void disconnect() {
pivotPanel.disconnect();
filterPane.disconnect();
viewBinder.disconnect();
pruner.disconnect();
}
@Override
public Component getWidget() {
return this;
}
@Override
public List<Format> getExportFormats() {
return Arrays.asList(Format.Excel, Format.Word, Format.PDF);
}
}