package org.sigmah.client.ui.view.importation; /* * #%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.store.ListStore; import com.extjs.gxt.ui.client.widget.grid.CheckBoxSelectionModel; 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.grid.GridSelectionModel; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import org.sigmah.client.i18n.I18N; import org.sigmah.client.ui.presenter.importation.ActionRenderer; import org.sigmah.client.ui.widget.HasGrid; import org.sigmah.client.ui.widget.button.Button; import org.sigmah.client.ui.widget.form.Forms; import org.sigmah.client.ui.widget.layout.Layouts; import org.sigmah.client.ui.widget.popup.PopupWidget; import org.sigmah.shared.dto.ImportDetails; import org.sigmah.shared.dto.ProjectDTO; import org.sigmah.shared.dto.base.EntityDTO; import org.sigmah.shared.dto.orgunit.OrgUnitDTO; import org.sigmah.shared.dto.referential.ImportStatusCode; /** * Displays the list of projects and org units that will be modified by an * import. * * @author Guerline Jean-Baptiste (gjbaptiste@ideia.fr) * @author Raphaƫl Calabro (rcalabro@ideia.fr) v2.0 */ public class ImportDetailsPopup extends PopupWidget implements HasGrid<ImportDetails> { private static final String MODEL_NAME = "modelName"; private static final String STATUS_MESSAGE = "status"; private static final String IDENTIFICATION_KEY = "idKey"; private static final String IMPORT_STATUS_CODE = "code"; private static final String PROJECT_NAME = "name"; private static final String ACTIONS = "actions"; private Grid<ImportDetails> grid; private Button importButton; private ActionRenderer actionRenderer; public ImportDetailsPopup() { super(true, Layouts.fitLayout()); setWidth("700px"); setHeight("400px"); } public void initialize() { setTitle(I18N.CONSTANTS.importProjectOrgUnitsPanelHeader()); // Building the grid. final CheckBoxSelectionModel<ImportDetails> selectionModel = new CheckBoxSelectionModel<ImportDetails>(); final ColumnModel columnModel = createColumnModel(selectionModel); grid = createGrid(columnModel, selectionModel); grid.addPlugin(selectionModel); // Creating the import button. importButton = Forms.button(I18N.CONSTANTS.importItem()); // Preparing the popup. setContent(grid); addButton(importButton); } @Override public Grid<ImportDetails> getGrid() { return grid; } public Button getImportButton() { return importButton; } @Override public ListStore<ImportDetails> getStore() { return grid.getStore(); } @Override public void setGridEventHandler(GridEventHandler<ImportDetails> handler) { } public void setActionRenderer(ActionRenderer actionRenderer) { this.actionRenderer = actionRenderer; } public List<ImportDetails> getSelection() { return grid.getSelectionModel().getSelection(); } public void addModelToSelection(ImportDetails importDetails) { grid.getSelectionModel().select(importDetails, true); } // -- // Utility methods. // -- private Grid<ImportDetails> createGrid(final ColumnModel columnModel, final GridSelectionModel<ImportDetails> selectionModel) { final Grid<ImportDetails> grid = new Grid<ImportDetails>(new ListStore<ImportDetails>(), columnModel); grid.setSelectionModel(selectionModel); grid.getView().setForceFit(true); return grid; } private ColumnModel createColumnModel(CheckBoxSelectionModel<ImportDetails> selectionModel) { // Checkbox column (to select changes to apply). final ColumnConfig checkboxColumnConfig = selectionModel.getColumn(); // Model name column. final ColumnConfig modelNameColumnConfig = new ColumnConfig(MODEL_NAME, I18N.CONSTANTS.projectModel(), 100); modelNameColumnConfig.setRenderer(new GridCellRenderer<ImportDetails>() { @Override public Object render(final ImportDetails model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<ImportDetails> store, Grid<ImportDetails> grid) { return model.getModelName(); } }); // Identification key column. final ColumnConfig idKeyColumnConfig = new ColumnConfig(IDENTIFICATION_KEY, I18N.CONSTANTS.adminImportKeyIdentification(), 120); idKeyColumnConfig.setRenderer(new GridCellRenderer<ImportDetails>() { @Override public Object render(final ImportDetails model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<ImportDetails> store, Grid<ImportDetails> grid) { return model.getKeyIdentification(); } }); // Status message column. final ColumnConfig statusMessageColumnConfig = new ColumnConfig(STATUS_MESSAGE, I18N.CONSTANTS.importHeadingStatus(), 120); statusMessageColumnConfig.setRenderer(new GridCellRenderer<ImportDetails>() { @Override public Object render(final ImportDetails model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<ImportDetails> store, Grid<ImportDetails> grid) { if (model.getEntityStatus() != null) { return ImportStatusCode.getStringValue(model.getEntityStatus()); } else { return I18N.CONSTANTS.UNAVAILABLE(); } } }); // Project or OrgUnit code column. final ColumnConfig codeColumnConfig = new ColumnConfig(IMPORT_STATUS_CODE, I18N.CONSTANTS.code(), 100); codeColumnConfig.setRenderer(new GridCellRenderer<ImportDetails>() { @Override public Object render(final ImportDetails model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<ImportDetails> store, Grid<ImportDetails> grid) { final Set<EntityDTO<Integer>> entitySet = model.getEntitiesToImport().keySet(); if (!entitySet.isEmpty()) { final Iterator<EntityDTO<Integer>> iterator = entitySet.iterator(); final EntityDTO<Integer> entity = iterator.next(); if (entity instanceof ProjectDTO) { final ProjectDTO project = (ProjectDTO) entity; return project.getName(); } else if(entity instanceof OrgUnitDTO) { final OrgUnitDTO orgUnit = (OrgUnitDTO) entity; return orgUnit.getName(); } } return null; } }); // Project or OrgUnit full name column. final ColumnConfig entityNameColumnConfig = new ColumnConfig(PROJECT_NAME, I18N.CONSTANTS.name(), 120); entityNameColumnConfig.setRenderer(new GridCellRenderer<ImportDetails>() { @Override public Object render(final ImportDetails model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<ImportDetails> store, Grid<ImportDetails> grid) { final Set<EntityDTO<Integer>> entitySet = model.getEntitiesToImport().keySet(); if (!entitySet.isEmpty()) { final Iterator<EntityDTO<Integer>> iterator = entitySet.iterator(); final EntityDTO<?> entity = iterator.next(); if (entity instanceof ProjectDTO) { final ProjectDTO project = (ProjectDTO) entity; return project.getFullName(); } else if(entity instanceof OrgUnitDTO) { final OrgUnitDTO orgUnit = (OrgUnitDTO) entity; return orgUnit.getFullName(); } } return null; } }); // Available actions column. final ColumnConfig actionColumnConfig = new ColumnConfig(ACTIONS, 200); actionColumnConfig.setRenderer(new GridCellRenderer<ImportDetails>() { @Override public Object render(ImportDetails model, String property, ColumnData config, int rowIndex, int colIndex, ListStore store, Grid grid) { return actionRenderer.renderActionsForModel(model); } }); // Creating the column model. final ArrayList<ColumnConfig> columnConfigs = new ArrayList<ColumnConfig>(); columnConfigs.add(checkboxColumnConfig); columnConfigs.add(modelNameColumnConfig); columnConfigs.add(idKeyColumnConfig); columnConfigs.add(statusMessageColumnConfig); columnConfigs.add(codeColumnConfig); columnConfigs.add(entityNameColumnConfig); columnConfigs.add(actionColumnConfig); return new ColumnModel(columnConfigs); } }