Author: chatellier Date: 2010-11-22 20:02:32 +0000 (Mon, 22 Nov 2010) New Revision: 250 Log: Add species with size all year list model Added: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/model/SizeAllYearSpecyListModel.java Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.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 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 2010-11-22 20:01:51 UTC (rev 249) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-11-22 20:02:32 UTC (rev 250) @@ -1355,7 +1355,54 @@ List<String> result = new ArrayList<String>(years); return result; } + + /** + * Touve toutes les especes qui ont des tailles pour toutes les années. + * + * @param selection selection to search into + * @return year list + */ + public Collection<String> getSpeciesWithSizeAllYears(Selection selection) { + // get all years as set + SortedSet<String> years = new TreeSet<String>(); + Iterator<String[]> itTuple = selection.getHaul().iterator(); + itTuple.next(); // header + while (itTuple.hasNext()) { + String[] tuple = itTuple.next(); + String year = tuple[Haul.INDEX_YEAR]; + years.add(year); + } + + // get all species with years + Map<String, Set<String>> yearsForSpecies = new HashMap<String, Set<String>>(); + Iterator<String[]> itLength = selection.getLength().iterator(); + itLength.next(); // skip header + while (itLength.hasNext()) { + String[] tupleLength = itLength.next(); + String species = tupleLength[Length.INDEX_SPECIES]; + String annee = tupleLength[Length.INDEX_YEAR]; + + Set<String> speciesYears = yearsForSpecies.get(species); + if (speciesYears == null) { + speciesYears = new HashSet<String>(); + yearsForSpecies.put(species, speciesYears); + } + speciesYears.add(annee); + } + + // on retire toutes les especes qui n'ont pas des années + // completes + List<String> completeSpecies = new ArrayList<String>(); + for (Map.Entry<String, Set<String>> yearForSpeciesEntry : yearsForSpecies.entrySet()) { + if (yearForSpeciesEntry.getValue().equals(years)) { + completeSpecies.add(yearForSpeciesEntry.getKey()); + } + } + + return completeSpecies; + } + /** * Get species name in project. * 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 2010-11-22 20:01:51 UTC (rev 249) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2010-11-22 20:02:32 UTC (rev 250) @@ -111,6 +111,7 @@ ProjectService projectService = view.getContextValue(ProjectService.class); MatrixND occurrence = projectService.getOccurrence(project, selection); MatrixND density = projectService.getDensity(project, selection); + Collection<String> speciesAllYear = projectService.getSpeciesWithSizeAllYears(selection); //MatrixND samplingEffort = projectService.getSamplingEffort(project, selection); // set matrix on list model @@ -121,10 +122,10 @@ selectionListsView.getSelectionAllSpeciesListModel().setSpecies(selectionSpecyList); // select all list (not to do for reload) + // init allSize and maturity before (select all with updateOccurrenceDensityFilter) ((CoserListSelectionModel)selectionListsView.getSelectionAllSpeciesList().getSelectionModel()).fillSelection(); + selectionListsView.getSelectionSizeAllYearListModel().setSizeAllYearSpecies(speciesAllYear); updateOccurrenceDensityFilter(selectionListsView); - ((CoserListSelectionModel)selectionListsView.getSelectionSizeAllYearList().getSelectionModel()).fillSelection(); - ((CoserListSelectionModel)selectionListsView.getSelectionMaturityList().getSelectionModel()).fillSelection(); } } } @@ -438,6 +439,10 @@ // application de la nouvelle selection ((CoserListSelectionModel)view.getSelectionOccurrenceDensityList().getSelectionModel()).setSelectedObjects(filteredSpecies); + + // selectionne automatiquement les listes L3 & L4 + ((CoserListSelectionModel)view.getSelectionSizeAllYearList().getSelectionModel()).fillSelection(); + ((CoserListSelectionModel)view.getSelectionMaturityList().getSelectionModel()).fillSelection(); } catch (NumberFormatException ex) { if (log.isWarnEnabled()) { 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 2010-11-22 20:01:51 UTC (rev 249) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx 2010-11-22 20:02:32 UTC (rev 250) @@ -108,7 +108,7 @@ </cell> <cell weightx="1" fill="both" columns="2"> <JScrollPane> - <SpecyListModel id="selectionSizeAllYearListModel" /> + <SizeAllYearSpecyListModel id="selectionSizeAllYearListModel" /> <JList id="selectionSizeAllYearList" model="{selectionSizeAllYearListModel}" selectionModel="{new CoserListSelectionModel(selectionSizeAllYearList.getSelectionModel(), selectionSizeAllYearListModel)}"/> </JScrollPane> Added: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/model/SizeAllYearSpecyListModel.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/model/SizeAllYearSpecyListModel.java (rev 0) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/model/SizeAllYearSpecyListModel.java 2010-11-22 20:02:32 UTC (rev 250) @@ -0,0 +1,121 @@ +/* + * #%L + * Coser :: UI + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2010 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 + * 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% + */ + +package fr.ifremer.coser.ui.selection.model; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import javax.swing.AbstractListModel; +import javax.swing.JList; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; + +import org.apache.commons.collections.CollectionUtils; + +import fr.ifremer.coser.ui.util.CoserListModel; + +/** + * Specy list model with size all year. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class SizeAllYearSpecyListModel extends AbstractListModel implements ListSelectionListener, CoserListModel { + + /** serialVersionUID. */ + private static final long serialVersionUID = -4769109927915812519L; + + protected List<String> species = new ArrayList<String>(); + + protected Collection<String> sizeAllYearSpecies; + + public List<String> getSpecies() { + return species; + } + + public void setSpecies(List<String> species) { + this.species = new ArrayList<String>(species); + this.species.retainAll(sizeAllYearSpecies); + fireContentsChanged(this, 0, this.species.size()); + } + + public void setSizeAllYearSpecies(Collection<String> sizeAllYearSpecies) { + this.sizeAllYearSpecies = sizeAllYearSpecies; + } + + /* + * @see javax.swing.ListModel#getSize() + */ + @Override + public int getSize() { + int result = 0; + if (species != null) { + result = species.size(); + } + return result; + } + + /* + * @see javax.swing.ListModel#getElementAt(int) + */ + @Override + public Object getElementAt(int index) { + return species.get(index); + } + + + /* + * @see fr.ifremer.coser.ui.util.CoserListModel#indexOf(java.lang.Object) + */ + @Override + public int indexOf(Object o) { + return species.indexOf(o); + } + + /* + * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent) + */ + @Override + public void valueChanged(ListSelectionEvent event) { + + if (!event.getValueIsAdjusting()) { + JList source = (JList)event.getSource(); + Object[] selectedValues = source.getSelectedValues(); + species.clear(); + for (Object selectedValue : selectedValues) { + String specy = (String)selectedValue; + if (sizeAllYearSpecies.contains(specy)) { + species.add(specy); + } + } + fireContentsChanged(this, 0, species.size() - 1); + } + } +} Property changes on: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/model/SizeAllYearSpecyListModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL