branch feature/5954 updated (29f9178 -> f2c5c8d)
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 29f9178 add todo new f2c5c8d - error management - check the operation key to enable or not the import - import locations 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 f2c5c8ded885c5c57ab1da5e97d74d5e4bab0a8a Author: Kevin Morin <morin@codelutin.com> Date: Thu Dec 11 11:10:25 2014 +0100 - error management - check the operation key to enable or not the import - import locations Summary of changes: .../swing/action/ImportFromColumnFileAction.java | 75 ++++++++++++++++------ .../content/operation/EditFishingOperationUI.css | 1 + .../operation/EditFishingOperationUIHandler.java | 18 ++++++ .../operation/EditFishingOperationUIModel.java | 10 +++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 3 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 3 + 6 files changed, 89 insertions(+), 21 deletions(-) -- 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 f2c5c8ded885c5c57ab1da5e97d74d5e4bab0a8a Author: Kevin Morin <morin@codelutin.com> Date: Thu Dec 11 11:10:25 2014 +0100 - error management - check the operation key to enable or not the import - import locations --- .../swing/action/ImportFromColumnFileAction.java | 75 ++++++++++++++++------ .../content/operation/EditFishingOperationUI.css | 1 + .../operation/EditFishingOperationUIHandler.java | 18 ++++++ .../operation/EditFishingOperationUIModel.java | 10 +++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 3 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 3 + 6 files changed, 89 insertions(+), 21 deletions(-) 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 87f9359..17c7b18 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 @@ -16,20 +16,26 @@ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Person; +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.TuttiDataContext; 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 org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.AbstractImportErrorInfo; import org.nuiton.csv.Import2; import org.nuiton.csv.ImportConf; import org.nuiton.csv.ImportRow; +import org.nuiton.csv.ImportRuntimeException; import org.nuiton.csv.ValueParser; import org.nuiton.csv.ValueSetter; import org.nuiton.csv.ext.CsvReaders; +import org.nuiton.util.DateUtil; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; @@ -38,6 +44,7 @@ import java.io.FileInputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -65,7 +72,7 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO @Override public boolean prepareAction() throws Exception { - boolean result = super.prepareAction(); + boolean result = super.prepareAction() && getModel().isImportFromColumnFileEnabled(); if (result) { columnsFile = chooseFile(t("tutti.editFishingOperation.action.title.choose.importColumnsFile"), @@ -86,7 +93,6 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO 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)); @@ -116,7 +122,16 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO 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()); + // check if the dates (not time) are equals, but push the time to the model + Date modelGearShootingStartDate = model.getGearShootingStartDate(); + if (modelGearShootingStartDate != null) { + modelGearShootingStartDate = DateUtil.getDay(modelGearShootingStartDate); + } + Date gearShootingStartDate = fishingOperation.getGearShootingStartDate(); + if (gearShootingStartDate != null) { + gearShootingStartDate = DateUtil.getDay(gearShootingStartDate); + } + boolean sameGearShootingStartDate = Objects.equals(modelGearShootingStartDate, gearShootingStartDate); return (StringUtils.isBlank(stationColumn) || sameStationNumber) && (StringUtils.isBlank(operationNumberColumn) || sameFishingOperationNumber) @@ -137,10 +152,13 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO getUI().getVesselUseFeatureTabContent().getHandler().mergeCaracteristics(fishingOperation); } else { - if (log.isErrorEnabled()) { - log.error(next.getErrors()); + error = ""; + for (AbstractImportErrorInfo<FishingOperation> errorInfo : next.getErrors()) { + if (log.isErrorEnabled()) { + log.error(errorInfo.getCause().getLocalizedMessage()); + } + error += "<li>" + errorInfo.getCause().getLocalizedMessage() + "</li>"; } - error = next.getErrors().toString(); } found = true; } @@ -155,7 +173,8 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO public void postSuccessAction() { super.postSuccessAction(); if (error != null) { - displayErrorMessage("error", error); + displayErrorMessage(t("tutti.editFishingOperation.action.importColumns.error.title"), + t("tutti.editFishingOperation.action.importColumns.error", error)); } else { sendMessage(t("tutti.editFishingOperation.action.importColumns.success")); } @@ -171,12 +190,18 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO public ImportFromColumnFileModel(char separator, Set<String> headers) { super(separator); - TuttiProtocol protocol = getDataContext().getProtocol(); + PersistenceService persistenceService = getContext().getPersistenceService(); + TuttiDataContext dataContext = getDataContext(); + + TuttiProtocol protocol = dataContext.getProtocol(); Collection<OperationFieldMappingRow> operationFieldMapping = protocol.getOperationFieldMapping(); + String zoneId = dataContext.getProgram().getZone().getId(); + for (OperationFieldMappingRow mappingRow : operationFieldMapping) { String importColumn = mappingRow.getImportColumn(); - if (StringUtils.isNotBlank(importColumn) && headers.remove(importColumn)) { + boolean importColumnsInHeaders = headers.remove(importColumn); + if (StringUtils.isNotBlank(importColumn) && importColumnsInHeaders) { String field = mappingRow.getField(); ValueParser valueParser; @@ -207,29 +232,34 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO break; case EditFishingOperationUIModel.PROPERTY_GEAR: - List<Gear> gears = new ArrayList<>(getDataContext().getFishingGears()); - gears.addAll(getDataContext().getScientificGears()); + List<Gear> gears = new ArrayList<>(dataContext.getFishingGears()); + gears.addAll(dataContext.getScientificGears()); Map<String, Gear> gearUniverse = TuttiEntities.splitById(gears); valueParser = newForeignKeyValue(Gear.class, field, gearUniverse); break; case EditFishingOperationUIModel.PROPERTY_VESSEL: case EditFishingOperationUIModel.PROPERTY_SECONDARY_VESSEL: - List<Vessel> vessels = new ArrayList<>(getDataContext().getFishingVessels()); - vessels.addAll(getDataContext().getScientificVessels()); + List<Vessel> vessels = new ArrayList<>(dataContext.getFishingVessels()); + vessels.addAll(dataContext.getScientificVessels()); Map<String, Vessel> vesselUniverse = TuttiEntities.splitById(vessels); valueParser = newForeignKeyValue(Vessel.class, field, vesselUniverse); break; - //TODO comment on recupere les tuttilocation qui vont bien ? -// case EditFishingOperationUIModel.PROPERTY_STRATA: -// case EditFishingOperationUIModel.PROPERTY_SUB_STRATA: -// Map<String, TuttiLocation> locationUniverse = TuttiEntities.splitById(getDataContext().getL); -// valueParser = newForeignKeyValue(TuttiLocation.class, field, locationUniverse); -// break; + case EditFishingOperationUIModel.PROPERTY_STRATA: + Map<String, TuttiLocation> strataUniverse = TuttiEntities.splitById( + persistenceService.getAllFishingOperationStrata(zoneId)); + valueParser = newForeignKeyValue(TuttiLocation.class, field, strataUniverse); + break; + + case EditFishingOperationUIModel.PROPERTY_SUB_STRATA: + Map<String, TuttiLocation> subStrataUniverse = TuttiEntities.splitById( + persistenceService.getAllFishingOperationSubStrata(zoneId, null)); + valueParser = newForeignKeyValue(TuttiLocation.class, field, subStrataUniverse); + break; case EditFishingOperationUIModel.PROPERTY_RECORDER_PERSON: - Map<String, Person> personUniverse = TuttiEntities.splitById(getDataContext().getPersons()); + Map<String, Person> personUniverse = TuttiEntities.splitById(dataContext.getPersons()); valueParser = newForeignKeyValue(Person.class, field, personUniverse); break; @@ -238,6 +268,9 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO } newMandatoryColumn(importColumn, field, valueParser); + + } else if (!importColumnsInHeaders) { + throw new ImportRuntimeException(t("tutti.editFishingOperation.action.importColumns.missingHeader", importColumn)); } } @@ -247,7 +280,7 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO if (StringUtils.isNotBlank(importColumn) && headers.remove(importColumn)) { int pmfmId = Integer.parseInt(mappingRow.getPmfmId()); - final Caracteristic caracteristic = getContext().getPersistenceService().getCaracteristic(pmfmId); + final Caracteristic caracteristic = persistenceService.getCaracteristic(pmfmId); ValueSetter<FishingOperation, String> setter = new ValueSetter<FishingOperation, String>() { @Override 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 fe79d09..d5a42ed 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 @@ -87,6 +87,7 @@ JXDatePicker { i18nMnemonic: "tutti.editFishingOperation.action.importFromColumnFile.mnemonic"; _applicationAction: {fr.ifremer.tutti.ui.swing.action.ImportFromColumnFileAction.class}; _help: {"tutti.editFishingOperation.action.importFromColumnFile.help"}; + enabled: {model.isImportFromColumnFileEnabled()} } #fishingOperationAttachmentsButton { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java index 3105fe4..3a2ec3c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java @@ -28,6 +28,7 @@ import com.google.common.collect.Maps; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.protocol.OperationFieldMappingRow; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Person; @@ -49,6 +50,7 @@ import fr.ifremer.tutti.util.Distances; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -70,6 +72,7 @@ import java.awt.event.ItemListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Calendar; +import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Map; @@ -308,6 +311,21 @@ public class EditFishingOperationUIHandler extends AbstractTuttiTabContainerUIHa } }); + // enable or not the import from column file + if (getDataContext().isProtocolFilled()) { + Collection<OperationFieldMappingRow> operationFieldMapping = getDataContext().getProtocol().getOperationFieldMapping(); + for (OperationFieldMappingRow row : operationFieldMapping) { + if ((EditFishingOperationUIModel.PROPERTY_STATION_NUMBER.equals(row.getField()) + || EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_NUMBER.equals(row.getField()) + || EditFishingOperationUIModel.PROPERTY_GEAR_SHOOTING_START_DATE.equals(row.getField())) + && StringUtils.isNotBlank(row.getImportColumn())) { + + model.setImportFromColumnFileEnabled(true); + break; + } + } + } + ui.setContextValue(model); fishingOperationMonitor.setBean(model); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java index 4f8adac..477c76a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java @@ -256,6 +256,8 @@ public class EditFishingOperationUIModel extends AbstractTuttiBeanUIModel<Fishin protected SecondaryVesselTypeEnum secondaryVesselType; + protected boolean importFromColumnFileEnabled; + protected static Binder<EditFishingOperationUIModel, FishingOperation> toBeanBinder = BinderFactory.newBinder(EditFishingOperationUIModel.class, FishingOperation.class); @@ -1462,4 +1464,12 @@ public class EditFishingOperationUIModel extends AbstractTuttiBeanUIModel<Fishin public boolean containsAllRecorderPerson(Collection<Person> recorderPerson) { return false; } + + public boolean isImportFromColumnFileEnabled() { + return importFromColumnFileEnabled; + } + + public void setImportFromColumnFileEnabled(boolean importFromColumnFileEnabled) { + this.importFromColumnFileEnabled = importFromColumnFileEnabled; + } } 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 5dc2c6d..ba95198 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 @@ -695,6 +695,9 @@ tutti.editFishingOperation.action.deleteFishingOperation.message= tutti.editFishingOperation.action.deleteFishingOperation.tip= tutti.editFishingOperation.action.deleteFishingOperation.title= tutti.editFishingOperation.action.editFishingOperation.tip= +tutti.editFishingOperation.action.importColumns.error= +tutti.editFishingOperation.action.importColumns.error.title= +tutti.editFishingOperation.action.importColumns.missingHeader= tutti.editFishingOperation.action.importColumns.operationNotFound= tutti.editFishingOperation.action.importColumns.success= tutti.editFishingOperation.action.importFromColumnFile= 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 a7b8c80..cc9d217 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 @@ -679,6 +679,9 @@ tutti.editFishingOperation.action.deleteFishingOperation.message=Vous êtes sur 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.error=<html><body>L'import des paramètres a échoué pour les raisons suivantes \:<ul>%s</ul></body></html> +tutti.editFishingOperation.action.importColumns.error.title=Erreur lors de l'import des paramètres +tutti.editFishingOperation.action.importColumns.missingHeader=Le fichier de paramètre ne contient pas la colonne '%s'. 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 paramètre -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm