package org.sigmah.client.ui.view.admin.models.importer; /* * #%L * Sigmah * %% * Copyright (C) 2010 - 2016 URD * %% * 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 java.util.ArrayList; import java.util.List; import org.sigmah.client.i18n.I18N; import org.sigmah.client.ui.presenter.admin.models.importer.ImportationSchemeModelsAdminPresenter; import org.sigmah.client.ui.presenter.admin.models.importer.ImportationSchemeModelsAdminPresenter.ImportationSchemeModelsAdminPresenterHandler; import org.sigmah.client.ui.res.icon.IconImageBundle; import org.sigmah.client.ui.view.base.AbstractView; import org.sigmah.client.ui.widget.panel.Panels; import org.sigmah.shared.dto.importation.ImportationSchemeModelDTO; import org.sigmah.shared.dto.importation.VariableBudgetElementDTO; import org.sigmah.shared.dto.importation.VariableBudgetSubFieldDTO; import org.sigmah.shared.dto.importation.VariableFlexibleElementDTO; import com.extjs.gxt.ui.client.Style.Scroll; import com.extjs.gxt.ui.client.event.BaseEvent; import com.extjs.gxt.ui.client.event.Events; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.widget.Component; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.grid.ColumnConfig; import com.extjs.gxt.ui.client.widget.grid.ColumnData; 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.GridCellRenderer; import com.extjs.gxt.ui.client.widget.toolbar.ToolBar; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.SimplePanel; import java.util.Collections; import org.sigmah.client.ui.widget.layout.Layouts; /** * View of {@link ImportationSchemeModelsAdminPresenter}. * * @author Mehdi Benabdeslam (mehdi.benabdeslam@netapsys.fr) * @author Raphaƫl Calabro (rcalabro@ideia.fr) */ public class ImportationSchemeModelsAdminView extends AbstractView implements ImportationSchemeModelsAdminPresenter.View { private Grid<ImportationSchemeModelDTO> importationSchemeModelsGrid; private Grid<VariableFlexibleElementDTO> variableFlexibleElementsGrid; private Button addVariableFlexibleElementButton; private Button deleteVariableFlexibleElementButton; private Button addImportationSchemeModelButton; private Button deleteImportationSchemeModelButton; private ImportationSchemeModelsAdminPresenterHandler importationSchemeModelsAdminPresenterHandler; @Override public void initialize() { final ContentPanel importationSchemeModelsPanel = Panels.content(null); importationSchemeModelsPanel.setScrollMode(Scroll.AUTOY); importationSchemeModelsPanel.addListener(Events.Render, new Listener<BaseEvent>() { @Override public void handleEvent(BaseEvent be) { importationSchemeModelsPanel.getLayoutTarget().setStyleAttribute("overflowX", "hidden"); } }); importationSchemeModelsGrid = buildImportationSchemeModelsGrid(); importationSchemeModelsPanel.add(importationSchemeModelsGrid); importationSchemeModelsPanel.setTopComponent(importationSchemeModelToolBar()); final ContentPanel variableFlexibleElementPanel = Panels.content(null); variableFlexibleElementPanel.setScrollMode(Scroll.AUTOY); variableFlexibleElementsGrid = buildVariableFlexibleElementsGrid(); variableFlexibleElementPanel.add(variableFlexibleElementsGrid); variableFlexibleElementPanel.setTopComponent(variableFlexibleElementToolBar()); add(importationSchemeModelsPanel, Layouts.borderLayoutData(Style.LayoutRegion.WEST, 250.0f, Layouts.Margin.RIGHT)); add(variableFlexibleElementPanel, Layouts.borderLayoutData(Style.LayoutRegion.CENTER)); } private Component importationSchemeModelToolBar() { // Add button. addImportationSchemeModelButton = new Button(I18N.CONSTANTS.addItem(), IconImageBundle.ICONS.add()); // Delete button. deleteImportationSchemeModelButton = new Button(I18N.CONSTANTS.delete(), IconImageBundle.ICONS.delete()); deleteImportationSchemeModelButton.disable(); // Building the tool bar. final ToolBar toolbar = new ToolBar(); toolbar.add(addImportationSchemeModelButton); toolbar.add(deleteImportationSchemeModelButton); return toolbar; } private Component variableFlexibleElementToolBar() { // Add button. addVariableFlexibleElementButton = new Button(I18N.CONSTANTS.addItem(), IconImageBundle.ICONS.add()); addVariableFlexibleElementButton.disable(); // Delete button. deleteVariableFlexibleElementButton = new Button(I18N.CONSTANTS.delete(), IconImageBundle.ICONS.delete()); deleteVariableFlexibleElementButton.disable(); // Building the tool bar. final ToolBar toolbar = new ToolBar(); toolbar.add(addVariableFlexibleElementButton); toolbar.add(deleteVariableFlexibleElementButton); return toolbar; } private Grid<VariableFlexibleElementDTO> buildVariableFlexibleElementsGrid() { final ColumnConfig fieldColumn = new ColumnConfig("field", I18N.CONSTANTS.adminFlexible(), 200); fieldColumn.setRenderer(new GridCellRenderer<VariableFlexibleElementDTO>() { @Override public Object render(VariableFlexibleElementDTO model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<VariableFlexibleElementDTO> store, Grid<VariableFlexibleElementDTO> grid) { final com.google.gwt.user.client.ui.Grid panel = new com.google.gwt.user.client.ui.Grid(1, model.getIsKey() ? 2 : 1); panel.setCellPadding(0); panel.setCellSpacing(0); int column = 0; if(model.getIsKey()) { panel.setWidget(0, column, IconImageBundle.ICONS.login().createImage()); panel.getCellFormatter().addStyleName(0, column, "project-grid-code-icon"); column++; } // TODO: Replace the text by an anchor and add an edit method. panel.setText(0, column, model.getFlexibleElementDTO().getFormattedLabel()); panel.getCellFormatter().addStyleName(0, column, "project-grid-code"); return panel; } }); final ColumnConfig variableColumn = new ColumnConfig("variable", I18N.CONSTANTS.adminImportationSchemeModelVariableHeading(), 200); variableColumn.setRenderer(new GridCellRenderer<VariableFlexibleElementDTO>() { @Override public Object render(VariableFlexibleElementDTO model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<VariableFlexibleElementDTO> store, Grid<VariableFlexibleElementDTO> grid) { if (model instanceof VariableBudgetElementDTO) { String variableNames = ""; VariableBudgetElementDTO variableBudgetElement = (VariableBudgetElementDTO) model; for (VariableBudgetSubFieldDTO varSubField : variableBudgetElement.getVariableBudgetSubFieldsDTO()) { variableNames += varSubField.getVariableDTO().getName() + "; "; } return variableNames; } else { return model.getVariableDTO().getName(); } } }); List<ColumnConfig> configs = new ArrayList<ColumnConfig>(); configs.add(fieldColumn); configs.add(variableColumn); ColumnModel cm = new ColumnModel(configs); final Grid<VariableFlexibleElementDTO> variableFlexibleElementsDTOGrid = new Grid<VariableFlexibleElementDTO>(new ListStore<VariableFlexibleElementDTO>(), cm); variableFlexibleElementsDTOGrid.getView().setForceFit(true); variableFlexibleElementsDTOGrid.setAutoHeight(true); variableFlexibleElementsDTOGrid.addStyleName("importation-scheme-models-grid"); return variableFlexibleElementsDTOGrid; } private Grid<ImportationSchemeModelDTO> buildImportationSchemeModelsGrid() { final ColumnConfig importationSchemeColumn = new ColumnConfig("importationScheme", I18N.CONSTANTS.adminImportationScheme(), 250); importationSchemeColumn.setRenderer(new GridCellRenderer<ImportationSchemeModelDTO>() { @Override public Object render(final ImportationSchemeModelDTO model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<ImportationSchemeModelDTO> store, Grid<ImportationSchemeModelDTO> grid) { final Anchor anchor = new Anchor(model.getImportationSchemeDTO().getName()); anchor.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { importationSchemeModelsAdminPresenterHandler.onClick(model); } }); final SimplePanel panel = new SimplePanel(); panel.addStyleName("project-grid-code"); panel.setWidget(anchor); return panel; } }); final ColumnModel columnModel = new ColumnModel(Collections.singletonList(importationSchemeColumn)); final Grid<ImportationSchemeModelDTO> importationSchemeModelGrid = new Grid<ImportationSchemeModelDTO>(new ListStore<ImportationSchemeModelDTO>(), columnModel); importationSchemeModelGrid.getView().setForceFit(true); importationSchemeModelGrid.setAutoHeight(true); importationSchemeModelGrid.getSelectionModel().setSelectionMode(Style.SelectionMode.SINGLE); return importationSchemeModelGrid; } @Override public void setToolbarEnabled(Boolean enable) { // TODO set enable false to all element in in toolbar } @Override public ListStore<ImportationSchemeModelDTO> getImportationSchemeModelsStore() { return importationSchemeModelsGrid.getStore(); } @Override public ListStore<VariableFlexibleElementDTO> getVariableFlexibleElementStore() { return variableFlexibleElementsGrid.getStore(); } @Override public Grid<ImportationSchemeModelDTO> getImportationSchemeModelsGrid() { return importationSchemeModelsGrid; } @Override public Grid<VariableFlexibleElementDTO> getVariableFlexibleElementsGrid() { return variableFlexibleElementsGrid; } @Override public Button getAddVariableFlexibleElementButton() { return addVariableFlexibleElementButton; } @Override public Button getDeleteVariableFlexibleElementButton() { return deleteVariableFlexibleElementButton; } @Override public Button getAddImportationSchemeModelButton() { return addImportationSchemeModelButton; } @Override public Button getDeleteImportationSchemeModelButton() { return deleteImportationSchemeModelButton; } @Override public void setImportationSchemeModelsAdminPresenterHandler(ImportationSchemeModelsAdminPresenterHandler importationSchemeModelsAdminPresenterHandler) { this.importationSchemeModelsAdminPresenterHandler = importationSchemeModelsAdminPresenterHandler; } }