branch feature/5954 updated (ed561ae -> 7fb8216)
This is an automated email from the git hooks/post-receive script. New change to branch feature/5954 in repository tutti. See http://git.codelutin.com/tutti.git from ed561ae refs #6129 import du fichier avec les colonnes new 7fb8216 refs #6129 mapping des champs du trait avec les colonnes + début import dans le trait The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 7fb821629b08b74af5b2fa675fab14fbd00d288c Author: Kevin Morin <morin@codelutin.com> Date: Tue Dec 2 19:09:14 2014 +0100 refs #6129 mapping des champs du trait avec les colonnes + début import dans le trait Summary of changes: .../entities/protocol/TuttiProtocols.java | 4 + .../src/main/xmi/tutti-persistence.zargo | Bin 57440 -> 57963 bytes .../src/main/xmi/tutti-persistence.zargo~ | Bin 57378 -> 57440 bytes .../filtered-resources/tutti-help-fr.properties | 3 +- .../swing/action/ImportFromColumnFileAction.java | 187 +++++++++++++++++++ .../action/LoadProtocolImportColumnsAction.java | 13 +- .../tutti/ui/swing/action/SaveProtocolAction.java | 5 + .../content/operation/EditFishingOperationUI.css | 9 + .../content/operation/EditFishingOperationUI.jaxx | 1 + .../content/protocol/CaracteristicMappingUI.css | 13 ++ .../content/protocol/CaracteristicMappingUI.jaxx | 12 +- .../protocol/CaracteristicMappingUIHandler.java | 203 +++++++++++++++++---- .../protocol/CaracteristicMappingUIModel.java | 21 +++ .../EditProtocolOperationFieldsRowModel.java | 66 +++++++ .../EditProtocolOperationFieldsTableModel.java | 37 ++++ .../content/protocol/EditProtocolUIHandler.java | 4 + .../content/protocol/EditProtocolUIModel.java | 63 +++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 11 ++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 11 ++ 19 files changed, 614 insertions(+), 49 deletions(-) create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportFromColumnFileAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolOperationFieldsRowModel.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolOperationFieldsTableModel.java -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/5954 in repository tutti. See http://git.codelutin.com/tutti.git commit 7fb821629b08b74af5b2fa675fab14fbd00d288c Author: Kevin Morin <morin@codelutin.com> Date: Tue Dec 2 19:09:14 2014 +0100 refs #6129 mapping des champs du trait avec les colonnes + début import dans le trait --- .../entities/protocol/TuttiProtocols.java | 4 + .../src/main/xmi/tutti-persistence.zargo | Bin 57440 -> 57963 bytes .../src/main/xmi/tutti-persistence.zargo~ | Bin 57378 -> 57440 bytes .../filtered-resources/tutti-help-fr.properties | 3 +- .../swing/action/ImportFromColumnFileAction.java | 187 +++++++++++++++++++ .../action/LoadProtocolImportColumnsAction.java | 13 +- .../tutti/ui/swing/action/SaveProtocolAction.java | 5 + .../content/operation/EditFishingOperationUI.css | 9 + .../content/operation/EditFishingOperationUI.jaxx | 1 + .../content/protocol/CaracteristicMappingUI.css | 13 ++ .../content/protocol/CaracteristicMappingUI.jaxx | 12 +- .../protocol/CaracteristicMappingUIHandler.java | 203 +++++++++++++++++---- .../protocol/CaracteristicMappingUIModel.java | 21 +++ .../EditProtocolOperationFieldsRowModel.java | 66 +++++++ .../EditProtocolOperationFieldsTableModel.java | 37 ++++ .../content/protocol/EditProtocolUIHandler.java | 4 + .../content/protocol/EditProtocolUIModel.java | 63 +++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 11 ++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 11 ++ 19 files changed, 614 insertions(+), 49 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java index acfb9b9..afa555c 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java @@ -76,6 +76,8 @@ public class TuttiProtocols extends AbstractTuttiProtocols { /** Logger. */ private static final Log log = LogFactory.getLog(TuttiProtocols.class); + public static final int CURRENT_PROTOCOL_VERSION = 3; + public static void toFile(TuttiProtocol protocol, File file) { String id = protocol.getId(); @@ -353,6 +355,8 @@ public class TuttiProtocols extends AbstractTuttiProtocols { } result.setCaracteristicMapping(caracteristicMappingRows); + //TODO finish + return result; } diff --git a/tutti-persistence/src/main/xmi/tutti-persistence.zargo b/tutti-persistence/src/main/xmi/tutti-persistence.zargo index b3c7107..4f0e671 100644 Binary files a/tutti-persistence/src/main/xmi/tutti-persistence.zargo and b/tutti-persistence/src/main/xmi/tutti-persistence.zargo differ diff --git a/tutti-persistence/src/main/xmi/tutti-persistence.zargo~ b/tutti-persistence/src/main/xmi/tutti-persistence.zargo~ index 982bb6a..b3c7107 100644 Binary files a/tutti-persistence/src/main/xmi/tutti-persistence.zargo~ and b/tutti-persistence/src/main/xmi/tutti-persistence.zargo~ differ diff --git a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties index 0ef2271..f5c6bc6 100644 --- a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties +++ b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties @@ -1,5 +1,5 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Mon Dec 01 10:21:58 CET 2014 +#Mon Dec 01 16:05:35 CET 2014 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -171,6 +171,7 @@ tutti.editCruise.help=editCruise.html tutti.editFishingOperation.action.attachments.help=editFishingOperation.html\#traitActions tutti.editFishingOperation.action.cancelEditFishingOperation.help=editFishingOperation.html\#traitActions tutti.editFishingOperation.action.importCasino.help=editFishingOperation.html\#traitActions +tutti.editFishingOperation.action.importFromColumnFile.help= tutti.editFishingOperation.action.resetFishingOperationValidState.help=editFishingOperation.html\#traitActions tutti.editFishingOperation.action.saveEditFishingOperation.help=editFishingOperation.html\#traitActions tutti.editFishingOperation.field.comment.help=editFishingOperation.html\#traitFields diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportFromColumnFileAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportFromColumnFileAction.java new file mode 100644 index 0000000..259f96f --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportFromColumnFileAction.java @@ -0,0 +1,187 @@ +package fr.ifremer.tutti.ui.swing.action; + +import com.csvreader.CsvReader; +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.FishingOperations; +import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUI; +import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUIHandler; +import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUIModel; +import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUIModel; +import org.apache.commons.io.Charsets; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.Import; +import org.nuiton.csv.ValueParser; +import org.nuiton.csv.ext.CsvReaders; + +import java.io.File; +import java.io.FileInputStream; +import java.nio.charset.Charset; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; + +import static org.nuiton.i18n.I18n.t; + +/** + * @author Kevin Morin (Code Lutin) + * @since 3.10 + */ +public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingOperationUIModel, EditFishingOperationUI, EditFishingOperationUIHandler> { + + private static final Log log = LogFactory.getLog(LoadProtocolImportColumnsAction.class); + + protected File columnsFile; + + public ImportFromColumnFileAction(EditFishingOperationUIHandler handler) { + super(handler, true); + } + + @Override + public boolean prepareAction() throws Exception { + boolean result = super.prepareAction(); + + if (result) { + columnsFile = chooseFile(t("tutti.editFishingOperation.action.title.choose.importColumnsFile"), + t("tutti.editFishingOperation.action.chooseColumnsFile.import"), + "^.*\\.csv", t("tutti.common.file.csv")); + + result = columnsFile != null; + } + + return result; + } + + @Override + public void doAction() throws Exception { + + Set<String> headers = Sets.newHashSet(CsvReaders.getHeader(columnsFile, ';')); + + ImportFromColumnFile importModel = new ImportFromColumnFile(';', headers); + Import<FishingOperation> operationUIModelImport = + Import.newImport(importModel, new FileInputStream(columnsFile)); + + TuttiProtocol protocol = getDataContext().getProtocol(); + final Map<String, OperationFieldMappingRow> mappingRowsByField = + Maps.uniqueIndex(protocol.getOperationFieldMapping(), new Function<OperationFieldMappingRow, String>() { + @Override + public String apply(OperationFieldMappingRow operationFieldMappingRow) { + return operationFieldMappingRow.getField(); + } + }); + + // predicate to check if the row matches the model key defined by the protocol + Predicate<FishingOperation> predicate = new Predicate<FishingOperation>() { + @Override + public boolean apply(FishingOperation fishingOperation) { + + String operationNumberColumn = mappingRowsByField.get(FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER).getImportColumn(); + String stationColumn = mappingRowsByField.get(FishingOperation.PROPERTY_STATION_NUMBER).getImportColumn(); + String startDateColumn = mappingRowsByField.get(FishingOperation.PROPERTY_GEAR_SHOOTING_START_DATE).getImportColumn(); + + EditFishingOperationUIModel model = getModel(); + boolean sameStationNumber = Objects.equals(fishingOperation.getStationNumber(), model.getStationNumber()); + boolean sameFishingOperationNumber = Objects.equals(fishingOperation.getFishingOperationNumber(), model.getFishingOperationNumber()); + boolean sameGearShootingStartDate = Objects.equals(fishingOperation.getGearShootingStartDate(), model.getGearShootingStartDate()); + + return (StringUtils.isBlank(stationColumn) || sameStationNumber) + && (StringUtils.isBlank(operationNumberColumn) || sameFishingOperationNumber) + && (StringUtils.isBlank(startDateColumn) || sameGearShootingStartDate); + } + }; + + boolean found = false; + while (!found && operationUIModelImport.iterator().hasNext()) { + FishingOperation next = operationUIModelImport.iterator().next(); + if (predicate.apply(next)) { + getModel().fromEntity(next); + found = true; + } + } + + if (!found) { + throw new Exception(t("tutti.editFishingOperation.action.importColumns.operationNotFound")); + } + } + + @Override + public void postSuccessAction() { + super.postSuccessAction(); + sendMessage(t("tutti.editFishingOperation.action.importColumns.success")); + } + + protected class ImportFromColumnFile extends TuttiCsvUtil.AbstractTuttiImportModel<FishingOperation> { + + public ImportFromColumnFile(char separator, Set<String> headers) { + super(separator); + + TuttiProtocol protocol = getDataContext().getProtocol(); + Collection<OperationFieldMappingRow> operationFieldMapping = protocol.getOperationFieldMapping(); + + for (OperationFieldMappingRow mappingRow : operationFieldMapping) { + String importColumn = mappingRow.getImportColumn(); + if (StringUtils.isNotBlank(importColumn) && headers.remove(importColumn)) { + + String field = mappingRow.getField(); + ValueParser valueParser; + switch (field) { + case EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_NUMBER: + valueParser = TuttiCsvUtil.INTEGER; + break; + + case EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LATITUDE: + case EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_LONGITUDE: + case EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LATITUDE: + case EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_LONGITUDE: + case EditFishingOperationUIModel.PROPERTY_TRAWL_DISTANCE: + valueParser = TuttiCsvUtil.FLOAT; + break; + + case EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_DATE: + case EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_END_DATE: + valueParser = TuttiCsvUtil.DAY_TIME; + break; + + case EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_RECTILIGNE: + case EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_VALID: + valueParser = TuttiCsvUtil.PRIMITIVE_BOOLEAN; + break; + + case EditFishingOperationUIModel.PROPERTY_GEAR: + case EditFishingOperationUIModel.PROPERTY_VESSEL: + case EditFishingOperationUIModel.PROPERTY_STRATA: + case EditFishingOperationUIModel.PROPERTY_SUB_STRATA: + case EditFishingOperationUIModel.PROPERTY_SECONDARY_VESSEL: + case EditFishingOperationUIModel.PROPERTY_RECORDER_PERSON: + + default: + valueParser = TuttiCsvUtil.STRING; + + } + newMandatoryColumn(importColumn, field, valueParser); + } + } + for (String header : headers) { + newIgnoredColumn(header); + } + } + + @Override + public FishingOperation newEmptyInstance() { + return FishingOperations.newFishingOperation(); + } + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/LoadProtocolImportColumnsAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/LoadProtocolImportColumnsAction.java index 725e2cd..e807876 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/LoadProtocolImportColumnsAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/LoadProtocolImportColumnsAction.java @@ -6,6 +6,7 @@ import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIHandler; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.ext.CsvReaders; import java.io.File; import java.io.FileInputStream; @@ -47,14 +48,10 @@ public class LoadProtocolImportColumnsAction extends AbstractTuttiAction<EditPro @Override public void doAction() throws Exception { - FileInputStream fileInputStream = new FileInputStream(columnsFile); - CsvReader csvReader = new CsvReader(fileInputStream, ';', Charset.forName("UTF-8")); - if (csvReader.readHeaders()) { - String[] headers = csvReader.getHeaders(); - List<String> importColumns = Arrays.asList(headers); - Collections.sort(importColumns); - getModel().setImportColumns(importColumns); - } + String[] headers = CsvReaders.getHeader(columnsFile, ';'); + List<String> importColumns = Arrays.asList(headers); + Collections.sort(importColumns); + getModel().setImportColumns(importColumns); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/SaveProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/SaveProtocolAction.java index c6378be..4d96eab 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/SaveProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/SaveProtocolAction.java @@ -26,6 +26,7 @@ package fr.ifremer.tutti.ui.swing.action; import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; +import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.PersistenceService; @@ -74,6 +75,10 @@ public class SaveProtocolAction extends AbstractTuttiAction<EditProtocolUIModel, new ArrayList<>(getUI().getCaracteristicsTable().getModel().getCaracteristicMapping().values()); bean.setCaracteristicMapping(caracteristicMappingRows); + List<OperationFieldMappingRow> operationFieldMappingRows = + new ArrayList<>(getUI().getCaracteristicsTable().getModel().getOperationFieldMappingRows().values()); + bean.setOperationFieldMapping(operationFieldMappingRows); + // get the species protocols from the table List<SpeciesProtocol> speciesProtocols = Lists.newArrayList(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css index 8a362e6..fe79d09 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css @@ -80,6 +80,15 @@ JXDatePicker { _onlyVerticalScrollable: true; } +#importFromColumnFile { + actionIcon: import; + text: "tutti.editFishingOperation.action.importFromColumnFile"; + toolTipText: "tutti.editFishingOperation.action.importFromColumnFile.tip"; + i18nMnemonic: "tutti.editFishingOperation.action.importFromColumnFile.mnemonic"; + _applicationAction: {fr.ifremer.tutti.ui.swing.action.ImportFromColumnFileAction.class}; + _help: {"tutti.editFishingOperation.action.importFromColumnFile.help"}; +} + #fishingOperationAttachmentsButton { enabled: {model.getId() != null}; toolTipText: "tutti.editFishingOperation.action.attachments.tip"; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx index 23b0c18..909b0d3 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx @@ -154,6 +154,7 @@ public EditFishingOperationUI(FishingOperationsUI parentUI) { constructorParams='"tuttihelp.editeditFishingOperation.help"'/> <JToolBar id='traitGeneralTabPaneToolBar'> + <JButton id='importFromColumnFile'/> <ButtonAttachment id='fishingOperationAttachmentsButton' constructorParams='getHandler().getContext(), getModel()'/> </JToolBar> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUI.css index 4773389..d92ab70 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUI.css @@ -1,7 +1,20 @@ +#splitpane { + orientation: {JSplitPane.VERTICAL_SPLIT}; + resizeWeight: 1.0; +} + #caracteristicsTable { selectionMode: {ListSelectionModel.SINGLE_SELECTION}; selectionBackground: {null}; selectionForeground: {Color.BLACK}; sortable: false; enabled: true; +} + +#operationFieldsTable { + selectionMode: {ListSelectionModel.SINGLE_SELECTION}; + selectionBackground: {null}; + selectionForeground: {Color.BLACK}; + sortable: false; + enabled: true; } \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUI.jaxx index 8706193..52c3949 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUI.jaxx @@ -34,7 +34,13 @@ <CaracteristicMappingUIModel id='model' initializer='getContextValue(CaracteristicMappingUIModel.class)'/> - <JScrollPane constraints="BorderLayout.CENTER"> - <JXTable id='caracteristicsTable'/> - </JScrollPane> + <JSplitPane id="splitpane" constraints="BorderLayout.CENTER"> + <JScrollPane> + <JXTable id='caracteristicsTable'/> + </JScrollPane> + <JScrollPane> + <JXTable id='operationFieldsMapping'/> + </JScrollPane> + </JSplitPane> + </JPanel> \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUIHandler.java index b3f2903..5c4252a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUIHandler.java @@ -1,31 +1,36 @@ package fr.ifremer.tutti.ui.swing.content.protocol; import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicType; +import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; -import jaxx.runtime.JAXXUtil; import jaxx.runtime.SwingUtil; -import jaxx.runtime.swing.editor.bean.BeanUIUtil; import jaxx.runtime.validator.swing.SwingValidator; 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.jdesktop.swingx.table.TableColumnExt; -import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; import javax.swing.*; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.TableCellRenderer; +import java.awt.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Map; +import java.util.Objects; + +import static org.nuiton.i18n.I18n.t; /** * @author Kevin Morin (Code Lutin) @@ -100,6 +105,7 @@ public class CaracteristicMappingUIHandler CaracteristicMappingUIModel model = new CaracteristicMappingUIModel(); model.setCaracteristics(editProtocolUIModel.getCaracteristics()); + model.setOperationFieldMappingRows(editProtocolUIModel.getOperationFieldMapping()); editProtocolUIModel.addPropertyChangeListener(EditProtocolUIModel.PROPERTY_CARACTERISTIC_MAPPING, new PropertyChangeListener() { @Override @@ -108,6 +114,13 @@ public class CaracteristicMappingUIHandler } }); + editProtocolUIModel.addPropertyChangeListener(EditProtocolUIModel.PROPERTY_OPERATION_FIELD_MAPPING, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + getModel().setOperationFieldMappingRows((List<OperationFieldMappingRow>) evt.getNewValue()); + } + }); + editProtocolUIModel.addPropertyChangeListener(EditProtocolUIModel.PROPERTY_IMPORT_COLUMNS, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { @@ -127,12 +140,8 @@ public class CaracteristicMappingUIHandler dataToList.add(null); } - JComboBox comboBox = new JComboBox(); - SwingUtil.fillComboBox(comboBox, dataToList, null); - - TableColumnExt col = getTable().getColumnExt(2); - ComboBoxCellEditor editor = new ComboBoxCellEditor(comboBox); - col.setCellEditor(editor); + populateImportColumnTableEditor(getTable(), 2, dataToList); + populateImportColumnTableEditor(getUI().getOperationFieldsMapping(), 1, dataToList); } }); @@ -140,54 +149,174 @@ public class CaracteristicMappingUIHandler ui.setContextValue(model); } + protected void populateImportColumnTableEditor(JXTable table, int columnIndex, ArrayList<String> dataToList) { + JComboBox comboBox = new JComboBox(); + SwingUtil.fillComboBox(comboBox, dataToList, null); + + TableColumnExt col = table.getColumnExt(columnIndex); + ComboBoxCellEditor editor = new ComboBoxCellEditor(comboBox); + col.setCellEditor(editor); + } + @Override public void afterInit(CaracteristicMappingUI caracteristicMappingUI) { initUI(this.ui); - JXTable caracteristicsMappingTable = caracteristicMappingUI.getCaracteristicsTable(); + // init caracteristics mappingtable + { + JXTable caracteristicsMappingTable = getTable(); - DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); + DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); -// 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); -// } -// }); + // 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); + // } + // }); - List<Caracteristic> caracteristics = new ArrayList<Caracteristic>(getModel().getCaracteristics()); - addComboDataColumnToModel(columnModel, - EditProtocolCaracteristicsTableModel.PSFM_ID, - getDecorator(Caracteristic.class, null), - caracteristics); + List<Caracteristic> caracteristics = new ArrayList<Caracteristic>(getModel().getCaracteristics()); + addComboDataColumnToModel(columnModel, + EditProtocolCaracteristicsTableModel.PSFM_ID, + getDecorator(Caracteristic.class, null), + caracteristics); - addComboDataColumnToModel(columnModel, - EditProtocolCaracteristicsTableModel.TYPE, - getDecorator(CaracteristicType.class, null), - Lists.newArrayList(CaracteristicType.getTabTypes())); + addComboDataColumnToModel(columnModel, + EditProtocolCaracteristicsTableModel.TYPE, + getDecorator(CaracteristicType.class, null), + Lists.newArrayList(CaracteristicType.getTabTypes())); - addColumnToModel(columnModel, - EditProtocolCaracteristicsTableModel.IMPORT_FILE_COLUMN); + addColumnToModel(columnModel, + EditProtocolCaracteristicsTableModel.IMPORT_FILE_COLUMN); - EditProtocolCaracteristicsTableModel tableModel = new EditProtocolCaracteristicsTableModel(columnModel, caracteristics); - caracteristicsMappingTable.setModel(tableModel); - caracteristicsMappingTable.setColumnModel(columnModel); + EditProtocolCaracteristicsTableModel tableModel = new EditProtocolCaracteristicsTableModel(columnModel, caracteristics); + caracteristicsMappingTable.setModel(tableModel); + caracteristicsMappingTable.setColumnModel(columnModel); - initTable(caracteristicsMappingTable); + initTable(caracteristicsMappingTable); + + getModel().setRows(new ArrayList<EditProtocolCaracteristicsRowModel>()); + } + + // init operation fields table + { + JXTable operationFieldsTable = getUI().getOperationFieldsMapping(); + + DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); + + addColumnToModel(columnModel, + null, + new DefaultTableCellRenderer() { + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + setText(t("tutti.editFishingOperation.field." + value.toString())); + return this; + } + }, + EditProtocolOperationFieldsTableModel.FIELD); + + addColumnToModel(columnModel, + EditProtocolOperationFieldsTableModel.IMPORT_FILE_COLUMN); + + EditProtocolOperationFieldsTableModel tableModel = new EditProtocolOperationFieldsTableModel(columnModel); + operationFieldsTable.setModel(tableModel); + operationFieldsTable.setColumnModel(columnModel); + + // by default do not authorize to change column orders + operationFieldsTable.getTableHeader().setReorderingAllowed(false); + + addHighlighters(operationFieldsTable); + + tableModel.setRows(new ArrayList<EditProtocolOperationFieldsRowModel>()); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_STATION_NUMBER); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_GEAR_SHOOTING_START_DATE); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_GEAR_SHOOTING_START_LATITUDE); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_GEAR_SHOOTING_START_LONGITUDE); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_GEAR_SHOOTING_END_DATE); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_GEAR_SHOOTING_END_LATITUDE); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_GEAR_SHOOTING_END_LONGITUDE); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_FISHING_OPERATION_RECTILIGNE); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_TRAWL_DISTANCE); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_FISHING_OPERATION_VALID); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_MULTIRIG_AGGREGATION); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_RECORDER_PERSON); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_GEAR); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_VESSEL); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_STRATA); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_SUB_STRATA); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_LOCATION); + createOperationFieldRow(tableModel, FishingOperation.PROPERTY_SECONDARY_VESSEL); + //TODO voir avec Vincent comment on gère le cas où aucun des champs clé n'est renseigné + + // when model data change let's propagate it table model +// getModel().addPropertyChangeListener(AbstractTuttiTableUIModel.PROPERTY_ROWS, new PropertyChangeListener() { +// @Override +// public void propertyChange(PropertyChangeEvent evt) { +// log.info("row schanged"); +// onModelRowsChanged((List<R>) evt.getNewValue()); +// } +// }); + + // always scroll to selected row + SwingUtil.scrollToTableSelection(operationFieldsTable); + } getModel().addPropertyChangeListener(CaracteristicMappingUIModel.PROPERTY_CARACTERISTIC_MAPPING_ROWS, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { - populateTable((Collection<CaracteristicMappingRow>) evt.getNewValue()); + populateCaracteristicsTable((Collection<CaracteristicMappingRow>) evt.getNewValue()); } }); + getModel().addPropertyChangeListener(CaracteristicMappingUIModel.PROPERTY_OPERATION_FIELD_MAPPING_ROWS, + new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + populateFieldsTable((Map<String, OperationFieldMappingRow>) evt.getNewValue()); + } + }); + + } + + protected void createOperationFieldRow(EditProtocolOperationFieldsTableModel tableModel, String property) { + EditProtocolOperationFieldsRowModel row = tableModel.createNewRow(); + row.setField(property); + row.setValid(true); + row.addPropertyChangeListener(new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + EditProtocolOperationFieldsRowModel row = (EditProtocolOperationFieldsRowModel) evt.getSource(); + Map<String, OperationFieldMappingRow> operationFieldMappingRows = getModel().getOperationFieldMappingRows(); + + OperationFieldMappingRow operationFieldMappingRow = operationFieldMappingRows.get(row.getField()); + if (operationFieldMappingRow != null) { + operationFieldMappingRow.setImportColumn(row.getImportFileColumn()); + + } else { + operationFieldMappingRows.put(row.getField(), row.toBean()); + } + getModel().setModify(true); + } + }); + tableModel.addNewRow(row); + } + + protected void populateFieldsTable(Map<String, OperationFieldMappingRow> fieldRows) { + EditProtocolOperationFieldsTableModel tableModel = + (EditProtocolOperationFieldsTableModel) getUI().getOperationFieldsMapping().getModel(); + for (EditProtocolOperationFieldsRowModel row : tableModel.getRows()) { + OperationFieldMappingRow mappingRow = fieldRows.get(row.getField()); + if (mappingRow != null) { + row.setImportFileColumn(mappingRow.getImportColumn()); + } + } } - protected void populateTable(Collection<CaracteristicMappingRow> values) { + protected void populateCaracteristicsTable(Collection<CaracteristicMappingRow> values) { List<EditProtocolCaracteristicsRowModel> rows = new ArrayList<EditProtocolCaracteristicsRowModel>(); for (CaracteristicMappingRow row : values) { EditProtocolCaracteristicsRowModel rowModel = getTableModel().createNewRow(); @@ -195,7 +324,7 @@ public class CaracteristicMappingUIHandler recomputeRowValidState(rowModel); rows.add(rowModel); } - getTableModel().setRows(rows); + getModel().setRows(rows); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUIModel.java index 03538c9..a353eb5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUIModel.java @@ -4,6 +4,7 @@ import com.google.common.base.Function; import com.google.common.collect.Maps; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRowBean; +import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; import org.nuiton.util.beans.Binder; @@ -23,11 +24,14 @@ public class CaracteristicMappingUIModel extends AbstractTuttiTableUIModel<Carac public static final String PROPERTY_CARACTERISTIC_MAPPING_ROWS = "caracteristicMappingRows"; public static final String PROPERTY_CARACTERISTICS_IN_MAPPING = "caracteristicsInMapping"; + public static final String PROPERTY_OPERATION_FIELD_MAPPING_ROWS = "operationFieldMappingRows"; protected List<Caracteristic> caracteristics = new ArrayList<Caracteristic>(); protected Map<String, CaracteristicMappingRow> caracteristicMappingRows = new HashMap<String, CaracteristicMappingRow>(); + protected Map<String, OperationFieldMappingRow> operationFieldMappingRows = new HashMap<String, OperationFieldMappingRow>(); + protected List<String> importColumns = new ArrayList<String>(); public CaracteristicMappingUIModel() { @@ -60,6 +64,23 @@ public class CaracteristicMappingUIModel extends AbstractTuttiTableUIModel<Carac firePropertyChanged(PROPERTY_CARACTERISTICS_IN_MAPPING, null, this.caracteristicMappingRows.values()); } + public Map<String, OperationFieldMappingRow> getOperationFieldMappingRows() { + return operationFieldMappingRows; + } + + public void setOperationFieldMappingRows(Collection<OperationFieldMappingRow> operationFieldMappingRows) { + this.operationFieldMappingRows = new HashMap<String, OperationFieldMappingRow>(); + if (operationFieldMappingRows != null) { + this.operationFieldMappingRows.putAll(Maps.uniqueIndex(operationFieldMappingRows, new Function<OperationFieldMappingRow, String>() { + @Override + public String apply(OperationFieldMappingRow operationFieldMappingRow) { + return operationFieldMappingRow.getField(); + } + })); + } + firePropertyChanged(PROPERTY_OPERATION_FIELD_MAPPING_ROWS, null, this.operationFieldMappingRows); + } + public List<String> getImportColumns() { return importColumns; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolOperationFieldsRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolOperationFieldsRowModel.java new file mode 100644 index 0000000..ac16751 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolOperationFieldsRowModel.java @@ -0,0 +1,66 @@ +package fr.ifremer.tutti.ui.swing.content.protocol; + +import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; +import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRowBean; +import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicType; +import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; +import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRowBean; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +/** + * @author Kevin Morin (Code Lutin) + * @since 3.10 + */ +public class EditProtocolOperationFieldsRowModel extends AbstractTuttiBeanUIModel<OperationFieldMappingRow, EditProtocolOperationFieldsRowModel> { + + public static final String PROPERTY_FIELD = "field"; + public static final String PROPERTY_IMPORT_FILE_COLUMN = "importFileColumn"; + + protected String field; + protected String importFileColumn; + + protected static final Binder<OperationFieldMappingRow, EditProtocolOperationFieldsRowModel> fromBeanBinder = + BinderFactory.newBinder(OperationFieldMappingRow.class, + EditProtocolOperationFieldsRowModel.class); + + protected static final Binder<EditProtocolOperationFieldsRowModel, OperationFieldMappingRow> toBeanBinder = + BinderFactory.newBinder(EditProtocolOperationFieldsRowModel.class, + OperationFieldMappingRow.class); + + public EditProtocolOperationFieldsRowModel() { + super(fromBeanBinder, toBeanBinder); + } + + public String getField() { + return field; + } + + public void setField(String field) { + Object oldValue = getField(); + this.field = field; + firePropertyChanged(PROPERTY_FIELD, oldValue, field); + } + + public String getImportFileColumn() { + return importFileColumn; + } + + public void setImportFileColumn(String importFileColumn) { + Object oldValue = getImportFileColumn(); + this.importFileColumn = importFileColumn; + firePropertyChanged(PROPERTY_IMPORT_FILE_COLUMN, oldValue, importFileColumn); + } + + @Override + protected OperationFieldMappingRow newEntity() { + return new OperationFieldMappingRowBean(); + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolOperationFieldsTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolOperationFieldsTableModel.java new file mode 100644 index 0000000..5d636a9 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolOperationFieldsTableModel.java @@ -0,0 +1,37 @@ +package fr.ifremer.tutti.ui.swing.content.protocol; + +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import org.jdesktop.swingx.table.TableColumnModelExt; +import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; +import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; + +import java.util.Collection; + +import static org.nuiton.i18n.I18n.n; + +/** + * @author Kevin Morin (Code Lutin) + * @since x.x + */ +public class EditProtocolOperationFieldsTableModel extends AbstractApplicationTableModel<EditProtocolOperationFieldsRowModel> { + + public static final ColumnIdentifier<EditProtocolCaracteristicsRowModel> FIELD = ColumnIdentifier.newId( + EditProtocolOperationFieldsRowModel.PROPERTY_FIELD, + n("tutti.editProtocol.table.header.operationFields.field"), + n("tutti.editProtocol.table.header.operationFields.field.tip")); + + public static final ColumnIdentifier<EditProtocolCaracteristicsRowModel> IMPORT_FILE_COLUMN = ColumnIdentifier.newId( + EditProtocolOperationFieldsRowModel.PROPERTY_IMPORT_FILE_COLUMN, + n("tutti.editProtocol.table.header.operationFields.importFileColumn"), + n("tutti.editProtocol.table.header.operationFields.importFileColumn.tip")); + + public EditProtocolOperationFieldsTableModel(TableColumnModelExt columnModel) { + super(columnModel, false, false); + setNoneEditableCols(FIELD); + } + + @Override + public EditProtocolOperationFieldsRowModel createNewRow() { + return new EditProtocolOperationFieldsRowModel(); + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java index d7c4c66..ab141b5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java @@ -34,6 +34,7 @@ import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicType; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Speciess; @@ -458,8 +459,11 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI } }); + model.setVersion(TuttiProtocols.CURRENT_PROTOCOL_VERSION); + dialog = new SelectSpeciesUI(false, this.ui); + ui.getCaracteristicsTable().getModel().setModify(false); listenModelModifiy(ui.getCaracteristicsTable().getModel()); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java index 506a97b..5650ef4 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java @@ -26,6 +26,7 @@ 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.CaracteristicMappingRow; +import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; @@ -665,4 +666,66 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, editObject.setImportColumns(importColumns); firePropertyChanged(TuttiProtocol.PROPERTY_IMPORT_COLUMNS, null, getImportColumns()); } + + @Override + public void setOperationFieldMapping(Collection<OperationFieldMappingRow> operationFieldMapping) { + editObject.setOperationFieldMapping(operationFieldMapping); + firePropertyChanged(TuttiProtocol.PROPERTY_OPERATION_FIELD_MAPPING, null, getOperationFieldMapping()); + } + + @Override + public Collection<OperationFieldMappingRow> getOperationFieldMapping() { + return editObject.getOperationFieldMapping(); + } + + @Override + public boolean containsAllOperationFieldMapping(Collection<OperationFieldMappingRow> operationFieldMapping) { + return editObject.containsAllOperationFieldMapping(operationFieldMapping); + } + + @Override + public boolean containsOperationFieldMapping(OperationFieldMappingRow operationFieldMapping) { + return editObject.containsOperationFieldMapping(operationFieldMapping); + } + + @Override + public boolean removeAllOperationFieldMapping(Collection<OperationFieldMappingRow> operationFieldMapping) { + boolean removeAllOperationFieldMapping = editObject.removeAllOperationFieldMapping(operationFieldMapping); + firePropertyChanged(TuttiProtocol.PROPERTY_OPERATION_FIELD_MAPPING, null, getOperationFieldMapping()); + return removeAllOperationFieldMapping; + } + + @Override + public boolean removeOperationFieldMapping(OperationFieldMappingRow operationFieldMapping) { + boolean removeOperationFieldMapping = editObject.removeOperationFieldMapping(operationFieldMapping); + firePropertyChanged(TuttiProtocol.PROPERTY_OPERATION_FIELD_MAPPING, null, getOperationFieldMapping()); + return removeOperationFieldMapping; + } + + @Override + public void addAllOperationFieldMapping(Collection<OperationFieldMappingRow> operationFieldMapping) { + editObject.addAllOperationFieldMapping(operationFieldMapping); + firePropertyChanged(TuttiProtocol.PROPERTY_OPERATION_FIELD_MAPPING, null, getOperationFieldMapping()); + } + + @Override + public void addOperationFieldMapping(OperationFieldMappingRow operationFieldMapping) { + editObject.addOperationFieldMapping(operationFieldMapping); + firePropertyChanged(TuttiProtocol.PROPERTY_OPERATION_FIELD_MAPPING, null, getOperationFieldMapping()); + } + + @Override + public int sizeOperationFieldMapping() { + return editObject.sizeOperationFieldMapping(); + } + + @Override + public boolean isOperationFieldMappingEmpty() { + return editObject.isOperationFieldMappingEmpty(); + } + + @Override + public OperationFieldMappingRow getOperationFieldMapping(int index) { + return editObject.getOperationFieldMapping(index); + } } diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index 6f21ba3..a061cdb 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -690,10 +690,16 @@ tutti.editFishingOperation.action.attachments.tip= tutti.editFishingOperation.action.cancelEditFishingOperation= tutti.editFishingOperation.action.cancelEditFishingOperation.mnemonic= tutti.editFishingOperation.action.cancelEditFishingOperation.tip= +tutti.editFishingOperation.action.chooseColumnsFile.import= tutti.editFishingOperation.action.deleteFishingOperation.message= tutti.editFishingOperation.action.deleteFishingOperation.tip= tutti.editFishingOperation.action.deleteFishingOperation.title= tutti.editFishingOperation.action.editFishingOperation.tip= +tutti.editFishingOperation.action.importColumns.operationNotFound= +tutti.editFishingOperation.action.importColumns.success= +tutti.editFishingOperation.action.importFromColumnFile= +tutti.editFishingOperation.action.importFromColumnFile.mnemonic= +tutti.editFishingOperation.action.importFromColumnFile.tip= tutti.editFishingOperation.action.resetEditFishingOperation= tutti.editFishingOperation.action.resetEditFishingOperation.mnemonic= tutti.editFishingOperation.action.resetEditFishingOperation.tip= @@ -703,6 +709,7 @@ tutti.editFishingOperation.action.resetFishingOperationValidState.tip= tutti.editFishingOperation.action.saveEditFishingOperation.mnemonic= tutti.editFishingOperation.action.saveEditFishingOperation.tip= tutti.editFishingOperation.action.saveFishingOperation= +tutti.editFishingOperation.action.title.choose.importColumnsFile= tutti.editFishingOperation.askCancelEditBeforeLeaving.cancelEditFishingOperation= tutti.editFishingOperation.askSaveBeforeLeaving.createFishingOperation= tutti.editFishingOperation.askSaveBeforeLeaving.saveFishingOperation= @@ -972,6 +979,10 @@ tutti.editProtocol.table.header.countIfNoFrequency= tutti.editProtocol.table.header.countIfNoFrequency.tip= tutti.editProtocol.table.header.lengthStep= tutti.editProtocol.table.header.lengthStep.tip= +tutti.editProtocol.table.header.operationFields.field= +tutti.editProtocol.table.header.operationFields.field.tip= +tutti.editProtocol.table.header.operationFields.importFileColumn= +tutti.editProtocol.table.header.operationFields.importFileColumn.tip= tutti.editProtocol.table.header.speciesReferenceTaxonId= tutti.editProtocol.table.header.speciesReferenceTaxonId.tip= tutti.editProtocol.table.header.speciesSurveyCode= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index 53967e3..dffeadc 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -674,10 +674,16 @@ tutti.editFishingOperation.action.attachments.tip=Pièces-jointes de l'opératio tutti.editFishingOperation.action.cancelEditFishingOperation=Annuler tutti.editFishingOperation.action.cancelEditFishingOperation.mnemonic=A tutti.editFishingOperation.action.cancelEditFishingOperation.tip=Annuler la création du trait +tutti.editFishingOperation.action.chooseColumnsFile.import=Choisir le fichier de colonnes tutti.editFishingOperation.action.deleteFishingOperation.message=Vous êtes sur le point de supprimer l'opération de pêche <strong>%s</strong> tutti.editFishingOperation.action.deleteFishingOperation.tip=Supprimer l'opération de pêche sélectionnée tutti.editFishingOperation.action.deleteFishingOperation.title=Supprimer l'opération de pêche sélectionnée tutti.editFishingOperation.action.editFishingOperation.tip=Éditer l'opération de pêche +tutti.editFishingOperation.action.importColumns.operationNotFound=Le trait n'a pas été trouvé dans le fichier importé +tutti.editFishingOperation.action.importColumns.success=Les données du fichier ont été importées dans le trait +tutti.editFishingOperation.action.importFromColumnFile=Import du fichier de colonnes +tutti.editFishingOperation.action.importFromColumnFile.mnemonic=c +tutti.editFishingOperation.action.importFromColumnFile.tip=Import du fichier de colonnes tutti.editFishingOperation.action.resetEditFishingOperation=Réinitialiser tutti.editFishingOperation.action.resetEditFishingOperation.mnemonic=R tutti.editFishingOperation.action.resetEditFishingOperation.tip=Réinitialiser l'édition du trait @@ -687,6 +693,7 @@ tutti.editFishingOperation.action.resetFishingOperationValidState.tip=Réinitial tutti.editFishingOperation.action.saveEditFishingOperation.mnemonic=E tutti.editFishingOperation.action.saveEditFishingOperation.tip=Enregistrer le trait tutti.editFishingOperation.action.saveFishingOperation=Enregistrer +tutti.editFishingOperation.action.title.choose.importColumnsFile=Importer par fichier de colonnes tutti.editFishingOperation.askCancelEditBeforeLeaving.cancelEditFishingOperation=Le trait modifié n'est pas valide et ne peut pas être enregistré tutti.editFishingOperation.askSaveBeforeLeaving.createFishingOperation=Le trait n'a pas été créé tutti.editFishingOperation.askSaveBeforeLeaving.saveFishingOperation=Des modifications sur le trait n'ont pas été enregistrées @@ -952,6 +959,10 @@ tutti.editProtocol.table.header.countIfNoFrequency=Dénombrement tutti.editProtocol.table.header.countIfNoFrequency.tip=L'espèce doit elle être dénombrée ? tutti.editProtocol.table.header.lengthStep=Mode de mensuration tutti.editProtocol.table.header.lengthStep.tip=Comment mesurer les classes de taille ? (si vide alors pas de mesure) +tutti.editProtocol.table.header.operationFields.field=Champ +tutti.editProtocol.table.header.operationFields.field.tip=Champ du formulaire de trait +tutti.editProtocol.table.header.operationFields.importFileColumn=Colonne du fichier d'import +tutti.editProtocol.table.header.operationFields.importFileColumn.tip=Colonne du fichier d'import tutti.editProtocol.table.header.speciesReferenceTaxonId=Espèce tutti.editProtocol.table.header.speciesReferenceTaxonId.tip=Code Rubin – Nom scientifique tutti.editProtocol.table.header.speciesSurveyCode=Code campagne -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm