Author: tchemit Date: 2013-02-04 01:42:26 +0100 (Mon, 04 Feb 2013) New Revision: 321 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/321 Log: refs #1817: [PROTOCOLE] - Import / Export du protocole (caracteristics + species are ok) refs #1824: [PROTOCOLE] - Gestion des param?\195?\168tres suivis par esp?\195?\168ces (add cruiseCode) Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 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/ExportAllCaracteristicAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolCaracteristicAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.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/SaveProtocolAction.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo =================================================================== (Binary files differ) Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java 2013-02-04 00:40:32 UTC (rev 320) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ExportProtocolAction.java 2013-02-04 00:42:26 UTC (rev 321) @@ -72,7 +72,7 @@ _("tutti.title.choose.protocolExportFile"), _("tutti.action.chooseProtocolFile"), null, - "^.*\\*.tuttiProtocol$", _("tutti.file.protocol") + "^.+\\.tuttiProtocol$", _("tutti.file.protocol") ); boolean doAction = file != null; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java 2013-02-04 00:40:32 UTC (rev 320) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/ImportProtocolAction.java 2013-02-04 00:42:26 UTC (rev 321) @@ -75,7 +75,7 @@ _("tutti.title.choose.protocolImportFile"), _("tutti.action.chooseProtocolFile"), null, - "^.*\\.tuttiProtocol$", _("tutti.file.protocol") + "^.+\\.tuttiProtocol$", _("tutti.file.protocol") ); boolean doAction = file != null; if (doAction) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java 2013-02-04 00:40:32 UTC (rev 320) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java 2013-02-04 00:42:26 UTC (rev 321) @@ -39,7 +39,7 @@ private static final long serialVersionUID = 1L; - public static final String PROPERTY_SPECIES_CRUISE_CODE = "speciesCruiseCode"; + public static final String PROPERTY_CRUISE_CODE = "cruiseCode"; public static final String PROPERTY_SPECIES = "species"; @@ -61,7 +61,7 @@ protected Species species; - protected String speciesCruiseCode; + protected String cruiseCode; protected boolean sizeEnabled; @@ -105,14 +105,14 @@ firePropertyChange(PROPERTY_SPECIES, oldValue, species); } - public String getSpeciesCruiseCode() { - return speciesCruiseCode; + public String getCruiseCode() { + return cruiseCode; } - public void setSpeciesCruiseCode(String speciesCruiseCode) { - Object oldValue = getSpeciesCruiseCode(); - this.speciesCruiseCode = speciesCruiseCode; - firePropertyChange(PROPERTY_SPECIES_CRUISE_CODE, oldValue, speciesCruiseCode); + public void setCruiseCode(String cruiseCode) { + Object oldValue = getCruiseCode(); + this.cruiseCode = cruiseCode; + firePropertyChange(PROPERTY_CRUISE_CODE, oldValue, cruiseCode); } public boolean isSizeEnabled() { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2013-02-04 00:40:32 UTC (rev 320) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2013-02-04 00:42:26 UTC (rev 321) @@ -40,47 +40,53 @@ public static final ColumnIdentifier<EditProtocolSpeciesRowModel> SPECIES_ID = ColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_SPECIES, n_("tutti.table.protocol.species.header.speciesId"), - n_("tutti.table.protocol.species.header.speciesId")); + n_("tutti.table.protocol.species.header.speciesId.tip")); + public static final ColumnIdentifier<EditProtocolSpeciesRowModel> CRUISE_CODE_ID = ColumnIdentifier.newId( + EditProtocolSpeciesRowModel.PROPERTY_CRUISE_CODE, + n_("tutti.table.protocol.species.header.cruiseCode"), + n_("tutti.table.protocol.species.header.cruiseCode.tip")); + + public static final ColumnIdentifier<EditProtocolSpeciesRowModel> SIZE_ENABLED = ColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_SIZE_ENABLED, n_("tutti.table.protocol.species.header.size"), - n_("tutti.table.protocol.species.header.size")); + n_("tutti.table.protocol.species.header.size.tip")); public static final ColumnIdentifier<EditProtocolSpeciesRowModel> SEX_ENABLED = ColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_SEX_ENABLED, n_("tutti.table.protocol.species.header.sex"), - n_("tutti.table.protocol.species.header.sex")); + n_("tutti.table.protocol.species.header.sex.tip")); public static final ColumnIdentifier<EditProtocolSpeciesRowModel> MATURITY_ENABLED = ColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_MATURITY_ENABLED, n_("tutti.table.protocol.species.header.maturity"), - n_("tutti.table.protocol.species.header.maturity")); + n_("tutti.table.protocol.species.header.maturity.tip")); public static final ColumnIdentifier<EditProtocolSpeciesRowModel> AGE_ENABLED = ColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_AGE_ENABLED, n_("tutti.table.protocol.species.header.age"), - n_("tutti.table.protocol.species.header.age")); + n_("tutti.table.protocol.species.header.age.tip")); - public static final ColumnIdentifier<EditProtocolSpeciesRowModel> SIZE_FRENQUENCY_PMFM_ID = ColumnIdentifier.newId( + public static final ColumnIdentifier<EditProtocolSpeciesRowModel> LENGTH_STEP_PMFM_ID = ColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_LENGTH_STEP_PMFM, n_("tutti.table.protocol.species.header.lengthStep"), - n_("tutti.table.protocol.species.header.lengthStep")); + n_("tutti.table.protocol.species.header.lengthStep.tip")); public static final ColumnIdentifier<EditProtocolSpeciesRowModel> WEIGHT_ENABLED = ColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_WEIGHT_ENABLED, n_("tutti.table.protocol.species.header.weight"), - n_("tutti.table.protocol.species.header.weight")); + n_("tutti.table.protocol.species.header.weight.tip")); public static final ColumnIdentifier<EditProtocolSpeciesRowModel> COUNT_IF_NO_FREQUENCY_ENABLED = ColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_COUNT_IF_NO_FREQUENCY_ENABLED, n_("tutti.table.protocol.species.header.countIfNoFrequency"), - n_("tutti.table.protocol.species.header.countIfNoFrequency")); + n_("tutti.table.protocol.species.header.countIfNoFrequency.tip")); public static final ColumnIdentifier<EditProtocolSpeciesRowModel> CALCIFY_SAMPLE_ENABLED = ColumnIdentifier.newId( EditProtocolSpeciesRowModel.PROPERTY_CALCIFY_SAMPLE_ENABLED, n_("tutti.table.protocol.species.header.calcifySample"), - n_("tutti.table.protocol.species.header.calcifySample")); + n_("tutti.table.protocol.species.header.calcifySample.tip")); private static final long serialVersionUID = 1L; 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-04 00:40:32 UTC (rev 320) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-02-04 00:42:26 UTC (rev 321) @@ -38,16 +38,27 @@ import fr.ifremer.tutti.ui.swing.content.home.ImportProtocolAction; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; +import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; +import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.editor.bean.BeanDoubleList; +import jaxx.runtime.swing.editor.bean.BeanDoubleListModel; +import jaxx.runtime.swing.editor.bean.BeanUIUtil; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.autocomplete.ComboBoxCellEditor; +import org.jdesktop.swingx.autocomplete.ObjectToStringConverter; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; +import org.nuiton.util.decorator.Decorator; +import javax.swing.JComboBox; import javax.swing.JOptionPane; +import javax.swing.table.TableColumnModel; import java.awt.event.ActionEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.List; import java.util.Map; @@ -71,9 +82,9 @@ protected Map<String, Species> allSpecies; - protected Map<String, Caracteristic> allLengthStepPmfm; + protected List<Caracteristic> caracteristics; - protected List<Caracteristic> allCaracteristic; + protected Map<String, Caracteristic> allCaracteristic; // protected Multimap<String, String> hydroCaracteristics; @@ -162,20 +173,16 @@ listModelIsModify(model); ui.setContextValue(model); - allSpecies = TuttiEntities.splitById( - persistenceService.getAllSpecies()); + allSpecies = TuttiEntities.splitById(persistenceService.getAllSpecies()); List<String> protocolNames = persistenceService.getAllProtocolNames(); model.setProtocolNames(protocolNames); - allLengthStepPmfm = TuttiEntities.splitById( - persistenceService.getAllCaracteristic()); - - allCaracteristic = persistenceService.getAllCaracteristic(); - + caracteristics = persistenceService.getAllCaracteristic(); + allCaracteristic = TuttiEntities.splitById(caracteristics); } - public List<Caracteristic> getAllCaracteristic() { + public Map<String, Caracteristic> getAllCaracteristic() { return allCaracteristic; } @@ -183,10 +190,6 @@ return allSpecies; } - public Map<String, Caracteristic> getAllLengthStepPmfm() { - return allLengthStepPmfm; - } - @Override public void afterInitUI() { @@ -256,11 +259,13 @@ newTableCellRender(Species.class), EditProtocolSpeciesTableModel.SPECIES_ID); - addComboDataColumnToModel(columnModel, - EditProtocolSpeciesTableModel.SIZE_FRENQUENCY_PMFM_ID, - getDecorator(Caracteristic.class, null), - Lists.newArrayList(allLengthStepPmfm.values())); + addColumnToModel(columnModel, + null, + null, + EditProtocolSpeciesTableModel.CRUISE_CODE_ID); + addLengthClassesColumnToModel(columnModel, model.getLengthClassesPmfmId()); + addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.WEIGHT_ENABLED, table); addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.COUNT_IF_NO_FREQUENCY_ENABLED, table); addBooleanColumnToModel(columnModel, EditProtocolSpeciesTableModel.CALCIFY_SAMPLE_ENABLED, table); @@ -279,22 +284,15 @@ List<Species> speciesList = Lists.newArrayList(allSpecies.values()); - List<EditProtocolSpeciesRowModel> rows = Lists.newArrayList(); + List<EditProtocolSpeciesRowModel> rows; // build speciesProtocol rows - if (protocol != null) { - List<SpeciesProtocol> speciesProtocols = protocol.getSpecies(); - if (CollectionUtils.isNotEmpty(speciesProtocols)) { - for (SpeciesProtocol speciesProtocol : speciesProtocols) { - Species species = allSpecies.get(speciesProtocol.getSpeciesId()); - speciesList.remove(species); - EditProtocolSpeciesRowModel row = tableModel.createNewRow(); - row.setSpecies(species); - row.setLengthStepPmfm(allLengthStepPmfm.get(speciesProtocol.getLengthStepPmfmId())); - row.fromBean(speciesProtocol); - rows.add(row); - } - } + if (protocol == null) { + rows = Lists.newArrayList(); + } else { + + rows = toRows(speciesList, protocol.getSpecies()); + if (log.isDebugEnabled()) { log.debug("Will edit protocol with " + rows.size() + " species declared."); @@ -307,26 +305,57 @@ initBeanComboBox(ui.getSpeciesComboBox(), speciesList, null); selectFirstInCombo(ui.getSpeciesComboBox()); - initDoubleList(ui.getLengthClassesList(), - Lists.newArrayList(allCaracteristic), + initDoubleList(EditProtocolUIModel.PROPERTY_LENGTH_CLASSES_PMFM_ID, + ui.getLengthClassesList(), + Lists.newArrayList(caracteristics), model.getLengthClassesPmfmId()); - initDoubleList(ui.getGearList(), - Lists.newArrayList(allCaracteristic), + initDoubleList(EditProtocolUIModel.PROPERTY_GEAR_PMFM_ID, + ui.getGearList(), + Lists.newArrayList(caracteristics), model.getGearPmfmId()); - initDoubleList(ui.getEnvironmentList(), - Lists.newArrayList(allCaracteristic), + initDoubleList(EditProtocolUIModel.PROPERTY_ENVIRONMENT_PMFM_ID, + ui.getEnvironmentList(), + Lists.newArrayList(caracteristics), model.getEnvironmentPmfmId()); - initDoubleList(ui.getHydrologyList(), - Lists.newArrayList(allCaracteristic), + initDoubleList(EditProtocolUIModel.PROPERTY_HYDROLOGY_PMFM_ID, + ui.getHydrologyList(), + Lists.newArrayList(caracteristics), model.getHydrologyPmfmId()); // if new protocol can already cancel his creation model.setModify(model.isCreate()); } + public List<EditProtocolSpeciesRowModel> toRows(List<Species> speciesList, + List<SpeciesProtocol> speciesProtocols) { + + boolean useComboData = speciesList == null; + + if (useComboData) { + speciesList = ui.getSpeciesComboBox().getData(); + } + List<EditProtocolSpeciesRowModel> result = Lists.newArrayList(); + if (CollectionUtils.isNotEmpty(speciesProtocols)) { + for (SpeciesProtocol speciesProtocol : speciesProtocols) { + Species species = allSpecies.get(speciesProtocol.getSpeciesId()); + speciesList.remove(species); + EditProtocolSpeciesRowModel row = getTableModel().createNewRow(); + row.setSpecies(species); + row.setLengthStepPmfm(allCaracteristic.get(speciesProtocol.getLengthStepPmfmId())); + row.fromBean(speciesProtocol); + result.add(row); + } + } + + if (useComboData) { + selectFirstInCombo(ui.getSpeciesComboBox()); + } + return result; + } + @Override public void onCloseUI() { if (log.isInfoEnabled()) { @@ -369,7 +398,7 @@ EditProtocolSpeciesRowModel protocol = getTableModel().createNewRow(); protocol.setSpecies(species); getTableModel().addNewRow(protocol); - ui.getSpeciesComboBox().removeItem(species); + ui.getSpeciesComboBox().getData().remove(species); selectFirstInCombo(ui.getSpeciesComboBox()); getModel().setModify(true); @@ -389,21 +418,162 @@ getTableModel().fireTableRowsDeleted(rowIndex, rowIndex); } + public void addDoubleListListeners() { + String id; + UpdateSelectedList updateListener; + EditProtocolUIModel model = getModel(); + + id = (String) ui.getLengthClassesList().getClientProperty("_updateListenerId"); + updateListener = (UpdateSelectedList) ui.getLengthClassesList().getClientProperty("_updateListener"); + model.addPropertyChangeListener(id, updateListener); + + id = (String) ui.getEnvironmentList().getClientProperty("_updateListenerId"); + updateListener = (UpdateSelectedList) ui.getEnvironmentList().getClientProperty("_updateListener"); + model.addPropertyChangeListener(id, updateListener); + + id = (String) ui.getGearList().getClientProperty("_updateListenerId"); + updateListener = (UpdateSelectedList) ui.getGearList().getClientProperty("_updateListener"); + model.addPropertyChangeListener(id, updateListener); + + id = (String) ui.getHydrologyList().getClientProperty("_updateListenerId"); + updateListener = (UpdateSelectedList) ui.getHydrologyList().getClientProperty("_updateListener"); + model.addPropertyChangeListener(id, updateListener); + } + + public void removeDoubleListListeners() { + String id; + UpdateSelectedList updateListener; + EditProtocolUIModel model = getModel(); + + id = (String) ui.getLengthClassesList().getClientProperty("_updateListenerId"); + updateListener = (UpdateSelectedList) ui.getLengthClassesList().getClientProperty("_updateListener"); + + model.removePropertyChangeListener(id, updateListener); + + id = (String) ui.getEnvironmentList().getClientProperty("_updateListenerId"); + updateListener = (UpdateSelectedList) ui.getEnvironmentList().getClientProperty("_updateListener"); + model.removePropertyChangeListener(id, updateListener); + + id = (String) ui.getGearList().getClientProperty("_updateListenerId"); + updateListener = (UpdateSelectedList) ui.getGearList().getClientProperty("_updateListener"); + model.removePropertyChangeListener(id, updateListener); + + id = (String) ui.getHydrologyList().getClientProperty("_updateListenerId"); + updateListener = (UpdateSelectedList) ui.getHydrologyList().getClientProperty("_updateListener"); + model.removePropertyChangeListener(id, updateListener); + } + //------------------------------------------------------------------------// //-- Internal methods --// //------------------------------------------------------------------------// - protected void initDoubleList(BeanDoubleList<Caracteristic> widget, + protected void initDoubleList(String propertyId, + BeanDoubleList<Caracteristic> widget, List<Caracteristic> availableCaracteristics, List<String> selectedCaracteristics) { + + initBeanList(widget, availableCaracteristics, + Lists.<Caracteristic>newArrayList()); + + UpdateSelectedList listener = new UpdateSelectedList(widget, allCaracteristic); + widget.putClientProperty("_updateListener", listener); + widget.putClientProperty("_updateListenerId", propertyId); + listener.select(selectedCaracteristics); + } + + protected void selectLengthClasses(List<String> ids, JComboBox comboBox) { + List<Caracteristic> selection = Lists.newArrayList(); - if (selectedCaracteristics != null) { - for (Caracteristic caracteristic : availableCaracteristics) { - if (selectedCaracteristics.contains(caracteristic.getId())) { - selection.add(caracteristic); + if (CollectionUtils.isNotEmpty(ids)) { + for (String id : ids) { + selection.add(allCaracteristic.get(id)); + } + } + + List<Caracteristic> dataToList = Lists.newArrayList(selection); + + // add a null value at first position + if (!dataToList.isEmpty() && dataToList.get(0) != null) { + dataToList.add(0, null); + } + SwingUtil.fillComboBox(comboBox, dataToList, null); + } + + protected void addLengthClassesColumnToModel(TableColumnModel model, List<String> selectedIds) { + + ColumnIdentifier<EditProtocolSpeciesRowModel> identifier = + EditProtocolSpeciesTableModel.LENGTH_STEP_PMFM_ID; + + Decorator<Caracteristic> decorator = + getDecorator(Caracteristic.class, null); + + final JComboBox comboBox = new JComboBox(); + + getModel().addPropertyChangeListener(EditProtocolUIModel.PROPERTY_LENGTH_CLASSES_PMFM_ID, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + List<String> ids = (List<String>) evt.getNewValue(); + selectLengthClasses(ids, comboBox); + } + }); + comboBox.setRenderer(newListCellRender(decorator)); + + selectLengthClasses(selectedIds, comboBox); + ObjectToStringConverter converter = BeanUIUtil.newDecoratedObjectToStringConverter(decorator); + BeanUIUtil.decorate(comboBox, converter); + ComboBoxCellEditor editor = new ComboBoxCellEditor(comboBox); + + + addColumnToModel(model, + editor, + newTableCellRender(decorator), + EditProtocolSpeciesTableModel.LENGTH_STEP_PMFM_ID); + } + + protected static class UpdateSelectedList implements PropertyChangeListener { + + private final BeanDoubleListModel<Caracteristic> model; + + private final Map<String, Caracteristic> caracteristicMap; + + public UpdateSelectedList(BeanDoubleList<Caracteristic> doubleList, + Map<String, Caracteristic> caracteristicMap) { + this.model = doubleList.getModel(); + this.caracteristicMap = caracteristicMap; + } + + private boolean valueIsAdjusting; + + @Override + public void propertyChange(PropertyChangeEvent evt) { + + if (!valueIsAdjusting) { + + valueIsAdjusting = true; + + try { + List<String> selectedIds = (List<String>) evt.getNewValue(); + if (log.isInfoEnabled()) { + log.info("[" + evt.getPropertyName() + "] selected ids: " + selectedIds); + } + + select(selectedIds); + } finally { + valueIsAdjusting = false; } } + } - initBeanList(widget, availableCaracteristics, selection); + + public void select(List<String> selectedIds) { + + List<Caracteristic> selection = Lists.newArrayList(); + if (CollectionUtils.isNotEmpty(selectedIds)) { + for (String selectedId : selectedIds) { + selection.add(caracteristicMap.get(selectedId)); + } + } + model.setSelected(selection); + } } } 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-04 00:40:32 UTC (rev 320) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java 2013-02-04 00:42:26 UTC (rev 321) @@ -116,9 +116,9 @@ } public void setLengthClassesPmfmId(List<String> lengthClassesPmfmId) { - Object oldValue = getLengthClassesPmfmId(); this.lengthClassesPmfmId = lengthClassesPmfmId; - firePropertyChange(PROPERTY_LENGTH_CLASSES_PMFM_ID, oldValue, lengthClassesPmfmId); + // force to always propagates (need to recompte data of combobox in species table) + firePropertyChange(PROPERTY_LENGTH_CLASSES_PMFM_ID, null, lengthClassesPmfmId); } public void setLengthClassesPmfm(List<Caracteristic> lengthClassesPmfm) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportAllCaracteristicAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportAllCaracteristicAction.java 2013-02-04 00:40:32 UTC (rev 320) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportAllCaracteristicAction.java 2013-02-04 00:42:26 UTC (rev 321) @@ -24,8 +24,6 @@ * #L% */ -import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; @@ -34,8 +32,6 @@ import java.awt.event.ActionEvent; import java.io.File; -import java.util.List; -import java.util.Map; import static org.nuiton.i18n.I18n._; @@ -100,11 +96,10 @@ TuttiProtocolImportExportService service = getContext().getService(TuttiProtocolImportExportService.class); - List<Caracteristic> allCaracteristic = getHandler().getAllCaracteristic(); - Map<String, Caracteristic> caracteristicMap = TuttiEntities.splitById(allCaracteristic); + service.exportAllCaracteristic(file, + getHandler().getAllCaracteristic()); - service.exportAllCaracteristic(file, caracteristicMap); - - sendMessage("Caractéristiques exportées dans le fichier."); + sendMessage("Toutes les caractéristiques exportées dans le fichier " + + file + "."); } } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolCaracteristicAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolCaracteristicAction.java 2013-02-04 00:40:32 UTC (rev 320) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolCaracteristicAction.java 2013-02-04 00:42:26 UTC (rev 321) @@ -24,9 +24,7 @@ * #L% */ -import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; @@ -35,8 +33,6 @@ import java.awt.event.ActionEvent; import java.io.File; -import java.util.List; -import java.util.Map; import static org.nuiton.i18n.I18n._; @@ -104,11 +100,11 @@ TuttiProtocolImportExportService service = getContext().getService(TuttiProtocolImportExportService.class); - List<Caracteristic> allCaracteristic = getHandler().getAllCaracteristic(); - Map<String, Caracteristic> caracteristicMap = TuttiEntities.splitById(allCaracteristic); + service.exportProtocolCaracteristic(file, + protocol, + getHandler().getAllCaracteristic()); - service.exportProtocolCaracteristic(file, protocol, caracteristicMap); - - sendMessage("Caractéristiques du Protocole [" + protocol.getName() + "] exportées dans le fichier."); + sendMessage("Caractéristiques du Protocole exportées dans le fichier " + + file + "."); } } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java 2013-02-04 00:40:32 UTC (rev 320) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ExportProtocolSpeciesAction.java 2013-02-04 00:42:26 UTC (rev 321) @@ -24,6 +24,8 @@ * #L% */ +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; @@ -33,6 +35,7 @@ import java.awt.event.ActionEvent; import java.io.File; +import java.util.List; import static org.nuiton.i18n.I18n._; @@ -96,14 +99,21 @@ // bind to a protocol TuttiProtocol protocol = getModel().toBean(); + List<SpeciesProtocol> protocols = Lists.newArrayList(); + for (EditProtocolSpeciesRowModel row : getModel().getRows()) { + if (row.isValid()) { + protocols.add(row.toBean()); + } + } + // import TuttiProtocolImportExportService service = getContext().getService(TuttiProtocolImportExportService.class); service.exportProtocolSpecies(file, - protocol, - getHandler().getAllLengthStepPmfm(), + protocols, + getHandler().getAllCaracteristic(), getHandler().getAllSpecies()); sendMessage("Espèces du Protocole exportés dans le fichier " + file + "."); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java 2013-02-04 00:40:32 UTC (rev 320) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolCaracteristicAction.java 2013-02-04 00:42:26 UTC (rev 321) @@ -24,9 +24,7 @@ * #L% */ -import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; @@ -35,8 +33,6 @@ import java.awt.event.ActionEvent; import java.io.File; -import java.util.List; -import java.util.Map; import static org.nuiton.i18n.I18n._; @@ -97,21 +93,27 @@ log.info("Will import protocol caracteristic file: " + file); } + EditProtocolUIModel model = getModel(); + // bind to a protocol - TuttiProtocol protocol = getModel().toBean(); + TuttiProtocol protocol = model.toBean(); - // import protocol caracteristics TuttiProtocolImportExportService service = getContext().getService(TuttiProtocolImportExportService.class); - List<Caracteristic> allCaracteristic = getHandler().getAllCaracteristic(); - Map<String, Caracteristic> caracteristicMap = TuttiEntities.splitById(allCaracteristic); + service.importProtocolCaracteristic(file, + protocol, + getHandler().getAllCaracteristic()); - service.importProtocolCaracteristic(file, protocol, caracteristicMap); + getHandler().addDoubleListListeners(); - // rebind to model - getModel().fromBean(protocol); + try { + // rebind to model + model.fromBean(protocol); + } finally { + getHandler().removeDoubleListListeners(); + } - sendMessage("Caractéristiques importées depuis le fichier "); + sendMessage("Caractéristiques importées depuis le fichier " + file); } } \ No newline at end of file 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-04 00:40:32 UTC (rev 320) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/ImportProtocolSpeciesAction.java 2013-02-04 00:42:26 UTC (rev 321) @@ -33,6 +33,7 @@ import java.awt.event.ActionEvent; import java.io.File; +import java.util.List; import static org.nuiton.i18n.I18n._; @@ -58,7 +59,7 @@ "import", _("tutti.action.importProtocolSpecies"), _("tutti.action.importProtocolSpecies.tip"), - true + false ); } @@ -93,8 +94,10 @@ log.info("Will import protocol species file: " + file); } + EditProtocolUIModel model = getModel(); + // bind to a protocol - TuttiProtocol protocol = getModel().toBean(); + TuttiProtocol protocol = model.toBean(); // import TuttiProtocolImportExportService service = @@ -102,11 +105,12 @@ service.importProtocolSpecies(file, protocol, - getHandler().getAllLengthStepPmfm(), + getHandler().getAllCaracteristic(), getHandler().getAllSpecies()); - // rebind to model - getModel().fromBean(protocol); + List<EditProtocolSpeciesRowModel> rows = + getHandler().toRows(null, protocol.getSpecies()); + model.setRows(rows); sendMessage("Espèces importées depuis le fichier " + file + "."); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SaveProtocolAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SaveProtocolAction.java 2013-02-04 00:40:32 UTC (rev 320) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/SaveProtocolAction.java 2013-02-04 00:42:26 UTC (rev 321) @@ -91,8 +91,12 @@ } bean.setSpecies(protocols); + if (log.isDebugEnabled()) { + log.debug("protocol id to save: " + bean.getId()); + } + TuttiProtocol saved; - log.info("bean id : " + bean.getId()); + if (TuttiEntities.isNew(bean)) { saved = persistenceService.createProtocol(bean); 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-04 00:40:32 UTC (rev 320) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-02-04 00:42:26 UTC (rev 321) @@ -315,14 +315,25 @@ tutti.table.plankton.batch.header.toConfirm=A Confirmer tutti.table.plankton.batch.header.weight=Poids tutti.table.protocol.species.header.age=Age +tutti.table.protocol.species.header.age.tip=Catégorisation sur l'age ? tutti.table.protocol.species.header.calcifySample=Prélèvement de pièces calcifiées +tutti.table.protocol.species.header.calcifySample.tip=Prélèvement de pièces calcifiées tutti.table.protocol.species.header.countIfNoFrequency=Dénombrement +tutti.table.protocol.species.header.countIfNoFrequency.tip=Dénombrement +tutti.table.protocol.species.header.cruiseCode=Code +tutti.table.protocol.species.header.cruiseCode.tip=Code campagne (non synchronisable) tutti.table.protocol.species.header.lengthStep=Classe de Taille +tutti.table.protocol.species.header.lengthStep.tip=Comment mesurer les classes de taille (si vide alors pas de mesure) tutti.table.protocol.species.header.maturity=Maturité +tutti.table.protocol.species.header.maturity.tip=Catégorisation sur la maturité ? tutti.table.protocol.species.header.sex=Sexe +tutti.table.protocol.species.header.sex.tip=Catégorisation sur le sexe ? tutti.table.protocol.species.header.size=Catégorie Tri +tutti.table.protocol.species.header.size.tip=Catégorisation sur la catégorie de tri ? tutti.table.protocol.species.header.speciesId=Espèce +tutti.table.protocol.species.header.speciesId.tip=Espèce (code permanent - nom scientifique) tutti.table.protocol.species.header.weight=Pesée +tutti.table.protocol.species.header.weight.tip=Pesée tutti.table.species.batch.header.ageCategory=Age tutti.table.species.batch.header.comment=Commentaire tutti.table.species.batch.header.computedNumber=Nombre @@ -344,12 +355,12 @@ tutti.table.species.sampleCategory.header.weight=Poids (kg) tutti.timeeditor.H=H tutti.title.about=À propos de Tutti -tutti.title.choose.protocolCaracteristicExportFile=Choisir le fichier où exporter les caractéristiques -tutti.title.choose.protocolCaracteristicImportFile=Choisir le fichier des caractéristiques à importer -tutti.title.choose.protocolExportFile=Choisir le fichier où exporter le protocole -tutti.title.choose.protocolImportFile=Choisir le fichier du protocole à importer -tutti.title.choose.protocolSpeciesExportFile=Choisir le fichier où expoerter les espèces de protocole -tutti.title.choose.protocolSpeciesImportFile=Choisir le fichier des espèces de protocole à importer +tutti.title.choose.protocolCaracteristicExportFile=Exporter les caractéristiques +tutti.title.choose.protocolCaracteristicImportFile=Importer les caractéristiques +tutti.title.choose.protocolExportFile=Exporter le protocole +tutti.title.choose.protocolImportFile=Importer le protocole +tutti.title.choose.protocolSpeciesExportFile=Exporter les espèces +tutti.title.choose.protocolSpeciesImportFile=Importer les espèces tutti.title.create.cruise=Créer une nouvelle campagne tutti.title.create.program=Créer une nouvelle série de campagne tutti.title.create.protocol=Créer un nouveau protocol de saisie