package org.gcube.portlets.admin.accountingmanager.client.filters; import java.util.ArrayList; import java.util.List; import org.gcube.portlets.admin.accountingmanager.client.event.AccountingPeriodEvent; import org.gcube.portlets.admin.accountingmanager.client.event.AccountingPeriodRequestEvent; import org.gcube.portlets.admin.accountingmanager.client.event.SessionExpiredEvent; import org.gcube.portlets.admin.accountingmanager.client.event.StateChangeEvent; import org.gcube.portlets.admin.accountingmanager.client.monitor.AccountingMonitor; import org.gcube.portlets.admin.accountingmanager.client.properties.AccountingFilterProperties; import org.gcube.portlets.admin.accountingmanager.client.properties.ContextDataProperties; import org.gcube.portlets.admin.accountingmanager.client.resource.AccountingManagerResources; import org.gcube.portlets.admin.accountingmanager.client.rpc.AccountingManagerServiceAsync; import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientStateData; import org.gcube.portlets.admin.accountingmanager.client.type.SessionExpiredType; import org.gcube.portlets.admin.accountingmanager.client.util.UtilsGXT3; import org.gcube.portlets.admin.accountingmanager.shared.Constants; import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingFilter; import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingFilterBasic; import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingFilterDefinition; import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingFilterTop; import org.gcube.portlets.admin.accountingmanager.shared.data.ChartType; import org.gcube.portlets.admin.accountingmanager.shared.data.Context; import org.gcube.portlets.admin.accountingmanager.shared.data.ContextData; import org.gcube.portlets.admin.accountingmanager.shared.data.FilterKey; import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValue; import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValuesRequest; import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValuesResponse; import org.gcube.portlets.admin.accountingmanager.shared.exception.NoScopeSelectedException; import org.gcube.portlets.admin.accountingmanager.shared.exception.SessionExpiredException; import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.core.client.GWT; import com.google.gwt.editor.client.Editor; import com.google.gwt.editor.client.Editor.Path; import com.google.gwt.editor.client.EditorError; import com.google.gwt.event.logical.shared.SelectionEvent; import com.google.gwt.event.logical.shared.SelectionHandler; import com.google.gwt.event.shared.EventBus; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.user.client.rpc.AsyncCallback; import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign; import com.sencha.gxt.cell.core.client.form.ComboBoxCell.TriggerAction; import com.sencha.gxt.core.client.IdentityValueProvider; import com.sencha.gxt.core.client.Style.SelectionMode; import com.sencha.gxt.core.client.XTemplates; import com.sencha.gxt.core.client.util.Margins; import com.sencha.gxt.data.shared.LabelProvider; import com.sencha.gxt.data.shared.ListStore; import com.sencha.gxt.data.shared.ModelKeyProvider; import com.sencha.gxt.data.shared.PropertyAccess; import com.sencha.gxt.dnd.core.client.DND.Feedback; import com.sencha.gxt.dnd.core.client.DndDragStartEvent; import com.sencha.gxt.dnd.core.client.DndDragStartEvent.DndDragStartHandler; import com.sencha.gxt.dnd.core.client.GridDragSource; import com.sencha.gxt.dnd.core.client.GridDropTarget; import com.sencha.gxt.widget.core.client.button.ButtonBar; import com.sencha.gxt.widget.core.client.button.TextButton; import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; import com.sencha.gxt.widget.core.client.container.MarginData; import com.sencha.gxt.widget.core.client.container.SimpleContainer; import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; import com.sencha.gxt.widget.core.client.event.BeforeStartEditEvent; import com.sencha.gxt.widget.core.client.event.BeforeStartEditEvent.BeforeStartEditHandler; import com.sencha.gxt.widget.core.client.event.CancelEditEvent; import com.sencha.gxt.widget.core.client.event.CancelEditEvent.CancelEditHandler; import com.sencha.gxt.widget.core.client.event.CompleteEditEvent; import com.sencha.gxt.widget.core.client.event.CompleteEditEvent.CompleteEditHandler; import com.sencha.gxt.widget.core.client.event.SelectEvent; import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; import com.sencha.gxt.widget.core.client.form.ComboBox; import com.sencha.gxt.widget.core.client.form.FieldLabel; import com.sencha.gxt.widget.core.client.form.FieldSet; import com.sencha.gxt.widget.core.client.form.IntegerSpinnerField; import com.sencha.gxt.widget.core.client.form.StringComboBox; import com.sencha.gxt.widget.core.client.form.error.DefaultEditorError; import com.sencha.gxt.widget.core.client.form.validator.EmptyValidator; import com.sencha.gxt.widget.core.client.form.validator.MaxNumberValidator; import com.sencha.gxt.widget.core.client.form.validator.MinNumberValidator; import com.sencha.gxt.widget.core.client.grid.CheckBoxSelectionModel; import com.sencha.gxt.widget.core.client.grid.ColumnConfig; import com.sencha.gxt.widget.core.client.grid.ColumnModel; import com.sencha.gxt.widget.core.client.grid.Grid; import com.sencha.gxt.widget.core.client.grid.Grid.GridCell; import com.sencha.gxt.widget.core.client.grid.GridSelectionModel; import com.sencha.gxt.widget.core.client.grid.editing.GridRowEditing; import com.sencha.gxt.widget.core.client.grid.filters.GridFilters; import com.sencha.gxt.widget.core.client.grid.filters.StringFilter; import com.sencha.gxt.widget.core.client.toolbar.ToolBar; /** * * @author Giancarlo Panichi * * */ public class ActiveFiltersPanel extends SimpleContainer { private static final String CONTEXT = "Context"; private EventBus eventBus; private Grid gridFilter; private ListStore storeFilter; private Grid gridScopes; private ListStore storeScopes; private CheckBoxSelectionModel smScopes; private ColumnConfig labelScopesCol; private StringFilter scopeFilter; private boolean addStatus; private AccountingClientStateData accountingStateData; private ListStore storeComboFilterKey; private ComboBox comboFilterKey; private ListStore storeComboFilterValue; private StringComboBox comboFilterValue; private GridRowEditing editing; private TextButton addButton; private int seq; private FieldLabel comboChartTypeLabel; private ListStore storeComboChartType; private ComboBox comboChartType; private ListStore storeComboTopFilterKey; private ComboBox comboTopFilterKey; private FieldLabel comboTopFilterKeyLabel; private ToolBar toolBar; // private FieldLabel showOthersLabel; private IntegerSpinnerField topNumber; private FieldLabel topNumberLabel; private FilterKey filterKey; private boolean cancelValue; private AccountingMonitor accountingMonitor; // private Radio showOthersYes; // private Radio showOthersNo; // private ToggleGroup showOthersToggle; public interface FilterKeyPropertiesCombo extends PropertyAccess { @Path("id") ModelKeyProvider id(); LabelProvider key(); } interface FilterKeyTemplates extends XTemplates { @XTemplate("{value}") SafeHtml format(String value); } interface FilterValueTemplates extends XTemplates { @XTemplate("{value}") SafeHtml format(String value); } public ActiveFiltersPanel(EventBus eventBus) { super(); Log.debug("ActiveFiltersPanel"); this.eventBus = eventBus; init(); create(); bindToEvents(); } private void init() { } private void create() { // Grid AccountingFilterProperties props = GWT.create(AccountingFilterProperties.class); ColumnConfig keyColumn = new ColumnConfig( props.filterKey(), 130, "Key"); keyColumn.setMenuDisabled(true); keyColumn.setCell(new AbstractCell() { @Override public void render(Context context, FilterKey filterKey, SafeHtmlBuilder sb) { FilterKeyTemplates filterKeyTemplates = GWT.create(FilterKeyTemplates.class); sb.append(filterKeyTemplates.format(filterKey.getKey())); } }); /* * ColumnConfig valueColumn = new * ColumnConfig( props.filterValue(), * 130, "Value"); valueColumn.setMenuDisabled(true); * valueColumn.setCell(new AbstractCell() { * * @Override public void render(Context context, FilterValue * filterValue, SafeHtmlBuilder sb) { FilterValueTemplates * filterValueTemplates = GWT .create(FilterValueTemplates.class); * sb.append(filterValueTemplates.format(filterValue.getValue())); } }); */ ColumnConfig valueColumn = new ColumnConfig( props.filterValue(), 130, "Value"); valueColumn.setMenuDisabled(true); valueColumn.setCell(new AbstractCell() { @Override public void render(Context context, String filterValue, SafeHtmlBuilder sb) { FilterValueTemplates filterValueTemplates = GWT.create(FilterValueTemplates.class); sb.append(filterValueTemplates.format(filterValue)); } }); ArrayList> l = new ArrayList>(); l.add(keyColumn); l.add(valueColumn); ColumnModel columns = new ColumnModel(l); storeFilter = new ListStore(props.id()); final GridSelectionModel sm = new GridSelectionModel(); sm.setSelectionMode(SelectionMode.SINGLE); gridFilter = new Grid(storeFilter, columns); gridFilter.setSelectionModel(sm); gridFilter.getView().setStripeRows(true); gridFilter.getView().setColumnLines(true); gridFilter.getView().setAutoFill(true); gridFilter.setBorders(true); gridFilter.setColumnReordering(false); gridFilter.getView().setAutoExpandColumn(valueColumn); gridFilter.getView().setSortingEnabled(false); GridDragSource ds = new GridDragSource(gridFilter); ds.addDragStartHandler(new DndDragStartHandler() { @Override public void onDragStart(DndDragStartEvent event) { @SuppressWarnings("unchecked") ArrayList draggingSelection = (ArrayList) event.getData(); Log.debug("Start Drag: " + draggingSelection); } }); GridDropTarget dt = new GridDropTarget(gridFilter); dt.setFeedback(Feedback.BOTH); dt.setAllowSelfAsSource(true); // EDITING // // Key FilterKeyPropertiesCombo filterKeyPropertiesCombo = GWT.create(FilterKeyPropertiesCombo.class); storeComboFilterKey = new ListStore(filterKeyPropertiesCombo.id()); comboFilterKey = new ComboBox(storeComboFilterKey, filterKeyPropertiesCombo.key()); comboFilterKey.setClearValueOnParseError(false); comboFilterKey.setEditable(false); comboFilterKey.addValidator(new EmptyValidator() { @Override public List validate(Editor editor, FilterKey value) { if (value == null || value.getKey() == null || value.getKey().isEmpty()) { List errors = new ArrayList(); errors.add(new DefaultEditorError(editor, getMessages().blankText(), "")); return errors; } return null; } }); comboFilterKey.setTriggerAction(TriggerAction.ALL); addHandlersForComboFilterKey(filterKeyPropertiesCombo.key()); // Filter Value storeComboFilterValue = new ListStore(new ModelKeyProvider() { @Override public String getKey(String item) { return item; } }); comboFilterValue = new StringComboBox(); comboFilterValue.setStore(storeComboFilterValue); comboFilterValue.setClearValueOnParseError(false); comboFilterValue.setEditable(true); comboFilterValue.setForceSelection(false); // comboFilterValue.setAllowBlank(false); // comboFilterValue.setFinishEditOnEnter(false); // comboFilterValue.setAutoValidate(true); comboFilterValue.addValidator(new EmptyValidator()); comboFilterValue.setTriggerAction(TriggerAction.ALL); // final TextField valueField = new TextField(); // valueField.addValidator(new EmptyValidator()); editing = new GridRowEditing(gridFilter); editing.addEditor(keyColumn, comboFilterKey); editing.addEditor(valueColumn, comboFilterValue); addButton = new TextButton("Add Filter"); addButton.setIcon(AccountingManagerResources.INSTANCE.accountingFilter24()); addButton.setIconAlign(IconAlign.RIGHT); addButton.setToolTip("Add Filter"); addButton.addSelectHandler(new SelectHandler() { @Override public void onSelect(SelectEvent event) { addNewFilter(event); } }); TextButton deleteBtn = new TextButton("Delete"); deleteBtn.addSelectHandler(new SelectEvent.SelectHandler() { public void onSelect(SelectEvent event) { GridCell cell = editing.getActiveCell(); int rowIndex = cell.getRow(); editing.cancelEditing(); storeFilter.remove(rowIndex); storeFilter.commitChanges(); editing.getCancelButton().setVisible(true); addButton.setEnabled(true); if (addStatus) { addStatus = false; } } }); ButtonBar buttonBar = editing.getButtonBar(); buttonBar.add(deleteBtn); editing.addBeforeStartEditHandler(new BeforeStartEditHandler() { @Override public void onBeforeStartEdit(BeforeStartEditEvent event) { editingBeforeStart(event); } }); editing.addCancelEditHandler(new CancelEditHandler() { @Override public void onCancelEdit(CancelEditEvent event) { storeFilter.rejectChanges(); addButton.setEnabled(true); } }); editing.addCompleteEditHandler(new CompleteEditHandler() { @Override public void onCompleteEdit(CompleteEditEvent event) { try { // GridCell cell = event.getEditCell(); // int rowIndex = cell.getRow(); // AccountingFilter editingFilter = // storeFilter.get(rowIndex); if (addStatus) { addStatus = false; } GWT.log("Complete Change on store filter"); storeFilter.commitChanges(); editing.getCancelButton().setVisible(true); addButton.setEnabled(true); } catch (Throwable e) { Log.error("Error in RuleOnTableNewDefinitionCard: " + e.getLocalizedMessage()); e.printStackTrace(); } } }); // toolBar = new ToolBar(); toolBar.add(addButton, new BoxLayoutData(new Margins(0))); // Grid Context ContextDataProperties propsScopeData = GWT.create(ContextDataProperties.class); IdentityValueProvider identity = new IdentityValueProvider(); smScopes = new CheckBoxSelectionModel(identity); labelScopesCol = new ColumnConfig(propsScopeData.label(), 356, CONTEXT); labelScopesCol.setCell(new AbstractCell() { @Override public void render(Context context, String value, SafeHtmlBuilder sb) { sb.appendHtmlConstant("" + SafeHtmlUtils.htmlEscape(value) + ""); } }); List> lcolumnsScopes = new ArrayList>(); lcolumnsScopes.add(smScopes.getColumn()); lcolumnsScopes.add(labelScopesCol); ColumnModel cmContextData = new ColumnModel(lcolumnsScopes); storeScopes = new ListStore(propsScopeData.id()); gridScopes = new Grid(storeScopes, cmContextData); sm.setSelectionMode(SelectionMode.MULTI); gridScopes.setHeight("130px"); gridScopes.setSelectionModel(smScopes); gridScopes.getView().setStripeRows(true); gridScopes.getView().setColumnLines(true); gridScopes.getView().setAutoFill(true); gridScopes.setBorders(true); gridScopes.setColumnReordering(false); gridScopes.getView().setAutoExpandColumn(labelScopesCol); gridScopes.getView().setSortingEnabled(true); // gridScopes.setStateful(true); // gridScopes.setStateId("gridScopesDefault"); scopeFilter = new StringFilter(propsScopeData.label()); GridFilters gridScopesFilters = new GridFilters(); gridScopesFilters.initPlugin(gridScopes); gridScopesFilters.setLocal(true); gridScopesFilters.addFilter(scopeFilter); // GridFilterStateHandler handler = new // GridFilterStateHandler(gridScopes, // gridScopesFilters); // handler.loadState(); // ChartTypeSelection storeComboChartType = new ListStore(new ModelKeyProvider() { @Override public String getKey(ChartType item) { return item.name(); } }); LabelProvider comboChartTypeLabelProvider = new LabelProvider() { @Override public String getLabel(ChartType item) { return item.getLabel(); } }; comboChartType = new ComboBox<>(storeComboChartType, comboChartTypeLabelProvider); comboChartType.setClearValueOnParseError(false); comboChartType.setEditable(false); comboChartType.setForceSelection(true); comboChartType.setValue(ChartType.Basic); comboChartType.setTriggerAction(TriggerAction.ALL); addHandlersForComboChartType(comboChartTypeLabelProvider); comboChartTypeLabel = new FieldLabel(comboChartType, "Chart"); // FileterKeyCombo for Top Chart storeComboTopFilterKey = new ListStore(filterKeyPropertiesCombo.id()); comboTopFilterKey = new ComboBox(storeComboTopFilterKey, filterKeyPropertiesCombo.key()); comboTopFilterKey.setClearValueOnParseError(false); comboTopFilterKey.setEditable(false); comboTopFilterKey.setTriggerAction(TriggerAction.ALL); addHandlersForComboTopFilterKey(filterKeyPropertiesCombo.key()); comboTopFilterKeyLabel = new FieldLabel(comboTopFilterKey, "Key"); /* * ShowOthers showOthersYes = new Radio(); * showOthersYes.setBoxLabel("Yes"); * * showOthersNo = new Radio(); showOthersNo.setBoxLabel("No"); * showOthersNo.setValue(true); * * showOthersToggle = new ToggleGroup(); * showOthersToggle.add(showOthersYes); * showOthersToggle.add(showOthersNo); * * showOthersToggle.addValueChangeHandler(new * ValueChangeHandler>() { * * @Override public void * onValueChange(ValueChangeEvent> event) { * ToggleGroup group = (ToggleGroup) event.getSource(); Radio radio = * (Radio) group.getValue(); Log.debug("ShowOthers selected: " + * radio.getBoxLabel()); } }); * * HBoxLayoutContainer hp = new HBoxLayoutContainer(); * hp.setHBoxLayoutAlign(HBoxLayoutAlign.MIDDLE); * hp.setPack(BoxLayoutPack.START); hp.add(showOthersYes, new * BoxLayoutData(new Margins(0))); hp.add(showOthersNo, new * BoxLayoutData(new Margins(0))); * * showOthersLabel = new FieldLabel(hp, "Show Others"); */ // topNumber = new IntegerSpinnerField(); topNumber.setMaxValue(Constants.TOP_NUMBER_MAX); topNumber.setMinValue(Constants.TOP_NUMBER_MIN); topNumber.setAllowNegative(false); topNumber.setAllowBlank(false); topNumber.setValue(Constants.TOP_NUMBER_DEFAULT); topNumber.setEditable(true); topNumber.addValidator(new MinNumberValidator(Constants.TOP_NUMBER_MIN)); topNumber.addValidator(new MaxNumberValidator(Constants.TOP_NUMBER_MAX)); topNumberLabel = new FieldLabel(topNumber, "Number"); // // VerticalLayoutContainer vlc = new VerticalLayoutContainer(); vlc.add(gridScopes, new VerticalLayoutData(1, -1, new Margins(0))); vlc.add(comboChartTypeLabel, new VerticalLayoutData(1, -1, new Margins(10, 0, 0, 0))); vlc.add(comboTopFilterKeyLabel, new VerticalLayoutData(1, -1, new Margins(0))); // vlc.add(showOthersLabel, new VerticalLayoutData(1, -1, new // Margins(0))); vlc.add(topNumberLabel, new VerticalLayoutData(1, -1, new Margins(0))); vlc.add(toolBar, new VerticalLayoutData(1, -1, new Margins(0))); vlc.add(gridFilter, new VerticalLayoutData(1, 1, new Margins(0))); FieldSet fieldSet = new FieldSet(); fieldSet.setHeight("450px"); fieldSet.setHeadingHtml("Active Filters"); fieldSet.setCollapsible(false); fieldSet.add(vlc); add(fieldSet, new MarginData(0)); gridScopes.setVisible(false); comboChartTypeLabel.setVisible(false); comboTopFilterKeyLabel.setVisible(false); // showOthersLabel.setVisible(false); topNumberLabel.setVisible(false); } // Bind to Events private void bindToEvents() { eventBus.addHandler(StateChangeEvent.TYPE, new StateChangeEvent.StateChangeEventHandler() { @Override public void onStateChange(StateChangeEvent event) { Log.debug("Catch State Change Event"); doStateChangeCommand(event); } }); eventBus.addHandler(AccountingPeriodEvent.TYPE, new AccountingPeriodEvent.AccountingPeriodEventHandler() { @Override public void onPeriod(AccountingPeriodEvent event) { Log.debug("Catch Accounting Period Event"); manageAccountingPeriodEvent(event); } }); } private void doStateChangeCommand(StateChangeEvent event) { if (event.getStateChangeType() == null) { return; } switch (event.getStateChangeType()) { case Restore: onRestoreStateChange(event); break; case Update: break; default: break; } } private void onRestoreStateChange(StateChangeEvent event) { Log.debug("onRestoreStateChange: " + event); if (event.getAccountingStateData() != null) { accountingStateData = event.getAccountingStateData(); if (accountingStateData.getAccountingType() != null) { switch (accountingStateData.getAccountingType()) { case JOB: case PORTLET: case SERVICE: case STORAGE: case TASK: List chartsTypeForDefault = new ArrayList<>(ChartType.asList()); Log.debug("ChartsType: " + chartsTypeForDefault); chartsTypeForDefault.remove(ChartType.Spaces); Log.debug("ChartsType after remove: " + chartsTypeForDefault); storeComboChartType.clear(); storeComboChartType.addAll(chartsTypeForDefault); storeComboChartType.commitChanges(); comboChartTypeLabel.setVisible(true); break; case SPACE: List chartsTypeForSpace = new ArrayList<>(); chartsTypeForSpace.add(ChartType.Spaces); Log.debug("ChartsType: " + chartsTypeForSpace); storeComboChartType.clear(); storeComboChartType.addAll(chartsTypeForSpace); storeComboChartType.commitChanges(); comboChartTypeLabel.setVisible(false); break; default: storeComboChartType.clear(); storeComboChartType.commitChanges(); comboChartTypeLabel.setVisible(false); break; } } else { storeComboChartType.clear(); storeComboChartType.commitChanges(); comboChartTypeLabel.setVisible(false); } changeActiveFilters(); } else { accountingStateData = null; seq = 0; } Log.debug("Set seq to: " + seq); forceLayout(); } private void changeActiveFilters() { storeComboFilterKey.clear(); storeComboFilterKey.addAll(accountingStateData.getAvailableFilterKeys()); storeComboFilterKey.commitChanges(); storeComboTopFilterKey.clear(); storeComboTopFilterKey.addAll(accountingStateData.getAvailableFilterKeys()); storeComboTopFilterKey.commitChanges(); ChartType chartType = accountingStateData.getSeriesRequest().getAccountingFilterDefinition().getChartType(); switch (chartType) { case Basic: changeActiveFiltersForBasic(); break; case Top: changeActiveFiltersForTop(); break; case Spaces: // changeActiveFiltersForSpaces(); break; default: changeActiveFiltersForBasic(); break; } } private void changeActiveFiltersForBasic() { Log.debug("ChangeActiveFiltersForBasic"); if (accountingStateData.getSeriesRequest() != null && accountingStateData.getSeriesRequest().getAccountingFilterDefinition() != null && accountingStateData .getSeriesRequest().getAccountingFilterDefinition() instanceof AccountingFilterBasic) { AccountingFilterBasic accountingFilterBasic = (AccountingFilterBasic) accountingStateData.getSeriesRequest() .getAccountingFilterDefinition(); if (accountingStateData.getAvailableContext() != null && accountingStateData.getAvailableContext().getContexts() != null && !accountingStateData.getAvailableContext().getContexts().isEmpty()) { if (accountingFilterBasic.getContext() != null && accountingFilterBasic.getContext().getContexts() != null && !accountingFilterBasic.getContext().getContexts().isEmpty()) { ArrayList contexts = accountingStateData.getAvailableContext().getContexts(); ArrayList scopes = new ArrayList(); for (String context : contexts) { ContextData contextData = new ContextData(context); scopes.add(contextData); } storeScopes.clear(); storeScopes.setEnableFilters(false); storeScopes.addAll(scopes); storeScopes.commitChanges(); Log.debug("ScopeFilterActive: " + accountingFilterBasic.getScopeFilterActive()); if (accountingFilterBasic.getScopeFilterActive() != null && !accountingFilterBasic.getScopeFilterActive().isEmpty()) { scopeFilter.setValue(accountingFilterBasic.getScopeFilterActive()); scopeFilter.setActive(true, false); storeScopes.setEnableFilters(true); storeScopes.commitChanges(); } else { scopeFilter.setValue(null); scopeFilter.setActive(false, false); } smScopes.deselectAll(); if (accountingFilterBasic.getContext().getContexts() != null && !accountingFilterBasic.getContext().getContexts().isEmpty()) { ArrayList selected = new ArrayList<>(); for (String c : accountingFilterBasic.getContext().getContexts()) { for (ContextData contextData : storeScopes.getAll()) { if (c.compareTo(contextData.getContextData()) == 0) { selected.add(contextData); break; } } } if (!selected.isEmpty()) { if (selected.size() == storeScopes.getAll().size()) { Log.debug("Select All Scope"); smScopes.selectAll(); } else { Log.debug("Select Scope: " + selected); smScopes.select(selected, false); } } } smScopes.refresh(); } else { repopulatesContexts(); } } else { resetContexts(); } if (accountingFilterBasic.getFilters() != null) { List filters = accountingFilterBasic.getFilters(); storeFilter.clear(); storeFilter.addAll(filters); seq = 0; for (AccountingFilter filter : filters) { if (filter.getId() > seq) { seq = filter.getId(); } } storeFilter.commitChanges(); } else { storeFilter.clear(); storeFilter.commitChanges(); seq = 0; } } else { reconfigureContext(); storeFilter.clear(); storeFilter.commitChanges(); seq = 0; } gridScopes.setVisible(true); labelScopesCol.setHeader(CONTEXT); gridScopes.getView().refresh(true); comboChartType.setValue(ChartType.Basic); comboTopFilterKey.reset(); comboTopFilterKeyLabel.setVisible(false); // showOthersToggle.reset(); // showOthersNo.setValue(true); // showOthersLabel.setVisible(false); topNumber.reset(); topNumberLabel.setVisible(false); forceLayout(); } private void changeActiveFiltersForTop() { Log.debug("ChangeActiveFiltersForTop"); if (accountingStateData.getSeriesRequest() != null && accountingStateData.getSeriesRequest().getAccountingFilterDefinition() != null && accountingStateData .getSeriesRequest().getAccountingFilterDefinition() instanceof AccountingFilterTop) { AccountingFilterTop accountingFilterTop = (AccountingFilterTop) accountingStateData.getSeriesRequest() .getAccountingFilterDefinition(); if (accountingStateData.getAvailableContext() != null && accountingStateData.getAvailableContext().getContexts() != null && !accountingStateData.getAvailableContext().getContexts().isEmpty()) { if (accountingFilterTop.getContext() != null && accountingFilterTop.getContext().getContexts() != null && !accountingFilterTop.getContext().getContexts().isEmpty()) { ArrayList contexts = accountingStateData.getAvailableContext().getContexts(); ArrayList scopes = new ArrayList(); for (String context : contexts) { ContextData contextData = new ContextData(context); scopes.add(contextData); } storeScopes.clear(); storeScopes.setEnableFilters(false); storeScopes.addAll(scopes); storeScopes.commitChanges(); Log.debug("ScopeFilterActive: " + accountingFilterTop.getScopeFilterActive()); if (accountingFilterTop.getScopeFilterActive() != null && !accountingFilterTop.getScopeFilterActive().isEmpty()) { scopeFilter.setValue(accountingFilterTop.getScopeFilterActive()); scopeFilter.setActive(true, false); storeScopes.setEnableFilters(true); storeScopes.commitChanges(); } else { scopeFilter.setValue(null); scopeFilter.setActive(false, false); } smScopes.deselectAll(); if (accountingFilterTop.getContext().getContexts() != null && !accountingFilterTop.getContext().getContexts().isEmpty()) { ArrayList selected = new ArrayList<>(); for (String c : accountingFilterTop.getContext().getContexts()) { for (ContextData contextData : storeScopes.getAll()) { if (c.compareTo(contextData.getContextData()) == 0) { selected.add(contextData); break; } } } if (!selected.isEmpty()) { if (selected.size() == storeScopes.getAll().size()) { Log.debug("Select All Scope"); smScopes.selectAll(); } else { Log.debug("Select Scope: " + selected); smScopes.select(selected, false); } } } smScopes.refresh(); } else { repopulatesContexts(); } } else { resetContexts(); } if (accountingFilterTop.getFilterKey() != null) { comboTopFilterKey.setValue(accountingFilterTop.getFilterKey()); topNumber.setValue(accountingFilterTop.getTopNumber()); // ///////// if (accountingFilterTop.getFilters() != null) { List filters = accountingFilterTop.getFilters(); storeFilter.clear(); storeFilter.addAll(filters); seq = 0; for (AccountingFilter filter : filters) { if (filter.getId() > seq) { seq = filter.getId(); } } storeFilter.commitChanges(); } else { storeFilter.clear(); storeFilter.commitChanges(); seq = 0; } } else { comboTopFilterKey.reset(); // showOthersToggle.reset(); // showOthersNo.setValue(true); topNumber.reset(); topNumber.setValue(Constants.TOP_NUMBER_DEFAULT); storeFilter.clear(); storeFilter.commitChanges(); seq = 0; } } else { if (accountingStateData.getAvailableContext().getContexts() != null && !accountingStateData.getAvailableContext().getContexts().isEmpty()) { ArrayList contexts = accountingStateData.getAvailableContext().getContexts(); ArrayList scopes = new ArrayList<>(); for (String context : contexts) { scopes.add(new ContextData(context)); } storeScopes.clear(); storeScopes.setEnableFilters(false); storeScopes.addAll(scopes); storeScopes.commitChanges(); } else { storeScopes.clear(); storeScopes.setEnableFilters(false); storeScopes.commitChanges(); } scopeFilter.setValue(null); scopeFilter.setActive(false, false); smScopes.deselectAll(); comboTopFilterKey.reset(); // showOthersToggle.reset(); // showOthersNo.setValue(true); topNumber.reset(); topNumber.setValue(Constants.TOP_NUMBER_DEFAULT); storeFilter.clear(); storeFilter.commitChanges(); seq = 0; } gridScopes.setVisible(true); labelScopesCol.setHeader(CONTEXT); gridScopes.getView().refresh(true); comboChartType.setValue(ChartType.Top); comboTopFilterKeyLabel.setVisible(true); // showOthersLabel.setVisible(true); topNumberLabel.setVisible(true); forceLayout(); } private void reconfigureContext() { if (accountingStateData.getAvailableContext() != null && accountingStateData.getAvailableContext().getContexts() != null && !accountingStateData.getAvailableContext().getContexts().isEmpty()) { repopulatesContexts(); } else { resetContexts(); } } private void resetContexts() { storeScopes.clear(); storeScopes.commitChanges(); scopeFilter.setValue(null); scopeFilter.setActive(false, false); smScopes.deselectAll(); smScopes.refresh(); } private void repopulatesContexts() { ArrayList contexts = accountingStateData.getAvailableContext().getContexts(); ArrayList contextList = new ArrayList(); for (String context : contexts) { ContextData contextData = new ContextData(context); contextList.add(contextData); } storeScopes.clear(); storeScopes.addAll(contextList); storeScopes.commitChanges(); scopeFilter.setValue(null); scopeFilter.setActive(false, false); smScopes.selectAll(); smScopes.refresh(); } /* * private void changeActiveFiltersForSpaces() { if * (accountingStateData.getSeriesRequest() != null && * accountingStateData.getSeriesRequest().getAccountingFilterDefinition() != * null && accountingStateData * .getSeriesRequest().getAccountingFilterDefinition() instanceof * AccountingFilterSpaces) { AccountingFilterSpaces accountingFilterSapces = * (AccountingFilterSpaces) accountingStateData * .getSeriesRequest().getAccountingFilterDefinition(); if * (accountingStateData.getAvailableSpaces() != null && * accountingStateData.getAvailableSpaces().getSpacesList() != null && * !accountingStateData.getAvailableSpaces().getSpacesList().isEmpty()) { * * if (accountingFilterSapces.getSpaces() != null && * accountingFilterSapces.getSpaces().getSpacesList() != null && * !accountingFilterSapces.getSpaces().getSpacesList().isEmpty()) { * ArrayList spacesList = * accountingStateData.getAvailableSpaces().getSpacesList(); * ArrayList spaces = new ArrayList<>(); for (String space : * spacesList) { SpacesData spacesData = new SpacesData(space); * spaces.add(spacesData); } storeSpaces.clear(); * storeSpaces.addAll(spaces); storeSpaces.commitChanges(); * * smSpaces.deselectAll(); * * if (accountingFilterSapces.getSpaces().getSpacesList() == null || * accountingFilterSapces.getSpaces().getSpacesList().isEmpty()) { } else { * ArrayList selected = new ArrayList<>(); for (String s : * accountingFilterSapces.getSpaces().getSpacesList()) { for (SpacesData * spacesData : storeSpaces.getAll()) { if * (s.compareTo(spacesData.getSpace()) == 0) { selected.add(spacesData); * break; } } } if (!selected.isEmpty()) { if (selected.size() == * storeSpaces.getAll().size()) { smSpaces.selectAll(); } else { * smSpaces.select(selected, false); } } } * * smSpaces.refresh(); * * } else { repopulatesSpaces(); } * * } else { resetSpaces(); } * * if (accountingFilterSapces.getFilters() != null) { List * filters = accountingFilterSapces.getFilters(); storeFilter.clear(); * storeFilter.addAll(filters); seq = 0; for (AccountingFilter filter : * filters) { if (filter.getId() > seq) { seq = filter.getId(); } } * storeFilter.commitChanges(); } else { storeFilter.clear(); * storeFilter.commitChanges(); seq = 0; } * * } else { reconfigureSpaces(); storeFilter.clear(); * storeFilter.commitChanges(); seq = 0; * * } gridScopes.setVisible(false); labelScopesCol.setHeader("Space"); * gridScopes.getView().refresh(true); * comboChartType.setValue(ChartType.Spaces); comboTopFilterKey.reset(); * comboTopFilterKeyLabel.setVisible(false); showOthersToggle.reset(); * showOthersNo.setValue(true); showOthersLabel.setVisible(false); * topNumber.reset(); topNumberLabel.setVisible(false); forceLayout(); * * } * * private void reconfigureSpaces() { if * (accountingStateData.getAvailableSpaces() != null && * accountingStateData.getAvailableSpaces().getSpacesList() != null && * !accountingStateData.getAvailableSpaces().getSpacesList().isEmpty()) { * repopulatesSpaces(); } else { resetSpaces(); } } * * private void resetSpaces() { storeScopes.clear(); * storeScopes.commitChanges(); smScopes.deselectAll(); smScopes.refresh(); * } * * private void repopulatesSpaces() { ArrayList spaces = * accountingStateData.getAvailableSpaces().getSpacesList(); * ArrayList genres = new ArrayList(); for (String * space : spaces) { ScopeData genresData = new ScopeData(space); * genres.add(genresData); } storeScopes.clear(); * storeScopes.addAll(genres); storeScopes.commitChanges(); * smScopes.selectAll(); smScopes.refresh(); } */ public AccountingFilterDefinition getActiveFilters() { try { ChartType chartType = comboChartType.getCurrentValue(); switch (chartType) { case Basic: return getActiveFiltersForBasic(); case Top: return getActiveFiltersForTop(); // case Spaces: // return getActiveFiltersForSpaces(); default: return null; } } catch (NoScopeSelectedException e) { UtilsGXT3.alert("Attention", e.getLocalizedMessage()); return null; } catch (Throwable e) { Log.error(e.getLocalizedMessage()); e.printStackTrace(); UtilsGXT3.alert("Attention", e.getLocalizedMessage()); return null; } } // TODO private AccountingFilterDefinition getActiveFiltersForBasic() throws NoScopeSelectedException { ArrayList contextsSelected = new ArrayList(); if (storeScopes != null && storeScopes.size() > 0 && smScopes != null) { List selected = smScopes.getSelectedItems(); for (ContextData cd : selected) { contextsSelected.add(cd.getContextData()); } } if (contextsSelected.isEmpty()) { String msg = "No Scope selected! Please, select a Scope."; Log.info(msg); throw new NoScopeSelectedException(msg); } Context context = new Context(contextsSelected); Log.debug("Context selected: " + context); String scopeFilterActive = null; if (scopeFilter.isActive()) { scopeFilterActive = (String) scopeFilter.getValue(); } Log.debug("Scope Filter Active: " + scopeFilterActive); if (storeFilter == null || storeFilter.size() <= 0) { return new AccountingFilterBasic(context, scopeFilterActive); } else { List filtersActives = storeFilter.getAll(); ArrayList filtersReady = new ArrayList(); for (AccountingFilter filter : filtersActives) { if (filter.getFilterValue() != null && !filter.getFilterValue().isEmpty()) { filtersReady.add(filter); } } if (filtersReady.size() > 0) { return new AccountingFilterBasic(context, scopeFilterActive, filtersReady); } else { return new AccountingFilterBasic(context, scopeFilterActive); } } } private AccountingFilterDefinition getActiveFiltersForTop() throws NoScopeSelectedException { ArrayList contextsSelected = new ArrayList(); if (storeScopes != null && storeScopes.size() > 0 && smScopes != null) { List selected = smScopes.getSelectedItems(); for (ContextData cd : selected) { contextsSelected.add(cd.getContextData()); } } if (contextsSelected.isEmpty()) { String msg = "No Scope selected! Please, select a Scope."; Log.info(msg); throw new NoScopeSelectedException(msg); } Context context = new Context(contextsSelected); Log.debug("Context selected: " + context); String scopeFilterActive = null; if (scopeFilter.isActive()) { scopeFilterActive = (String) scopeFilter.getValue(); } Log.debug("Scope Filter Active: " + scopeFilterActive); // Boolean showOthersValue = showOthersYes.getValue(); Integer topN = topNumber.getCurrentValue(); if(topN!=null){ if(topNConstants.TOP_NUMBER_MAX){ topN=Constants.TOP_NUMBER_MAX; topNumber.setValue(topN, true, true); topNumber.clearInvalid(); } } } else { topN=Constants.TOP_NUMBER_DEFAULT; topNumber.setValue(topN, true, true); topNumber.clearInvalid(); } FilterKey filterKey = comboTopFilterKey.getCurrentValue(); if (filterKey == null) { return new AccountingFilterTop(context, scopeFilterActive, topN); } else { if (storeFilter == null || storeFilter.size() <= 0) { return new AccountingFilterTop(context, scopeFilterActive, filterKey, null, topN); } else { List filtersActives = storeFilter.getAll(); ArrayList filtersReady = new ArrayList(); for (AccountingFilter filter : filtersActives) { if (filter.getFilterValue() != null && !filter.getFilterValue().isEmpty()) { filtersReady.add(filter); } } if (filtersReady.size() > 0) { return new AccountingFilterTop(context, scopeFilterActive, filterKey, filtersReady, topN); } else { return new AccountingFilterTop(context, scopeFilterActive, filterKey, null, topN); } } } } /* * private AccountingFilterDefinition getActiveFiltersForSpaces() { * ArrayList spacesSelected = new ArrayList(); if * (storeSpaces != null && storeSpaces.size() > 0 && smSpaces != null) { * List selected = smSpaces.getSelectedItems(); for (SpacesData * cd : selected) { spacesSelected.add(cd.getSpace()); } } Spaces spaces = * new Spaces(spacesSelected); * * Log.debug("Spaces selected: " + spaces); * * List filtersActives = storeFilter.getAll(); * ArrayList filtersReady = new * ArrayList(); for (AccountingFilter filter : * filtersActives) { if (filter.getFilterValue() != null && * !filter.getFilterValue().isEmpty()) { filtersReady.add(filter); } } if * (filtersReady.size() > 0) { return new AccountingFilterSpaces(spaces, * filtersReady); } else { return new AccountingFilterSpaces(spaces, null); * } * * } */ private void addNewFilter(SelectEvent event) { // List filtersSet = storeFilter.getAll(); FilterKey fk = null; if (accountingStateData == null || accountingStateData.getAvailableFilterKeys() == null || accountingStateData.getAvailableFilterKeys().size() < 0) { UtilsGXT3.info("No key available", "No key available"); } else { List remainingFilterKeys = new ArrayList( accountingStateData.getAvailableFilterKeys()); List removableFilterKeys = new ArrayList(); /* * for (AccountingFilter filterSet : filtersSet) { * removableFilterKeys.add(filterSet.getFilterKey()); } */ if (comboChartType.getCurrentValue() != null && comboChartType.getCurrentValue().compareTo(ChartType.Top) == 0) { if (comboTopFilterKey.getCurrentValue() != null) { removableFilterKeys.add(comboTopFilterKey.getCurrentValue()); } } remainingFilterKeys.removeAll(removableFilterKeys); if (remainingFilterKeys.size() > 0) { fk = new FilterKey(""); seq++; AccountingFilter newAccountingFilter = new AccountingFilter(seq, fk, ""); Log.debug("newAccountingFilter: " + newAccountingFilter); editing.cancelEditing(); addStatus = true; editing.getCancelButton().setVisible(false); storeFilter.add(newAccountingFilter); int row = storeFilter.indexOf(newAccountingFilter); storeComboFilterKey.clear(); storeComboFilterKey.addAll(remainingFilterKeys); storeComboFilterKey.commitChanges(); editing.startEditing(new GridCell(row, 0)); } else { UtilsGXT3.info("No key available", "No key available"); } } } private void retrieveFilterValuesByKey(FilterKey filterKey, final boolean cancelValue) { this.filterKey = filterKey; this.cancelValue = cancelValue; AccountingPeriodRequestEvent event = new AccountingPeriodRequestEvent(); eventBus.fireEvent(event); } private void manageAccountingPeriodEvent(AccountingPeriodEvent event) { if (event == null || event.getAccountingPeriod() == null) { Log.debug("AccountingPeriod not valid"); return; } if (filterKey == null || filterKey.getKey() == null || filterKey.getKey().isEmpty()) { Log.debug("FilterKey: " + filterKey); comboFilterValue.clear(); storeComboFilterValue.clear(); storeComboFilterValue.commitChanges(); return; } accountingMonitor = new AccountingMonitor(); FilterValuesRequest requestFilterValue = new FilterValuesRequest(filterKey, accountingStateData.getAccountingType(), event.getAccountingPeriod()); AccountingManagerServiceAsync.INSTANCE.getFilterValues(requestFilterValue, new AsyncCallback() { @Override public void onFailure(Throwable caught) { accountingMonitor.hide(); if (caught instanceof SessionExpiredException) { eventBus.fireEvent(new SessionExpiredEvent(SessionExpiredType.EXPIREDONSERVER)); } else { Log.error("Error retrieving filter values:" + caught.getLocalizedMessage()); UtilsGXT3.alert("Error retrieving filter values", caught.getLocalizedMessage()); } } @Override public void onSuccess(FilterValuesResponse result) { Log.debug("FilterValues: " + result); accountingMonitor.hide(); ArrayList values = new ArrayList(); for (FilterValue fv : result.getFilterValues()) { values.add(fv.getValue()); } if (cancelValue) { comboFilterValue.clear(); } storeComboFilterValue.clear(); storeComboFilterValue.addAll(values); storeComboFilterValue.commitChanges(); } }); } private void editingBeforeStart(BeforeStartEditEvent event) { GridCell cell = event.getEditCell(); int rowIndex = cell.getRow(); AccountingFilter editingFilter = storeFilter.get(rowIndex); // List filtersSet = storeFilter.getAll(); List remainingFilterKeys = null; if (accountingStateData == null || accountingStateData.getAvailableFilterKeys() == null) { remainingFilterKeys = new ArrayList(); } else { remainingFilterKeys = new ArrayList(accountingStateData.getAvailableFilterKeys()); } List setFilterKeys = new ArrayList(); if (comboChartType.getCurrentValue() != null && comboChartType.getCurrentValue().compareTo(ChartType.Top) == 0) { if (comboTopFilterKey.getCurrentValue() != null) { setFilterKeys.add(comboTopFilterKey.getCurrentValue()); } } /* * for (AccountingFilter filterSet : filtersSet) { if * (filterSet.getFilterKey().getKey().compareTo(editingFilter. * getFilterKey().getKey()) != 0) { * setFilterKeys.add(filterSet.getFilterKey()); } } */ remainingFilterKeys.removeAll(setFilterKeys); storeComboFilterKey.clear(); storeComboFilterKey.addAll(remainingFilterKeys); storeComboFilterKey.commitChanges(); if (editingFilter.getFilterKey() != null) { retrieveFilterValuesByKey(editingFilter.getFilterKey(), false); } addButton.setEnabled(false); } private void addHandlersForComboFilterKey(final LabelProvider labelProvider) { comboFilterKey.addSelectionHandler(new SelectionHandler() { public void onSelection(SelectionEvent event) { Log.debug("FilterKey selected: " + event.getSelectedItem()); updateFilterKey(event.getSelectedItem()); } }); } private void updateFilterKey(FilterKey selectedFilterKey) { retrieveFilterValuesByKey(selectedFilterKey, true); } private void addHandlersForComboChartType(final LabelProvider labelProvider) { comboChartType.addSelectionHandler(new SelectionHandler() { public void onSelection(SelectionEvent event) { Log.debug("FilterKey selected: " + event.getSelectedItem()); updateComboChartType(event.getSelectedItem()); } }); } // TODO private void updateComboChartType(ChartType chartType) { if (chartType == null) { return; } switch (chartType) { case Basic: comboTopFilterKey.reset(); comboTopFilterKeyLabel.setVisible(false); //showOthersToggle.reset(); //showOthersNo.setValue(true); //showOthersLabel.setVisible(false); topNumber.reset(); topNumberLabel.setVisible(false); storeFilter.clear(); storeFilter.commitChanges(); seq = 0; forceLayout(); break; case Top: comboTopFilterKey.reset(); if (accountingStateData != null && accountingStateData.getAvailableFilterKeys() != null && accountingStateData.getAvailableFilterKeys().size() > 0) { comboTopFilterKey.setValue(accountingStateData.getAvailableFilterKeys().get(0)); } comboTopFilterKeyLabel.setVisible(true); //showOthersToggle.reset(); //showOthersNo.setValue(true); //showOthersLabel.setVisible(true); topNumber.reset(); topNumber.setValue(Constants.TOP_NUMBER_DEFAULT); topNumberLabel.setVisible(true); storeFilter.clear(); storeFilter.commitChanges(); seq = 0; forceLayout(); break; /* * case Spaces: reconfigureSpaces(); comboScopeLabel.setVisible(false); * gridScopes.setVisible(true); labelScopesCol.setHeader("Space"); * gridScopes.getView().refresh(true); comboTopFilterKey.reset(); * comboTopFilterKeyLabel.setVisible(false); showOthersToggle.reset(); * showOthersNo.setValue(true); showOthersLabel.setVisible(false); * topNumber.reset(); topNumberLabel.setVisible(false); * storeFilter.clear(); storeFilter.commitChanges(); seq = 0; * forceLayout(); break; */ default: break; } } private void addHandlersForComboTopFilterKey(final LabelProvider labelProvider) { comboTopFilterKey.addSelectionHandler(new SelectionHandler() { public void onSelection(SelectionEvent event) { Log.debug("FilterKey selected: " + event.getSelectedItem()); updateTopFilterKey(event.getSelectedItem()); } }); } private void updateTopFilterKey(FilterKey selectedFilterKey) { storeFilter.clear(); storeFilter.commitChanges(); seq = 0; } }