r455 - in trunk/tutti-ui-swing/src/main: java/fr/ifremer/tutti/ui/swing java/fr/ifremer/tutti/ui/swing/content/operation java/fr/ifremer/tutti/ui/swing/content/operation/catches/species java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split java/fr/ifremer/tutti/ui/swing/content/protocol resources/i18n
Author: kmorin Date: 2013-02-22 18:47:32 +0100 (Fri, 22 Feb 2013) New Revision: 455 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/455 Log: - refs #2041: [Protocole] - Esp?\195?\168ces - Import des esp?\195?\168ces - refs #2042 [PROTOCOLE] - Esp?\195?\168ces - Ajout des esp?\195?\168ces sur un protocole - refs #2043: [CAPTURES] - Esp?\195?\168ces - S?\195?\169lection d'une esp?\195?\168ce pour la cr?\195?\169ation du lot - set the tooltip of the trawl distance field on the textfield of the editor (fix it when we use next jaxx release) - debug fishing operation caracteristics tab modification state after save Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SelectOtherSpeciesAction.java Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SelectSpeciesUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/AddSpeciesProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/RemoveSpeciesProtocolAction.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiAction.java 2013-02-22 14:39:37 UTC (rev 454) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiAction.java 2013-02-22 17:47:32 UTC (rev 455) @@ -85,8 +85,10 @@ this.handler = handler; this.hideBody = hideBody; - putValue(SMALL_ICON, SwingUtil.createActionIcon(icon)); - putValue(LARGE_ICON_KEY, SwingUtil.createActionIcon(icon)); + if (icon != null) { + putValue(SMALL_ICON, SwingUtil.createActionIcon(icon)); + putValue(LARGE_ICON_KEY, SwingUtil.createActionIcon(icon)); + } putValue(ACTION_COMMAND_KEY, name); putValue(NAME, text); putValue(SHORT_DESCRIPTION, tip); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-02-22 14:39:37 UTC (rev 454) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-02-22 17:47:32 UTC (rev 455) @@ -419,7 +419,7 @@ useFloat: false; numberPattern: {INT_6_DIGITS_PATTERN}; enabled: {!model.isFishingOperationRectiligne()}; - toolTipText: {_("tutti.tooltip.distanceInMilles", TuttiUIUtil.getDistanceInMilles(model.getTrawlDistance()))}; + toolTipText: {model.getTrawlDistance() != null ? _("tutti.tooltip.distanceInMilles", TuttiUIUtil.getDistanceInMilles(model.getTrawlDistance())) : null}; } #durationLabel { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-02-22 14:39:37 UTC (rev 454) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-02-22 17:47:32 UTC (rev 455) @@ -355,6 +355,17 @@ } }); } + + // FIXME kmorin 20130222 remove this when we use jaxx 2.5.11 + model.addPropertyChangeListener(EditFishingOperationUIModel.PROPERTY_TRAWL_DISTANCE, new PropertyChangeListener() { + + public void propertyChange(PropertyChangeEvent evt) { + String tooltip = model.getTrawlDistance() != null ? + _("tutti.tooltip.distanceInMilles", TuttiUIUtil.getDistanceInMilles(model.getTrawlDistance())) : + null; + ui.getTrawlDistanceField().getTextField().setToolTipText(tooltip); + } + }); } @Override Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java 2013-02-22 14:39:37 UTC (rev 454) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SaveFishingOperationAction.java 2013-02-22 17:47:32 UTC (rev 455) @@ -134,6 +134,7 @@ } else if (modelClass.isAssignableFrom(HydrologyTabUIModel.class)) { toSave.setHydrologyCaracteristics(caracteristics); } + subModel.setModify(false); } sendMessage( @@ -154,17 +155,6 @@ handler.getParentUi().getTabPane().setSelectedIndex(1); } -// if (event.getSource() != null) { -// Class<?> sourceClass = event.getSource().getClass(); -// if (sourceClass.isAssignableFrom(EditFishingOperationUIHandler.class)) { -// int newIndex = event.getID(); -// parentHandler.getTabPanel().setSelectedIndex(newIndex); -// -// } else if (sourceClass.isAssignableFrom(TuttiScreen.class)) { -// TuttiScreen nextScreen = (TuttiScreen) event.getSource(); -// getContext().setScreen(nextScreen); -// } -// } } protected void saveFishingOperation(FishingOperation toSave) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SelectSpeciesUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SelectSpeciesUIHandler.java 2013-02-22 14:39:37 UTC (rev 454) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SelectSpeciesUIHandler.java 2013-02-22 17:47:32 UTC (rev 455) @@ -29,6 +29,8 @@ import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.TuttiUI; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -58,6 +60,14 @@ initBeanComboBox(ui.getSpeciesCombo(), Lists.<Species>newArrayList(), null); + + getModel().addPropertyChangeListener(SelectSpeciesUIModel.PROPERTY_SPECIES, + new PropertyChangeListener() { + + public void propertyChange(PropertyChangeEvent evt) { + ui.getSpeciesCombo().getHandler().sortData(); + } + }); } @Override Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java 2013-02-22 14:39:37 UTC (rev 454) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java 2013-02-22 17:47:32 UTC (rev 455) @@ -257,15 +257,15 @@ if (species == null) { - // no species, can not edit + // no species, can not edit result = false; } else { // Is protocol authorize it ? - result = speciesSampleCategories.containsEntry( - species, - samplePropertyName.getSampleCategoryType()); + result = !speciesSampleCategories.containsKey(species) + || speciesSampleCategories.containsEntry(species, + samplePropertyName.getSampleCategoryType()); if (result) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-02-22 14:39:37 UTC (rev 454) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-02-22 17:47:32 UTC (rev 455) @@ -105,8 +105,8 @@ public static JAXXContextEntryDef<List<Caracteristic>> FREQUENCY_LENGTH_CONTEXT_ENTRY = JAXXUtil.newListContextEntryDef("frequencyLength"); - public static JAXXContextEntryDef<List<Species>> SPECIES_UNIVERSE_CONTEXT_ENTRY = - JAXXUtil.newListContextEntryDef("speciesUniverse"); + public static JAXXContextEntryDef<List<Species>> SPECIES_REFERENT_CONTEXT_ENTRY = + JAXXUtil.newListContextEntryDef("speciesReferent"); public static final Set<String> SAMPLING_PROPERTIES = Sets.newHashSet( SpeciesBatchRowModel.PROPERTY_SAMPLE_CATEGORY, @@ -419,9 +419,11 @@ persistenceService.getAllCaracteristic()); } - List<Species> speciesList = persistenceService.getAllSpecies(protocol); + // use only the referent here, if the user needs a synonym, he will + // click on the button to select another species + List<Species> speciesList = persistenceService.getAllReferentSpecies(); - SPECIES_UNIVERSE_CONTEXT_ENTRY.setContextValue(ui, speciesList); + SPECIES_REFERENT_CONTEXT_ENTRY.setContextValue(ui, speciesList); FREQUENCY_LENGTH_CONTEXT_ENTRY.setContextValue(ui, lengthCaracterics); } @@ -436,15 +438,14 @@ List<SampleCategoryType> samplingOrder; - List<Species> speciesUniverse = - SPECIES_UNIVERSE_CONTEXT_ENTRY.getContextValue(ui); + List<Species> speciesUniverse = + SPECIES_REFERENT_CONTEXT_ENTRY.getContextValue(ui); List<Species> allSpecies; Multimap<Species, SampleCategoryType> speciesSampleCategories = HashMultimap.create(); - boolean protocolFilled = context.isProtocolFilled(); if (protocolFilled) { @@ -462,36 +463,28 @@ SampleCategoryType.sex, SampleCategoryType.maturity, SampleCategoryType.age); - + // fill available species from protocol allSpecies = Lists.newArrayList(); if (!protocol.isSpeciesEmpty()) { - // split by referenceTaxonId - Multimap<String, Species> map = TuttiEntities.splitByReferenceTaxonId(speciesUniverse); + // split by taxonId + Map<String, Species> map = TuttiEntities.splitByTaxonId(speciesUniverse); for (SpeciesProtocol protocolSpecy : protocol.getSpecies()) { - - // referenceTaxonId - String referenceTaxonId = String.valueOf(protocolSpecy.getSpeciesReferenceTaxonId()); - - // all synonyms - Collection<Species> synonyms = map.get(referenceTaxonId); - allSpecies.addAll(synonyms); - // TODO 20130218 kmorin: check with tchemit if we should not - // check that the species has the category in the protocol - for (Species species : synonyms) { - speciesSampleCategories.put(species, SampleCategoryType.sortedUnsorted); - speciesSampleCategories.put(species, SampleCategoryType.size); - speciesSampleCategories.put(species, SampleCategoryType.sex); - speciesSampleCategories.put(species, SampleCategoryType.maturity); - speciesSampleCategories.put(species, SampleCategoryType.age); - } + String taxonId = String.valueOf(protocolSpecy.getSpeciesReferenceTaxonId()); + Species species = map.get(taxonId); + allSpecies.add(species); + + speciesSampleCategories.put(species, SampleCategoryType.sortedUnsorted); + speciesSampleCategories.put(species, SampleCategoryType.size); + speciesSampleCategories.put(species, SampleCategoryType.sex); + speciesSampleCategories.put(species, SampleCategoryType.maturity); + speciesSampleCategories.put(species, SampleCategoryType.age); } - //TODO 20130218 kmorin: check with Vincent what to allow on the - // other species which are not in the protocol } + } else { // no protocol, use default values @@ -635,7 +628,7 @@ table.setModel(tableModel); table.setColumnModel(columnModel); - + Color toConfirmColor = getConfig().getColorRowToConfirm(); // paint the cell in orange if the row is to confirm Highlighter attachmentHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( @@ -681,7 +674,7 @@ getTable().setRowFilter(filter); } }); - + } @Override Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesAction.java 2013-02-22 14:39:37 UTC (rev 454) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesAction.java 2013-02-22 17:47:32 UTC (rev 455) @@ -27,6 +27,7 @@ import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.TuttiPersistence; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; @@ -35,6 +36,7 @@ import java.awt.event.ActionEvent; import java.util.List; +import java.util.Map; import static org.nuiton.i18n.I18n._; @@ -52,28 +54,30 @@ private static final Log log = LogFactory.getLog(AddSpeciesAction.class); protected List<Species> allSpecies; + + protected List<Species> referentSpecies; protected Species selectedSpecies; public AddSpeciesAction(CreateSpeciesBatchUIHandler handler) { super(handler, "addSpecies", - "add", null, + _("tutti.action.addSpecies.text"), _("tutti.action.addSpecies.tip"), false ); TuttiPersistence persistenceService = getContext().getService(PersistenceService.class); allSpecies = persistenceService.getAllSpecies(); + referentSpecies = persistenceService.getAllReferentSpecies(); } @Override protected boolean prepareAction(ActionEvent event) { boolean result = super.prepareAction(event); - CreateSpeciesBatchUIHandler handler = getHandler(); - List<Species> availableSpecies = handler.getModel().getAvailableSpecies(); + List<Species> availableSpecies = getModel().getAvailableSpecies(); List<Species> species = Lists.newArrayList(allSpecies); species.removeAll(availableSpecies); @@ -85,11 +89,19 @@ @Override protected void doAction(ActionEvent event) { - CreateSpeciesBatchUIHandler handler = getHandler(); - CreateSpeciesBatchUIModel model = handler.getModel(); + CreateSpeciesBatchUIModel model = getModel(); + if (!selectedSpecies.isReferenceTaxon()) { + List<Species> referents = referentSpecies; + Map<String, Species> referentsById = TuttiEntities.splitByTaxonId(referents); + String taxonId = String.valueOf(selectedSpecies.getReferenceTaxonId()); + selectedSpecies = referentsById.get(taxonId); + } + List<Species> availableSpecies = Lists.newArrayList(model.getAvailableSpecies()); - availableSpecies.add(selectedSpecies); + if (!availableSpecies.contains(selectedSpecies)) { + availableSpecies.add(selectedSpecies); + } model.setAvailableSpecies(availableSpecies); model.setSpecies(selectedSpecies); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java 2013-02-22 14:39:37 UTC (rev 454) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java 2013-02-22 17:47:32 UTC (rev 455) @@ -27,6 +27,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Multimap; import fr.ifremer.tutti.persistence.TuttiPersistence; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; @@ -49,6 +50,9 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; +import java.util.Map; +import jaxx.runtime.JAXXUtil; +import jaxx.runtime.context.JAXXContextEntryDef; /** * Handler of {@link CreateSpeciesBatchUI}. @@ -90,7 +94,6 @@ @Override public void beforeInitUI() { - CreateSpeciesBatchUIModel model = new CreateSpeciesBatchUIModel(); ui.setContextValue(model); listModelIsModify(model); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/AddSpeciesProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/AddSpeciesProtocolAction.java 2013-02-22 14:39:37 UTC (rev 454) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/AddSpeciesProtocolAction.java 2013-02-22 17:47:32 UTC (rev 455) @@ -57,7 +57,6 @@ @Override protected void doAction(ActionEvent event) { - EditProtocolUI ui = getUI(); EditProtocolUIHandler handler = getHandler(); @@ -65,31 +64,29 @@ EditProtocolSpeciesTableModel tableModel = handler.getTableModel(); Species species = (Species) ui.getSpeciesComboBox().getSelectedItem(); Preconditions.checkNotNull( - species, "Cant add a speciesProtocol with a null species"); + species, "Can't add a speciesProtocol with a null species"); + Preconditions.checkArgument(species.isReferenceTaxon(), + "Can't add a speciesProtocol with a not referent species"); - Integer taxonId = species.getReferenceTaxonId(); - - // get referent species String taxonIdStr = String.valueOf(taxonId); - Species referentSpecies = - getModel().getAllReferentSpeciesByTaxonId().get(taxonIdStr); - // remove all synonyms of this taxon Collection<Species> allSynonyms = getModel().getAllSynonyms(taxonIdStr); - ui.getSpeciesComboBox().getData().removeAll(allSynonyms); + getModel().getAllSynonyms().removeAll(allSynonyms); + + ui.getSpeciesComboBox().getData().remove(species); ui.getSpeciesComboBox().getHandler().sortData(); handler.selectFirstInCombo(ui.getSpeciesComboBox()); // add new row to model (do it after combo stuff for ui best display) EditProtocolSpeciesRowModel protocol = tableModel.createNewRow(); - protocol.setSpecies(referentSpecies); + protocol.setSpecies(species); tableModel.addNewRow(protocol); getModel().setModify(true); - String speciesStr = getDecorator(Species.class, DecoratorService.SPECIES_BY_CRUISE_CODE).toString(referentSpecies); + String speciesStr = getDecorator(Species.class, DecoratorService.SPECIES_BY_CRUISE_CODE).toString(species); sendMessage(_("tutti.flash.information.species.add.to.protocol", speciesStr)); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css 2013-02-22 14:39:37 UTC (rev 454) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css 2013-02-22 17:47:32 UTC (rev 455) @@ -75,6 +75,10 @@ enabled: {!speciesComboBox.isEmpty()}; } +#selectOtherSpecies { + _tuttiAction: {SelectOtherSpeciesAction.class}; +} + #addSpeciesProtocol { _tuttiAction: {AddSpeciesProtocolAction.class}; enabled: {speciesComboBox.getSelectedItem() != null}; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx 2013-02-22 14:39:37 UTC (rev 454) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx 2013-02-22 17:47:32 UTC (rev 455) @@ -150,11 +150,14 @@ genericType='Species'/> </cell> <cell fill='both'> + <JButton id='selectOtherSpecies'/> + </cell> + <cell fill='both'> <JButton id='addSpeciesProtocol'/> </cell> </row> <row fill='both' weighty='1'> - <cell fill='both' columns='2'> + <cell fill='both' columns='3'> <JScrollPane> <JXTable id='speciesTable' onMouseClicked='handler.autoSelectRowInTable(event, tablePopup)'/> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-02-22 14:39:37 UTC (rev 454) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-02-22 17:47:32 UTC (rev 455) @@ -37,8 +37,11 @@ import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.TuttiUI; import fr.ifremer.tutti.ui.swing.content.home.ImportProtocolAction; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SelectSpeciesUI; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SelectSpeciesUIModel; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; +import java.awt.Dimension; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.editor.bean.BeanDoubleList; import jaxx.runtime.swing.editor.bean.BeanDoubleListModel; @@ -76,6 +79,8 @@ private static final Log log = LogFactory.getLog(EditProtocolUIHandler.class); + protected SelectSpeciesUI dialog; + public EditProtocolUIHandler(TuttiUI parentUi, EditProtocolUI ui) { super(parentUi.getHandler().getContext(), ui); } @@ -151,8 +156,8 @@ List<Species> allSpecies = Lists.newArrayList(persistenceService.getAllSpecies()); model.setAllSpecies(allSpecies); - Multimap<String, Species> allSpeciesByTaxonId = Multimaps.index(allSpecies, - TuttiEntities.GET_TAXON_ID); + Multimap<String, Species> allSpeciesByTaxonId = + TuttiEntities.splitByReferenceTaxonId(allSpecies); model.setAllSpeciesByTaxonId(allSpeciesByTaxonId); Map<String, Species> allReferentSpeciesByTaxonId = TuttiEntities.splitByTaxonId( @@ -269,8 +274,12 @@ initTable(table); - List<Species> speciesList = Lists.newArrayList(model.getAllSpecies()); + Collection<Species> referents = + model.getAllReferentSpeciesByTaxonId().values(); + List<Species> speciesList = Lists.newArrayList(referents); + initBeanComboBox(ui.getSpeciesComboBox(), speciesList, null); + List<EditProtocolSpeciesRowModel> rows; // build speciesProtocol rows @@ -278,7 +287,7 @@ rows = Lists.newArrayList(); } else { - rows = toRows(speciesList, protocol.getSpecies()); + rows = toRows(protocol.getSpecies()); if (log.isDebugEnabled()) { log.debug("Will edit protocol with " + @@ -289,7 +298,6 @@ // set to model ( will propagate to tableModel) model.setRows(rows); - initBeanComboBox(ui.getSpeciesComboBox(), speciesList, null); selectFirstInCombo(ui.getSpeciesComboBox()); initDoubleList(EditProtocolUIModel.PROPERTY_LENGTH_CLASSES_PMFM_ID, @@ -314,11 +322,12 @@ // if new protocol can already cancel his creation model.setModify(model.isCreate()); + + dialog = new SelectSpeciesUI(ui); } - public List<EditProtocolSpeciesRowModel> toRows(List<Species> speciesList, - List<SpeciesProtocol> speciesProtocols) { - + public List<EditProtocolSpeciesRowModel> toRows(List<SpeciesProtocol> speciesProtocols) { + List<Species> speciesList = ui.getSpeciesComboBox().getData(); Preconditions.checkNotNull(speciesList); EditProtocolUIModel model = getModel(); @@ -332,14 +341,16 @@ Integer taxonId = speciesProtocol.getSpeciesReferenceTaxonId(); String taxonIdStr = String.valueOf(taxonId); - // remove all synonyms from available species list + // remove all synonyms from available synonym list Collection<Species> allSynonyms = model.getAllSynonyms(taxonIdStr); - speciesList.removeAll(allSynonyms); + model.getAllSynonyms().removeAll(allSynonyms); - EditProtocolSpeciesRowModel row = getTableModel().createNewRow(); - // get species referent taxon Species species = allReferentSpeciesByTaxonId.get(taxonIdStr); + // remove it from the combo box + speciesList.remove(species); + + EditProtocolSpeciesRowModel row = getTableModel().createNewRow(); row.setSpecies(species); row.setLengthStepPmfm(allCaracteristic.get(speciesProtocol.getLengthStepPmfmId())); row.fromBean(speciesProtocol); @@ -431,6 +442,16 @@ model.removePropertyChangeListener(id, updateListener); } + public Species openSelectOtherSpeciesDialog(String title, List<Species> species) { + SelectSpeciesUIModel model = dialog.getModel(); + model.setSpecies(species); + model.setSelectedSpecies(null); + + openDialog(ui, dialog, title, new Dimension(400, 130)); + + return model.getSelectedSpecies(); + } + //------------------------------------------------------------------------// //-- Internal methods --// //------------------------------------------------------------------------// Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java 2013-02-22 14:39:37 UTC (rev 454) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java 2013-02-22 17:47:32 UTC (rev 455) @@ -24,6 +24,7 @@ * #L% */ +import com.google.common.collect.Lists; import com.google.common.collect.Multimap; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; @@ -97,7 +98,9 @@ protected boolean removeSpeciesEnabled; protected List<Species> allSpecies; - + + protected List<Species> allSynonyms; + protected Multimap<String, Species> allSpeciesByTaxonId; protected Map<String, Species> allReferentSpeciesByTaxonId; @@ -243,12 +246,16 @@ public void setAllSpecies(List<Species> allSpecies) { this.allSpecies = allSpecies; + if (allReferentSpeciesByTaxonId != null && allSpecies != null) { + allSynonyms = Lists.newArrayList(allSpecies); + allSynonyms.removeAll(allReferentSpeciesByTaxonId.values()); + } } public Multimap<String, Species> getAllSpeciesByTaxonId() { return allSpeciesByTaxonId; } - + public Collection<Species> getAllSynonyms(String taxonId) { return allSpeciesByTaxonId.get(taxonId); } @@ -257,12 +264,20 @@ this.allSpeciesByTaxonId = allSpeciesByTaxonId; } + public List<Species> getAllSynonyms() { + return allSynonyms; + } + public Map<String, Species> getAllReferentSpeciesByTaxonId() { return allReferentSpeciesByTaxonId; } public void setAllReferentSpeciesByTaxonId(Map<String, Species> allReferentSpeciesByTaxonId) { this.allReferentSpeciesByTaxonId = allReferentSpeciesByTaxonId; + if (allReferentSpeciesByTaxonId != null && allSpecies != null) { + allSynonyms = Lists.newArrayList(allSpecies); + allSynonyms.removeAll(allReferentSpeciesByTaxonId.values()); + } } public List<Caracteristic> getCaracteristics() { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java 2013-02-22 14:39:37 UTC (rev 454) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java 2013-02-22 17:47:32 UTC (rev 455) @@ -116,8 +116,7 @@ // build rows from imported+merged protocol // (will also remove all synonyms of species referent used) List<EditProtocolSpeciesRowModel> rows = - handler.toRows(speciesComboBox.getData(), - protocol.getSpecies()); + handler.toRows(protocol.getSpecies()); // update species comboBox speciesComboBox.getHandler().sortData(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/RemoveSpeciesProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/RemoveSpeciesProtocolAction.java 2013-02-22 14:39:37 UTC (rev 454) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/RemoveSpeciesProtocolAction.java 2013-02-22 17:47:32 UTC (rev 455) @@ -25,12 +25,17 @@ */ import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; import java.awt.event.ActionEvent; import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import jaxx.runtime.swing.editor.bean.BeanComboBox; import static org.nuiton.i18n.I18n._; @@ -63,16 +68,37 @@ Preconditions.checkState(rowIndex != -1, "Cant remove species if no species selected"); - EditProtocolSpeciesTableModel tableModel = getHandler().getTableModel(); + EditProtocolSpeciesTableModel tableModel = handler.getTableModel(); EditProtocolSpeciesRowModel selectedRow = tableModel.getEntry(rowIndex); // re-add all synonym of this taxon to the species comobox - Integer taxonId = selectedRow.getSpecies().getReferenceTaxonId(); - Collection<Species> allSynonyms = getModel().getAllSynonyms(String.valueOf(taxonId)); - getUI().getSpeciesComboBox().getData().addAll(allSynonyms); - getUI().getSpeciesComboBox().getHandler().sortData(); + Species species = selectedRow.getSpecies(); + BeanComboBox<Species> combo = getUI().getSpeciesComboBox(); + combo.getData().add(species); + combo.getHandler().sortData(); + + EditProtocolUIModel model = getModel(); + Integer taxonId = species.getReferenceTaxonId(); + List<Species> allSynonyms = Lists.newArrayList( + model.getAllSynonyms(String.valueOf(taxonId))); + allSynonyms.remove(species); + model.getAllSynonyms().addAll(allSynonyms); + // reorder the list by name, otherwise, + // all the species without a reftax code will be at the end + Collections.sort(model.getAllSynonyms(), new Comparator<Species>() { + public int compare(Species o1, Species o2) { + if (o1 == null) { + return -1; + } + if (o2 == null) { + return 1; + } + return o1.getName().compareTo(o2.getName()); + } + + }); // remove the row from the model(do it after treating the comboBox which can be long) tableModel.removeRow(rowIndex); Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SelectOtherSpeciesAction.java (from rev 453, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesAction.java) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SelectOtherSpeciesAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SelectOtherSpeciesAction.java 2013-02-22 17:47:32 UTC (rev 455) @@ -0,0 +1,61 @@ + +package fr.ifremer.tutti.ui.swing.content.protocol; + +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.split.*; +import java.awt.event.ActionEvent; +import java.util.Collection; +import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import static org.nuiton.i18n.I18n._; + +/** + * Action to select a species which is not in the referent list. + * + * @author kmorin <kmorin@codelutin.com> + * @since 1.1 + */ +public class SelectOtherSpeciesAction extends AbstractTuttiAction<EditProtocolUIModel, EditProtocolUI, EditProtocolUIHandler> { + + private static final long serialVersionUID = 1L; + + /** Logger. */ + private static final Log log = LogFactory.getLog(AddSpeciesAction.class); + + protected Species selectedSpecies; + + public SelectOtherSpeciesAction(EditProtocolUIHandler handler) { + super(handler, + "selectOtherSpecies", + null, + _("tutti.action.selectOtherSpecies.text"), + _("tutti.action.selectOtherSpecies.tip"), + false + ); + } + + @Override + protected boolean prepareAction(ActionEvent event) { + boolean result = super.prepareAction(event); + EditProtocolUIModel model = getModel(); + + List<Species> species = Lists.newArrayList(model.getAllSynonyms()); + + selectedSpecies = getHandler().openSelectOtherSpeciesDialog( + _("tutti.title.selectSpecies"), species); + + result &= selectedSpecies != null; + return result; + } + + @Override + protected void doAction(ActionEvent event) { + String taxonId = String.valueOf(selectedSpecies.getReferenceTaxonId()); + selectedSpecies = getModel().getAllReferentSpeciesByTaxonId().get(taxonId); + getUI().getSpeciesComboBox().setSelectedItem(selectedSpecies); + } + +} Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-02-22 14:39:37 UTC (rev 454) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-02-22 17:47:32 UTC (rev 455) @@ -2,7 +2,8 @@ tutti.about.message=<h3>Tutti</h3><p><strong>Outil de saisie de données d'opérations et de captures au cours des campagnes halieutiques.</strong></p><br/><p>Ce logiciel permettra la saisie en mer des données d'opération de pêche (positions, environnement, engin, etc) et des captures associées (composition de la capture en espèces scientifiques avec poids, nombres, tailles etc) pour l'ensemble des campagnes halieutiques réalisées par l'Ifremer.</p><p>Ce projet a été initiée en 2012 par l'<a href\="http\://www.ifremer.fr">Ifremer</a> et réalisé par la société <a href\="http\://codelutin.com">Codelutin</a>.</p><hr/><br/><p>Pour plus d'informations, vous pouvez visiter le <a href\="http\://maven-site.forge.codelutin.com/tutti">site du projet</a>.</p><p>Projet hébergé sur la forge <a href\="http\://forge.codelutin.com/projects/tutti">Forge.codelutin.com</a>.</p> tutti.action.about=À propos tutti.action.about.tip=À Propos -tutti.action.addSpecies.tip=Ajouter une espèce +tutti.action.addSpecies.text=... +tutti.action.addSpecies.tip=Sélectionner une autre espèce tutti.action.addSpeciesProtocol.tip=Ajouter une espèce au protocole tutti.action.attachments=Pièces jointes (%s) tutti.action.attachments.tip=Pièces jointes @@ -146,6 +147,8 @@ tutti.action.saveProtocol.tip=Enregistrer le protocol tutti.action.selectCruise=Sélectionner une campagne tutti.action.selectCruise.tip=Sélectionner la campagne à utiliser +tutti.action.selectOtherSpecies.text=... +tutti.action.selectOtherSpecies.tip=Sélectionner une autre espèce tutti.action.site=Site tutti.action.site.tip=Accéder au site du projet Tutti tutti.action.splitSpeciesBatch=Catégoriser le lot
participants (1)
-
kmorin@users.forge.codelutin.com