r1036 - in trunk: coser-business/src/main/java/fr/ifremer/coser/services coser-ui/src/main/java/fr/ifremer/coser/ui coser-ui/src/main/java/fr/ifremer/coser/ui/common coser-ui/src/main/java/fr/ifremer/coser/ui/selection
Author: echatellier Date: 2012-08-10 18:10:16 +0200 (Fri, 10 Aug 2012) New Revision: 1036 Url: http://forge.codelutin.com/repositories/revision/coser/1036 Log: Add species renderer in selection ui Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesListRenderer.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpeciesListOccDensRenderer.java Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2012-08-10 15:32:19 UTC (rev 1035) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2012-08-10 16:10:16 UTC (rev 1036) @@ -1990,14 +1990,26 @@ // filtering is optionnal if (project != null && filterSpecyType != null) { // load map SpecyName > numSys - Map<String, Integer> map = new HashMap<String, Integer>(); + Map<String, Integer> speciesNumSys = new HashMap<String, Integer>(); Iterator<String[]> refTaxIterator = project.getRefTaxSpecies().iterator(true); while (refTaxIterator.hasNext()) { // "C_Perm";"NumSys";"NivSys";"C_VALIDE";"L_VALIDE";"AA_VALIDE";"C_TxPère";"Taxa" String[] tuple = refTaxIterator.next(); - String specyName = tuple[3]; Integer iNumSys = Integer.valueOf(tuple[1]); - map.put(specyName, iNumSys); + + String specyId = null; + switch (project.getStorageSpeciesType()) { + case C_PERM: + specyId = tuple[0]; + break; + case C_Valide: + specyId = tuple[3]; + break; + case L_Valide: + specyId = tuple[4]; + break; + } + speciesNumSys.put(specyId, iNumSys); } // load specy type map SpecyTypeName > [min, max] @@ -2020,7 +2032,7 @@ Iterator<String> itSpecies = result.iterator(); while (itSpecies.hasNext()) { String specy = itSpecies.next(); - Integer specyNumSys = map.get(specy); + Integer specyNumSys = speciesNumSys.get(specy); if (specyNumSys == null) { // ca ne peut pas arriver, ce cs est valider Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2012-08-10 15:32:19 UTC (rev 1035) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2012-08-10 16:10:16 UTC (rev 1036) @@ -414,7 +414,7 @@ SelectionHandler handler = new SelectionHandler(); selectionView.setHandler(handler); - handler.initView(selectionView.getSelectionDetailsTab()); + handler.initView(selectionView); handler.initSelection(selectionView); // restore session size @@ -488,7 +488,7 @@ SelectionHandler handler = new SelectionHandler(); selectionView.setHandler(handler); - handler.initView(selectionView.getSelectionDetailsTab()); + handler.initView(selectionView); handler.reloadSelection(selectionView); // restore session size Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesListRenderer.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesListRenderer.java 2012-08-10 15:32:19 UTC (rev 1035) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/SpeciesListRenderer.java 2012-08-10 16:10:16 UTC (rev 1036) @@ -50,12 +50,12 @@ @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { - String speciesId = (String)value; - if (reftaxSpecies.containsKey(speciesId)) { - speciesId = reftaxSpecies.get(speciesId); + String speciesText = (String)value; + if (reftaxSpecies.containsKey(speciesText)) { + speciesText = reftaxSpecies.get(speciesText); } - return super.getListCellRendererComponent(list, speciesId, index, isSelected, + return super.getListCellRendererComponent(list, speciesText, index, isSelected, cellHasFocus); } } Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-08-10 15:32:19 UTC (rev 1035) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-08-10 16:10:16 UTC (rev 1036) @@ -53,6 +53,7 @@ import jaxx.runtime.JAXXUtil; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -71,6 +72,7 @@ import fr.ifremer.coser.services.ProjectService; import fr.ifremer.coser.services.PublicationService; import fr.ifremer.coser.ui.common.DataHandler; +import fr.ifremer.coser.ui.common.SpeciesListRenderer; import fr.ifremer.coser.ui.control.ControlGraphFrame; import fr.ifremer.coser.ui.control.ControlHandler; import fr.ifremer.coser.ui.result.SelectionAddResultDialog; @@ -110,25 +112,25 @@ Component selectedComponent = view.getSelectedComponent(); if (selectedComponent instanceof SelectionListsView) { SelectionListsView selectionListsView = (SelectionListsView)selectedComponent; - + if (log.isDebugEnabled()) { log.debug("List details tab selected"); } - + Selection selection = view.getContextValue(Selection.class); // si la selection n'est pas la même que que celle de la sélection // on met à jour la liste de "Toutes les especes" (L1) - + List<String> currentList = selectionListsView.getSelectionAllSpeciesListModel().getSpecies(); List<String> selectionSpeciesList = selection.getSelectedSpecies(); - + if (!selectionSpeciesList.equals(currentList)) { - + if (log.isDebugEnabled()) { log.debug("Data changed, fill default selection"); } - + // on calcul également les matrices de d'occurence, densité Project project = view.getContextValue(Project.class); ProjectService projectService = view.getContextValue(ProjectService.class); @@ -138,41 +140,41 @@ density.meanOverDim(1); // moyenne sur les années Collection<String> speciesAllYear = projectService.getSpeciesWithSizeAllYears(selection); Collection<String> speciesWithMaturity = projectService.getSpeciesWithMaturity(selection); - + // set matrix on list model selectionListsView.getSelectionOccurrenceDensityListModel().setOccurrence(occurrence); selectionListsView.getSelectionOccurrenceDensityListModel().setDensity(density); - + // useless line but fix a event update bug - // can take huge time becasue somes event are fired + // can take huge time because somes event are fired selectionListsView.getSelectionAllSpeciesList().clearSelection(); - + // fill all species data (at final) selectionListsView.getSelectionAllSpeciesListModel().setSpecies(selectionSpeciesList); ((CoserListSelectionModel)selectionListsView.getSelectionAllSpeciesList().getSelectionModel()).fillSelection(); selectionListsView.getSelectionSizeAllYearListModel().setSizeAllYearSpecies(speciesAllYear); selectionListsView.getSelectionMaturityListModel().setMaturitySpecies(speciesWithMaturity); - + // rechargement de la selection sauvegardée // si aucune des autres listes n'est vide if (!selection.getSelectedSpeciesOccDens().isEmpty() || !selection.getSelectedSpeciesSizeAllYear().isEmpty() || !selection.getSelectedSpeciesMaturity().isEmpty()) { - + selectionListsView.getSelectionFilterOccurrenceField().setText(String.valueOf(selection.getOccurrenceFilter())); selectionListsView.getSelectionFilterDensityField().setText(String.valueOf(selection.getDensityFilter())); - + // restauration de la selection sauvegardée ((CoserListSelectionModel)selectionListsView.getSelectionOccurrenceDensityList().getSelectionModel()).setSelectedObjects(selection.getSelectedSpeciesOccDens()); ((CoserListSelectionModel)selectionListsView.getSelectionSizeAllYearList().getSelectionModel()).setSelectedObjects(selection.getSelectedSpeciesSizeAllYear()); ((CoserListSelectionModel)selectionListsView.getSelectionMaturityList().getSelectionModel()).setSelectedObjects(selection.getSelectedSpeciesMaturity()); } else { - + if (log.isDebugEnabled()) { log.debug("Apply occurrence/density filter"); } - + // select all list (not to do for reload) // init allSize and maturity before (select all with updateOccurrenceDensityFilter) updateOccurrenceDensityFilter(selectionListsView); @@ -386,8 +388,19 @@ * * @param view view */ - public void initView(SelectionDetailsView view) { + public void initView(SelectionView view) { + // init specific tab + initView(view.getSelectionDetailsTab()); + initView(view.getSelectionListsView()); + } + /** + * Init detail tab view + * + * @param view view + */ + protected void initView(SelectionDetailsView view) { + // add layers Project project = view.getContextValue(Project.class); view.getStrataMap().initMap(project, view.getStataMapInfo()); @@ -399,7 +412,26 @@ int count = view.getTypeSpeciesModel().getSize(); view.getTypeSpeciesList().addSelectionInterval(0, count - 1); + // init species renderer + SpeciesListRenderer renderer = new SpeciesListRenderer(project.getRefTaxSpeciesMap()); + view.getFilteredSpeciesList().setCellRenderer(renderer); + view.getSelectedSpeciesList().setCellRenderer(renderer); } + + /** + * Init selection list tab view. + * + * @param view view + */ + protected void initView(SelectionListsView view) { + Project project = view.getContextValue(Project.class); + Map<String, String> reftaxSpecies = project.getRefTaxSpeciesMap(); + SpeciesListRenderer renderer = new SpeciesListRenderer(reftaxSpecies); + view.getSelectionAllSpeciesList().setCellRenderer(renderer); + view.getSelectionOccurrenceDensityList().setCellRenderer(new SpeciesListOccDensRenderer(reftaxSpecies)); + view.getSelectionSizeAllYearList().setCellRenderer(renderer); + view.getSelectionMaturityList().setCellRenderer(renderer); + } /** * Appelé lorsque la selection de la liste des strate a changé. @@ -488,6 +520,10 @@ List<String> filteredSpecies = projectService.getProjectSpecies(selection, project, speciesTypes); + // code pour que la liste des ids d'especes soit trié + // comme celle de visualisation de l'utilisateur (vue triée du rendu) + filteredSpecies = new ArrayList<String>(CollectionUtils.retainAll(project.getRefTaxSpeciesMap().keySet(), filteredSpecies)); + // ne fait pas apparaitre les especes deja selectionnées List<String> selectedSpecies = view.getSelectedSpeciesListModel().getSpecies(); filteredSpecies.removeAll(selectedSpecies); @@ -808,38 +844,6 @@ } /** - * Sauvegarde la sélection (partie listes de selection). - * - * @param view parent view - * @return {@code true} is slection has been saved - */ - protected boolean saveProjectSelection(SelectionListsView view) { - boolean saved = false; - - Project project = view.getContextValue(Project.class); - Selection selection = view.getContextValue(Selection.class); - ProjectService service = view.getContextValue(ProjectService.class); - SelectionView selectionView = view.getParentContainer(SelectionView.class); - - saveSelectionLists(view, selection); - - try { - service.saveProjectSelection(project, selection); - saved = true; - } - catch (CoserBusinessException ex) { - if (log.isErrorEnabled()) { - log.error("Can't save selection", ex); - } - JOptionPane.showMessageDialog(view, ex.getMessage(), _("coser.ui.selection.saveError"), JOptionPane.ERROR_MESSAGE); - } - - // enable tabs - selectionView.setEnabledAt(2, selection.isValidated()); // selection lists - return saved; - } - - /** * Sauve les éléments selectionnés dans la sélection. * * @param view view containing jlist @@ -888,10 +892,14 @@ boolean canBeValidated = checkSelectionListComments(view, selection); if (canBeValidated) { try { + saveSelectionLists(view, selection); service.validSelection(project, selection); - selection.setValidated(true); JOptionPane.showMessageDialog(view, _("coser.ui.selection.selectionValidated"), _("coser.ui.selection.selectionTitle"), JOptionPane.INFORMATION_MESSAGE); + + // enable tabs + SelectionView selectionView = view.getParentContainer(SelectionView.class); + selectionView.setEnabledAt(2, true); // selection lists } catch (CoserBusinessException ex) { if (log.isErrorEnabled()) { log.error("Can't save selection", ex); @@ -1176,7 +1184,8 @@ * @param view view */ public void addSelectedFilteredSpecies(SelectionDetailsView view) { - + Project project = view.getContextValue(Project.class); + // get selected species Object[] selectedFilteredSpecies = view.getFilteredSpeciesList().getSelectedValues(); Set<String> selectedSpecies = new HashSet<String>(); @@ -1189,7 +1198,11 @@ // met a jour le liste des especes selectionnées List<String> selectedSpeciesList = new ArrayList<String>(selectedSpecies); - Collections.sort(selectedSpeciesList); + + // code pour que la liste des ids d'especes soit trié + // comme celle de visualisation de l'utilisateur (vue triée du rendu) + selectedSpeciesList = new ArrayList<String>(CollectionUtils.retainAll(project.getRefTaxSpeciesMap().keySet(), selectedSpeciesList)); + view.getSelectedSpeciesListModel().setSpecies(selectedSpeciesList); // met a jour la liste filtrée (retrait des especes selectionnées) @@ -1205,6 +1218,7 @@ * @param view view */ public void removeSelectedSpecies(SelectionDetailsView view) { + Project project = view.getContextValue(Project.class); List<String> filteredSpecies = new ArrayList<String>(view.getFilteredSpeciesListModel().getSpecies()); List<String> selectedSpecies = new ArrayList<String>(view.getSelectedSpeciesListModel().getSpecies()); @@ -1213,9 +1227,11 @@ selectedSpecies.remove((String)singleSelectedSelectedSpecies); filteredSpecies.add((String)singleSelectedSelectedSpecies); } - Collections.sort(selectedSpecies); - Collections.sort(filteredSpecies); + // code pour que la liste des ids d'especes soit trié + // comme celle de visualisation de l'utilisateur (vue triée du rendu) + filteredSpecies = new ArrayList<String>(CollectionUtils.retainAll(project.getRefTaxSpeciesMap().keySet(), filteredSpecies)); + // met à jour la liste des especes selectionnées view.getSelectedSpeciesListModel().setSpecies(selectedSpecies); Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx 2012-08-10 15:32:19 UTC (rev 1035) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx 2012-08-10 16:10:16 UTC (rev 1036) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2010 Ifremer, Codelutin, Chatellier Eric + Copyright (C) 2010 - 2012 Ifremer, Codelutin, Chatellier Eric %% This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -141,7 +141,6 @@ <OccurrenceDensitySpeciesListModel id="selectionOccurrenceDensityListModel" onContentsChanged='occurrenceDensitySpeciesLabel.setTitle(_("coser.ui.selection.occurrenceDensitySpecies", selectionOccurrenceDensityList.getSelectedIndices().length, selectionOccurrenceDensityList.getModel().getSize()))' /> <JList id="selectionOccurrenceDensityList" model="{selectionOccurrenceDensityListModel}" - cellRenderer="{new SpeciesListOccDensRenderer()}" selectionModel="{new CoserListSelectionModel(selectionOccurrenceDensityList.getSelectionModel(), selectionOccurrenceDensityListModel)}" onValueChanged='applyOccDensFilter.setEnabled(true); occurrenceDensitySpeciesLabel.setTitle(_("coser.ui.selection.occurrenceDensitySpecies", selectionOccurrenceDensityList.getSelectedIndices().length, selectionOccurrenceDensityList.getModel().getSize()))' /> </JScrollPane> Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpeciesListOccDensRenderer.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpeciesListOccDensRenderer.java 2012-08-10 15:32:19 UTC (rev 1035) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SpeciesListOccDensRenderer.java 2012-08-10 16:10:16 UTC (rev 1036) @@ -5,7 +5,7 @@ * $Id$ * $HeadURL$ * %% - * Copyright (C) 2010 Ifremer, Codelutin, Chatellier Eric + * Copyright (C) 2010 - 2012 Ifremer, Codelutin, Chatellier Eric * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -28,11 +28,13 @@ import static org.nuiton.i18n.I18n._; import java.awt.Component; +import java.util.Map; import javax.swing.JList; import org.jdesktop.swingx.renderer.DefaultListRenderer; +import fr.ifremer.coser.bean.Project; import fr.ifremer.coser.ui.selection.model.OccurrenceDensitySpeciesListModel; /** @@ -49,6 +51,12 @@ /** serialVersionUID. */ private static final long serialVersionUID = -5404111064519251687L; + protected Map<String, String> reftaxSpecies; + + public SpeciesListOccDensRenderer(Map<String, String> reftaxSpecies) { + this.reftaxSpecies = reftaxSpecies; + } + @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { @@ -58,7 +66,12 @@ double occurrence = model.getOccurrence(species); double density = model.getDensity(species); - String stringValue = _("coser.ui.selection.occurrencedensityrenderer", species, occurrence, density); + + String speciesText = (String)species; + if (reftaxSpecies.containsKey(species)) { + speciesText = reftaxSpecies.get(species); + } + String stringValue = _("coser.ui.selection.occurrencedensityrenderer", speciesText, occurrence, density); return super.getListCellRendererComponent(list, stringValue, index, isSelected, cellHasFocus); }
participants (1)
-
echatellier@users.forge.codelutin.com