branch feature/5954 updated (7fb8216 -> 538a1ca)
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 7fb8216 refs #6129 mapping des champs du trait avec les colonnes + début import dans le trait new 538a1ca refactoring : table des caractéristiques non éditable, ajouter les caractéristiques depuis la liste déroulante au dessus 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 538a1cad82fe0ed27a1d2baa929eb628639eb69b Author: Kevin Morin <morin@codelutin.com> Date: Mon Dec 8 17:38:25 2014 +0100 refactoring : table des caractéristiques non éditable, ajouter les caractéristiques depuis la liste déroulante au dessus Summary of changes: .../entities/protocol/TuttiProtocols.java | 87 ++--- .../filtered-resources/tutti-help-fr.properties | 5 +- ...ion.java => AddCaracteristicMappingAction.java} | 47 ++- .../swing/action/ImportFromColumnFileAction.java | 87 +++-- .../swing/action/ImportProtocolBenthosAction.java | 2 +- .../swing/action/ImportProtocolSpeciesAction.java | 2 +- .../tutti/ui/swing/action/SaveProtocolAction.java | 24 +- .../content/protocol/CaracteristicMappingUI.css | 20 -- .../content/protocol/CaracteristicMappingUI.jaxx | 46 --- .../protocol/CaracteristicMappingUIHandler.java | 343 -------------------- .../protocol/CaracteristicMappingUIModel.java | 99 ------ .../EditProtocolCaracteristicsRowModel.java | 18 +- .../EditProtocolCaracteristicsTableModel.java | 6 +- .../EditProtocolOperationFieldsRowModel.java | 25 +- .../EditProtocolOperationFieldsTableModel.java | 5 +- .../ui/swing/content/protocol/EditProtocolUI.css | 31 ++ .../ui/swing/content/protocol/EditProtocolUI.jaxx | 30 +- .../content/protocol/EditProtocolUIHandler.java | 355 +++++++++++++++------ .../content/protocol/EditProtocolUIModel.java | 28 ++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 4 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 4 + 21 files changed, 534 insertions(+), 734 deletions(-) copy tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/{AddSpeciesProtocolAction.java => AddCaracteristicMappingAction.java} (57%) delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUI.css delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUI.jaxx delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUIHandler.java delete mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUIModel.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 538a1cad82fe0ed27a1d2baa929eb628639eb69b Author: Kevin Morin <morin@codelutin.com> Date: Mon Dec 8 17:38:25 2014 +0100 refactoring : table des caractéristiques non éditable, ajouter les caractéristiques depuis la liste déroulante au dessus --- .../entities/protocol/TuttiProtocols.java | 87 ++--- .../filtered-resources/tutti-help-fr.properties | 5 +- .../action/AddCaracteristicMappingAction.java | 96 ++++++ .../swing/action/ImportFromColumnFileAction.java | 87 +++-- .../swing/action/ImportProtocolBenthosAction.java | 2 +- .../swing/action/ImportProtocolSpeciesAction.java | 2 +- .../tutti/ui/swing/action/SaveProtocolAction.java | 24 +- .../content/protocol/CaracteristicMappingUI.css | 20 -- .../content/protocol/CaracteristicMappingUI.jaxx | 46 --- .../protocol/CaracteristicMappingUIHandler.java | 343 -------------------- .../protocol/CaracteristicMappingUIModel.java | 99 ------ .../EditProtocolCaracteristicsRowModel.java | 18 +- .../EditProtocolCaracteristicsTableModel.java | 6 +- .../EditProtocolOperationFieldsRowModel.java | 25 +- .../EditProtocolOperationFieldsTableModel.java | 5 +- .../ui/swing/content/protocol/EditProtocolUI.css | 31 ++ .../ui/swing/content/protocol/EditProtocolUI.jaxx | 30 +- .../content/protocol/EditProtocolUIHandler.java | 355 +++++++++++++++------ .../content/protocol/EditProtocolUIModel.java | 28 ++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 4 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 4 + 21 files changed, 610 insertions(+), 707 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 afa555c..eaeae66 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,7 +76,7 @@ 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 final Integer CURRENT_PROTOCOL_VERSION = 3; public static void toFile(TuttiProtocol protocol, File file) { @@ -97,63 +97,70 @@ public class TuttiProtocols extends AbstractTuttiProtocols { } public static TuttiProtocol fromFile(File file) { - + TuttiProtocol result; Reader fileReader = null; try { fileReader = Files.newReader(file, Charsets.UTF_8); YamlReader reader = new YamlReader(fileReader, createConfig()); - TuttiProtocol result = reader.read(typeOfTuttiProtocol()); + result = reader.read(typeOfTuttiProtocol()); fileReader.close(); - // transform String to Integer... + if (!CURRENT_PROTOCOL_VERSION.equals(result.getVersion())) { + result = migrateProtocol(file); + } - Integer sampleCategoryIdToRemove = PmfmId.SORTED_UNSORTED.getValue(); + } catch (Exception e) { + result = migrateProtocol(file); - if (!result.isBenthosEmpty()) { - for (SpeciesProtocol speciesProtocol : result.getBenthos()) { - List mandatorySampleCategoryId = speciesProtocol.getMandatorySampleCategoryId(); - List<Integer> mandatorySampleCategoryIdInteger = Lists.newArrayList(); - for (Object o : mandatorySampleCategoryId) { - mandatorySampleCategoryIdInteger.add(Integer.valueOf(o.toString())); - } - mandatorySampleCategoryIdInteger.remove(sampleCategoryIdToRemove); - speciesProtocol.setMandatorySampleCategoryId(mandatorySampleCategoryIdInteger); + } finally { + IOUtils.closeQuietly(fileReader); + } + Integer sampleCategoryIdToRemove = PmfmId.SORTED_UNSORTED.getValue(); + // transform String to Integer... + if (!result.isBenthosEmpty()) { + for (SpeciesProtocol speciesProtocol : result.getBenthos()) { + List mandatorySampleCategoryId = speciesProtocol.getMandatorySampleCategoryId(); + List<Integer> mandatorySampleCategoryIdInteger = Lists.newArrayList(); + for (Object o : mandatorySampleCategoryId) { + mandatorySampleCategoryIdInteger.add(Integer.valueOf(o.toString())); } - } - if (!result.isSpeciesEmpty()) { - for (SpeciesProtocol speciesProtocol : result.getSpecies()) { - List mandatorySampleCategoryId = speciesProtocol.getMandatorySampleCategoryId(); - List<Integer> mandatorySampleCategoryIdInteger = Lists.newArrayList(); - for (Object o : mandatorySampleCategoryId) { - mandatorySampleCategoryIdInteger.add(Integer.valueOf(o.toString())); - } - mandatorySampleCategoryIdInteger.remove(sampleCategoryIdToRemove); - speciesProtocol.setMandatorySampleCategoryId(mandatorySampleCategoryIdInteger); + mandatorySampleCategoryIdInteger.remove(sampleCategoryIdToRemove); + speciesProtocol.setMandatorySampleCategoryId(mandatorySampleCategoryIdInteger); + } + } + if (!result.isSpeciesEmpty()) { + for (SpeciesProtocol speciesProtocol : result.getSpecies()) { + List mandatorySampleCategoryId = speciesProtocol.getMandatorySampleCategoryId(); + List<Integer> mandatorySampleCategoryIdInteger = Lists.newArrayList(); + for (Object o : mandatorySampleCategoryId) { + mandatorySampleCategoryIdInteger.add(Integer.valueOf(o.toString())); } + mandatorySampleCategoryIdInteger.remove(sampleCategoryIdToRemove); + speciesProtocol.setMandatorySampleCategoryId(mandatorySampleCategoryIdInteger); + } - return result; + } - } catch (Exception e) { - //try to load a v2 - try { - // try to load a v1 - TuttiProtocol2 tuttiProtocol2 = fromFileV2(file); + return result; + } - TuttiProtocol result = fromTuttiProtocol2(tuttiProtocol2); - return result; + protected static TuttiProtocol migrateProtocol(File file) { + //try to load a v2 + try { + // try to load a v1 + TuttiProtocol2 tuttiProtocol2 = fromFileV2(file); - } catch (Exception ee) { - // try to load a v1 - TuttiProtocol1 tuttiProtocol1 = fromFileV1(file); + TuttiProtocol result = fromTuttiProtocol2(tuttiProtocol2); + return result; - TuttiProtocol result = fromTuttiProtocol1(tuttiProtocol1); - return result; - } + } catch (Exception ee) { + // try to load a v1 + TuttiProtocol1 tuttiProtocol1 = fromFileV1(file); - } finally { - IOUtils.closeQuietly(fileReader); + TuttiProtocol result = fromTuttiProtocol1(tuttiProtocol1); + return result; } } 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 f5c6bc6..2597777 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,6 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Mon Dec 01 16:05:35 CET 2014 +#Mon Dec 08 17:29:36 CET 2014 +\ "tutti.editProtocol.action.addCaracteristicMapping.help"\ = tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -225,6 +226,7 @@ tutti.editProgram.field.name.help=editProgram.html\#fields tutti.editProgram.field.zone.help=editProgram.html\#fields tutti.editProgram.help=editProgram.html tutti.editProtocol.action.addBenthosProtocol.help=editProtocol.html\#actionsBenthos +tutti.editProtocol.action.addCaracteristicMapping.help= tutti.editProtocol.action.addSpeciesProtocol.help=editProtocol.html\#actionsSpecies tutti.editProtocol.action.closeEditProtocol.help=editProtocol.html\#actions tutti.editProtocol.action.exportProtocolAllCaracteristic.help=editProtocol.html\#actionsCaracteristics @@ -242,6 +244,7 @@ tutti.editProtocol.action.saveProtocol.help=editProtocol.html\#actions tutti.editProtocol.action.selectOtherBenthos.help=editProtocol.html\#actionsBenthos tutti.editProtocol.action.selectOtherSpecies.help=editProtocol.html\#actionsSpecies tutti.editProtocol.field.benthos.help=editProtocol.html\#fieldsBenthos +tutti.editProtocol.field.caracteristicMapping.help= tutti.editProtocol.field.comment.help=editProtocol.html\#fields tutti.editProtocol.field.gearUseFeature.help=editProtocol.html\#fieldsCaracteristics tutti.editProtocol.field.individualObservation.help=editProtocol.html\#fieldsCaracteristics diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/AddCaracteristicMappingAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/AddCaracteristicMappingAction.java new file mode 100644 index 0000000..6b72393 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/AddCaracteristicMappingAction.java @@ -0,0 +1,96 @@ +package fr.ifremer.tutti.ui.swing.action; + +/* + * #%L + * Tutti :: UI + * %% + * Copyright (C) 2012 - 2014 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Preconditions; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolCaracteristicsRowModel; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolCaracteristicsTableModel; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesTableModel; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIHandler; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; +import jaxx.runtime.SwingUtil; +import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; + +import java.util.Collection; + +import static org.nuiton.i18n.I18n.t; + +/** + * To add a new species protocol. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.0 + */ +public class AddCaracteristicMappingAction extends AbstractTuttiAction<EditProtocolUIModel, EditProtocolUI, EditProtocolUIHandler> { + + public AddCaracteristicMappingAction(EditProtocolUIHandler handler) { + super(handler, false); + } + + protected Caracteristic caracteristic; + + protected EditProtocolCaracteristicsRowModel newRow; + + @Override + public void doAction() throws Exception { + + EditProtocolUI ui = getUI(); + + BeanFilterableComboBox<Caracteristic> caracteristicMappingCombBox = ui.getCaracteristicMappingComboBox(); + + caracteristic = (Caracteristic) caracteristicMappingCombBox.getSelectedItem(); + Preconditions.checkNotNull( + caracteristic, "Can't add a speciesProtocol with a null species"); + + // add new row to model (do it after combo stuff for ui best display) + newRow = handler.createEditProtocolCaracteristicsRowModel(); + newRow.setPsfm(caracteristic); + + getModel().getCaracteristicMappingRows().add(newRow); + } + + @Override + public void postSuccessAction() { + super.postSuccessAction(); + + // update comboboxes + getUI().getCaracteristicMappingComboBox().removeItem(caracteristic); + + // fire row was inserted in table model + EditProtocolCaracteristicsTableModel tableModel = getHandler().getCaracteristicMappingTableModel(); + tableModel.fireTableRowsInserted(newRow); + + // select this new row + int rowIndex = tableModel.getRowIndex(newRow); + SwingUtil.setSelectionInterval(handler.getCaracteristicsMappingTable(), rowIndex); + + // add notification + String caracteristicStr = decorate(caracteristic); + sendMessage(t("tutti.flash.info.caracteristic.add.to.protocol", + caracteristicStr)); + } +} 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 index 259f96f..aaa73f6 100644 --- 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 @@ -1,34 +1,36 @@ 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.TuttiEntities; 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.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.Person; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; 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.Import2; +import org.nuiton.csv.ImportConf; +import org.nuiton.csv.ImportRow; 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.ArrayList; import java.util.Collection; -import java.util.Date; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; @@ -46,6 +48,8 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO protected File columnsFile; + protected String error; + public ImportFromColumnFileAction(EditFishingOperationUIHandler handler) { super(handler, true); } @@ -70,9 +74,12 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO Set<String> headers = Sets.newHashSet(CsvReaders.getHeader(columnsFile, ';')); - ImportFromColumnFile importModel = new ImportFromColumnFile(';', headers); - Import<FishingOperation> operationUIModelImport = - Import.newImport(importModel, new FileInputStream(columnsFile)); + ImportFromColumnFileModel importModel = new ImportFromColumnFileModel(';', new HashSet<>(headers)); + ImportConf conf = new ImportConf(); + conf.setStrictMode(false); +// conf.setIgnoreUnknownHeader(true); + Import2<FishingOperation> operationUIModelImport = + Import2.newImport(conf, importModel, new FileInputStream(columnsFile)); TuttiProtocol protocol = getDataContext().getProtocol(); final Map<String, OperationFieldMappingRow> mappingRowsByField = @@ -104,28 +111,44 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO }; boolean found = false; - while (!found && operationUIModelImport.iterator().hasNext()) { - FishingOperation next = operationUIModelImport.iterator().next(); - if (predicate.apply(next)) { - getModel().fromEntity(next); + Iterator<ImportRow<FishingOperation>> iterator = operationUIModelImport.iterator(); + while (!found && iterator.hasNext()) { + ImportRow<FishingOperation> next = iterator.next(); + FishingOperation fishingOperation = next.getBean(); + + if (predicate.apply(fishingOperation)) { + if (next.isValid()) { + getModel().fromEntity(fishingOperation); + + } else { + if (log.isErrorEnabled()) { + log.error(next.getErrors()); + } + error = next.getErrors().toString(); + } found = true; } } if (!found) { - throw new Exception(t("tutti.editFishingOperation.action.importColumns.operationNotFound")); + error = t("tutti.editFishingOperation.action.importColumns.operationNotFound"); } } @Override public void postSuccessAction() { super.postSuccessAction(); - sendMessage(t("tutti.editFishingOperation.action.importColumns.success")); + if (error != null) { + displayErrorMessage("error", error); + } else { + sendMessage(t("tutti.editFishingOperation.action.importColumns.success")); + } + error = null; } - protected class ImportFromColumnFile extends TuttiCsvUtil.AbstractTuttiImportModel<FishingOperation> { + protected class ImportFromColumnFileModel extends TuttiCsvUtil.AbstractTuttiImportModel<FishingOperation> { - public ImportFromColumnFile(char separator, Set<String> headers) { + public ImportFromColumnFileModel(char separator, Set<String> headers) { super(separator); TuttiProtocol protocol = getDataContext().getProtocol(); @@ -156,16 +179,38 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO break; case EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_RECTILIGNE: - case EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_VALID: valueParser = TuttiCsvUtil.PRIMITIVE_BOOLEAN; break; + case EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_VALID: + valueParser = TuttiCsvUtil.BOOLEAN; + break; + case EditFishingOperationUIModel.PROPERTY_GEAR: + List<Gear> gears = new ArrayList<>(getDataContext().getFishingGears()); + gears.addAll(getDataContext().getScientificGears()); + Map<String, Gear> gearUniverse = TuttiEntities.splitById(gears); + valueParser = newForeignKeyValue(Gear.class, field, gearUniverse); + break; + case EditFishingOperationUIModel.PROPERTY_VESSEL: - case EditFishingOperationUIModel.PROPERTY_STRATA: - case EditFishingOperationUIModel.PROPERTY_SUB_STRATA: case EditFishingOperationUIModel.PROPERTY_SECONDARY_VESSEL: + List<Vessel> vessels = new ArrayList<>(getDataContext().getFishingVessels()); + vessels.addAll(getDataContext().getScientificVessels()); + Map<String, Vessel> vesselUniverse = TuttiEntities.splitById(vessels); + valueParser = newForeignKeyValue(Vessel.class, field, vesselUniverse); + break; + +// case EditFishingOperationUIModel.PROPERTY_STRATA: +// case EditFishingOperationUIModel.PROPERTY_SUB_STRATA: +// Map<String, TuttiLocation> locationUniverse = TuttiEntities.splitById(getDataContext().getL); +// valueParser = newForeignKeyValue(Gear.class, field, gearUniverse); +// break; + case EditFishingOperationUIModel.PROPERTY_RECORDER_PERSON: + Map<String, Person> personUniverse = TuttiEntities.splitById(getDataContext().getPersons()); + valueParser = newForeignKeyValue(Person.class, field, personUniverse); + break; default: valueParser = TuttiCsvUtil.STRING; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolBenthosAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolBenthosAction.java index 377c076..b120e79 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolBenthosAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolBenthosAction.java @@ -108,7 +108,7 @@ public class ImportProtocolBenthosAction extends AbstractTuttiAction<EditProtoco // build rows from imported+merged protocol // (will also remove all synonyms of species referent used) List<EditProtocolSpeciesRowModel> rows = - handler.toRows(protocol.getBenthos()); + handler.toSpeciesRows(protocol.getBenthos()); // update species comboBox getUI().getSpeciesComboBox().getHandler().reset(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolSpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolSpeciesAction.java index 718d459..4a4a7f5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolSpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportProtocolSpeciesAction.java @@ -108,7 +108,7 @@ public class ImportProtocolSpeciesAction extends AbstractTuttiAction<EditProtoco // build rows from imported+merged protocol // (will also remove all synonyms of species referent used) List<EditProtocolSpeciesRowModel> rows = - handler.toRows(protocol.getSpecies()); + handler.toSpeciesRows(protocol.getSpecies()); // update species comboBox getUI().getSpeciesComboBox().getHandler().reset(); 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 4d96eab..b1702f9 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 @@ -23,6 +23,8 @@ package fr.ifremer.tutti.ui.swing.action; * #L% */ +import com.google.common.base.Function; +import com.google.common.collect.Collections2; import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; @@ -31,12 +33,16 @@ import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolCaracteristicsRowModel; +import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolOperationFieldsRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIHandler; import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.util.StringUtil; import java.util.ArrayList; import java.util.List; @@ -71,12 +77,22 @@ public class SaveProtocolAction extends AbstractTuttiAction<EditProtocolUIModel, TuttiProtocol bean = model.toBean(); - List<CaracteristicMappingRow> caracteristicMappingRows = - new ArrayList<>(getUI().getCaracteristicsTable().getModel().getCaracteristicMapping().values()); + List<EditProtocolCaracteristicsRowModel> protocolCaracteristicMappingRows = getUI().getModel().getCaracteristicMappingRows(); + List<CaracteristicMappingRow> caracteristicMappingRows = new ArrayList<CaracteristicMappingRow>(); + for (EditProtocolCaracteristicsRowModel row : protocolCaracteristicMappingRows) { + if (row.getPsfm() != null && row.getType() != null) { + caracteristicMappingRows.add(row.toEntity()); + } + } bean.setCaracteristicMapping(caracteristicMappingRows); - List<OperationFieldMappingRow> operationFieldMappingRows = - new ArrayList<>(getUI().getCaracteristicsTable().getModel().getOperationFieldMappingRows().values()); + List<EditProtocolOperationFieldsRowModel> protocolOperationFieldMappingRows = getUI().getModel().getOperationFieldMappingRows(); + List<OperationFieldMappingRow> operationFieldMappingRows = new ArrayList<OperationFieldMappingRow>(); + for (EditProtocolOperationFieldsRowModel row : protocolOperationFieldMappingRows) { + if (StringUtils.isNotBlank(row.getField()) && StringUtils.isNotBlank(row.getImportColumn())) { + operationFieldMappingRows.add(row.toEntity()); + } + } bean.setOperationFieldMapping(operationFieldMappingRows); // get the species protocols from the table 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 deleted file mode 100644 index d92ab70..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUI.css +++ /dev/null @@ -1,20 +0,0 @@ -#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 deleted file mode 100644 index 52c3949..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUI.jaxx +++ /dev/null @@ -1,46 +0,0 @@ -<JPanel layout="{new BorderLayout()}" - implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<CaracteristicMappingUIModel, CaracteristicMappingUIHandler>'> - - <import> - fr.ifremer.tutti.persistence.entities.referential.Caracteristic - fr.ifremer.tutti.persistence.entities.referential.Species - - fr.ifremer.tutti.ui.swing.TuttiHelpBroker - fr.ifremer.tutti.ui.swing.util.TuttiUI - fr.ifremer.tutti.ui.swing.util.TuttiUIUtil - - jaxx.runtime.swing.editor.bean.BeanFilterableComboBox - jaxx.runtime.swing.editor.bean.BeanDoubleList - - java.awt.Color - - javax.swing.ListSelectionModel - - org.jdesktop.swingx.JXTable - - static org.nuiton.i18n.I18n.t - static jaxx.runtime.SwingUtil.getStringValue - - </import> - - <script><![CDATA[ - - public CaracteristicMappingUI(TuttiUI parentUI) { - TuttiUIUtil.setParentUI(this, parentUI); - } - ]]> - </script> - - <CaracteristicMappingUIModel id='model' - initializer='getContextValue(CaracteristicMappingUIModel.class)'/> - - <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 deleted file mode 100644 index 5c4252a..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUIHandler.java +++ /dev/null @@ -1,343 +0,0 @@ -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.SwingUtil; -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.table.DefaultTableColumnModelExt; -import org.jdesktop.swingx.table.TableColumnExt; -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) - * @since x.x - */ -public class CaracteristicMappingUIHandler - extends AbstractTuttiTableUIHandler<EditProtocolCaracteristicsRowModel, CaracteristicMappingUIModel, CaracteristicMappingUI> { - - private static final Log log = LogFactory.getLog(CaracteristicMappingUIHandler.class); - - public CaracteristicMappingUIHandler() { - super(EditProtocolCaracteristicsRowModel.PROPERTY_PSFM, - EditProtocolCaracteristicsRowModel.PROPERTY_TYPE, - EditProtocolCaracteristicsRowModel.PROPERTY_IMPORT_FILE_COLUMN); - } - - @Override - public AbstractApplicationTableModel<EditProtocolCaracteristicsRowModel> getTableModel() { - return (EditProtocolCaracteristicsTableModel) getTable().getModel(); - } - - @Override - public JXTable getTable() { - return getUI().getCaracteristicsTable(); - } - - @Override - protected boolean isRowValid(EditProtocolCaracteristicsRowModel row) { - return row.getPsfm() != null && row.getType() != null; - } - - @Override - protected void saveSelectedRowIfRequired(TuttiBeanMonitor<EditProtocolCaracteristicsRowModel> rowMonitor, - EditProtocolCaracteristicsRowModel row) { - if (row.isValid()) { - // there is a valid bean attached to the monitor - - if (rowMonitor.wasModified()) { - - // monitored bean was modified, save it - if (log.isInfoEnabled()) { - log.info("Row " + row + " was modified, will save it"); - } - - getModel().getCaracteristicMapping().put(row.getPsfm().getId(), row.toBean()); - } - } - - } - - @Override - public void onCloseUI() { - - } - - @Override - public SwingValidator<CaracteristicMappingUIModel> getValidator() { - return null; - } - - @Override - protected JComponent getComponentToFocus() { - return null; - } - - @Override - public void beforeInit(CaracteristicMappingUI ui) { - super.beforeInit(ui); - - EditProtocolUIModel editProtocolUIModel = - ui.getContextValue(EditProtocolUIModel.class); - - CaracteristicMappingUIModel model = new CaracteristicMappingUIModel(); - model.setCaracteristics(editProtocolUIModel.getCaracteristics()); - model.setOperationFieldMappingRows(editProtocolUIModel.getOperationFieldMapping()); - - editProtocolUIModel.addPropertyChangeListener(EditProtocolUIModel.PROPERTY_CARACTERISTIC_MAPPING, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - getModel().setCaracteristicMappingRows((List<CaracteristicMappingRow>) evt.getNewValue()); - } - }); - - 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) { - - Collection<String> newValue = (Collection<String>) evt.getNewValue(); - ArrayList<String> dataToList = new ArrayList<String>(); - - if (newValue != null) { - dataToList.addAll(newValue); - - // add a null value at first position - if (!dataToList.isEmpty() && dataToList.get(0) != null) { - dataToList.add(0, null); - } - - } else { - dataToList.add(null); - } - - populateImportColumnTableEditor(getTable(), 2, dataToList); - populateImportColumnTableEditor(getUI().getOperationFieldsMapping(), 1, dataToList); - - } - }); - - 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); - - // init caracteristics mappingtable - { - JXTable caracteristicsMappingTable = getTable(); - - 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); - // } - // }); - - 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())); - - addColumnToModel(columnModel, - EditProtocolCaracteristicsTableModel.IMPORT_FILE_COLUMN); - - EditProtocolCaracteristicsTableModel tableModel = new EditProtocolCaracteristicsTableModel(columnModel, caracteristics); - caracteristicsMappingTable.setModel(tableModel); - caracteristicsMappingTable.setColumnModel(columnModel); - - 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) { - 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 populateCaracteristicsTable(Collection<CaracteristicMappingRow> values) { - List<EditProtocolCaracteristicsRowModel> rows = new ArrayList<EditProtocolCaracteristicsRowModel>(); - for (CaracteristicMappingRow row : values) { - EditProtocolCaracteristicsRowModel rowModel = getTableModel().createNewRow(); - rowModel.fromEntity(row); - recomputeRowValidState(rowModel); - rows.add(rowModel); - } - getModel().setRows(rows); - } - - @Override - protected void initTable(JXTable table) { - super.initTable(table); - installTableKeyListener(table.getColumnModel(), table); - } - - @Override - protected void onRowModified(int rowIndex, EditProtocolCaracteristicsRowModel row, - String propertyName, Object oldValue, Object newValue) { - recomputeRowValidState(row); - super.onRowModified(rowIndex, row, propertyName, oldValue, newValue); - saveSelectedRowIfNeeded(); - } -} 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 deleted file mode 100644 index a353eb5..0000000 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/CaracteristicMappingUIModel.java +++ /dev/null @@ -1,99 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.protocol; - -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; -import org.nuiton.util.beans.BinderFactory; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author Kevin Morin (Code Lutin) - * @since x.x - */ -public class CaracteristicMappingUIModel extends AbstractTuttiTableUIModel<CaracteristicMappingRow, EditProtocolCaracteristicsRowModel, CaracteristicMappingUIModel> { - - 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() { - super(CaracteristicMappingRow.class, null, null); - } - - public List<Caracteristic> getCaracteristics() { - return caracteristics; - } - - public void setCaracteristics(List<Caracteristic> caracteristics) { - this.caracteristics = caracteristics; - } - - public Map<String, CaracteristicMappingRow> getCaracteristicMapping() { - return caracteristicMappingRows; - } - - public void setCaracteristicMappingRows(List<CaracteristicMappingRow> caracteristicMappingRows) { - this.caracteristicMappingRows = new HashMap<String, CaracteristicMappingRow>(); - if (caracteristicMappingRows != null) { - this.caracteristicMappingRows.putAll(Maps.uniqueIndex(caracteristicMappingRows, new Function<CaracteristicMappingRow, String>() { - @Override - public String apply(CaracteristicMappingRow caracteristicMappingRow) { - return caracteristicMappingRow.getPmfmId(); - } - })); - } - firePropertyChanged(PROPERTY_CARACTERISTIC_MAPPING_ROWS, null, caracteristicMappingRows); - 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; - } - - public void setImportColumns(List<String> importColumns) { - this.importColumns.clear(); - if (importColumns != null) { - this.importColumns.addAll(importColumns); - } - } - - @Override - protected CaracteristicMappingRow newEntity() { - return new CaracteristicMappingRowBean(); - } -} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolCaracteristicsRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolCaracteristicsRowModel.java index c845b8e..d2ec82a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolCaracteristicsRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolCaracteristicsRowModel.java @@ -1,7 +1,5 @@ package fr.ifremer.tutti.ui.swing.content.protocol; -import com.google.common.base.Function; -import com.google.common.collect.Maps; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRowBean; @@ -23,12 +21,12 @@ public class EditProtocolCaracteristicsRowModel extends AbstractTuttiBeanUIModel public static final String PROPERTY_PSFM = "psfm"; public static final String PROPERTY_TYPE = "type"; - public static final String PROPERTY_IMPORT_FILE_COLUMN = "importFileColumn"; + public static final String PROPERTY_IMPORT_COLUMN = "importColumn"; protected Map<String, Caracteristic> caracteristicMap; protected Caracteristic psfm; protected CaracteristicType type; - protected String importFileColumn; + protected String importColumn; protected static final Binder<CaracteristicMappingRow, EditProtocolCaracteristicsRowModel> fromBeanBinder = BinderFactory.newBinder(CaracteristicMappingRow.class, @@ -63,14 +61,14 @@ public class EditProtocolCaracteristicsRowModel extends AbstractTuttiBeanUIModel firePropertyChanged(PROPERTY_TYPE, oldValue, type); } - public String getImportFileColumn() { - return importFileColumn; + public String getImportColumn() { + return importColumn; } - public void setImportFileColumn(String importFileColumn) { - Object oldValue = getImportFileColumn(); - this.importFileColumn = importFileColumn; - firePropertyChanged(PROPERTY_IMPORT_FILE_COLUMN, oldValue, importFileColumn); + public void setImportColumn(String importColumn) { + Object oldValue = getImportColumn(); + this.importColumn = importColumn; + firePropertyChanged(PROPERTY_IMPORT_COLUMN, oldValue, importColumn); } public String getPmfmId() { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolCaracteristicsTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolCaracteristicsTableModel.java index 6e262ed..93de4ae 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolCaracteristicsTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolCaracteristicsTableModel.java @@ -28,13 +28,13 @@ public class EditProtocolCaracteristicsTableModel extends AbstractApplicationTab n("tutti.editProtocol.table.header.caracteristics.type.tip")); public static final ColumnIdentifier<EditProtocolCaracteristicsRowModel> IMPORT_FILE_COLUMN = ColumnIdentifier.newId( - EditProtocolCaracteristicsRowModel.PROPERTY_IMPORT_FILE_COLUMN, + EditProtocolCaracteristicsRowModel.PROPERTY_IMPORT_COLUMN, n("tutti.editProtocol.table.header.caracteristics.importFileColumn"), n("tutti.editProtocol.table.header.caracteristics.importFileColumn.tip")); public EditProtocolCaracteristicsTableModel(TableColumnModelExt columnModel, Collection<Caracteristic> caracteristics) { - super(columnModel, true, true); - setNoneEditableCols(); + super(columnModel, false, false); + setNoneEditableCols(PSFM_ID); this.caracteristics = caracteristics; } 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 index ac16751..f0a9b53 100644 --- 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 @@ -1,20 +1,11 @@ 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 @@ -22,10 +13,10 @@ import java.util.Map; public class EditProtocolOperationFieldsRowModel extends AbstractTuttiBeanUIModel<OperationFieldMappingRow, EditProtocolOperationFieldsRowModel> { public static final String PROPERTY_FIELD = "field"; - public static final String PROPERTY_IMPORT_FILE_COLUMN = "importFileColumn"; + public static final String PROPERTY_IMPORT_COLUMN = "importColumn"; protected String field; - protected String importFileColumn; + protected String importColumn; protected static final Binder<OperationFieldMappingRow, EditProtocolOperationFieldsRowModel> fromBeanBinder = BinderFactory.newBinder(OperationFieldMappingRow.class, @@ -49,14 +40,14 @@ public class EditProtocolOperationFieldsRowModel extends AbstractTuttiBeanUIMode firePropertyChanged(PROPERTY_FIELD, oldValue, field); } - public String getImportFileColumn() { - return importFileColumn; + public String getImportColumn() { + return importColumn; } - public void setImportFileColumn(String importFileColumn) { - Object oldValue = getImportFileColumn(); - this.importFileColumn = importFileColumn; - firePropertyChanged(PROPERTY_IMPORT_FILE_COLUMN, oldValue, importFileColumn); + public void setImportColumn(String importColumn) { + Object oldValue = getImportColumn(); + this.importColumn = importColumn; + firePropertyChanged(PROPERTY_IMPORT_COLUMN, oldValue, importColumn); } @Override 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 index 5d636a9..0be5d51 100644 --- 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 @@ -1,12 +1,9 @@ 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; /** @@ -21,7 +18,7 @@ public class EditProtocolOperationFieldsTableModel extends AbstractApplicationTa n("tutti.editProtocol.table.header.operationFields.field.tip")); public static final ColumnIdentifier<EditProtocolCaracteristicsRowModel> IMPORT_FILE_COLUMN = ColumnIdentifier.newId( - EditProtocolOperationFieldsRowModel.PROPERTY_IMPORT_FILE_COLUMN, + EditProtocolOperationFieldsRowModel.PROPERTY_IMPORT_COLUMN, n("tutti.editProtocol.table.header.operationFields.importFileColumn"), n("tutti.editProtocol.table.header.operationFields.importFileColumn.tip")); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css index aec68ad..d12659f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css @@ -76,6 +76,37 @@ JTextField { border: {new javax.swing.border.EmptyBorder(5, 10, 5, 10)}; } +#caracteristicMappingComboBox { + enabled: {!caracteristicMappingComboBox.isEmpty()}; + toolTipText: "tutti.editProtocol.field.caracteristicMapping.tip"; + _help: {"tutti.editProtocol.field.caracteristicMapping.help"}; +} + +#addCaracteristicMappingButton { + actionIcon: add; + toolTipText: "tutti.editProtocol.action.addCaracteristicMapping.tip"; + i18nMnemonic: "tutti.editProtocol.action.addCaracteristicMapping.mnemonic"; + _applicationAction: {fr.ifremer.tutti.ui.swing.action.AddCaracteristicMappingAction.class}; + enabled: { caracteristicMappingComboBox.getSelectedItem() != null }; + _help: { "tutti.editProtocol.action.addCaracteristicMapping.help" }; +} + +#caracteristicsMappingTable { + selectionMode: {ListSelectionModel.SINGLE_SELECTION}; + selectionBackground: {null}; + selectionForeground: {Color.BLACK}; + sortable: false; + enabled: true; +} + +#operationFieldsMappingTable { + selectionMode: {ListSelectionModel.SINGLE_SELECTION}; + selectionBackground: {null}; + selectionForeground: {Color.BLACK}; + sortable: false; + enabled: true; +} + #speciesComboBox { enabled: {!speciesComboBox.isEmpty()}; toolTipText: "tutti.editProtocol.field.species.tip"; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx index 1644756..a976187 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx @@ -121,7 +121,35 @@ genericType='Caracteristic'/> </tab> <tab title='tutti.editProtocol.tab.caracteristic.mapping'> - <CaracteristicMappingUI id='caracteristicsTable' constructorParams="(TuttiUI)this"/> + <Table fill='both'> + + <row fill='both'> + <cell fill='both' weightx='1'> + <BeanFilterableComboBox id='caracteristicMappingComboBox' + constructorParams='this' + genericType='Caracteristic'/> + </cell> + <cell fill='both'> + <JButton id='addCaracteristicMappingButton'/> + </cell> + </row> + <row fill='both' weighty='1'> + <cell fill='both' columns='2'> + <JScrollPane> + <JXTable id='caracteristicsMappingTable'/> + </JScrollPane> + </cell> + </row> + <row fill='both' weighty='1'> + <cell fill='both' columns='2'> + <JScrollPane> + <JXTable id='operationFieldsMappingTable'/> + </JScrollPane> + </cell> + </row> + </Table> + <!--<CaracteristicMappingUI id='caracteristicsTable' constructorParams="(TuttiUI)this"/>--> + </tab> </JTabbedPane> </JPanel> 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 ab141b5..410d831 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 @@ -22,16 +22,20 @@ package fr.ifremer.tutti.ui.swing.content.protocol; * #L% */ +import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.base.Predicate; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; -import fr.ifremer.adagio.core.dao.referential.pmfm.Pmfm; import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; +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.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; @@ -64,19 +68,17 @@ import org.jdesktop.swingx.table.TableColumnExt; import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.application.swing.util.CloseableUI; -import javax.swing.JComboBox; -import javax.swing.JComponent; -import javax.swing.JTabbedPane; -import javax.swing.ListSelectionModel; +import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; +import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.JTableHeader; import javax.swing.table.TableColumnModel; -import java.awt.Dimension; +import java.awt.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; @@ -123,6 +125,14 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI return ui.getBenthosTable(); } + public JXTable getCaracteristicsMappingTable() { + return ui.getCaracteristicsMappingTable(); + } + + public JXTable getOperationFieldsMappingTable() { + return ui.getOperationFieldsMappingTable(); + } + public EditProtocolSpeciesTableModel getSpeciesTableModel() { return (EditProtocolSpeciesTableModel) getSpeciesTable().getModel(); } @@ -135,6 +145,14 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI return selectedItem != null && selectedItem instanceof Species; } + public EditProtocolCaracteristicsTableModel getCaracteristicMappingTableModel() { + return (EditProtocolCaracteristicsTableModel) getCaracteristicsMappingTable().getModel(); + } + + public EditProtocolOperationFieldsTableModel getEditProtocolOperationFieldsMappingTableModel() { + return (EditProtocolOperationFieldsTableModel) getOperationFieldsMappingTable().getModel(); + } + //------------------------------------------------------------------------// //-- AbstractTuttiUIHandler methods --// //------------------------------------------------------------------------// @@ -265,20 +283,38 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI Lists.newArrayList(referents), null); initBeanFilterableComboBox(this.ui.getBenthosComboBox(), Lists.newArrayList(referents), null); + initBeanFilterableComboBox(ui.getCaracteristicMappingComboBox(), + new ArrayList<Caracteristic>(model.getCaracteristics()), + null); + List<EditProtocolCaracteristicsRowModel> caracteristicMappingRows; + List<EditProtocolOperationFieldsRowModel> operationFieldMappingRows; List<EditProtocolSpeciesRowModel> speciesRows; List<EditProtocolSpeciesRowModel> benthosRows; + model.addPropertyChangeListener(EditProtocolUIModel.PROPERTY_IMPORT_COLUMNS, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + populateImportColumnTableEditors(); + + } + }); + incrementsMessage("Préparation des interfaces graphiques"); // build species and benthos rows if (protocol == null) { + caracteristicMappingRows = Lists.newArrayList(); + operationFieldMappingRows = Lists.newArrayList(); speciesRows = Lists.newArrayList(); benthosRows = Lists.newArrayList(); } else { - speciesRows = toRows(protocol.getSpecies()); - benthosRows = toRows(protocol.getBenthos()); + caracteristicMappingRows = toProtocolCaracteristicRows(protocol.getCaracteristicMapping()); + operationFieldMappingRows = toProtocolOperationFieldsRows(protocol.getOperationFieldMapping()); + + speciesRows = toSpeciesRows(protocol.getSpecies()); + benthosRows = toSpeciesRows(protocol.getBenthos()); if (log.isDebugEnabled()) { log.debug("Will edit protocol with " + @@ -290,9 +326,12 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI // set to model (will propagate to tableModel) model.setSpeciesRow(speciesRows); model.setBenthosRow(benthosRows); + model.setCaracteristicMappingRows(caracteristicMappingRows); + model.setOperationFieldMappingRows(operationFieldMappingRows); this.ui.getSpeciesComboBox().reset(); this.ui.getBenthosComboBox().reset(); + this.ui.getCaracteristicMappingComboBox().reset(); { // create species table model @@ -427,6 +466,78 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI Lists.newArrayList(model.getCaracteristics()), model.getIndividualObservationPmfmId()); + // init caracteristics mappingtable + { + JXTable caracteristicsMappingTable = getCaracteristicsMappingTable(); + + DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); + + addColumnToModel(columnModel, + null, + newTableCellRender(Caracteristic.class), + EditProtocolCaracteristicsTableModel.PSFM_ID); + + addComboDataColumnToModel(columnModel, + EditProtocolCaracteristicsTableModel.TYPE, + getDecorator(CaracteristicType.class, null), + Lists.newArrayList(CaracteristicType.getTabTypes())); + + addColumnToModel(columnModel, + EditProtocolCaracteristicsTableModel.IMPORT_FILE_COLUMN); + + List<Caracteristic> caracteristics = new ArrayList<Caracteristic>(getModel().getCaracteristics()); + EditProtocolCaracteristicsTableModel tableModel = new EditProtocolCaracteristicsTableModel(columnModel, caracteristics); + caracteristicsMappingTable.setModel(tableModel); + caracteristicsMappingTable.setColumnModel(columnModel); + + // by default do not authorize to change column orders + caracteristicsMappingTable.getTableHeader().setReorderingAllowed(false); + + addHighlighters(caracteristicsMappingTable); + + // always scroll to selected row + SwingUtil.scrollToTableSelection(caracteristicsMappingTable); + + tableModel.setRows(caracteristicMappingRows); + } + + // init operation fields table + { + JXTable operationFieldsTable = getUI().getOperationFieldsMappingTable(); + + 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(operationFieldMappingRows); + + // always scroll to selected row + SwingUtil.scrollToTableSelection(operationFieldsTable); + } + + populateImportColumnTableEditors(); + // if new protocol can already cancel his creation model.setModify(model.isCreate() || model.isCleaned()); @@ -443,10 +554,6 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI break; case 1: -// selectedDoubleList = EditProtocolUIHandler.this.ui.getGearUseFeatureList(); -// break; -// -// case 2: selectedDoubleList = EditProtocolUIHandler.this.ui.getIndividualObservationList(); break; @@ -463,8 +570,6 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI dialog = new SelectSpeciesUI(false, this.ui); - ui.getCaracteristicsTable().getModel().setModify(false); - listenModelModifiy(ui.getCaracteristicsTable().getModel()); } @Override @@ -472,7 +577,7 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI return getUI().getNameField(); } - public List<EditProtocolSpeciesRowModel> toRows(List<SpeciesProtocol> speciesProtocols) { + public List<EditProtocolSpeciesRowModel> toSpeciesRows(List<SpeciesProtocol> speciesProtocols) { BeanFilterableComboBox<Species> speciesComboBox = ui.getSpeciesComboBox(); Preconditions.checkNotNull(speciesComboBox.getData()); BeanFilterableComboBox<Species> benthosComboBox = ui.getBenthosComboBox(); @@ -547,6 +652,84 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI return result; } + public List<EditProtocolCaracteristicsRowModel> toProtocolCaracteristicRows(List<CaracteristicMappingRow> caracteristicMappingRows) { + BeanFilterableComboBox<Caracteristic> caracteristicMappingComboBox = ui.getCaracteristicMappingComboBox(); + Preconditions.checkNotNull(caracteristicMappingComboBox.getData()); + + EditProtocolUIModel model = getModel(); + + Set<Caracteristic> caracteristicSet = Sets.newHashSet(); + List<EditProtocolCaracteristicsRowModel> result = Lists.newArrayList(); + if (CollectionUtils.isNotEmpty(caracteristicMappingRows)) { + for (CaracteristicMappingRow caracteristicMappingRow : caracteristicMappingRows) { + String pmfmId = caracteristicMappingRow.getPmfmId(); + + if (pmfmId == null) { + + continue; + } + + // make sure it exists + caracteristicSet.add(model.getAllCaracteristic().get(pmfmId)); + + EditProtocolCaracteristicsRowModel row = createEditProtocolCaracteristicsRowModel(); + row.fromBean(caracteristicMappingRow); + row.setValid(row.getType() != null); + + result.add(row); + } + + caracteristicMappingComboBox.removeItems(caracteristicSet); + } + + return result; + } + + public List<EditProtocolOperationFieldsRowModel> toProtocolOperationFieldsRows(Collection<OperationFieldMappingRow> operationFieldMappingRows) { + List<EditProtocolOperationFieldsRowModel> result = Lists.newArrayList(); + + if (operationFieldMappingRows == null) { + operationFieldMappingRows = new ArrayList<OperationFieldMappingRow>(); + } + Map<String, OperationFieldMappingRow> rowsByField = Maps.uniqueIndex(operationFieldMappingRows, + new Function<OperationFieldMappingRow, String>() { + @Override + public String apply(OperationFieldMappingRow operationFieldMappingRow) { + return operationFieldMappingRow.getField(); + } + }); + + List<String> properties = Lists.newArrayList( + FishingOperation.PROPERTY_STATION_NUMBER, + FishingOperation.PROPERTY_FISHING_OPERATION_NUMBER, + FishingOperation.PROPERTY_GEAR_SHOOTING_START_DATE, + FishingOperation.PROPERTY_GEAR_SHOOTING_START_LATITUDE, + FishingOperation.PROPERTY_GEAR_SHOOTING_START_LONGITUDE, + FishingOperation.PROPERTY_GEAR_SHOOTING_END_DATE, + FishingOperation.PROPERTY_GEAR_SHOOTING_END_LATITUDE, + FishingOperation.PROPERTY_GEAR_SHOOTING_END_LONGITUDE, + FishingOperation.PROPERTY_FISHING_OPERATION_RECTILIGNE, + FishingOperation.PROPERTY_TRAWL_DISTANCE, + FishingOperation.PROPERTY_FISHING_OPERATION_VALID, + FishingOperation.PROPERTY_MULTIRIG_AGGREGATION, + FishingOperation.PROPERTY_RECORDER_PERSON, + FishingOperation.PROPERTY_GEAR, + FishingOperation.PROPERTY_VESSEL, + FishingOperation.PROPERTY_STRATA, + FishingOperation.PROPERTY_SUB_STRATA, + FishingOperation.PROPERTY_LOCATION, + FishingOperation.PROPERTY_SECONDARY_VESSEL + ); + //TODO voir avec Vincent comment on gère le cas où aucun des champs clé n'est renseigné + + for (String property : properties) { + OperationFieldMappingRow row = rowsByField.get(property); + EditProtocolOperationFieldsRowModel newRow = createOperationFieldRow(property, row != null ? row.getImportColumn() : null); + result.add(newRow); + } + return result; + } + @Override public void onCloseUI() { if (log.isDebugEnabled()) { @@ -555,7 +738,6 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI clearValidators(); ui.getTabPanel().setSelectedIndex(0); - closeUI(ui.getCaracteristicsTable()); } @Override @@ -605,6 +787,24 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI return model.getSelectedSpecies(); } + public EditProtocolCaracteristicsRowModel createEditProtocolCaracteristicsRowModel() { + EditProtocolCaracteristicsRowModel newRow = new EditProtocolCaracteristicsRowModel(getModel().getCaracteristics()); + + newRow.addPropertyChangeListener(new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + EditProtocolCaracteristicsRowModel row = (EditProtocolCaracteristicsRowModel) evt.getSource(); + row.setValid(row.getType() != null); + + if (row.isValid()) { + getModel().setModify(true); + } + } + }); + + return newRow; + } + //------------------------------------------------------------------------// //-- Internal methods --// //------------------------------------------------------------------------// @@ -758,6 +958,49 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI tableModel.setRows(rows); } + protected EditProtocolOperationFieldsRowModel createOperationFieldRow(String property, String column) { + EditProtocolOperationFieldsRowModel newRow = new EditProtocolOperationFieldsRowModel(); + newRow.setField(property); + newRow.setImportColumn(column); + newRow.setValid(true); + newRow.addPropertyChangeListener(new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + getModel().setModify(true); + } + }); + return newRow; + } + + protected void populateImportColumnTableEditors() { + Collection<String> importColumns = getModel().getImportColumns(); + ArrayList<String> dataToList = new ArrayList<String>(); + + if (importColumns != null) { + dataToList.addAll(importColumns); + + // add a null value at first position + if (!dataToList.isEmpty() && dataToList.get(0) != null) { + dataToList.add(0, null); + } + + } else { + dataToList.add(null); + } + + populateImportColumnTableEditor(getUI().getCaracteristicsMappingTable(), 2, dataToList); + populateImportColumnTableEditor(getUI().getOperationFieldsMappingTable(), 1, dataToList); + } + + 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); + } + protected static class UpdateSelectedList implements PropertyChangeListener { private final BeanDoubleListModel<Caracteristic> model; @@ -828,84 +1071,4 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI } } -// public static class SpeciesDecoratorListener implements ActionListener { -// -// protected final JXTable table; -// -// protected final ButtonGroup buttonGroup; -// -// protected final TuttiDecorator<Species> decorator; -// -// protected final TableColumnExt column; -// -// public SpeciesDecoratorListener(JXTable table, -// ButtonGroup buttonGroup) { -// this.table = table; -// this.buttonGroup = buttonGroup; -// this.column = (TableColumnExt) table.getColumn(0); -// this.decorator = TuttiUIUtil.getSpeciesColumnDecorator(column); -// } -// -// @Override -// public void actionPerformed(ActionEvent e) { -// -// JRadioButtonMenuItem source = (JRadioButtonMenuItem) e.getSource(); -// buttonGroup.setSelected(source.getModel(), true); -// -// Integer index = -// (Integer) source.getClientProperty(SPECIES_DECORATOR_INDEX); -// -// if (log.isInfoEnabled()) { -// log.info("Selected decorator context index: " + index); -// } -// -// decorator.setContextIndex(index); -// -// column.setComparator(decorator.getCurrentComparator()); -// -// -// EditProtocolSpeciesTableModel tableModel = -// (EditProtocolSpeciesTableModel) table.getModel(); -// -// // keep selected rows -// int[] rowIndexes = table.getSelectedRows(); -// List<EditProtocolSpeciesRowModel> rowsToReSelect = Lists.newArrayList(); -// for (int viewRowIndex : rowIndexes) { -// int modelRowIndex = table.convertRowIndexToModel(viewRowIndex); -// EditProtocolSpeciesRowModel row = tableModel.getEntry(modelRowIndex); -// rowsToReSelect.add(row); -// } -// -// // fire model (will reload the comparator) -// tableModel.fireTableDataChanged(); -// -// // reselect rows -// for (EditProtocolSpeciesRowModel row : rowsToReSelect) { -// int modelRowIndex = tableModel.getRowIndex(row); -// int viewRowIndex = table.convertRowIndexToView(modelRowIndex); -// table.addRowSelectionInterval(viewRowIndex, viewRowIndex); -// } -// } -// } -// -// private static class ShowSpeciesDecoratorPopupListener extends MouseAdapter { -// private final JPopupMenu popup; -// -// public ShowSpeciesDecoratorPopupListener(JPopupMenu popup) { -// this.popup = popup; -// } -// -// @Override -// public void mouseClicked(MouseEvent e) { -// JTableHeader source = (JTableHeader) e.getSource(); -// Point point = e.getPoint(); -// int columnIndex = source.columnAtPoint(point); -// -// boolean rightClick = SwingUtilities.isRightMouseButton(e); -// if (columnIndex == 0 && rightClick) { -// e.consume(); -// popup.show(source, e.getX(), e.getY()); -// } -// } -// } } 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 5650ef4..ec9f584 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 @@ -48,6 +48,10 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, private static final long serialVersionUID = 1L; + public static final String PROPERTY_CARACTERISTIC_MAPPING_ROWS = "caracteristicMappingRows"; + + public static final String PROPERTY_OPERATION_FIELD_MAPPING_ROWS = "operationFieldMappingRows"; + public static final String PROPERTY_SPECIES_ROW = "speciesRow"; public static final String PROPERTY_BENTHOS_ROW = "benthosRow"; @@ -116,6 +120,10 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, protected Map<String, Caracteristic> allCaracteristic; + protected List<EditProtocolCaracteristicsRowModel> caracteristicMappingRows; + + protected List<EditProtocolOperationFieldsRowModel> operationFieldMappingRows; + protected List<EditProtocolSpeciesRowModel> speciesRow; protected List<EditProtocolSpeciesRowModel> benthosRow; @@ -151,6 +159,26 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, setIndividualObservationPmfmId(ids); } + public List<EditProtocolCaracteristicsRowModel> getCaracteristicMappingRows() { + return caracteristicMappingRows; + } + + public void setCaracteristicMappingRows(List<EditProtocolCaracteristicsRowModel> caracteristicMappingRows) { + Object oldValue = getCaracteristicMappingRows(); + this.caracteristicMappingRows = caracteristicMappingRows; + firePropertyChange(PROPERTY_CARACTERISTIC_MAPPING_ROWS, oldValue, caracteristicMappingRows); + } + + public List<EditProtocolOperationFieldsRowModel> getOperationFieldMappingRows() { + return operationFieldMappingRows; + } + + public void setOperationFieldMappingRows(List<EditProtocolOperationFieldsRowModel> operationFieldMappingRows) { + Object oldValue = getOperationFieldMappingRows(); + this.operationFieldMappingRows = operationFieldMappingRows; + firePropertyChange(PROPERTY_OPERATION_FIELD_MAPPING_ROWS, oldValue, operationFieldMappingRows); + } + public List<EditProtocolSpeciesRowModel> getSpeciesRow() { return speciesRow; } 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 a061cdb..6188409 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 @@ -887,6 +887,8 @@ tutti.editProgram.title.create.program= tutti.editProgram.title.edit.program= tutti.editProtocol.action.addBenthosProtocol.mnemonic= tutti.editProtocol.action.addBenthosProtocol.tip= +tutti.editProtocol.action.addCaracteristicMapping.mnemonic= +tutti.editProtocol.action.addCaracteristicMapping.tip= tutti.editProtocol.action.addSpeciesProtocol.mnemonic= tutti.editProtocol.action.addSpeciesProtocol.tip= tutti.editProtocol.action.chooseColumnsFile.import= @@ -953,6 +955,7 @@ tutti.editProtocol.askCancelEditBeforeLeaving.cancelSaveSampleCategoryModel= tutti.editProtocol.askSaveBeforeLeaving.saveProtocol= tutti.editProtocol.askSaveBeforeLeaving.saveSampleCategoryModel= tutti.editProtocol.field.benthos.tip= +tutti.editProtocol.field.caracteristicMapping.tip= tutti.editProtocol.field.comment= tutti.editProtocol.field.comment.tip= tutti.editProtocol.field.protocol.name= @@ -1288,6 +1291,7 @@ tutti.flash.info.benthos.imported.in.protocol.oneReplaced= tutti.flash.info.benthos.imported.in.protocol.severalReplaced= tutti.flash.info.benthos.remove.from.protocol= tutti.flash.info.benthos.replaced= +tutti.flash.info.caracteristic.add.to.protocol= tutti.flash.info.caracteristic.imported.in.protocol= tutti.flash.info.caractristic.exported.from.protocol= tutti.flash.info.cruiseCreated= 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 dffeadc..a4321a5 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 @@ -871,6 +871,8 @@ tutti.editProgram.title.create.program=Créer une nouvelle série de campagne tutti.editProgram.title.edit.program=Éditer une série de campagne existante tutti.editProtocol.action.addBenthosProtocol.mnemonic=j tutti.editProtocol.action.addBenthosProtocol.tip=Ajouter une espèce du benthos au protocole +tutti.editProtocol.action.addCaracteristicMapping.mnemonic= +tutti.editProtocol.action.addCaracteristicMapping.tip= tutti.editProtocol.action.addSpeciesProtocol.mnemonic=j tutti.editProtocol.action.addSpeciesProtocol.tip=Ajouter une espèce au protocole tutti.editProtocol.action.chooseColumnsFile.import=Choisir le fichier contenant les colonnes @@ -933,6 +935,7 @@ tutti.editProtocol.askCancelEditBeforeLeaving.cancelSaveSampleCategoryModel=La c tutti.editProtocol.askSaveBeforeLeaving.saveProtocol=Des modifications sur le protocole n'ont pas été enregistrées tutti.editProtocol.askSaveBeforeLeaving.saveSampleCategoryModel=Des modifications sur la catégorisation n'ont pas été enregistrées tutti.editProtocol.field.benthos.tip=Benthos +tutti.editProtocol.field.caracteristicMapping.tip= tutti.editProtocol.field.comment=Commentaire tutti.editProtocol.field.comment.tip=Commentaire tutti.editProtocol.field.protocol.name=Nom @@ -1243,6 +1246,7 @@ tutti.flash.info.benthos.imported.in.protocol.oneReplaced=Benthos importés dans tutti.flash.info.benthos.imported.in.protocol.severalReplaced=Benthos importés dans le protocole depuis le fichier <strong>%s</strong>. %s remplacées par leur référent. tutti.flash.info.benthos.remove.from.protocol=Les benthos ont été retirés du protocole. tutti.flash.info.benthos.replaced=Le benthos <strong>%s</strong> a été remplacé par son référent <strong>%s</strong>. +tutti.flash.info.caracteristic.add.to.protocol= tutti.flash.info.caracteristic.imported.in.protocol=Caractéristiques importées dans le protocole depuis le fichier <strong>%s</strong>. tutti.flash.info.caractristic.exported.from.protocol=Caractéristiques du protocole exportées dans le fichier <strong>%s</strong>. tutti.flash.info.cruiseCreated=La campagne <strong>%s</strong> a été créée. -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm