branch feature/5954 updated (f2c5c8d -> e42f4dd)
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 f2c5c8d - error management - check the operation key to enable or not the import - import locations new e42f4dd fix import of lists 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 e42f4ddba67331cf2fed27945e734fe6f01770a2 Author: Kevin Morin <morin@codelutin.com> Date: Thu Dec 11 12:09:26 2014 +0100 fix import of lists Summary of changes: .../fr/ifremer/tutti/service/TuttiCsvUtil.java | 70 ++++++++++++++++++++++ .../swing/action/ImportFromColumnFileAction.java | 40 +++++++++---- .../operation/EditFishingOperationUIModel.java | 3 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 2 +- 4 files changed, 104 insertions(+), 11 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 e42f4ddba67331cf2fed27945e734fe6f01770a2 Author: Kevin Morin <morin@codelutin.com> Date: Thu Dec 11 12:09:26 2014 +0100 fix import of lists --- .../fr/ifremer/tutti/service/TuttiCsvUtil.java | 70 ++++++++++++++++++++++ .../swing/action/ImportFromColumnFileAction.java | 40 +++++++++---- .../operation/EditFishingOperationUIModel.java | 3 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 2 +- 4 files changed, 104 insertions(+), 11 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java index 919db0d..3206ce0 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java @@ -57,6 +57,7 @@ import java.io.Serializable; import java.io.Writer; import java.lang.reflect.InvocationTargetException; import java.text.ParseException; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Date; @@ -278,6 +279,18 @@ public class TuttiCsvUtil extends Common { return new ForeignKeyValue<E>(type, propertyName, universe); } + public <E extends TuttiEntity> void newForeignKeyListColumn(String headerName, String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) { + newMandatoryColumn(headerName, propertyName, newForeignKeyListValue(entityType, foreignKeyName, universe)); + } + + public <E extends TuttiEntity> void newForeignKeyListColumn(String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) { + newMandatoryColumn(propertyName, propertyName, newForeignKeyListValue(entityType, foreignKeyName, universe)); + } + + public <E extends TuttiEntity> ForeignKeyListValue<E> newForeignKeyListValue(Class<E> type, String propertyName, Map<String, E> universe) { + return new ForeignKeyListValue<E>(type, propertyName, universe); + } + public void newNotExistingValueColumn(String propertyName, Set<String> universe) { newNotExistingValueColumn(propertyName, propertyName, universe); } @@ -479,6 +492,63 @@ public class TuttiCsvUtil extends Common { } } + /** + * @param <E> + * @author kmorin <morin@codelutin.com> + * @since 3.10 + */ + public static class ForeignKeyListValue<E extends TuttiEntity> implements ValueParserFormatter<List<E>> { + + public static final String LIST_SEPARATOR = ","; + + protected final String propertyName; + + protected final Class<E> entityType; + + protected final Map<String, E> universe; + + public ForeignKeyListValue(Class<E> entityType, + String propertyName, + Map<String, E> universe) { + this.entityType = entityType; + this.propertyName = propertyName; + this.universe = universe; + } + + @Override + public List<E> parse(String value) throws ParseException { + List<E> result = new ArrayList<E>(); + if (StringUtils.isNotBlank(value)) { + + String[] ids = value.split(LIST_SEPARATOR); + for (String id : ids) { + // get entity from universe + E entity = universe.get(id); + + if (entity == null) { + + // can not find entity this is a big problem for us... + throw new ImportRuntimeException(t("tutti.service.csv.parse.entityNotFound", entityType.getSimpleName(), propertyName, id)); + } + + result.add(entity); + } + } + return result; + } + + @Override + public String format(List<E> e) { + List<String> ids = new ArrayList<String>(); + for (E entity : e) { + if (entity != null) { + ids.add(entity.getId()); + } + } + return StringUtils.join(ids, LIST_SEPARATOR); + } + } + public static class BeanNullableGetter<E, T> implements ValueGetter<E, T> { protected String propertyName; 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 17c7b18..4a84e47 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 @@ -88,6 +88,8 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO @Override public void doAction() throws Exception { + final EditFishingOperationUIModel model = getModel(); + Set<String> headers = Sets.newHashSet(CsvReaders.getHeader(columnsFile, ';')); ImportFromColumnFileModel importModel = new ImportFromColumnFileModel(';', new HashSet<>(headers)); @@ -106,7 +108,7 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO } }); - // predicate to check if the row matches the model key defined by the protocol + // predicate to check if the row matches the model key defined by the protocol< Predicate<FishingOperation> predicate = new Predicate<FishingOperation>() { @Override public boolean apply(FishingOperation fishingOperation) { @@ -119,7 +121,6 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO String stationColumn = stationNumberRow != null ? stationNumberRow.getImportColumn() : null; String startDateColumn = startDateRow != null ? startDateRow.getImportColumn() : null; - EditFishingOperationUIModel model = getModel(); boolean sameStationNumber = Objects.equals(fishingOperation.getStationNumber(), model.getStationNumber()); boolean sameFishingOperationNumber = Objects.equals(fishingOperation.getFishingOperationNumber(), model.getFishingOperationNumber()); // check if the dates (not time) are equals, but push the time to the model @@ -147,9 +148,14 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO if (predicate.apply(fishingOperation)) { if (next.isValid()) { - getModel().fromEntity(fishingOperation); - getUI().getGearUseFeatureTabContent().getHandler().mergeCaracteristics(fishingOperation); - getUI().getVesselUseFeatureTabContent().getHandler().mergeCaracteristics(fishingOperation); + EditFishingOperationUI ui = getUI(); + model.fromEntity(fishingOperation); + //these 2 do not refresh correctly + ui.getRecorderPersonList().getHandler().setSelected(model.getRecorderPerson()); + ui.getSecondaryVesselList().getHandler().setSelected(model.getSecondaryVessel()); + + ui.getGearUseFeatureTabContent().getHandler().mergeCaracteristics(fishingOperation); + ui.getVesselUseFeatureTabContent().getHandler().mergeCaracteristics(fishingOperation); } else { error = ""; @@ -157,7 +163,7 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO if (log.isErrorEnabled()) { log.error(errorInfo.getCause().getLocalizedMessage()); } - error += "<li>" + errorInfo.getCause().getLocalizedMessage() + "</li>"; + error += "<li>" + errorInfo.getCause().getLocalizedMessage().replaceAll("\\s+", " ") + "</li>"; } } found = true; @@ -165,7 +171,7 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO } if (!found) { - error = t("tutti.editFishingOperation.action.importColumns.operationNotFound"); + error = "<li>" + t("tutti.editFishingOperation.action.importColumns.operationNotFound") + "</li>"; } } @@ -174,7 +180,9 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO super.postSuccessAction(); if (error != null) { displayErrorMessage(t("tutti.editFishingOperation.action.importColumns.error.title"), - t("tutti.editFishingOperation.action.importColumns.error", error)); + "<html><body>" + + t("tutti.editFishingOperation.action.importColumns.error", error) + + "</body></html>"); } else { sendMessage(t("tutti.editFishingOperation.action.importColumns.success")); } @@ -239,13 +247,19 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO break; case EditFishingOperationUIModel.PROPERTY_VESSEL: - case EditFishingOperationUIModel.PROPERTY_SECONDARY_VESSEL: 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; + case EditFishingOperationUIModel.PROPERTY_SECONDARY_VESSEL: + vessels = new ArrayList<>(dataContext.getFishingVessels()); + vessels.addAll(dataContext.getScientificVessels()); + vesselUniverse = TuttiEntities.splitById(vessels); + valueParser = newForeignKeyListValue(Vessel.class, field, vesselUniverse); + break; + case EditFishingOperationUIModel.PROPERTY_STRATA: Map<String, TuttiLocation> strataUniverse = TuttiEntities.splitById( persistenceService.getAllFishingOperationStrata(zoneId)); @@ -258,9 +272,15 @@ public class ImportFromColumnFileAction extends AbstractTuttiAction<EditFishingO valueParser = newForeignKeyValue(TuttiLocation.class, field, subStrataUniverse); break; + case EditFishingOperationUIModel.PROPERTY_LOCATION: + Map<String, TuttiLocation> locationUniverse = TuttiEntities.splitById( + persistenceService.getAllFishingOperationLocation(zoneId, null, null)); + valueParser = newForeignKeyValue(TuttiLocation.class, field, locationUniverse); + break; + case EditFishingOperationUIModel.PROPERTY_RECORDER_PERSON: Map<String, Person> personUniverse = TuttiEntities.splitById(dataContext.getPersons()); - valueParser = newForeignKeyValue(Person.class, field, personUniverse); + valueParser = newForeignKeyListValue(Person.class, field, personUniverse); break; default: 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 477c76a..b0911d2 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 @@ -1236,6 +1236,7 @@ public class EditFishingOperationUIModel extends AbstractTuttiBeanUIModel<Fishin @Override public void setRecorderPerson(List<Person> recorderPerson) { + System.out.println("rec " + recorderPerson); Object oldValue = null; List<Person> oldRecorderPerson = getRecorderPerson(); if (oldRecorderPerson != null) { @@ -1302,6 +1303,7 @@ public class EditFishingOperationUIModel extends AbstractTuttiBeanUIModel<Fishin @Override public void addSecondaryVessel(Vessel secondaryVessel) { editObject.addSecondaryVessel(secondaryVessel); + System.out.println("sec vessel " + secondaryVessel.getId()); firePropertyChange(PROPERTY_SECONDARY_VESSEL, null, getSecondaryVessel()); } @@ -1342,6 +1344,7 @@ public class EditFishingOperationUIModel extends AbstractTuttiBeanUIModel<Fishin @Override public void setSecondaryVessel(List<Vessel> secondaryVessel) { + System.out.println("sec vessels " + secondaryVessel); editObject.setSecondaryVessel(secondaryVessel); firePropertyChange(PROPERTY_SECONDARY_VESSEL, null, getSecondaryVessel()); } 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 cc9d217..de55a2e 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,7 +679,7 @@ 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=L'import des paramètres a échoué pour les raisons suivantes \:<ul>%s</ul> 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é -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm