Author: bpoussin Date: 2013-02-13 11:45:15 +0100 (Wed, 13 Feb 2013) New Revision: 98 Url: http://forge.codelutin.com/projects/cantharella/repository/revisions/98 Log: refactoring page and service for molecule liste. Added: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/MoleculeProvenanceBean.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/utils/models/SimpleSortableListDataProvider.java Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/MoleculeService.java trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/MoleculeServiceImpl.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ListMoleculesPage.java Added: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/MoleculeProvenanceBean.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/MoleculeProvenanceBean.java (rev 0) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/model/MoleculeProvenanceBean.java 2013-02-13 10:45:15 UTC (rev 98) @@ -0,0 +1,71 @@ +package nc.ird.cantharella.service.model; + +import java.io.Serializable; +import nc.ird.cantharella.data.model.Extrait; +import nc.ird.cantharella.data.model.Fraction; +import nc.ird.cantharella.data.model.Lot; +import nc.ird.cantharella.data.model.Molecule; +import nc.ird.cantharella.data.model.MoleculeProvenance; +import nc.ird.cantharella.data.model.Produit; +import nc.ird.cantharella.service.services.MoleculeService; + +/** + * Simple bean object used as result for {@link MoleculeService#listMoleculeProvenances} + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class MoleculeProvenanceBean implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * Molecule + */ + protected Molecule molecule; + + /** + * Provenance, this field can be null if provenance is not readable by user + */ + protected MoleculeProvenance provenance; + + public MoleculeProvenanceBean(Molecule molecule) { + this.molecule = molecule; + } + + public MoleculeProvenanceBean(MoleculeProvenance provenance) { + this(provenance.getMolecule()); + this.provenance = provenance; + } + + + public Integer getIdMolecule() { + return molecule.getIdMolecule(); + } + + public Molecule getMolecule() { + return molecule; + } + + public MoleculeProvenance getMoleculeProvenance() { + return provenance; + } + + public Lot getLot() { + Lot result = null; + if (provenance != null) { + Produit produit = provenance.getProduit(); + if (produit instanceof Fraction) { + Fraction fraction = (Fraction)produit; + result = fraction.getPurification().getLotSource(); + } else { + Extrait extrait = (Extrait)produit; + result = extrait.getExtraction().getLot(); + } + } + return result; + } + +} Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/MoleculeService.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/MoleculeService.java 2013-02-12 17:52:35 UTC (rev 97) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/MoleculeService.java 2013-02-13 10:45:15 UTC (rev 98) @@ -30,6 +30,7 @@ import nc.ird.cantharella.data.model.MoleculeProvenance; import nc.ird.cantharella.data.model.Utilisateur; import nc.ird.cantharella.data.model.utils.AbstractModel; +import nc.ird.cantharella.service.model.MoleculeProvenanceBean; import nc.ird.cantharella.service.utils.normalizers.MoleculeNormalizer; import nc.ird.cantharella.service.utils.normalizers.utils.Normalize; @@ -80,7 +81,7 @@ * @return Molecules */ @Transactional(readOnly = true) - List<AbstractModel> listMoleculeProvenances(Utilisateur utilisateur); + List<MoleculeProvenanceBean> listMoleculeProvenances(Utilisateur utilisateur); /** * Charge une molecule Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/MoleculeServiceImpl.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/MoleculeServiceImpl.java 2013-02-12 17:52:35 UTC (rev 97) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/MoleculeServiceImpl.java 2013-02-13 10:45:15 UTC (rev 98) @@ -39,6 +39,7 @@ import nc.ird.cantharella.data.model.Utilisateur; import nc.ird.cantharella.data.model.Utilisateur.TypeDroit; import nc.ird.cantharella.data.model.utils.AbstractModel; +import nc.ird.cantharella.service.model.MoleculeProvenanceBean; import nc.ird.cantharella.service.services.LotService; import nc.ird.cantharella.service.services.MoleculeService; import nc.ird.module.utils.AssertTools; @@ -103,8 +104,8 @@ /** {@inheritDoc} */ @Override - public List<AbstractModel> listMoleculeProvenances(Utilisateur utilisateur) { - List<AbstractModel> result = new ArrayList<AbstractModel>(); + public List<MoleculeProvenanceBean> listMoleculeProvenances(Utilisateur utilisateur) { + List<MoleculeProvenanceBean> result = new ArrayList<MoleculeProvenanceBean>(); List<Molecule> molecules = listMolecules(); for (Molecule molecule : molecules) { @@ -113,13 +114,13 @@ List<MoleculeProvenance> moleculeProvenances = molecule.getProvenances(); for (MoleculeProvenance moleculeProvenance : moleculeProvenances) { if (isMoleculeProvenanceAccessibleByUser(moleculeProvenance, utilisateur)) { - result.add(moleculeProvenance); + result.add(new MoleculeProvenanceBean(moleculeProvenance)); isOneProductVisible = true; } } if (!isOneProductVisible) { - result.add(molecule); + result.add(new MoleculeProvenanceBean(molecule)); } } Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ListMoleculesPage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ListMoleculesPage.java 2013-02-12 17:52:35 UTC (rev 97) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ListMoleculesPage.java 2013-02-13 10:45:15 UTC (rev 98) @@ -24,14 +24,9 @@ import java.util.ArrayList; import java.util.List; - -import nc.ird.cantharella.data.model.Extrait; -import nc.ird.cantharella.data.model.Fraction; -import nc.ird.cantharella.data.model.Molecule; -import nc.ird.cantharella.data.model.MoleculeProvenance; -import nc.ird.cantharella.data.model.Produit; +import nc.ird.cantharella.data.model.Lot; import nc.ird.cantharella.data.model.Utilisateur; -import nc.ird.cantharella.data.model.utils.AbstractModel; +import nc.ird.cantharella.service.model.MoleculeProvenanceBean; import nc.ird.cantharella.service.services.MoleculeService; import nc.ird.cantharella.web.config.WebContext; import nc.ird.cantharella.web.pages.TemplatePage; @@ -42,13 +37,10 @@ import nc.ird.cantharella.web.utils.columns.DecimalPropertyColumn; import nc.ird.cantharella.web.utils.columns.LinkPropertyColumn; import nc.ird.cantharella.web.utils.columns.LinkableImagePropertyColumn; -import nc.ird.cantharella.web.utils.models.DisplayBooleanPropertyModel; -import nc.ird.cantharella.web.utils.models.DisplayDecimalPropertyModel; import nc.ird.cantharella.web.utils.models.DisplayDecimalPropertyModel.DecimalDisplFormat; -import nc.ird.cantharella.web.utils.models.LoadableDetachableSortableListDataProvider; +import nc.ird.cantharella.web.utils.models.SimpleSortableListDataProvider; import nc.ird.cantharella.web.utils.security.AuthRole; import nc.ird.cantharella.web.utils.security.AuthRoles; - import org.apache.wicket.MarkupContainer; import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; @@ -100,260 +92,102 @@ // Liste des molecules Utilisateur utilisateur = getSession().getUtilisateur(); - final List<AbstractModel> moleculeProvenances = moleculeService.listMoleculeProvenances(utilisateur); + final List<MoleculeProvenanceBean> moleculeProvenances = moleculeService.listMoleculeProvenances(utilisateur); - LoadableDetachableSortableListDataProvider<AbstractModel> moleculesDataProvider = - new LoadableDetachableSortableListDataProvider<AbstractModel>( + SimpleSortableListDataProvider<MoleculeProvenanceBean> moleculesDataProvider = + new SimpleSortableListDataProvider<MoleculeProvenanceBean>( moleculeProvenances, getSession().getLocale()); - List<IColumn<AbstractModel>> columns = new ArrayList<IColumn<AbstractModel>>(); + List<IColumn<MoleculeProvenanceBean>> columns = new ArrayList<IColumn<MoleculeProvenanceBean>>(); - columns.add(new LinkableImagePropertyColumn<AbstractModel>("images/read.png", getString("Read"), getString("Read")) { + columns.add(new LinkableImagePropertyColumn<MoleculeProvenanceBean>( + "images/read.png", getString("Read"), getString("Read")) { @Override - public void onClick(Item<ICellPopulator<AbstractModel>> item, String componentId, IModel<AbstractModel> model) { - int idMolecule; - if (model.getObject() instanceof Molecule) { - idMolecule = ((Molecule)model.getObject()).getIdMolecule(); - } else { - idMolecule = ((MoleculeProvenance)model.getObject()).getMolecule().getIdMolecule(); - } - setResponsePage(new ReadMoleculePage(idMolecule, currentPage)); + public void onClick(Item<ICellPopulator<MoleculeProvenanceBean>> item, String componentId, IModel<MoleculeProvenanceBean> model) { + setResponsePage(new ReadMoleculePage(model.getObject().getIdMolecule(), currentPage)); } }); - columns.add(new LinkPropertyColumn<AbstractModel>(new Model<String>(getString("Molecule.idMolecule")), "idMolecule", - getString("Read")) { - @Override - protected IModel<AbstractModel> createLabelModel(final IModel<AbstractModel> rowModel) { - PropertyModel<AbstractModel> propertyModel; - if (rowModel.getObject() instanceof Molecule) { - propertyModel = new PropertyModel<AbstractModel>(rowModel, "idMolecule"); - } else { - propertyModel = new PropertyModel<AbstractModel>(rowModel, "molecule.idMolecule"); - } - return propertyModel; - } + columns.add(new LinkPropertyColumn<MoleculeProvenanceBean>( + new Model<String>(getString("Molecule.idMolecule")), + "idMolecule", "idMolecule") { @Override - public void onClick(Item<ICellPopulator<AbstractModel>> item, String componentId, IModel<AbstractModel> model) { - int idMolecule; - if (model.getObject() instanceof Molecule) { - idMolecule = ((Molecule)model.getObject()).getIdMolecule(); - } else { - idMolecule = ((MoleculeProvenance)model.getObject()).getMolecule().getIdMolecule(); - } - setResponsePage(new ReadMoleculePage(idMolecule, currentPage)); + public void onClick(Item<ICellPopulator<MoleculeProvenanceBean>> item, String componentId, IModel<MoleculeProvenanceBean> model) { + setResponsePage(new ReadMoleculePage(model.getObject().getIdMolecule(), currentPage)); } }); - columns.add(new AbstractColumn<AbstractModel>(new Model<String>(getString("Molecule.formuleDevMol"))) { - public void populateItem(Item<ICellPopulator<AbstractModel>> cellItem, String componentId, IModel<AbstractModel> rowModel) { - if (rowModel.getObject() instanceof Molecule) { - cellItem.add(new Label(componentId, "-") - .add(new MoleculeViewBehavior(new PropertyModel<String>(rowModel, "formuleDevMol")))); - } else { - cellItem.add(new Label(componentId, "-") - .add(new MoleculeViewBehavior(new PropertyModel<String>(rowModel, "molecule.formuleDevMol")))); - } - } - }); - columns.add(new PropertyColumn<AbstractModel>(new Model<String>(getString("Molecule.nomCommun")), "nomCommun", - "nomCommun") { - @Override - public void populateItem(Item<ICellPopulator<AbstractModel>> cellItem, String componentId, IModel<AbstractModel> rowModel) { - String nomCommun; - if (rowModel.getObject() instanceof Molecule) { - nomCommun = ((Molecule)rowModel.getObject()).getNomCommun(); - } else { - nomCommun = ((MoleculeProvenance)rowModel.getObject()).getMolecule().getNomCommun(); - } - cellItem.add(new Label(componentId, nomCommun)); + columns.add(new AbstractColumn<MoleculeProvenanceBean>( + new Model<String>(getString("Molecule.formuleDevMol"))) { + public void populateItem(Item<ICellPopulator<MoleculeProvenanceBean>> cellItem, String componentId, IModel<MoleculeProvenanceBean> rowModel) { + cellItem.add(new Label(componentId, "-") + .add(new MoleculeViewBehavior(new PropertyModel<String>(rowModel, "molecule.formuleDevMol")))); } }); - columns.add(new PropertyColumn<AbstractModel>(new Model<String>(getString("Molecule.familleChimique")), "familleChimique", - "familleChimique") { - @Override - public void populateItem(Item<ICellPopulator<AbstractModel>> cellItem, String componentId, IModel<AbstractModel> rowModel) { - String familleChimique; - if (rowModel.getObject() instanceof Molecule) { - familleChimique = ((Molecule)rowModel.getObject()).getFamilleChimique(); - } else { - familleChimique = ((MoleculeProvenance)rowModel.getObject()).getMolecule().getFamilleChimique(); - } - cellItem.add(new Label(componentId, familleChimique)); - } - }); - columns.add(new PropertyColumn<AbstractModel>(new Model<String>(getString("Molecule.formuleBrute")), "formuleBrute", - "formuleBrute") { - @Override - public void populateItem(Item<ICellPopulator<AbstractModel>> cellItem, String componentId, IModel<AbstractModel> rowModel) { - String formuleBrute; - if (rowModel.getObject() instanceof Molecule) { - formuleBrute = ((Molecule)rowModel.getObject()).getFormuleBrute(); - } else { - formuleBrute = ((MoleculeProvenance)rowModel.getObject()).getMolecule().getFormuleBrute(); - } - cellItem.add(new Label(componentId, formuleBrute)); - } - }); - columns.add(new DecimalPropertyColumn<AbstractModel>(new Model<String>(getString("Molecule.masseMolaire")), "masseMolaire", - "masseMolaire", DecimalDisplFormat.SMALL, getLocale()) { - @Override - public void populateItem(Item<ICellPopulator<AbstractModel>> cellItem, String componentId, IModel<AbstractModel> rowModel) { - if (rowModel.getObject() instanceof Molecule) { - cellItem.add(new Label(componentId, new DisplayDecimalPropertyModel(rowModel.getObject(), "masseMolaire", - DecimalDisplFormat.SMALL, getLocale()))); - } else { - cellItem.add(new Label(componentId, new DisplayDecimalPropertyModel(rowModel.getObject(), "molecule.masseMolaire", - DecimalDisplFormat.SMALL, getLocale()))); - } - } - }); - columns.add(new BooleanPropertyColumn<AbstractModel>(new Model<String>(getString("Molecule.nouvMolecul")), "nouvMolecul", - "nouvMolecul", this) { - @Override - public void populateItem(Item<ICellPopulator<AbstractModel>> cellItem, String componentId, IModel<AbstractModel> rowModel) { - if (rowModel.getObject() instanceof Molecule) { - cellItem.add(new Label(componentId, new DisplayBooleanPropertyModel(rowModel.getObject(), "nouvMolecul", - ListMoleculesPage.this))); - } else { - cellItem.add(new Label(componentId, new DisplayBooleanPropertyModel(rowModel.getObject(), "molecule.nouvMolecul", - ListMoleculesPage.this))); - } - } - }); - columns.add(new PropertyColumn<AbstractModel>(new Model<String>(getString("Molecule.provenance.embranchement")), "embranchement", - "embranchement") { - @Override - public void populateItem(Item<ICellPopulator<AbstractModel>> cellItem, String componentId, IModel<AbstractModel> rowModel) { - if (rowModel.getObject() instanceof Molecule) { - cellItem.add(new Label(componentId, "-")); - } else { - MoleculeProvenance provenance = (MoleculeProvenance)rowModel.getObject(); - Produit produit = provenance.getProduit(); - if (produit instanceof Fraction) { - Fraction fraction = (Fraction)produit; - cellItem.add(new Label(componentId, fraction.getPurification().getLotSource().getSpecimenRef().getEmbranchement())); - } else { - Extrait extrait = (Extrait)produit; - cellItem.add(new Label(componentId, extrait.getExtraction().getLot().getSpecimenRef().getEmbranchement())); - } - } - } - }); - columns.add(new PropertyColumn<AbstractModel>(new Model<String>(getString("Molecule.provenance.genre")), "genre", - "genre") { - @Override - public void populateItem(Item<ICellPopulator<AbstractModel>> cellItem, String componentId, IModel<AbstractModel> rowModel) { - if (rowModel.getObject() instanceof Molecule) { - cellItem.add(new Label(componentId, "-")); - } else { - MoleculeProvenance provenance = (MoleculeProvenance)rowModel.getObject(); - Produit produit = provenance.getProduit(); - if (produit instanceof Fraction) { - Fraction fraction = (Fraction)produit; - cellItem.add(new Label(componentId, fraction.getPurification().getLotSource().getSpecimenRef().getGenre())); - } else { - Extrait extrait = (Extrait)produit; - cellItem.add(new Label(componentId, extrait.getExtraction().getLot().getSpecimenRef().getGenre())); - } - } - } - }); - columns.add(new PropertyColumn<AbstractModel>(new Model<String>(getString("Molecule.provenance.espece")), "espece", - "espece") { - @Override - public void populateItem(Item<ICellPopulator<AbstractModel>> cellItem, String componentId, IModel<AbstractModel> rowModel) { - if (rowModel.getObject() instanceof Molecule) { - cellItem.add(new Label(componentId, "-")); - } else { - MoleculeProvenance provenance = (MoleculeProvenance)rowModel.getObject(); - Produit produit = provenance.getProduit(); - if (produit instanceof Fraction) { - Fraction fraction = (Fraction)produit; - cellItem.add(new Label(componentId, fraction.getPurification().getLotSource().getSpecimenRef().getEspece())); - } else { - Extrait extrait = (Extrait)produit; - cellItem.add(new Label(componentId, extrait.getExtraction().getLot().getSpecimenRef().getEspece())); - } - } - } - }); - columns.add(new LinkPropertyColumn<AbstractModel>(new Model<String>(getString("Molecule.provenance.lot.ref")), "lot.ref", - getString("Read")) { - @Override - public void populateItem(Item<ICellPopulator<AbstractModel>> cellItem, String componentId, IModel<AbstractModel> rowModel) { - if (rowModel.getObject() instanceof Molecule) { - cellItem.add(new Label(componentId, "-")); - } else { - super.populateItem(cellItem, componentId, rowModel); - } - } - @Override - protected IModel<AbstractModel> createLabelModel(final IModel<AbstractModel> rowModel) { - IModel<AbstractModel> propertyModel = null; - if (rowModel.getObject() instanceof MoleculeProvenance) { - MoleculeProvenance provenance = (MoleculeProvenance)rowModel.getObject(); - Produit produit = provenance.getProduit(); - if (produit instanceof Fraction) { - propertyModel = new PropertyModel<AbstractModel>(rowModel, "produit.purification.lotSource.ref"); - } else { - propertyModel = new PropertyModel<AbstractModel>(rowModel, "produit.extraction.lot.ref"); - } - } - return propertyModel; - } + columns.add(new PropertyColumn<MoleculeProvenanceBean>( + new Model<String>(getString("Molecule.nomCommun")), + "molecule.nomCommun", "molecule.nomCommun")); + + columns.add(new PropertyColumn<MoleculeProvenanceBean>( + new Model<String>(getString("Molecule.familleChimique")), + "molecule.familleChimique", "molecule.familleChimique")); + + columns.add(new PropertyColumn<MoleculeProvenanceBean>( + new Model<String>(getString("Molecule.formuleBrute")), + "molecule.formuleBrute", "molecule.formuleBrute")); + + columns.add(new DecimalPropertyColumn<MoleculeProvenanceBean>( + new Model<String>(getString("Molecule.masseMolaire")), + "molecule.masseMolaire", "molecule.masseMolaire", DecimalDisplFormat.SMALL, getLocale())); + + columns.add(new BooleanPropertyColumn<MoleculeProvenanceBean>( + new Model<String>(getString("Molecule.nouvMolecul")), + "molecule.nouvMolecul", "molecule.nouvMolecul", this)); + + columns.add(new PropertyColumn<MoleculeProvenanceBean>( + new Model<String>(getString("Molecule.provenance.embranchement")), + "lot.specimenRef.embranchement", "lot.specimenRef.embranchement")); + + columns.add(new PropertyColumn<MoleculeProvenanceBean>( + new Model<String>(getString("Molecule.provenance.genre")), + "lot.specimenRef.genre", "lot.specimenRef.genre")); + + columns.add(new PropertyColumn<MoleculeProvenanceBean>( + new Model<String>(getString("Molecule.provenance.espece")), + "lot.specimenRef.espece", "lot.specimenRef.espece")); + + columns.add(new LinkPropertyColumn<MoleculeProvenanceBean>( + new Model<String>(getString("Molecule.provenance.lot.ref")), + "lot.ref", "lot.ref") { @Override - public void onClick(Item<ICellPopulator<AbstractModel>> item, String componentId, IModel<AbstractModel> model) { - int idLot; - if (model.getObject() instanceof MoleculeProvenance) { - MoleculeProvenance provenance = (MoleculeProvenance)model.getObject(); - Produit produit = provenance.getProduit(); - if (produit instanceof Fraction) { - Fraction fraction = (Fraction)produit; - idLot = fraction.getPurification().getLotSource().getIdLot(); - } else { - Extrait extrait = (Extrait)produit; - idLot = extrait.getExtraction().getLot().getIdLot(); - } - + public void onClick(Item<ICellPopulator<MoleculeProvenanceBean>> item, + String componentId, IModel<MoleculeProvenanceBean> model) { + Lot lot = model.getObject().getLot(); + if (lot != null) { + int idLot = lot.getIdLot(); setResponsePage(new ReadLotPage(idLot, currentPage)); } } }); - columns.add(new PropertyColumn<AbstractModel>(new Model<String>(getString("Molecule.provenance.programme")), "programme", - "programme") { + + columns.add(new PropertyColumn<MoleculeProvenanceBean>( + new Model<String>(getString("Molecule.provenance.programme")), + "lot.campagne.programme", "lot.campagne.programme")); + + columns.add(new LinkableImagePropertyColumn<MoleculeProvenanceBean>( + "images/edit.png", getString("Update"), getString("Update")) { @Override - public void populateItem(Item<ICellPopulator<AbstractModel>> cellItem, String componentId, IModel<AbstractModel> rowModel) { - if (rowModel.getObject() instanceof Molecule) { - cellItem.add(new Label(componentId, "-")); - } else { - MoleculeProvenance provenance = (MoleculeProvenance)rowModel.getObject(); - Produit produit = provenance.getProduit(); - if (produit instanceof Fraction) { - Fraction fraction = (Fraction)produit; - cellItem.add(new Label(componentId, fraction.getPurification().getLotSource().getCampagne().getProgramme())); - } else { - Extrait extrait = (Extrait)produit; - cellItem.add(new Label(componentId, extrait.getExtraction().getLot().getCampagne().getProgramme())); - } - } - } - }); - columns.add(new LinkableImagePropertyColumn<AbstractModel>("images/edit.png", getString("Update"), getString("Update")) { - @Override - public void onClick(Item<ICellPopulator<AbstractModel>> item, String componentId, IModel<AbstractModel> model) { - int idMolecule; - if (model.getObject() instanceof Molecule) { - idMolecule = ((Molecule)model.getObject()).getIdMolecule(); - } else { - idMolecule = ((MoleculeProvenance)model.getObject()).getMolecule().getIdMolecule(); - } + public void onClick(Item<ICellPopulator<MoleculeProvenanceBean>> item, + String componentId, IModel<MoleculeProvenanceBean> model) { + int idMolecule = model.getObject().getIdMolecule(); setResponsePage(new ManageMoleculePage(idMolecule, currentPage)); } }); - final DataTable<AbstractModel> moleculesDataTable = new AjaxFallbackDefaultDataTable<AbstractModel>("ListMoleculesPage.Molecules", columns, + final DataTable<MoleculeProvenanceBean> moleculesDataTable = + new AjaxFallbackDefaultDataTable<MoleculeProvenanceBean>( + "ListMoleculesPage.Molecules", columns, moleculesDataProvider, WebContext.ROWS_PER_PAGE); moleculesRefresh.add(moleculesDataTable); } Copied: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/utils/models/SimpleSortableListDataProvider.java (from rev 95, trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/utils/models/LoadableDetachableSortableListDataProvider.java) =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/utils/models/SimpleSortableListDataProvider.java (rev 0) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/utils/models/SimpleSortableListDataProvider.java 2013-02-13 10:45:15 UTC (rev 98) @@ -0,0 +1,163 @@ +/* + * #%L + * Cantharella :: Web + * $Id:$ + * $HeadURL:$ + * %% + * Copyright (C) 2009 - 2012 IRD (Institut de Recherche pour le Developpement) and by respective authors (see below) + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package nc.ird.cantharella.web.utils.models; + +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import nc.ird.cantharella.data.config.DataContext; +import nc.ird.cantharella.data.exceptions.UnexpectedException; +import nc.ird.cantharella.web.config.WebContext; +import nc.ird.module.utils.AssertTools; +import nc.ird.module.utils.BeanTools; +import nc.ird.module.utils.BeanTools.AccessType; +import nc.ird.module.utils.GenericsTools; +import org.apache.commons.collections.comparators.NullComparator; +import org.apache.commons.lang3.StringUtils; +import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; +import org.apache.wicket.model.IModel; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Same as {@link LoadableDetachableSortableListDataProvider} but use directly object + * in list (without reload from data base) + * + * + * @author Mickael Tricot + * @author Adrien Cheype + * @param <M> Model object type + */ +public class SimpleSortableListDataProvider<M> extends SortableDataProvider<M> { + + private static final long serialVersionUID = 1L; + + /** Logger */ + private static final Logger LOG = LoggerFactory.getLogger(SimpleSortableListDataProvider.class); + + /** Comparator */ + private Comparator<Object> comparator; + + /** Data list */ + private List<M> list; + + /** Locale */ + private Locale locale; + + /** To recognize a special sort by codePays */ + final static String CODE_PAYS_PROPERTY = "codePays"; + + /** Current filter to select results */ + // private FilterMapHomeMade filter; + /** + * Constructor + * @param list List + * @param locale Locale + */ + @SuppressWarnings("unchecked") + public SimpleSortableListDataProvider(List<M> list, Locale locale) { + AssertTools.assertNotNull(list); + AssertTools.assertIn(locale, DataContext.LOCALES); + this.list = list; + this.locale = locale; + comparator = new NullComparator(true); + } + + /** {@inheritDoc} */ + @Override + public Iterator<M> iterator(int first, int count) { + + if (getSort() != null && !StringUtils.isEmpty(getSort().getProperty())) { + Collections.sort(list, new Comparator<M>() { + @Override + public int compare(M o1, M o2) { + try { + Comparable<? extends Object> c1; + Object c2; + c1 = GenericsTools.cast(BeanTools.getValueFromPath(o1, AccessType.GETTER, getSort() + .getProperty())); + + c2 = GenericsTools.cast(BeanTools.getValueFromPath(o2, AccessType.GETTER, getSort() + .getProperty())); + + // Exceptions + // Countries are sorted by country name, not by country code + if (getSort().getProperty().endsWith(CODE_PAYS_PROPERTY)) { + if (c1 != null) { + c1 = WebContext.COUNTRIES.get(locale).get(c1); + } + if (c2 != null) { + c2 = WebContext.COUNTRIES.get(locale).get(c2); + } + } + + return (getSort().isAscending() ? 1 : -1) * comparator.compare(c1, c2); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new UnexpectedException(e); + } + } + }); + } + + return list.subList(first, Math.min(first + count, size())).iterator(); + } + + /** {@inheritDoc} */ + @Override + public IModel<M> model(final M object) { + // return new Model<M>(object); + return new IModel<M>(){ + public M getObject() { + return object; + } + public void setObject(M t) {} + public void detach() {} + }; + } + + /** {@inheritDoc} */ + @Override + public int size() { + return list.size(); + } + + /** + * list getter + * @return list + */ + public List<M> getList() { + return list; + } + + /** + * list setter + * @param list list + */ + public void setList(List<M> list) { + this.list = list; + } + +} \ No newline at end of file