Author: tchemit Date: 2012-09-22 13:20:01 +0200 (Sat, 22 Sep 2012) New Revision: 683 Url: http://forge.codelutin.com/repositories/revision/echobase/683 Log: fixes #1520: Probl?\195?\168me lors de la sauvegarde d'une entit?\195?\169 (can accept more date formats) Added: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/csv/ChainValueParser.java Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/csv/EchoBaseCsvUtil.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java Added: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/csv/ChainValueParser.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/csv/ChainValueParser.java (rev 0) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/csv/ChainValueParser.java 2012-09-22 11:20:01 UTC (rev 683) @@ -0,0 +1,54 @@ +package fr.ifremer.echobase.csv; + +import com.google.common.collect.Lists; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.csv.ValueParser; + +import java.text.ParseException; +import java.util.Iterator; +import java.util.List; + +/** + * To chain some {@link ValueParser} (different format supported). + * + * @author tchemit <chemit@codelutin.com> + * @since 1.3 + */ +public class ChainValueParser<E> implements ValueParser<E> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ChainValueParser.class); + + final List<ValueParser<E>> parsers = Lists.newArrayList(); + + public ChainValueParser<E> addParser(ValueParser<E> parser) { + this.parsers.add(parser); + return this; + } + + @Override + public E parse(String value) throws ParseException { + E result = null; + Iterator<ValueParser<E>> iterator = parsers.iterator(); + while (iterator.hasNext()) { + ValueParser<E> parser = iterator.next(); + try { + result = parser.parse(value); + break; + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("Could not parse value " + value, e); + } + } + } + + if (result == null && !iterator.hasNext()) { + + // all parsers were used and no one gives a good result + throw new ParseException( + "Could not parse value " + value + " with any parsers", 0); + } + return result; + } +} Property changes on: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/csv/ChainValueParser.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/csv/EchoBaseCsvUtil.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/csv/EchoBaseCsvUtil.java 2012-09-22 10:35:40 UTC (rev 682) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/csv/EchoBaseCsvUtil.java 2012-09-22 11:20:01 UTC (rev 683) @@ -82,6 +82,12 @@ }; + public static final ValueParser<Date> DATE_TIME_VALUE_PARSER = new ChainValueParser<Date>(). + addParser(TopiaCsvCommons.DAY_TIME_SECOND_WITH_TIMESTAMP). + addParser(TopiaCsvCommons.DAY_TIME_SECOND). + addParser(TopiaCsvCommons.DAY_TIME). + addParser(TopiaCsvCommons.DAY); + public static final String CELL_NAME = "name"; public static final String OPERATION_ID = "operationId"; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2012-09-22 10:35:40 UTC (rev 682) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2012-09-22 11:20:01 UTC (rev 683) @@ -27,6 +27,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import fr.ifremer.echobase.EchoBaseTechnicalException; +import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.EntityModificationLog; @@ -56,6 +57,7 @@ import org.nuiton.util.decorator.JXPathDecorator; import java.util.Collection; +import java.util.Date; import java.util.List; import java.util.Locale; import java.util.Map; @@ -522,6 +524,10 @@ // translate foreign key to his id model.addForeignKeyForImport(propertyName, entityType, universe); + } else if (Date.class.equals(type)) { + model.newMandatoryColumn( + propertyName, + EchoBaseCsvUtil.DATE_TIME_VALUE_PARSER); } else { model.addDefaultColumn(propertyName, type); }