This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 586a67d59f3f820507a6cb8a53f780ff5501bbc2 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Feb 6 09:43:22 2015 +0100 introduction du paquetage tutti-service/src/main/java/fr/ifremer/tutti/service/csv et utilisation --- .../fr/ifremer/tutti/service/TuttiCsvUtil.java | 732 +-------------------- .../AbstractFishingOperationRowModel.java | 3 +- .../catches/multipost/AccidentalCatchRowModel.java | 3 +- .../catches/multipost/AttachmentRowModel.java | 4 +- .../catches/multipost/CaracteristicRowModel.java | 3 +- .../catches/multipost/CatchFrequencyRowModel.java | 3 +- .../service/catches/multipost/CatchRowModel.java | 3 +- .../multipost/IndividualObservationRowModel.java | 3 +- .../catches/multipost/MarineLitterRowModel.java | 3 +- .../service/csv/AbstractTuttiExportModel.java | 59 ++ .../csv/AbstractTuttiImportExportModel.java | 97 +++ .../service/csv/AbstractTuttiImportModel.java | 28 + .../tutti/service/csv/BeanIndexNullableGetter.java | 50 ++ .../tutti/service/csv/BeanNullableGetter.java | 39 ++ .../tutti/service/csv/BeanPropertyFormatter.java | 37 ++ .../tutti/service/csv/CaracteristicParser.java | 43 ++ .../service/csv/CaracteristicValueFormatter.java | 43 ++ .../service/csv/DecoratorPropertyFormatter.java | 37 ++ .../service/csv/EnumByNameParserFormatter.java | 50 ++ .../csv/FishingOperationLocationParser.java | 56 ++ .../service/csv/FishingOperationStrataParser.java | 56 ++ .../csv/FishingOperationSubStrataParser.java | 56 ++ .../tutti/service/csv/ForeignKeyListValue.java | 70 ++ .../ifremer/tutti/service/csv/ForeignKeyValue.java | 59 ++ .../fr/ifremer/tutti/service/csv/GearParser.java | 46 ++ .../ifremer/tutti/service/csv/HarbourParser.java | 43 ++ .../tutti/service/csv/ImportModelWithHeader.java | 13 + .../tutti/service/csv/ListGearFormatter.java | 30 + .../tutti/service/csv/ListIntegerFormatter.java | 43 ++ .../tutti/service/csv/ListPersonFormatter.java | 30 + .../tutti/service/csv/ListPersonParser.java | 51 ++ .../tutti/service/csv/ListVesselFormatter.java | 37 ++ .../tutti/service/csv/ListVesselParser.java | 59 ++ .../ifremer/tutti/service/csv/ProgramParser.java | 43 ++ .../ifremer/tutti/service/csv/SpeciesParser.java | 47 ++ .../tutti/service/csv/StringParserFormatter.java | 30 + .../tutti/service/csv/TuttiRepeatableExport.java | 25 + .../ifremer/tutti/service/csv/VesselFormatter.java | 25 + .../fr/ifremer/tutti/service/csv/VesselParser.java | 50 ++ .../service/export/sumatra/CatchRowModel.java | 3 +- .../operationimport/ImportFromColumnFileModel.java | 3 +- .../service/protocol/CaracteristicRowModel.java | 3 +- .../tutti/service/protocol/SpeciesRowModel.java | 9 +- .../service/pupitri/PupitriImportService.java | 4 +- .../service/pupitri/csv/CarrouselRowModel.java | 3 +- .../tutti/service/pupitri/csv/SpeciesRowModel.java | 4 +- .../tutti/service/pupitri/csv/TrunkRowModel.java | 3 +- .../tutti/service/referential/GearModel.java | 3 +- .../tutti/service/referential/PersonModel.java | 3 +- .../tutti/service/referential/SpeciesModel.java | 3 +- .../tutti/service/referential/VesselModel.java | 3 +- 51 files changed, 1423 insertions(+), 730 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 d93c9d1..4b472f2 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 @@ -22,48 +22,33 @@ package fr.ifremer.tutti.service; * #L% */ -import com.google.common.base.Function; -import com.google.common.base.Joiner; import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; -import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.TuttiEntity; 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.Species; -import fr.ifremer.tutti.persistence.entities.referential.Speciess; import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.service.csv.BeanPropertyFormatter; +import fr.ifremer.tutti.service.csv.CaracteristicValueFormatter; +import fr.ifremer.tutti.service.csv.DecoratorPropertyFormatter; +import fr.ifremer.tutti.service.csv.ListGearFormatter; +import fr.ifremer.tutti.service.csv.ListIntegerFormatter; +import fr.ifremer.tutti.service.csv.ListPersonFormatter; +import fr.ifremer.tutti.service.csv.ListVesselFormatter; +import fr.ifremer.tutti.service.csv.TuttiRepeatableExport; +import fr.ifremer.tutti.service.csv.VesselFormatter; import fr.ifremer.tutti.util.Weights; -import org.apache.commons.beanutils.BeanUtilsBean; -import org.apache.commons.beanutils.NestedNullException; -import org.apache.commons.beanutils.PropertyUtils; -import org.apache.commons.lang3.StringUtils; import org.nuiton.csv.Common; import org.nuiton.csv.ExportModel; -import org.nuiton.csv.ExportableColumn; -import org.nuiton.csv.ImportRuntimeException; import org.nuiton.csv.ValueFormatter; -import org.nuiton.csv.ValueGetter; import org.nuiton.csv.ValueParserFormatter; -import org.nuiton.csv.ext.AbstractExportModel; -import org.nuiton.csv.ext.AbstractImportExportModel; -import org.nuiton.csv.ext.AbstractImportModel; -import org.nuiton.csv.ext.RepeatableExport; import org.nuiton.decorator.Decorator; 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; import java.util.List; -import java.util.Map; -import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -146,7 +131,13 @@ public class TuttiCsvUtil extends Common { } }; - public static final ValueFormatter<String> COMMENT_FORMATTER = new ValueFormatter<String>() { + public static final ValueParserFormatter<String> COMMENT_PARSER_FORMATTER = new ValueParserFormatter<String>() { + + @Override + public String parse(String value) throws ParseException { + return value == null ? "" : value.replaceAll("@@", "\n"); + } + @Override public String format(String value) { return value == null ? "" : value.replaceAll("\n", "@@"); @@ -215,177 +206,6 @@ public class TuttiCsvUtil extends Common { public static final ValueParserFormatter<Date> TIME = new DateValue("HH:mm"); - public static abstract class AbstractTuttiImportExportModel<M> extends AbstractImportExportModel<M> { - - public AbstractTuttiImportExportModel(char separator) { - super(separator); - } - - public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator) { - return newColumnForExportByDecorator(headerName, propertyName, decorator, null); - } - - public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator, String defaultNullValue) { - DecoratorPropertyFormatter<T> valueFormatter = newDecoratorFormatter(decorator, defaultNullValue); - return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter); - } - - public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName) { - return newColumnForExport(headerName, propertyName, formatterPropertyName, null); - } - - public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName, String defaultNullValue) { - BeanPropertyFormatter<T> valueFormatter = newBeanFormatter(formatterPropertyName, defaultNullValue); - return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter); - } - - public <E extends TuttiEntity> void newForeignKeyColumn(String headerName, String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) { - newMandatoryColumn(headerName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe)); - } - - public <E extends TuttiEntity> void newForeignKeyColumn(String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) { - newMandatoryColumn(propertyName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe)); - } - - public void newSpeciesForeignKeyColumn(String propertyName, String foreignKeyName, List<Species> species) { - if (species == null) { - species = Lists.newArrayList(); - } - Map<String, Species> universe = Speciess.splitByTaxonId(species); - newForeignKeyColumn(propertyName, Species.class, foreignKeyName, universe); - } - - public <E extends TuttiEntity> void newForeignKeyColumn(String propertyName, Class<E> entityType, String foreignKeyName, List<E> list) { - if (list == null) { - list = Lists.newArrayList(); - } -// Map<String, E> universe = Maps.uniqueIndex(list, TuttiEntities.GET_ID); - Map<String, E> universe = TuttiEntities.splitById(list); - newMandatoryColumn(propertyName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe)); - } - - public <E extends TuttiEntity> ForeignKeyValue<E> newForeignKeyValue(Class<E> type, String propertyName, Map<String, E> universe) { - return new ForeignKeyValue<E>(type, propertyName, universe); - } - - public void newNotExistingValueColumn(String propertyName, Set<String> universe) { - newNotExistingValueColumn(propertyName, propertyName, universe); - } - - public void newNotExistingValueColumn(String headerName, String propertyName, Set<String> universe) { - newMandatoryColumn(headerName, propertyName, new NotExistingKeyValue(propertyName, universe)); - } - - public void newNotExistingValueColumn(String propertyName, Set<String> universe, String errorMessage) { - newNotExistingValueColumn(propertyName, propertyName, universe, errorMessage); - } - - public void newNotExistingValueColumn(String headerName, String propertyName, Set<String> universe, String errorMessage) { - newMandatoryColumn(headerName, propertyName, new NotExistingKeyValue(propertyName, universe, errorMessage)); - } - } - - public static abstract class AbstractTuttiImportModel<M> extends AbstractImportModel<M> { - - public AbstractTuttiImportModel(char separator) { - super(separator); - } - - public <E extends TuttiEntity> void newForeignKeyColumn(String headerName, String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) { - newMandatoryColumn(headerName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe)); - } - - public <E extends TuttiEntity> void newForeignKeyColumn(String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) { - newMandatoryColumn(propertyName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe)); - } - - public <E extends TuttiEntity> ForeignKeyValue<E> newForeignKeyValue(Class<E> type, String propertyName, Map<String, E> universe) { - 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); - } - - public void newNotExistingValueColumn(String headerName, String propertyName, Set<String> universe) { - newMandatoryColumn(headerName, propertyName, new NotExistingKeyValue(propertyName, universe)); - } - - public void newNotExistingValueColumn(String propertyName, Set<String> universe, String errorMessage) { - newNotExistingValueColumn(propertyName, propertyName, universe, errorMessage); - } - - public void newNotExistingValueColumn(String headerName, String propertyName, Set<String> universe, String errorMessage) { - newMandatoryColumn(headerName, propertyName, new NotExistingKeyValue(propertyName, universe, errorMessage)); - } - } - - public static abstract class AbstractTuttiExportModel<M> extends AbstractExportModel<M> { - - public AbstractTuttiExportModel(char separator) { - super(separator); - } - - public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator) { - return newColumnForExportByDecorator(headerName, propertyName, decorator, null); - } - - public <T> ExportableColumn<M, T> newNullableColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator) { - DecoratorPropertyFormatter<T> valueFormatter = newDecoratorFormatter(decorator, ""); - return newNullableColumnForExport(headerName, propertyName, valueFormatter); - } - - public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator, String defaultNullValue) { - DecoratorPropertyFormatter<T> valueFormatter = newDecoratorFormatter(decorator, defaultNullValue); - return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter); - } - - public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName) { - return newColumnForExport(headerName, propertyName, formatterPropertyName, null); - } - - public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName, String defaultNullValue) { - BeanPropertyFormatter<T> valueFormatter = newBeanFormatter(formatterPropertyName, defaultNullValue); - return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter); - } - - public <E extends TuttiEntity> ForeignKeyValue<E> newForeignKeyValue(Class<E> type, String propertyName, Map<String, E> universe) { - return new ForeignKeyValue<E>(type, propertyName, universe); - } - - public <T> ExportableColumn<M, T> newNullableColumnForExport(String headerName, String propertyName, ValueFormatter<T> valueFormatter) { - return modelBuilder.newColumnForExport(headerName, new BeanNullableGetter<M, T>(propertyName), valueFormatter); - } - - public ExportableColumn<M, String> newNullableColumnForExport(String headerName, String propertyName, String nullValue) { - return newNullableColumnForExport(headerName, propertyName, newStringParserFormatter2(nullValue, true)); - } - - public ExportableColumn<M, String> newNullableColumnForExport(String headerName, String propertyName) { - return newNullableColumnForExport(headerName, propertyName, TuttiCsvUtil.STRING); - } - - public <T> ExportableColumn<M, T> newIndexNullableColumnForExport(String headerName, String collectionName, int order, String propertyName, ValueFormatter<T> valueFormatter) { - return modelBuilder.newColumnForExport(headerName, new BeanIndexNullableGetter<M, T>(collectionName, order, propertyName), valueFormatter); - } - - public ExportableColumn<M, String> newIndexNullableColumnForExport(String headerName, String collectionName, int order, String propertyName) { - return newIndexNullableColumnForExport(headerName, collectionName, order, propertyName, TuttiCsvUtil.STRING); - } - } - public static ValueParserFormatter<Float> WEIGHT_PARSER_FORMATTER = new FloatParserFormatter(null, true) { @Override @@ -404,539 +224,41 @@ public class TuttiCsvUtil extends Common { } }; - public static ValueParserFormatter<String> newStringParserFormatter2(String defaultValue, boolean nullAllowed) { - return new StringParserFormatter2(defaultValue, nullAllowed); - } - - public static class StringParserFormatter2 extends Common.NullableParserFormatter<String> { - - public StringParserFormatter2(String defaultValue, boolean nullAllowed) { - super(defaultValue, nullAllowed); - } - - @Override - public String format(String value) { - String str; - if (value == null) { - str = defaultValue; - } else { - str = String.valueOf(value); - } - return str; - } - - @Override - protected String parseNoneEmptyValue(String value) { - return value; - } - } - - public static class StringParserFormatter extends Common.NullableParserFormatter<String> { - - public StringParserFormatter(String defaultValue, boolean nullAllowed) { - super(defaultValue, nullAllowed); - } - - @Override - public String format(String value) { - String str = ""; - if (value != null) { - str = String.valueOf(value); - } - return str; - } + public static final ValueParserFormatter<Date> YEAR = new DateValue("yyyy"); - @Override - protected String parseNoneEmptyValue(String value) { - return value; - } - } + public static final ValueFormatter<Serializable> CARACTERISTIC_VALUE_FORMATTER = new CaracteristicValueFormatter(); - public static class VesselFormatter implements ValueFormatter<Vessel> { + public static final ValueFormatter<Vessel> VESSEL_VALUE_FORMATTER = new VesselFormatter(); + public static final ValueFormatter<List<Person>> LIST_PERSON_FORMATTER = new ListPersonFormatter(); - @Override - public String format(Vessel value) { - String result = ""; - if (value != null) { - result = value.getRegistrationCode(); - if (result == null) { - result = value.getInternationalRegistrationCode(); - } - } - return result; - } - } - - /** - * @param <E> - * @author tchemit <chemit@codelutin.com> - * @since 1.0 - */ - public static class ForeignKeyValue<E extends TuttiEntity> implements ValueParserFormatter<E> { - - protected final String propertyName; - - protected final Class<E> entityType; - - protected final Map<String, E> universe; - - public ForeignKeyValue(Class<E> entityType, - String propertyName, - Map<String, E> universe) { - this.entityType = entityType; - this.propertyName = propertyName; - this.universe = universe; - } - - @Override - public E parse(String value) throws ParseException { - E result = null; - if (StringUtils.isNotBlank(value)) { - - // get entity from universe - result = universe.get(value); - - if (result == null) { - - // can not find entity this is a big problem for us... - throw new ImportRuntimeException(t("tutti.service.csv.parse.entityNotFound", entityType.getSimpleName(), propertyName, value)); - } - } - return result; - } - - @Override - public String format(E e) { - String value = ""; - if (e != null) { - value = e.getId(); - } - return value; - } - } - - /** - * @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; - - BeanNullableGetter(String propertyName) { - this.propertyName = propertyName; - } - - @Override - public T get(E object) throws Exception { - T value; - try { - value = (T) PropertyUtils.getProperty(object, propertyName); - } catch (NestedNullException e) { - value = null; - } catch (InvocationTargetException e) { - if (e.getCause() instanceof NullPointerException) { - value = null; - } else { - throw e; - } - } - return value; - } - } - - public static class BeanIndexNullableGetter<E, T> implements ValueGetter<E, T> { - - protected String collectionName; - - protected int order; - - protected String propertyName; - - BeanIndexNullableGetter(String collectionName, int order, String suffix) { - this.collectionName = collectionName; - this.order = order; - this.propertyName = collectionName + "[" + order + "]." + suffix; - - } - - @Override - public T get(E object) throws Exception { - T value = null; - try { - Collection c = (Collection) PropertyUtils.getProperty(object, collectionName); - if (c != null && order < c.size()) { - value = (T) PropertyUtils.getProperty(object, propertyName); - } - } catch (NestedNullException e) { - value = null; - } catch (InvocationTargetException e) { - if (e.getCause() instanceof NullPointerException) { - value = null; - } else { - throw e; - } - } - return value; - } - } - - /** - * @author tchemit <chemit@codelutin.com> - * @since 1.0 - */ - public static class NotExistingKeyValue implements ValueParserFormatter<String> { - - protected final String propertyName; - - protected final Set<String> existingValues; - - protected final String errorMessage; - - public NotExistingKeyValue( - String propertyName, - Set<String> universe) { - this(propertyName, universe, "tutti.service.csv.parse.entityAlreadyDefined"); - } - - public NotExistingKeyValue( - String propertyName, - Set<String> universe, - String errorMessage) { - this.propertyName = propertyName; - this.existingValues = universe; - this.errorMessage = errorMessage; - } - - @Override - public String parse(String value) throws ParseException { - if (StringUtils.isNotBlank(value)) { - - if (existingValues.contains(value)) { - - // entity already defined - throw new ImportRuntimeException(t(errorMessage, propertyName, value)); - } - } - return value; - } - - @Override - public String format(String e) { - return e; - } - } - - public static final ValueParserFormatter<Date> YEAR = - new DateValue("yyyy"); - - public static final ValueFormatter<Serializable> CARACTERISTIC_VALUE_FORMATTER = - new CaracteristicValueFormatter(); - - public static final ValueFormatter<Vessel> VESSEL_VALUE_FORMATTER = - new VesselFormatter(); - - public static final ValueFormatter<List<Person>> LIST_PERSON_FORMATTER = - new ListPersonValueFormatter(); - - public static ListVesselValueFormatter newListVesselFormatter(Decorator<Vessel> decorator) { - return new ListVesselValueFormatter(decorator); + public static ListVesselFormatter newListVesselFormatter(Decorator<Vessel> decorator) { + return new ListVesselFormatter(decorator); } public static final ValueParserFormatter<List<Integer>> LIST_INTEGER_PARSER_FORMATTER = - new ListIntegerValueFormatter(); + new ListIntegerFormatter(); - public static final ValueFormatter<List<Gear>> LIST_GEAR_FORMATTER = - new ListGearValueFormatter(); + public static final ValueFormatter<List<Gear>> LIST_GEAR_FORMATTER = new ListGearFormatter(); - public static <E> BeanPropertyFormatter<E> newBeanFormatter(String propertyName, - String defaultNullValue) { + public static <E> BeanPropertyFormatter<E> newBeanFormatter(String propertyName, String defaultNullValue) { return new BeanPropertyFormatter<E>(propertyName, defaultNullValue); } - public static class BeanPropertyFormatter<E> implements ValueFormatter<E> { - - protected final String defaultNullValue; - - protected String propertyName; - - BeanPropertyFormatter(String propertyName, String defaultNullValue) { - this.propertyName = propertyName; - this.defaultNullValue = defaultNullValue; - } - - @Override - public String format(E value) { - if (value == null) { - return defaultNullValue; - } - try { - return (String) BeanUtilsBean.getInstance().getPropertyUtils().getNestedProperty(value, propertyName); - } catch (Exception e) { - throw new ImportRuntimeException(t("tutti.service.cvs.format.error"), e);//"Could not format value" - } - } - } - - public static <E> DecoratorPropertyFormatter<E> newDecoratorFormatter(Decorator<E> decorator, - String defaultNullValue) { + public static <E> DecoratorPropertyFormatter<E> newDecoratorFormatter(Decorator<E> decorator, String defaultNullValue) { return new DecoratorPropertyFormatter<E>(decorator, defaultNullValue); } - public static class DecoratorPropertyFormatter<E> implements ValueFormatter<E> { - - protected final String defaultNullValue; - - protected Decorator<E> decorator; - - DecoratorPropertyFormatter(Decorator<E> decorator, String defaultNullValue) { - this.decorator = decorator; - this.defaultNullValue = defaultNullValue; - } - - @Override - public String format(E value) { - if (value == null) { - return defaultNullValue; - } - try { - return decorator.toString(value); - } catch (Exception e) { - throw new ImportRuntimeException(t("tutti.service.cvs.format.error", value), e); - } - } - } - public static <E> TuttiRepeatableExport<E> newRepeatableExport(ExportModel<E> model) { return new TuttiRepeatableExport<E>(model); } - public static class TuttiRepeatableExport<E> extends RepeatableExport<E> { - - public TuttiRepeatableExport(ExportModel<E> model) { - super(model, Collections.<E>emptyList(), true); - } - - public void write(Iterable<E> data, Writer writer) throws Exception { - this.data = data; - write(writer); - } - } - public static <E extends Enum<E>> ValueParserFormatter<E> newEnumByNameParserFormatter(Class<E> enumType, boolean mandatory) { - return new EnumByNameParserFormatter<E>(enumType, mandatory); - } - - public static class EnumByNameParserFormatter<E extends Enum<E>> implements ValueParserFormatter<E> { - - - private final Class<E> enumType; - - private final boolean mandatory; - - public EnumByNameParserFormatter(Class<E> enumType, boolean mandatory) { - this.enumType = enumType; - this.mandatory = mandatory; - } - - @Override - public E parse(String value) throws ParseException { - E result; - if (StringUtils.isBlank(value)) { - result = null; - } else { - result = Enum.valueOf(enumType, value); - } - if (mandatory && result == null) { - throw new NullPointerException(t("tutti.service.cvs.mandatory.value")); - } - return result; - } - - @Override - public String format(E date) { - String value = ""; - if (date != null) { - value = date.name(); - } - return value; - } - } - - protected static class CaracteristicValueFormatter implements ValueFormatter<Serializable> { - - ValueParserFormatter<Integer> integerDelegate = INTEGER; - - ValueParserFormatter<Float> floatDelegate = FLOAT; - - ValueParserFormatter<String> textDelegate = STRING; - - @Override - public String format(Serializable value) { - if (value == null) { - return "NA"; - } - if (value instanceof Float) { - return floatDelegate.format((Float) value); - } - if (value instanceof Integer) { - return integerDelegate.format((Integer) value); - } - if (value instanceof String) { - return textDelegate.format((String) value); - } - // qualitive value - CaracteristicQualitativeValue qv = (CaracteristicQualitativeValue) value; - String result = qv.getDescription(); // description contaisn name - description from db - return result; - } - } - - protected static class ListIntegerValueFormatter implements ValueParserFormatter<List<Integer>> { - - @Override - public String format(List<Integer> value) { - List<String> decoratedValues = - Lists.transform(value, new Function<Integer, String>() { - @Override - public String apply(Integer input) { - return input.toString(); - } - }); - return Joiner.on('|').join(decoratedValues); - } - - @Override - public List<Integer> parse(String value) throws ParseException { - List<Integer> result = Lists.newArrayList(); - if (StringUtils.isNotBlank(value)) { - String[] split = value.split("\\s*\\|\\s*"); - for (String string : split) { - result.add(Integer.valueOf(string)); - } - } - return result; - } - } - - protected static class ListPersonValueFormatter implements ValueFormatter<List<Person>> { - - @Override - public String format(List<Person> value) { - List<String> decoratedValues = - Lists.transform(value, new Function<Person, String>() { - @Override - public String apply(Person input) { - return input.getFirstName() + ' ' + input.getLastName(); - } - }); - return Joiner.on('|').join(decoratedValues); - } - } - - protected static class ListGearValueFormatter implements ValueFormatter<List<Gear>> { - - @Override - public String format(List<Gear> value) { - List<String> decoratedValues = - Lists.transform(value, new Function<Gear, String>() { - @Override - public String apply(Gear input) { - return input.getName(); - } - }); - return Joiner.on('|').join(decoratedValues); - } - } - - protected static class ListVesselValueFormatter implements ValueFormatter<List<Vessel>> { - - final Decorator<Vessel> decorator; - - public ListVesselValueFormatter(Decorator<Vessel> decorator) { - this.decorator = decorator; - } - - @Override - public String format(List<Vessel> value) { - List<String> decoratedValues = - Lists.transform(value, new Function<Vessel, String>() { - @Override - public String apply(Vessel input) { - return decorator.toString(input); - } - }); - return Joiner.on('|').join(decoratedValues); - } + return new fr.ifremer.tutti.service.csv.EnumByNameParserFormatter<E>(enumType, mandatory); } protected TuttiCsvUtil() { // no instance } - /** - * @param <M> - */ - public static abstract class ImportModelWithHeader<M> extends AbstractTuttiImportModel<M> { - - protected ImportModelWithHeader(char separator) { - super(separator); - } - - public abstract String[] getHeader(); - } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AbstractFishingOperationRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AbstractFishingOperationRowModel.java index f64ee16..ad7b73b 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AbstractFishingOperationRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AbstractFishingOperationRowModel.java @@ -23,13 +23,14 @@ package fr.ifremer.tutti.service.catches.multipost; */ import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; /** * @author kmorin <kmorin@codelutin.com> * @since 2.3.1 */ public abstract class AbstractFishingOperationRowModel<FO extends AbstractFishingOperationRow> - extends TuttiCsvUtil.AbstractTuttiImportExportModel<FO> { + extends AbstractTuttiImportExportModel<FO> { public AbstractFishingOperationRowModel(char separator) { super(separator); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRowModel.java index 4e713d8..85f4704 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AccidentalCatchRowModel.java @@ -26,6 +26,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import java.util.List; @@ -35,7 +36,7 @@ import java.util.List; * @author kmorin <morin@codelutin.com> * @since 2.2 */ -public class AccidentalCatchRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<AccidentalCatchRow> { +public class AccidentalCatchRowModel extends AbstractTuttiImportExportModel<AccidentalCatchRow> { public AccidentalCatchRowModel(char separator) { this(separator, null, null, null, null); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java index 3a3dd2d..0014bb2 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/AttachmentRowModel.java @@ -22,7 +22,7 @@ package fr.ifremer.tutti.service.catches.multipost; * #L% */ -import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import org.nuiton.csv.ValueFormatter; import org.nuiton.csv.ValueParser; @@ -33,7 +33,7 @@ import java.text.ParseException; * @author kmorin <kmorin@codelutin.com> * @since 2.2 */ -public class AttachmentRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<AttachmentRow> { +public class AttachmentRowModel extends AbstractTuttiImportExportModel<AttachmentRow> { public AttachmentRowModel(char separator) { this(separator, null); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRowModel.java index fe8ecb2..b849953 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CaracteristicRowModel.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.catches.multipost; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import java.util.List; @@ -31,7 +32,7 @@ import java.util.List; * @author kmorin <kmorin@codelutin.com> * @since 2.3 */ -public class CaracteristicRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<CaracteristicRow> { +public class CaracteristicRowModel extends AbstractTuttiImportExportModel<CaracteristicRow> { public CaracteristicRowModel(char separator) { this(separator, null); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java index 323cdbc..2039484 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchFrequencyRowModel.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.catches.multipost; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import java.util.List; @@ -33,7 +34,7 @@ import java.util.List; * @author kmorin <morin@codelutin.com> * @since 2.2 */ -public class CatchFrequencyRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<CatchFrequencyRow> { +public class CatchFrequencyRowModel extends AbstractTuttiImportExportModel<CatchFrequencyRow> { public CatchFrequencyRowModel(char separator) { this(separator, null); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java index ae7f0d6..54e1594 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchRowModel.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.catches.multipost; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import java.util.List; @@ -33,7 +34,7 @@ import java.util.List; * @author kmorin <morin@codelutin.com> * @since 2.2 */ -public class CatchRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<CatchRow> { +public class CatchRowModel extends AbstractTuttiImportExportModel<CatchRow> { public CatchRowModel(char separator) { this(separator, null); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java index e2951e8..e6a1773 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java @@ -25,6 +25,7 @@ package fr.ifremer.tutti.service.catches.multipost; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import java.util.List; @@ -34,7 +35,7 @@ import java.util.List; * @author kmorin <morin@codelutin.com> * @since 2.2 */ -public class IndividualObservationRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<IndividualObservationRow> { +public class IndividualObservationRowModel extends AbstractTuttiImportExportModel<IndividualObservationRow> { public IndividualObservationRowModel(char separator) { this(separator, null, null); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRowModel.java index 4fe5ea8..d42c79a 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterRowModel.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.catches.multipost; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import java.util.List; @@ -31,7 +32,7 @@ import java.util.List; * @author kmorin <morin@codelutin.com> * @since 2.2 */ -public class MarineLitterRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<MarineLitterRow> { +public class MarineLitterRowModel extends AbstractTuttiImportExportModel<MarineLitterRow> { public MarineLitterRowModel(char separator) { this(separator, null, null); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiExportModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiExportModel.java new file mode 100644 index 0000000..eab7599 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiExportModel.java @@ -0,0 +1,59 @@ +package fr.ifremer.tutti.service.csv; + +import fr.ifremer.tutti.service.TuttiCsvUtil; +import org.nuiton.csv.ExportableColumn; +import org.nuiton.csv.ValueFormatter; +import org.nuiton.csv.ext.AbstractExportModel; +import org.nuiton.decorator.Decorator; + +/** +* Created on 2/5/15. +* +* @author Tony Chemit - chemit@codelutin.com +* @since XXX +*/ +public abstract class AbstractTuttiExportModel<M> extends AbstractExportModel<M> { + + public AbstractTuttiExportModel(char separator) { + super(separator); + } + + public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator) { + return newColumnForExportByDecorator(headerName, propertyName, decorator, null); + } + + public <T> ExportableColumn<M, T> newNullableColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator) { + DecoratorPropertyFormatter<T> valueFormatter = TuttiCsvUtil.newDecoratorFormatter(decorator, ""); + return newNullableColumnForExport(headerName, propertyName, valueFormatter); + } + + public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator, String defaultNullValue) { + DecoratorPropertyFormatter<T> valueFormatter = TuttiCsvUtil.newDecoratorFormatter(decorator, defaultNullValue); + return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter); + } + + public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName) { + return newColumnForExport(headerName, propertyName, formatterPropertyName, null); + } + + public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName, String defaultNullValue) { + BeanPropertyFormatter<T> valueFormatter = TuttiCsvUtil.newBeanFormatter(formatterPropertyName, defaultNullValue); + return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter); + } + + public <T> ExportableColumn<M, T> newNullableColumnForExport(String headerName, String propertyName, ValueFormatter<T> valueFormatter) { + return modelBuilder.newColumnForExport(headerName, new BeanNullableGetter<M, T>(propertyName), valueFormatter); + } + + public ExportableColumn<M, String> newNullableColumnForExport(String headerName, String propertyName) { + return newNullableColumnForExport(headerName, propertyName, TuttiCsvUtil.STRING); + } + + public <T> ExportableColumn<M, T> newIndexNullableColumnForExport(String headerName, String collectionName, int order, String propertyName, ValueFormatter<T> valueFormatter) { + return modelBuilder.newColumnForExport(headerName, new BeanIndexNullableGetter<M, T>(collectionName, order, propertyName), valueFormatter); + } + + public ExportableColumn<M, String> newIndexNullableColumnForExport(String headerName, String collectionName, int order, String propertyName) { + return newIndexNullableColumnForExport(headerName, collectionName, order, propertyName, TuttiCsvUtil.STRING); + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiImportExportModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiImportExportModel.java new file mode 100644 index 0000000..75a7ae2 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiImportExportModel.java @@ -0,0 +1,97 @@ +package fr.ifremer.tutti.service.csv; + +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.TuttiEntity; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.persistence.entities.referential.Speciess; +import fr.ifremer.tutti.service.TuttiCsvUtil; +import org.nuiton.csv.ExportableColumn; +import org.nuiton.csv.ValueFormatter; +import org.nuiton.csv.ext.AbstractImportExportModel; +import org.nuiton.decorator.Decorator; + +import java.util.List; +import java.util.Map; + +/** +* Created on 2/5/15. +* +* @author Tony Chemit - chemit@codelutin.com +* @since XXX +*/ +public abstract class AbstractTuttiImportExportModel<M> extends AbstractImportExportModel<M> { + + public AbstractTuttiImportExportModel(char separator) { + super(separator); + } + + public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator) { + return newColumnForExportByDecorator(headerName, propertyName, decorator, null); + } + + public <T> ExportableColumn<M, T> newColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator, String defaultNullValue) { + DecoratorPropertyFormatter<T> valueFormatter = TuttiCsvUtil.newDecoratorFormatter(decorator, defaultNullValue); + return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter); + } + + public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName) { + return newColumnForExport(headerName, propertyName, formatterPropertyName, null); + } + + public <T> ExportableColumn<M, T> newColumnForExport(String headerName, String propertyName, String formatterPropertyName, String defaultNullValue) { + BeanPropertyFormatter<T> valueFormatter = TuttiCsvUtil.newBeanFormatter(formatterPropertyName, defaultNullValue); + return modelBuilder.newColumnForExport(headerName, propertyName, valueFormatter); + } + + public <E extends TuttiEntity> void newForeignKeyColumn(String headerName, String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) { + newMandatoryColumn(headerName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe)); + } + + public <E extends TuttiEntity> void newForeignKeyColumn(String propertyName, Class<E> entityType, String foreignKeyName, Map<String, E> universe) { + newMandatoryColumn(propertyName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe)); + } + + public void newSpeciesForeignKeyColumn(String propertyName, String foreignKeyName, List<Species> species) { + if (species == null) { + species = Lists.newArrayList(); + } + Map<String, Species> universe = Speciess.splitByTaxonId(species); + newForeignKeyColumn(propertyName, Species.class, foreignKeyName, universe); + } + + public <E extends TuttiEntity> void newForeignKeyColumn(String propertyName, Class<E> entityType, String foreignKeyName, List<E> list) { + if (list == null) { + list = Lists.newArrayList(); + } +// Map<String, E> universe = Maps.uniqueIndex(list, TuttiEntities.GET_ID); + Map<String, E> universe = TuttiEntities.splitById(list); + newMandatoryColumn(propertyName, propertyName, newForeignKeyValue(entityType, foreignKeyName, universe)); + } + + public <E extends TuttiEntity> ForeignKeyValue<E> newForeignKeyValue(Class<E> type, String propertyName, Map<String, E> universe) { + return new ForeignKeyValue<E>(type, propertyName, universe); + } + + public <T> ExportableColumn<M, T> newNullableColumnForExport(String headerName, String propertyName, ValueFormatter<T> valueFormatter) { + return modelBuilder.newColumnForExport(headerName, new BeanNullableGetter<M, T>(propertyName), valueFormatter); + } + + public ExportableColumn<M, String> newNullableColumnForExport(String headerName, String propertyName) { + return newNullableColumnForExport(headerName, propertyName, TuttiCsvUtil.STRING); + } + + public <T> ExportableColumn<M, T> newNullableColumnForExportByDecorator(String headerName, String propertyName, Decorator<T> decorator) { + DecoratorPropertyFormatter<T> valueFormatter = TuttiCsvUtil.newDecoratorFormatter(decorator, ""); + return newNullableColumnForExport(headerName, propertyName, valueFormatter); + } + + public <T> ExportableColumn<M, T> newIndexNullableColumnForExport(String headerName, String collectionName, int order, String propertyName, ValueFormatter<T> valueFormatter) { + return modelBuilder.newColumnForExport(headerName, new BeanIndexNullableGetter<M, T>(collectionName, order, propertyName), valueFormatter); + } + + public ExportableColumn<M, String> newIndexNullableColumnForExport(String headerName, String collectionName, int order, String propertyName) { + return newIndexNullableColumnForExport(headerName, collectionName, order, propertyName, TuttiCsvUtil.STRING); + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiImportModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiImportModel.java new file mode 100644 index 0000000..19093f9 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/AbstractTuttiImportModel.java @@ -0,0 +1,28 @@ +package fr.ifremer.tutti.service.csv; + +import fr.ifremer.tutti.persistence.entities.TuttiEntity; +import org.nuiton.csv.ext.AbstractImportModel; + +import java.util.Map; + +/** +* Created on 2/5/15. +* +* @author Tony Chemit - chemit@codelutin.com +* @since XXX +*/ +public abstract class AbstractTuttiImportModel<M> extends AbstractImportModel<M> { + + public AbstractTuttiImportModel(char separator) { + super(separator); + } + + public <E extends TuttiEntity> ForeignKeyValue<E> newForeignKeyValue(Class<E> type, String propertyName, Map<String, E> universe) { + return new ForeignKeyValue<E>(type, propertyName, universe); + } + + public <E extends TuttiEntity> ForeignKeyListValue<E> newForeignKeyListValue(Class<E> type, String propertyName, Map<String, E> universe) { + return new ForeignKeyListValue<E>(type, propertyName, universe); + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanIndexNullableGetter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanIndexNullableGetter.java new file mode 100644 index 0000000..d51b573 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanIndexNullableGetter.java @@ -0,0 +1,50 @@ +package fr.ifremer.tutti.service.csv; + +import org.apache.commons.beanutils.NestedNullException; +import org.apache.commons.beanutils.PropertyUtils; +import org.nuiton.csv.ValueGetter; + +import java.lang.reflect.InvocationTargetException; +import java.util.Collection; + +/** +* Created on 2/5/15. +* +* @author Tony Chemit - chemit@codelutin.com +* @since XXX +*/ +public class BeanIndexNullableGetter<E, T> implements ValueGetter<E, T> { + + protected String collectionName; + + protected int order; + + protected String propertyName; + + BeanIndexNullableGetter(String collectionName, int order, String suffix) { + this.collectionName = collectionName; + this.order = order; + this.propertyName = collectionName + "[" + order + "]." + suffix; + + } + + @Override + public T get(E object) throws Exception { + T value = null; + try { + Collection c = (Collection) PropertyUtils.getProperty(object, collectionName); + if (c != null && order < c.size()) { + value = (T) PropertyUtils.getProperty(object, propertyName); + } + } catch (NestedNullException e) { + value = null; + } catch (InvocationTargetException e) { + if (e.getCause() instanceof NullPointerException) { + value = null; + } else { + throw e; + } + } + return value; + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanNullableGetter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanNullableGetter.java new file mode 100644 index 0000000..f06d10f --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanNullableGetter.java @@ -0,0 +1,39 @@ +package fr.ifremer.tutti.service.csv; + +import org.apache.commons.beanutils.NestedNullException; +import org.apache.commons.beanutils.PropertyUtils; +import org.nuiton.csv.ValueGetter; + +import java.lang.reflect.InvocationTargetException; + +/** +* Created on 2/5/15. +* +* @author Tony Chemit - chemit@codelutin.com +* @since XXX +*/ +public class BeanNullableGetter<E, T> implements ValueGetter<E, T> { + + protected String propertyName; + + BeanNullableGetter(String propertyName) { + this.propertyName = propertyName; + } + + @Override + public T get(E object) throws Exception { + T value; + try { + value = (T) PropertyUtils.getProperty(object, propertyName); + } catch (NestedNullException e) { + value = null; + } catch (InvocationTargetException e) { + if (e.getCause() instanceof NullPointerException) { + value = null; + } else { + throw e; + } + } + return value; + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanPropertyFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanPropertyFormatter.java new file mode 100644 index 0000000..2824fe0 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/BeanPropertyFormatter.java @@ -0,0 +1,37 @@ +package fr.ifremer.tutti.service.csv; + +import org.apache.commons.beanutils.BeanUtilsBean; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.csv.ValueFormatter; + +import static org.nuiton.i18n.I18n.t; + +/** +* Created on 2/5/15. +* +* @author Tony Chemit - chemit@codelutin.com +* @since XXX +*/ +public class BeanPropertyFormatter<E> implements ValueFormatter<E> { + + protected final String defaultNullValue; + + protected String propertyName; + + public BeanPropertyFormatter(String propertyName, String defaultNullValue) { + this.propertyName = propertyName; + this.defaultNullValue = defaultNullValue; + } + + @Override + public String format(E value) { + if (value == null) { + return defaultNullValue; + } + try { + return (String) BeanUtilsBean.getInstance().getPropertyUtils().getNestedProperty(value, propertyName); + } catch (Exception e) { + throw new ImportRuntimeException(t("tutti.service.cvs.format.error"), e);//"Could not format value" + } + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CaracteristicParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CaracteristicParser.java new file mode 100644 index 0000000..7e27c22 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CaracteristicParser.java @@ -0,0 +1,43 @@ +package fr.ifremer.tutti.service.csv; + +import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.service.PersistenceService; +import org.nuiton.csv.ValueParser; + +import java.text.ParseException; +import java.util.List; +import java.util.Map; + +/** + * Created on 2/5/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.13 + */ +public class CaracteristicParser implements ValueParser<Caracteristic> { + + private final PersistenceService persistenceService; + + private Map<String, Caracteristic> caracteristicsById; + + public CaracteristicParser(PersistenceService persistenceService) { + this.persistenceService = persistenceService; + } + + @Override + public Caracteristic parse(String value) throws ParseException { + + if (caracteristicsById == null) { + List<Caracteristic> caracteristics = persistenceService.getAllCaracteristic(); + caracteristicsById = TuttiEntities.splitById(caracteristics); + } + Caracteristic caracteristic = caracteristicsById.get(value); + + if (caracteristic == null) { + throw new ParseException("Could not found a caracteristic with id " + value, 0); + } + return caracteristic; + + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CaracteristicValueFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CaracteristicValueFormatter.java new file mode 100644 index 0000000..6ba8f5f --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/CaracteristicValueFormatter.java @@ -0,0 +1,43 @@ +package fr.ifremer.tutti.service.csv; + +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; +import org.nuiton.csv.Common; +import org.nuiton.csv.ValueFormatter; +import org.nuiton.csv.ValueParserFormatter; + +import java.io.Serializable; + +/** +* Created on 2/5/15. +* +* @author Tony Chemit - chemit@codelutin.com +* @since XXX +*/ +public class CaracteristicValueFormatter implements ValueFormatter<Serializable> { + + ValueParserFormatter<Integer> integerDelegate = Common.INTEGER; + + ValueParserFormatter<Float> floatDelegate = Common.FLOAT; + + ValueParserFormatter<String> textDelegate = Common.STRING; + + @Override + public String format(Serializable value) { + if (value == null) { + return "NA"; + } + if (value instanceof Float) { + return floatDelegate.format((Float) value); + } + if (value instanceof Integer) { + return integerDelegate.format((Integer) value); + } + if (value instanceof String) { + return textDelegate.format((String) value); + } + // qualitive value + CaracteristicQualitativeValue qv = (CaracteristicQualitativeValue) value; + String result = qv.getDescription(); // description contaisn name - description from db + return result; + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/DecoratorPropertyFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/DecoratorPropertyFormatter.java new file mode 100644 index 0000000..b290585 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/DecoratorPropertyFormatter.java @@ -0,0 +1,37 @@ +package fr.ifremer.tutti.service.csv; + +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.csv.ValueFormatter; +import org.nuiton.decorator.Decorator; + +import static org.nuiton.i18n.I18n.t; + +/** +* Created on 2/5/15. +* +* @author Tony Chemit - chemit@codelutin.com +* @since XXX +*/ +public class DecoratorPropertyFormatter<E> implements ValueFormatter<E> { + + protected final String defaultNullValue; + + protected Decorator<E> decorator; + + public DecoratorPropertyFormatter(Decorator<E> decorator, String defaultNullValue) { + this.decorator = decorator; + this.defaultNullValue = defaultNullValue; + } + + @Override + public String format(E value) { + if (value == null) { + return defaultNullValue; + } + try { + return decorator.toString(value); + } catch (Exception e) { + throw new ImportRuntimeException(t("tutti.service.cvs.format.error", value), e); + } + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/EnumByNameParserFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/EnumByNameParserFormatter.java new file mode 100644 index 0000000..d8d2513 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/EnumByNameParserFormatter.java @@ -0,0 +1,50 @@ +package fr.ifremer.tutti.service.csv; + +import org.apache.commons.lang3.StringUtils; +import org.nuiton.csv.ValueParserFormatter; + +import java.text.ParseException; + +import static org.nuiton.i18n.I18n.t; + +/** +* Created on 2/5/15. +* +* @author Tony Chemit - chemit@codelutin.com +* @since XXX +*/ +public class EnumByNameParserFormatter<E extends Enum<E>> implements ValueParserFormatter<E> { + + + private final Class<E> enumType; + + private final boolean mandatory; + + public EnumByNameParserFormatter(Class<E> enumType, boolean mandatory) { + this.enumType = enumType; + this.mandatory = mandatory; + } + + @Override + public E parse(String value) throws ParseException { + E result; + if (StringUtils.isBlank(value)) { + result = null; + } else { + result = Enum.valueOf(enumType, value); + } + if (mandatory && result == null) { + throw new NullPointerException(t("tutti.service.cvs.mandatory.value")); + } + return result; + } + + @Override + public String format(E date) { + String value = ""; + if (date != null) { + value = date.name(); + } + return value; + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationLocationParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationLocationParser.java new file mode 100644 index 0000000..c7a6018 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationLocationParser.java @@ -0,0 +1,56 @@ +package fr.ifremer.tutti.service.csv; + +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocations; +import fr.ifremer.tutti.service.PersistenceService; +import org.nuiton.csv.ValueParser; + +import java.text.ParseException; +import java.util.List; +import java.util.Map; + +/** + * Created on 2/5/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.13 + */ +public class FishingOperationLocationParser implements ValueParser<TuttiLocation> { + + private final PersistenceService persistenceService; + + private final String zoneId; + + private Map<String, TuttiLocation> locationsByName; + + public FishingOperationLocationParser(PersistenceService persistenceService, String zoneId) { + this.persistenceService = persistenceService; + this.zoneId = zoneId; + } + + @Override + public TuttiLocation parse(String value) throws ParseException { + + if (locationsByName == null) { + List<TuttiLocation> locations = persistenceService.getAllFishingOperationLocation(zoneId, null, null); + locationsByName = TuttiLocations.splitByName(locations); + } + TuttiLocation location; + if ("NA".equals(value)) { + + location = null; + + } else { + + location = locationsByName.get(value); + + if (location == null) { + throw new ParseException("Could not found a fishing operation location with name " + value, 0); + } + + } + + return location; + + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationStrataParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationStrataParser.java new file mode 100644 index 0000000..a9cb4bd --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationStrataParser.java @@ -0,0 +1,56 @@ +package fr.ifremer.tutti.service.csv; + +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocations; +import fr.ifremer.tutti.service.PersistenceService; +import org.nuiton.csv.ValueParser; + +import java.text.ParseException; +import java.util.List; +import java.util.Map; + +/** + * Created on 2/5/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.13 + */ +public class FishingOperationStrataParser implements ValueParser<TuttiLocation> { + + private final PersistenceService persistenceService; + + private final String zoneId; + + private Map<String, TuttiLocation> locationsByName; + + public FishingOperationStrataParser(PersistenceService persistenceService, String zoneId) { + this.persistenceService = persistenceService; + this.zoneId = zoneId; + } + + @Override + public TuttiLocation parse(String value) throws ParseException { + + if (locationsByName == null) { + List<TuttiLocation> locations = persistenceService.getAllFishingOperationStrata(zoneId); + locationsByName = TuttiLocations.splitByName(locations); + } + TuttiLocation location; + if ("NA".equals(value)) { + + location = null; + + } else { + + location = locationsByName.get(value); + + if (location == null) { + throw new ParseException("Could not found a fishing operation stata with name " + value, 0); + } + + } + + return location; + + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationSubStrataParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationSubStrataParser.java new file mode 100644 index 0000000..058d88c --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/FishingOperationSubStrataParser.java @@ -0,0 +1,56 @@ +package fr.ifremer.tutti.service.csv; + +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocations; +import fr.ifremer.tutti.service.PersistenceService; +import org.nuiton.csv.ValueParser; + +import java.text.ParseException; +import java.util.List; +import java.util.Map; + +/** + * Created on 2/5/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.13 + */ +public class FishingOperationSubStrataParser implements ValueParser<TuttiLocation> { + + private final PersistenceService persistenceService; + + private final String zoneId; + + private Map<String, TuttiLocation> locationsByName; + + public FishingOperationSubStrataParser(PersistenceService persistenceService, String zoneId) { + this.persistenceService = persistenceService; + this.zoneId = zoneId; + } + + @Override + public TuttiLocation parse(String value) throws ParseException { + + if (locationsByName == null) { + List<TuttiLocation> locations = persistenceService.getAllFishingOperationSubStrata(zoneId, null); + locationsByName = TuttiLocations.splitByName(locations); + } + TuttiLocation location; + if ("NA".equals(value)) { + + location = null; + + } else { + + location = locationsByName.get(value); + + if (location == null) { + throw new ParseException("Could not found a fishing operation subStata with name " + value, 0); + } + + } + + return location; + + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ForeignKeyListValue.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ForeignKeyListValue.java new file mode 100644 index 0000000..7242e35 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ForeignKeyListValue.java @@ -0,0 +1,70 @@ +package fr.ifremer.tutti.service.csv; + +import fr.ifremer.tutti.persistence.entities.TuttiEntity; +import org.apache.commons.lang3.StringUtils; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.csv.ValueParserFormatter; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import static org.nuiton.i18n.I18n.t; + +/** + * @param <E> + * @author kmorin <morin@codelutin.com> + * @since 3.10 + */ +public 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); + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ForeignKeyValue.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ForeignKeyValue.java new file mode 100644 index 0000000..9bc5bb8 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ForeignKeyValue.java @@ -0,0 +1,59 @@ +package fr.ifremer.tutti.service.csv; + +import fr.ifremer.tutti.persistence.entities.TuttiEntity; +import org.apache.commons.lang3.StringUtils; +import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.csv.ValueParserFormatter; + +import java.text.ParseException; +import java.util.Map; + +import static org.nuiton.i18n.I18n.t; + +/** + * @param <E> + * @author tchemit <chemit@codelutin.com> + * @since 1.0 + */ +public class ForeignKeyValue<E extends TuttiEntity> implements ValueParserFormatter<E> { + + protected final String propertyName; + + protected final Class<E> entityType; + + protected final Map<String, E> universe; + + public ForeignKeyValue(Class<E> entityType, + String propertyName, + Map<String, E> universe) { + this.entityType = entityType; + this.propertyName = propertyName; + this.universe = universe; + } + + @Override + public E parse(String value) throws ParseException { + E result = null; + if (StringUtils.isNotBlank(value)) { + + // get entity from universe + result = universe.get(value); + + if (result == null) { + + // can not find entity this is a big problem for us... + throw new ImportRuntimeException(t("tutti.service.csv.parse.entityNotFound", entityType.getSimpleName(), propertyName, value)); + } + } + return result; + } + + @Override + public String format(E e) { + String value = ""; + if (e != null) { + value = e.getId(); + } + return value; + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/GearParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/GearParser.java new file mode 100644 index 0000000..228e3ae --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/GearParser.java @@ -0,0 +1,46 @@ +package fr.ifremer.tutti.service.csv; + +import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.Gears; +import fr.ifremer.tutti.service.PersistenceService; +import org.nuiton.csv.ValueParser; + +import java.text.ParseException; +import java.util.List; +import java.util.Map; + +/** + * Created on 2/5/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.13 + */ +public class GearParser implements ValueParser<Gear> { + + private final PersistenceService persistenceService; + + private Map<String, Gear> gearsByName; + + private boolean mandatory; + + public GearParser(PersistenceService persistenceService, boolean mandatory) { + this.persistenceService = persistenceService; + this.mandatory = mandatory; + } + + @Override + public Gear parse(String value) throws ParseException { + + if (gearsByName == null) { + List<Gear> gears = persistenceService.getAllGear(); + gearsByName = Gears.splitByName(gears); + } + Gear gear = gearsByName.get(value); + + if (gear == null && mandatory) { + throw new ParseException("Could not found a gear with name " + value, 0); + } + return gear; + + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/HarbourParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/HarbourParser.java new file mode 100644 index 0000000..cd61338 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/HarbourParser.java @@ -0,0 +1,43 @@ +package fr.ifremer.tutti.service.csv; + +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; +import fr.ifremer.tutti.persistence.entities.referential.TuttiLocations; +import fr.ifremer.tutti.service.PersistenceService; +import org.nuiton.csv.ValueParser; + +import java.text.ParseException; +import java.util.List; +import java.util.Map; + +/** + * Created on 2/5/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.13 + */ +public class HarbourParser implements ValueParser<TuttiLocation> { + + private final PersistenceService persistenceService; + + private Map<String, TuttiLocation> locationsByName; + + public HarbourParser(PersistenceService persistenceService) { + this.persistenceService = persistenceService; + } + + @Override + public TuttiLocation parse(String value) throws ParseException { + + if (locationsByName == null) { + List<TuttiLocation> locations = persistenceService.getAllHarbour(); + locationsByName = TuttiLocations.splitByName(locations); + } + TuttiLocation location = locationsByName.get(value); + + if (location == null) { + throw new ParseException("Could not found a harbour with name " + value, 0); + } + return location; + + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ImportModelWithHeader.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ImportModelWithHeader.java new file mode 100644 index 0000000..d11cc66 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ImportModelWithHeader.java @@ -0,0 +1,13 @@ +package fr.ifremer.tutti.service.csv; + +/** + * @param <M> + */ +public abstract class ImportModelWithHeader<M> extends AbstractTuttiImportModel<M> { + + protected ImportModelWithHeader(char separator) { + super(separator); + } + + public abstract String[] getHeader(); +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListGearFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListGearFormatter.java new file mode 100644 index 0000000..cec4f1f --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListGearFormatter.java @@ -0,0 +1,30 @@ +package fr.ifremer.tutti.service.csv; + +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.referential.Gear; +import org.nuiton.csv.ValueFormatter; + +import java.util.List; + +/** +* Created on 2/5/15. +* +* @author Tony Chemit - chemit@codelutin.com +* @since XXX +*/ +public class ListGearFormatter implements ValueFormatter<List<Gear>> { + + @Override + public String format(List<Gear> value) { + List<String> decoratedValues = + Lists.transform(value, new Function<Gear, String>() { + @Override + public String apply(Gear input) { + return input.getName(); + } + }); + return Joiner.on('|').join(decoratedValues); + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListIntegerFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListIntegerFormatter.java new file mode 100644 index 0000000..a915cf5 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListIntegerFormatter.java @@ -0,0 +1,43 @@ +package fr.ifremer.tutti.service.csv; + +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; +import org.apache.commons.lang3.StringUtils; +import org.nuiton.csv.ValueParserFormatter; + +import java.text.ParseException; +import java.util.List; + +/** +* Created on 2/5/15. +* +* @author Tony Chemit - chemit@codelutin.com +* @since XXX +*/ +public class ListIntegerFormatter implements ValueParserFormatter<List<Integer>> { + + @Override + public String format(List<Integer> value) { + List<String> decoratedValues = + Lists.transform(value, new Function<Integer, String>() { + @Override + public String apply(Integer input) { + return input.toString(); + } + }); + return Joiner.on('|').join(decoratedValues); + } + + @Override + public List<Integer> parse(String value) throws ParseException { + List<Integer> result = Lists.newArrayList(); + if (StringUtils.isNotBlank(value)) { + String[] split = value.split("\\s*\\|\\s*"); + for (String string : split) { + result.add(Integer.valueOf(string)); + } + } + return result; + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListPersonFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListPersonFormatter.java new file mode 100644 index 0000000..ce6f749 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListPersonFormatter.java @@ -0,0 +1,30 @@ +package fr.ifremer.tutti.service.csv; + +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.referential.Person; +import org.nuiton.csv.ValueFormatter; + +import java.util.List; + +/** +* Created on 2/5/15. +* +* @author Tony Chemit - chemit@codelutin.com +* @since XXX +*/ +public class ListPersonFormatter implements ValueFormatter<List<Person>> { + + @Override + public String format(List<Person> value) { + List<String> decoratedValues = + Lists.transform(value, new Function<Person, String>() { + @Override + public String apply(Person input) { + return input.getFirstName() + ' ' + input.getLastName(); + } + }); + return Joiner.on('|').join(decoratedValues); + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListPersonParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListPersonParser.java new file mode 100644 index 0000000..32d2e95 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListPersonParser.java @@ -0,0 +1,51 @@ +package fr.ifremer.tutti.service.csv; + +import fr.ifremer.tutti.persistence.entities.referential.Person; +import fr.ifremer.tutti.persistence.entities.referential.Persons; +import fr.ifremer.tutti.service.PersistenceService; +import org.nuiton.csv.ValueParser; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Created on 2/5/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.13 + */ +public class ListPersonParser implements ValueParser<List<Person>> { + + private final PersistenceService persistenceService; + + private Map<String, Person> personsByFullName; + + public ListPersonParser(PersistenceService persistenceService) { + this.persistenceService = persistenceService; + } + + @Override + public List<Person> parse(String value) throws ParseException { + + if (personsByFullName == null) { + List<Person> allPerson = persistenceService.getAllPerson(); + personsByFullName = Persons.splitByFullName(allPerson); + } + + List<Person> persons = new ArrayList<>(); + String[] fullNames = value.split("|"); + for (String fullName : fullNames) { + Person person = personsByFullName.get(fullName); + + if (person == null) { + throw new ParseException("Could not found a person with name " + value, 0); + } + persons.add(person); + } + + return persons; + + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListVesselFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListVesselFormatter.java new file mode 100644 index 0000000..e5ad93c --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListVesselFormatter.java @@ -0,0 +1,37 @@ +package fr.ifremer.tutti.service.csv; + +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import org.nuiton.csv.ValueFormatter; +import org.nuiton.decorator.Decorator; + +import java.util.List; + +/** +* Created on 2/5/15. +* +* @author Tony Chemit - chemit@codelutin.com +* @since XXX +*/ +public class ListVesselFormatter implements ValueFormatter<List<Vessel>> { + + final Decorator<Vessel> decorator; + + public ListVesselFormatter(Decorator<Vessel> decorator) { + this.decorator = decorator; + } + + @Override + public String format(List<Vessel> value) { + List<String> decoratedValues = + Lists.transform(value, new Function<Vessel, String>() { + @Override + public String apply(Vessel input) { + return decorator.toString(input); + } + }); + return Joiner.on('|').join(decoratedValues); + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListVesselParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListVesselParser.java new file mode 100644 index 0000000..8ecf44e --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ListVesselParser.java @@ -0,0 +1,59 @@ +package fr.ifremer.tutti.service.csv; + +import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.persistence.entities.referential.Vessels; +import fr.ifremer.tutti.service.PersistenceService; +import org.nuiton.csv.ValueParser; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Created on 2/5/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.13 + */ +public class ListVesselParser implements ValueParser<List<Vessel>> { + + private final PersistenceService persistenceService; + + private Map<String, Vessel> vesselsByRegistrationCode; + + private Map<String, Vessel> vesselsByInternalRegistrationCode; + + public ListVesselParser(PersistenceService persistenceService) { + this.persistenceService = persistenceService; + } + + @Override + public List<Vessel> parse(String value) throws ParseException { + + if (vesselsByRegistrationCode == null) { + List<Vessel> allVessels = persistenceService.getAllVessel(); + vesselsByRegistrationCode = Vessels.splitByRegistrationCode(allVessels); + vesselsByInternalRegistrationCode = Vessels.splitByInternationalRegistrationCode(allVessels); + } + + List<Vessel> vessels = new ArrayList<>(); + String[] immatriculations = value.split("|"); + for (String immatriculation : immatriculations) { + + Vessel vessel = vesselsByRegistrationCode.get(immatriculation); + + if (vessel == null) { + vessel = vesselsByInternalRegistrationCode.get(immatriculation); + } + + if (vessel == null) { + throw new ParseException("Could not found a vessel with registrationCode " + value + ", neither with internationalRegistrationCode", 0); + } + vessels.add(vessel); + } + + return vessels; + + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ProgramParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ProgramParser.java new file mode 100644 index 0000000..11d64f8 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/ProgramParser.java @@ -0,0 +1,43 @@ +package fr.ifremer.tutti.service.csv; + +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.data.Programs; +import fr.ifremer.tutti.service.PersistenceService; +import org.nuiton.csv.ValueParser; + +import java.text.ParseException; +import java.util.List; +import java.util.Map; + +/** +* Created on 2/5/15. +* +* @author Tony Chemit - chemit@codelutin.com +* @since 3.13 +*/ +public class ProgramParser implements ValueParser<Program> { + + private final PersistenceService persistenceService; + + private Map<String, Program> programsByName; + + public ProgramParser(PersistenceService persistenceService) { + this.persistenceService = persistenceService; + } + + @Override + public Program parse(String value) throws ParseException { + + if (programsByName == null) { + List<Program> allProgram = persistenceService.getAllProgram(); + programsByName = Programs.splitByName(allProgram); + } + Program program = programsByName.get(value); + + if (program == null) { + throw new ParseException("Could not found a program with name " + value, 0); + } + return program; + + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/SpeciesParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/SpeciesParser.java new file mode 100644 index 0000000..494c9f4 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/SpeciesParser.java @@ -0,0 +1,47 @@ +package fr.ifremer.tutti.service.csv; + +import com.google.common.collect.Iterables; +import com.google.common.collect.Multimap; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.persistence.entities.referential.Speciess; +import fr.ifremer.tutti.service.PersistenceService; +import org.apache.commons.collections4.CollectionUtils; +import org.nuiton.csv.ValueParser; + +import java.text.ParseException; +import java.util.Collection; +import java.util.List; + +/** + * Created on 2/5/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.13 + */ +public class SpeciesParser implements ValueParser<Species> { + + private final PersistenceService persistenceService; + + private Multimap<String, Species> speciesByReferenceTaxonId; + + public SpeciesParser(PersistenceService persistenceService) { + this.persistenceService = persistenceService; + } + + @Override + public Species parse(String value) throws ParseException { + + if (speciesByReferenceTaxonId == null) { + List<Species> gears = persistenceService.getAllReferentSpecies(); + speciesByReferenceTaxonId = Speciess.splitByReferenceTaxonId(gears); + } + Collection<Species> specieses = speciesByReferenceTaxonId.get(value); + + if (CollectionUtils.isEmpty(specieses)) { + throw new ParseException("Could not found a species with referenceTaxonId " + value, 0); + } + Species species = Iterables.get(specieses, 0); + return species; + + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/StringParserFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/StringParserFormatter.java new file mode 100644 index 0000000..f3aae34 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/StringParserFormatter.java @@ -0,0 +1,30 @@ +package fr.ifremer.tutti.service.csv; + +import org.nuiton.csv.Common; + +/** +* Created on 2/5/15. +* +* @author Tony Chemit - chemit@codelutin.com +* @since XXX +*/ +public class StringParserFormatter extends Common.NullableParserFormatter<String> { + + public StringParserFormatter(String defaultValue, boolean nullAllowed) { + super(defaultValue, nullAllowed); + } + + @Override + public String format(String value) { + String str = ""; + if (value != null) { + str = String.valueOf(value); + } + return str; + } + + @Override + protected String parseNoneEmptyValue(String value) { + return value; + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/TuttiRepeatableExport.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/TuttiRepeatableExport.java new file mode 100644 index 0000000..6431400 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/TuttiRepeatableExport.java @@ -0,0 +1,25 @@ +package fr.ifremer.tutti.service.csv; + +import org.nuiton.csv.ExportModel; +import org.nuiton.csv.ext.RepeatableExport; + +import java.io.Writer; +import java.util.Collections; + +/** +* Created on 2/5/15. +* +* @author Tony Chemit - chemit@codelutin.com +* @since XXX +*/ +public class TuttiRepeatableExport<E> extends RepeatableExport<E> { + + public TuttiRepeatableExport(ExportModel<E> model) { + super(model, Collections.<E>emptyList(), true); + } + + public void write(Iterable<E> data, Writer writer) throws Exception { + this.data = data; + write(writer); + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/VesselFormatter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/VesselFormatter.java new file mode 100644 index 0000000..a355239 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/VesselFormatter.java @@ -0,0 +1,25 @@ +package fr.ifremer.tutti.service.csv; + +import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import org.nuiton.csv.ValueFormatter; + +/** +* Created on 2/5/15. +* +* @author Tony Chemit - chemit@codelutin.com +* @since XXX +*/ +public class VesselFormatter implements ValueFormatter<Vessel> { + + @Override + public String format(Vessel value) { + String result = ""; + if (value != null) { + result = value.getRegistrationCode(); + if (result == null) { + result = value.getInternationalRegistrationCode(); + } + } + return result; + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/VesselParser.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/VesselParser.java new file mode 100644 index 0000000..f8d3ea8 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/csv/VesselParser.java @@ -0,0 +1,50 @@ +package fr.ifremer.tutti.service.csv; + +import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.persistence.entities.referential.Vessels; +import fr.ifremer.tutti.service.PersistenceService; +import org.nuiton.csv.ValueParser; + +import java.text.ParseException; +import java.util.List; +import java.util.Map; + +/** + * Created on 2/5/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.13 + */ +public class VesselParser implements ValueParser<Vessel> { + + private final PersistenceService persistenceService; + + private Map<String, Vessel> vesselsByRegistrationCode; + + private Map<String, Vessel> vesselsByInternalRegistrationCode; + + public VesselParser(PersistenceService persistenceService) { + this.persistenceService = persistenceService; + } + + @Override + public Vessel parse(String value) throws ParseException { + + if (vesselsByRegistrationCode == null) { + List<Vessel> allVessels = persistenceService.getAllVessel(); + vesselsByRegistrationCode = Vessels.splitByRegistrationCode(allVessels); + vesselsByInternalRegistrationCode = Vessels.splitByInternationalRegistrationCode(allVessels); + } + Vessel vessel = vesselsByRegistrationCode.get(value); + + if (vessel == null) { + vessel = vesselsByInternalRegistrationCode.get(value); + } + + if (vessel == null) { + throw new ParseException("Could not found a vessel with registrationCode " + value + ", neither with internationalRegistrationCode", 0); + } + return vessel; + + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/export/sumatra/CatchRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/export/sumatra/CatchRowModel.java index 1ee8c5c..f606a43 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/export/sumatra/CatchRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/export/sumatra/CatchRowModel.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.export.sumatra; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import fr.ifremer.tutti.service.export.ExportBatchEntry; import static org.nuiton.i18n.I18n.t; @@ -32,7 +33,7 @@ import static org.nuiton.i18n.I18n.t; * @author kmorin <kmorin@codelutin.com> * @since 2.0 */ -public class CatchRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<CatchRow> { +public class CatchRowModel extends AbstractTuttiImportExportModel<CatchRow> { public CatchRowModel(char separator) { super(separator); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/operationimport/ImportFromColumnFileModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/operationimport/ImportFromColumnFileModel.java index 954bdfc..5388ac2 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/operationimport/ImportFromColumnFileModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/operationimport/ImportFromColumnFileModel.java @@ -41,6 +41,7 @@ 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.service.csv.AbstractTuttiImportModel; import org.apache.commons.lang3.StringUtils; import org.nuiton.csv.ValueParser; import org.nuiton.csv.ValueSetter; @@ -60,7 +61,7 @@ import java.util.Set; * @author Kevin Morin - morin@codelutin.com * @since 3.10 */ -public class ImportFromColumnFileModel extends TuttiCsvUtil.AbstractTuttiImportModel<FishingOperation> { +public class ImportFromColumnFileModel extends AbstractTuttiImportModel<FishingOperation> { private final FishingOperation fishingOperation; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRowModel.java index febdde8..d98e97e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRowModel.java @@ -25,6 +25,7 @@ package fr.ifremer.tutti.service.protocol; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicType; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import java.util.Map; @@ -34,7 +35,7 @@ import java.util.Map; * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class CaracteristicRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<CaracteristicRow> { +public class CaracteristicRowModel extends AbstractTuttiImportExportModel<CaracteristicRow> { public CaracteristicRowModel(char separator, Map<String, Caracteristic> caracteristicMap) { super(separator); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java index dfaa4d3..6b18ac1 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java @@ -26,6 +26,9 @@ import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; +import fr.ifremer.tutti.service.csv.ForeignKeyValue; +import fr.ifremer.tutti.service.csv.StringParserFormatter; import org.nuiton.csv.Common; import org.nuiton.csv.ImportRuntimeException; @@ -41,7 +44,7 @@ import static org.nuiton.i18n.I18n.t; * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class SpeciesRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<SpeciesRow> { +public class SpeciesRowModel extends AbstractTuttiImportExportModel<SpeciesRow> { public SpeciesRowModel(char separator, Map<String, Caracteristic> caracteristicMap, @@ -53,7 +56,7 @@ public class SpeciesRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel newMandatoryColumn( SpeciesRow.PROPERTY_SPECIES_REFERENCE_TAXON_ID, SpeciesRow.PROPERTY_SPECIES, - new TuttiCsvUtil.ForeignKeyValue<Species>(Species.class, Species.PROPERTY_REFERENCE_TAXON_ID, speciesMap) { + new ForeignKeyValue<Species>(Species.class, Species.PROPERTY_REFERENCE_TAXON_ID, speciesMap) { Set<Integer> taxonIds = Sets.newHashSet(); @@ -85,7 +88,7 @@ public class SpeciesRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel newIgnoredColumn(SpeciesRow.PROPERTY_LENGTH_STEP_PMFM_FRACTION_NAME); newIgnoredColumn(SpeciesRow.PROPERTY_LENGTH_STEP_PMFM_METHOD_NAME); - newMandatoryColumn(SpeciesRow.PROPERTY_SPECIES_SURVEY_CODE, new TuttiCsvUtil.StringParserFormatter(null, true)); + newMandatoryColumn(SpeciesRow.PROPERTY_SPECIES_SURVEY_CODE, new StringParserFormatter(null, true)); newMandatoryColumn(SpeciesRow.PROPERTY_MANDATORY_SAMPLE_CATEGORY_ID, TuttiCsvUtil.LIST_INTEGER_PARSER_FORMATTER); newMandatoryColumn(SpeciesRow.PROPERTY_WEIGHT_ENABLED, Common.PRIMITIVE_BOOLEAN); newMandatoryColumn(SpeciesRow.PROPERTY_COUNT_IF_NO_FREQUENCY_ENABLED, Common.PRIMITIVE_BOOLEAN); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java index 82e99c2..4979838 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java @@ -45,9 +45,9 @@ import fr.ifremer.tutti.service.AbstractTuttiService; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.PdfGeneratorService; import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.TuttiCsvUtil; import fr.ifremer.tutti.service.TuttiDataContext; import fr.ifremer.tutti.service.TuttiServiceContext; +import fr.ifremer.tutti.service.csv.ImportModelWithHeader; import fr.ifremer.tutti.service.pupitri.csv.CarrouselRow; import fr.ifremer.tutti.service.pupitri.csv.CarrouselRowModel; import fr.ifremer.tutti.service.pupitri.csv.TrunkRow; @@ -562,7 +562,7 @@ public class PupitriImportService extends AbstractTuttiService { return batch; } - protected File createFileWithHeaders(TuttiCsvUtil.ImportModelWithHeader<?> model, + protected File createFileWithHeaders(ImportModelWithHeader<?> model, File file) { File fileWithHeaders = new File(FileUtils.getTempDirectory(), file.getName()); String headers = StringUtils.join(model.getHeader(), model.getSeparator()); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/CarrouselRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/CarrouselRowModel.java index 5a49850..a4c9dac 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/CarrouselRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/CarrouselRowModel.java @@ -23,6 +23,7 @@ package fr.ifremer.tutti.service.pupitri.csv; */ import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.ImportModelWithHeader; import fr.ifremer.tutti.service.pupitri.BoxType; import fr.ifremer.tutti.service.pupitri.Directions; import fr.ifremer.tutti.service.pupitri.Signs; @@ -35,7 +36,7 @@ import java.text.ParseException; * @author kmorin <kmorin@codelutin.com> * @since 1.2 */ -public class CarrouselRowModel extends TuttiCsvUtil.ImportModelWithHeader<CarrouselRow> { +public class CarrouselRowModel extends ImportModelWithHeader<CarrouselRow> { public CarrouselRowModel(char separator) { super(separator); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/SpeciesRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/SpeciesRowModel.java index d354398..8daa3d1 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/SpeciesRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/SpeciesRowModel.java @@ -22,13 +22,13 @@ package fr.ifremer.tutti.service.pupitri.csv; * #L% */ -import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.AbstractTuttiExportModel; /** * @author kmorin <kmorin@codelutin.com> * @since 1.2 */ -public class SpeciesRowModel extends TuttiCsvUtil.AbstractTuttiExportModel<SpeciesRow> { +public class SpeciesRowModel extends AbstractTuttiExportModel<SpeciesRow> { public SpeciesRowModel(char separator) { super(separator); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/TrunkRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/TrunkRowModel.java index cc72b2d..cf367d7 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/TrunkRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/csv/TrunkRowModel.java @@ -23,6 +23,7 @@ package fr.ifremer.tutti.service.pupitri.csv; */ import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.ImportModelWithHeader; import fr.ifremer.tutti.service.pupitri.Directions; import org.nuiton.csv.Common; @@ -30,7 +31,7 @@ import org.nuiton.csv.Common; * @author kmorin <kmorin@codelutin.com> * @since 1.2 */ -public class TrunkRowModel extends TuttiCsvUtil.ImportModelWithHeader<TrunkRow> { +public class TrunkRowModel extends ImportModelWithHeader<TrunkRow> { public TrunkRowModel(char separator) { super(separator); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java index 9ef9c6b..1025ca6 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.referential; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import org.nuiton.csv.Common; import static org.nuiton.i18n.I18n.n; @@ -34,7 +35,7 @@ import static org.nuiton.i18n.I18n.n; * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class GearModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<GearRow> { +public class GearModel extends AbstractTuttiImportExportModel<GearRow> { public GearModel(char separator) { super(separator); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java index bb11c1e..2e134f9 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/PersonModel.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.referential; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import static org.nuiton.i18n.I18n.n; @@ -33,7 +34,7 @@ import static org.nuiton.i18n.I18n.n; * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class PersonModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<PersonRow> { +public class PersonModel extends AbstractTuttiImportExportModel<PersonRow> { public PersonModel(char separator) { super(separator); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java index ebfe0db..19c395e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.referential; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import static org.nuiton.i18n.I18n.n; @@ -33,7 +34,7 @@ import static org.nuiton.i18n.I18n.n; * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class SpeciesModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<SpeciesRow> { +public class SpeciesModel extends AbstractTuttiImportExportModel<SpeciesRow> { public SpeciesModel(char separator) { super(separator); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java index 5c14ed9..0faac49 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java @@ -25,6 +25,7 @@ package fr.ifremer.tutti.service.referential; import fr.ifremer.adagio.core.dao.technical.hibernate.TemporaryDataHelper; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.service.TuttiCsvUtil; +import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import org.apache.commons.lang3.StringUtils; import org.nuiton.csv.Common; @@ -36,7 +37,7 @@ import static org.nuiton.i18n.I18n.t; * @author tchemit <chemit@codelutin.com> * @since 1.0 */ -public class VesselModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<VesselRow> { +public class VesselModel extends AbstractTuttiImportExportModel<VesselRow> { public VesselModel(char separator) { super(separator); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.