r2622 - branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out
Author: tchemit Date: 2012-08-17 00:43:00 +0200 (Fri, 17 Aug 2012) New Revision: 2622 Url: http://nuiton.org/repositories/revision/topia/2622 Log: refs #2266: Add some api about import / export in csv format (add useful export methods) Added: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/PrepareDataForExport.java Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/ExportModelFactory.java branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/TopiaCsvExports.java Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/ExportModelFactory.java =================================================================== --- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/ExportModelFactory.java 2012-08-16 16:19:17 UTC (rev 2621) +++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/ExportModelFactory.java 2012-08-16 22:43:00 UTC (rev 2622) @@ -37,7 +37,7 @@ */ public interface ExportModelFactory<T extends TopiaEntityEnum> { - <E extends TopiaEntity> ExportModel<E> buildForExport(TableMeta<T> meta, boolean asSeen); + <E extends TopiaEntity> ExportModel<E> buildForExport(TableMeta<T> meta); <E extends TopiaEntity> ExportModel<E> buildForExport(AssociationMeta<T> associationMeta); } Added: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/PrepareDataForExport.java =================================================================== --- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/PrepareDataForExport.java (rev 0) +++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/PrepareDataForExport.java 2012-08-16 22:43:00 UTC (rev 2622) @@ -0,0 +1,21 @@ +package org.nuiton.topia.persistence.csv.out; + +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.TopiaEntityEnum; +import org.nuiton.topia.persistence.metadata.AssociationMeta; +import org.nuiton.topia.persistence.metadata.TableMeta; + +import java.util.List; + +/** + * Prepare data to export. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.6.12 + */ +public interface PrepareDataForExport<T extends TopiaEntityEnum> { + + <E extends TopiaEntity> List<E> prepareData(TableMeta<T> tableMeta); + + <E extends TopiaEntity> List<E> prepareData(AssociationMeta<T> associationMeta); +} Property changes on: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/PrepareDataForExport.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/TopiaCsvExports.java =================================================================== --- branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/TopiaCsvExports.java 2012-08-16 16:19:17 UTC (rev 2621) +++ branches/topia-2.6.x/topia-persistence/src/main/java/org/nuiton/topia/persistence/csv/out/TopiaCsvExports.java 2012-08-16 22:43:00 UTC (rev 2622) @@ -23,6 +23,7 @@ * #L% */ +import com.google.common.base.Charsets; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -31,11 +32,14 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaRuntimeException; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaEntityEnum; import org.nuiton.topia.persistence.metadata.AssociationMeta; import org.nuiton.topia.persistence.metadata.MetaFilenameAware; import org.nuiton.topia.persistence.metadata.TableMeta; +import org.nuiton.util.TimeLog; +import org.nuiton.util.csv.Export; import org.nuiton.util.csv.ExportModel; import org.nuiton.util.csv.ext.RepeatableExport; @@ -58,10 +62,94 @@ /** Logger. */ private static final Log log = LogFactory.getLog(TopiaCsvExports.class); + + public static final TimeLog TIME_LOG = new TimeLog(TopiaCsvExports.class); + + protected TopiaCsvExports() { // no instance of this helper } + public static <T extends TopiaEntityEnum> String exportData(TableMeta<T> tableMeta, + ExportModelFactory<T> modelFactory, + PrepareDataForExport<T> prepareDataForExport) { + + + long s1 = TimeLog.getTime(); + Export<TopiaEntity> export = prepareExport(tableMeta, modelFactory, prepareDataForExport); + TIME_LOG.log(s1, "exportData::prepareExport"); + long s2 = TimeLog.getTime(); + String result; + try { + result = export.toString(Charsets.UTF_8); + } catch (Exception eee) { + throw new TopiaRuntimeException("Can not export datas", eee); + } + TIME_LOG.log(s2, "exportData::exportToString"); + return result; + } + + public static <T extends TopiaEntityEnum> void exportData(TableMeta<T> tableMeta, + ExportModelFactory<T> modelFactory, + PrepareDataForExport<T> prepareDataForExport, + File file) { + + if (log.isInfoEnabled()) { + log.info("Export table " + tableMeta + " to " + file); + } + long s1 = TimeLog.getTime(); + Export<TopiaEntity> export = prepareExport(tableMeta, modelFactory, prepareDataForExport); + TIME_LOG.log(s1, "exportDatas::prepareExport"); + long s2 = TimeLog.getTime(); + try { + export.write(file, Charsets.UTF_8); + } catch (Exception eee) { + throw new TopiaRuntimeException("Can not export datas", eee); + } + TIME_LOG.log(s2, "exportData::exportToFile"); + } + + public static <T extends TopiaEntityEnum> void exportData(AssociationMeta<T> associationMeta, + ExportModelFactory<T> modelFactory, + PrepareDataForExport<T> prepareDataForExport, + File file) { + + if (log.isInfoEnabled()) { + log.info("Export association " + associationMeta + " to " + file); + } + long s1 = TimeLog.getTime(); + + Export<TopiaEntity> export = prepareExport(associationMeta, modelFactory, prepareDataForExport); + TIME_LOG.log(s1, "exportData::prepareExport"); + + long s2 = TimeLog.getTime(); + try { + export.write(file, Charsets.UTF_8); + } catch (Exception eee) { + throw new TopiaRuntimeException("Can not export datas", eee); + } + TIME_LOG.log(s2, "exportData::exportToFile"); + } + + public static <T extends TopiaEntityEnum, E extends TopiaEntity> Export<E> prepareExport(TableMeta<T> tableMeta, + ExportModelFactory<T> modelFactory, + PrepareDataForExport<T> prepareDataForExport) { + + + List<E> datas = prepareDataForExport.prepareData(tableMeta); + ExportModel<E> model = modelFactory.buildForExport(tableMeta); + return Export.newExport(model, datas); + } + + public static <T extends TopiaEntityEnum, E extends TopiaEntity> Export<E> prepareExport(AssociationMeta<T> associationMeta, + ExportModelFactory<T> modelFactory, + PrepareDataForExport<T> prepareDataForExport) { + + List<E> datas = prepareDataForExport.prepareData(associationMeta); + ExportModel<E> model = modelFactory.buildForExport(associationMeta); + return Export.newExport(model, datas); + } + public static <T extends TopiaEntityEnum> Map<Class<?>, EntityExportContext> createReplicateEntityVisitorContexts(ExportModelFactory<T> modelFactory, MetaFilenameAware<T>[] entityMetas, Multimap<T, MetaFilenameAware<T>> associations, @@ -80,7 +168,7 @@ Collection<MetaFilenameAware<T>> metaFilenameAwares = associations.get(source); - ExportModel<TopiaEntity> model = modelFactory.buildForExport(meta, false); + ExportModel<TopiaEntity> model = modelFactory.buildForExport(meta); EntityExportContext<T> exportContext = EntityExportContext.newExportContext( model,
participants (1)
-
tchemit@users.nuiton.org