r554 - in trunk: echobase-entities/src/main/xmi echobase-services/src/main/java/fr/ifremer/echobase/services echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders
Author: tchemit Date: 2012-08-17 00:44:13 +0200 (Fri, 17 Aug 2012) New Revision: 554 Url: http://forge.codelutin.com/repositories/revision/echobase/554 Log: refs #1407: Extraction du module d'import-export csv vers ToPIA (export API should be nearly stable) Modified: trunk/echobase-entities/src/main/xmi/echobase.zargo trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ExportDbService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ExportService.java trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/EntityLoader.java trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/VoyageLoader.java Modified: trunk/echobase-entities/src/main/xmi/echobase.zargo =================================================================== (Binary files differ) Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ExportDbService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ExportDbService.java 2012-08-16 16:21:10 UTC (rev 553) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ExportDbService.java 2012-08-16 22:44:13 UTC (rev 554) @@ -35,11 +35,12 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.csv.out.AbstractExportEntityVisitor; +import org.nuiton.topia.persistence.csv.out.ExportModelFactory; +import org.nuiton.topia.persistence.csv.out.TopiaCsvExports; import org.nuiton.topia.persistence.metadata.AssociationMeta; import org.nuiton.topia.persistence.metadata.MetaFilenameAware; import org.nuiton.topia.persistence.metadata.TableMeta; -import org.nuiton.topia.persistence.csv.out.AbstractExportEntityVisitor; -import org.nuiton.topia.persistence.csv.out.TopiaCsvExports; import org.nuiton.util.FileUtil; import org.nuiton.util.TimeLog; @@ -97,10 +98,10 @@ File entryFile = new File(dir, entry.getFilename()); if (entry instanceof AssociationMeta) { AssociationMeta<EchoBaseEntityEnum> associationMeta = (AssociationMeta<EchoBaseEntityEnum>) entry; - exportService.exportDatas(associationMeta, entryFile); + exportService.exportData(associationMeta, entryFile); } else { TableMeta<EchoBaseEntityEnum> meta = (TableMeta<EchoBaseEntityEnum>) entry; - exportService.exportDatas(meta, entryFile); + exportService.exportData(meta, entryFile); } } if (log.isInfoEnabled()) { @@ -156,10 +157,10 @@ File entryFile = new File(dir, entry.getFilename()); if (entry instanceof AssociationMeta) { AssociationMeta<EchoBaseEntityEnum> associationMeta = (AssociationMeta<EchoBaseEntityEnum>) entry; - exportService.exportDatas(associationMeta, entryFile); + exportService.exportData(associationMeta, entryFile); } else { TableMeta<EchoBaseEntityEnum> meta = (TableMeta<EchoBaseEntityEnum>) entry; - exportService.exportDatas(meta, entryFile); + exportService.exportData(meta, entryFile); } } @@ -170,7 +171,7 @@ EchoBaseMetadatas.getDataAssociationsEntries(getDbMeta()); ReplicateEntityVisitor visitor = createVisitor( - exportService, + exportService.getModelFactory(false), dataEntries, dataAssociationEntries, dir @@ -193,15 +194,15 @@ EchoBaseIOUtil.compressZipFile(zipFile, dir); } - public ReplicateEntityVisitor createVisitor(ExportService service, + public ReplicateEntityVisitor createVisitor(ExportModelFactory<EchoBaseEntityEnum> modelFactory, MetaFilenameAware<EchoBaseEntityEnum>[] entityMetas, Multimap<EchoBaseEntityEnum, MetaFilenameAware<EchoBaseEntityEnum>> associations, File container) { - Preconditions.checkNotNull(service); + Preconditions.checkNotNull(modelFactory); Map<Class<?>, TopiaCsvExports.EntityExportContext> contexts = TopiaCsvExports.createReplicateEntityVisitorContexts( - service, entityMetas, associations, container); + modelFactory, entityMetas, associations, container); ReplicateEntityVisitor result = new ReplicateEntityVisitor(contexts); return result; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ExportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ExportService.java 2012-08-16 16:21:10 UTC (rev 553) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ExportService.java 2012-08-16 22:44:13 UTC (rev 554) @@ -23,20 +23,16 @@ */ package fr.ifremer.echobase.services; -import com.google.common.base.Charsets; -import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.csv.EntityCsvModel; +import org.nuiton.topia.persistence.csv.out.EntityAssociationExportModel; +import org.nuiton.topia.persistence.csv.out.ExportModelFactory; +import org.nuiton.topia.persistence.csv.out.PrepareDataForExport; +import org.nuiton.topia.persistence.csv.out.TopiaCsvExports; import org.nuiton.topia.persistence.metadata.AssociationMeta; import org.nuiton.topia.persistence.metadata.ColumnMeta; import org.nuiton.topia.persistence.metadata.TableMeta; -import org.nuiton.topia.persistence.csv.EntityCsvModel; -import org.nuiton.topia.persistence.csv.out.EntityAssociationExportModel; -import org.nuiton.topia.persistence.csv.out.ExportModelFactory; -import org.nuiton.util.TimeLog; -import org.nuiton.util.csv.Export; import org.nuiton.util.csv.ExportModel; import org.nuiton.util.decorator.Decorator; @@ -49,133 +45,271 @@ * @author tchemit <chemit@codelutin.com> * @since 0.2 */ -public class ExportService extends EchoBaseServiceSupport implements ExportModelFactory<EchoBaseEntityEnum> { +public class ExportService extends EchoBaseServiceSupport { +// +// /** Logger. */ +// private static final Log log = LogFactory.getLog(ExportService.class); +// +// public static final TimeLog TIME_LOG = new TimeLog(ExportService.class); - /** Logger. */ - private static final Log log = LogFactory.getLog(ExportService.class); +// public ExportModelFactory<EchoBaseEntityEnum> getDefaultExportFactory() { +// return defaultExportFactory; +// } - public static final TimeLog TIME_LOG = new TimeLog(ExportService.class); +// public ExportModelFactory<EchoBaseEntityEnum> getAsSeenExportFactory() { +// return asSeenExportFactory; +// } - @Override - public <E extends TopiaEntity> ExportModel<E> buildForExport(AssociationMeta<EchoBaseEntityEnum> associationMeta) { +// @Override +// public <E extends TopiaEntity> ExportModel<E> buildForExport(AssociationMeta<EchoBaseEntityEnum> associationMeta) { +// +// ExportModel<E> model = EntityAssociationExportModel.newExportModel( +// getConfiguration().getCsvSeparator(), +// associationMeta +// ); +// return model; +// } +// +// @Override +// public <E extends TopiaEntity> ExportModel<E> buildForExport(TableMeta<EchoBaseEntityEnum> meta, boolean asSeen) { +// +// EntityCsvModel<EchoBaseEntityEnum, E> model; +// +// if (asSeen) { +// +// // no need to have topiaId as first column +// model = EntityCsvModel.newModel( +// getConfiguration().getCsvSeparator(), +// meta +// ); +// } else { +// +// // normla export add topiaId column +// model = EntityCsvModel.newModel( +// getConfiguration().getCsvSeparator(), +// meta, +// TopiaEntity.TOPIA_ID +// ); +// } +// +// DecoratorService service = getService(DecoratorService.class); +// +// for (ColumnMeta columnMeta : meta) { +// String propertyName = columnMeta.getName(); +// Class<?> type = columnMeta.getType(); +// if (columnMeta.isFK()) { +// +// Class<TopiaEntity> entityType = (Class<TopiaEntity>) type; +// if (asSeen) { +// +// // export decorated foreign key value +// Decorator<TopiaEntity> decorator = +// service.getDecorator(getLocale(), entityType, null); +// model.addDecoratedForeignKeyForExport(propertyName, propertyName, decorator); +// } else { +// +// // export foreign key value as his topiaId +// model.addForeignKeyForExport(propertyName, entityType); +// } +// } else { +// model.addDefaultColumn(propertyName, type); +// } +// } +// return model; +// } - ExportModel<E> model = EntityAssociationExportModel.newExportModel( - getConfiguration().getCsvSeparator(), - associationMeta - ); - return model; + public String exportDatas(TableMeta<EchoBaseEntityEnum> tableMeta, boolean asSeen) { + + String result = TopiaCsvExports.exportData(tableMeta, + getModelFactory(asSeen), + defaultPrepareDataForExport); + return result; +// +// Export<TopiaEntity> export = prepareExport(tableMeta, asSeen); +// +// try { +// return export.toString(Charsets.UTF_8); +// } catch (Exception eee) { +// throw new EchoBaseTechnicalException("Can not export datas", eee); +// } } - @Override - public <E extends TopiaEntity> ExportModel<E> buildForExport(TableMeta<EchoBaseEntityEnum> meta, boolean asSeen) { + public void exportData(TableMeta<EchoBaseEntityEnum> tableMeta, File file) { - EntityCsvModel<EchoBaseEntityEnum, E> model; + TopiaCsvExports.exportData(tableMeta, + defaultExportFactory, + defaultPrepareDataForExport, + file); +// if (log.isInfoEnabled()) { +// log.info("Export table " + tableMeta + " to " + file); +// } +// long s1 = TimeLog.getTime(); +// Export<TopiaEntity> export = prepareExport(tableMeta, false); +// TIME_LOG.log(s1, "exportData::prepareExport"); +// long s2 = TimeLog.getTime(); +// try { +// export.write(file, Charsets.UTF_8); +// } catch (Exception eee) { +// throw new EchoBaseTechnicalException("Can not export datas", eee); +// } +// TIME_LOG.log(s2, "exportData::exportToFile"); + } + + public void exportData(AssociationMeta<EchoBaseEntityEnum> associationMeta, File file) { + + TopiaCsvExports.exportData(associationMeta, + defaultExportFactory, + defaultPrepareDataForExport, + file); +// if (log.isInfoEnabled()) { +// log.info("Export association " + associationMeta + " to " + file); +// } +// long s1 = TimeLog.getTime(); +// Export<TopiaEntity> export = prepareExport(associationMeta); +// TIME_LOG.log(s1, "exportData::prepareExport"); +// +// long s2 = TimeLog.getTime(); +// try { +// export.write(file, Charsets.UTF_8); +// } catch (Exception eee) { +// throw new EchoBaseTechnicalException("Can not export datas", eee); +// } +// TIME_LOG.log(s2, "exportData::exportToFile"); + } + + public ExportModelFactory<EchoBaseEntityEnum> getModelFactory(boolean asSeen) { + ExportModelFactory<EchoBaseEntityEnum> result; if (asSeen) { - - // no need to have topiaId as first column - model = EntityCsvModel.newModel( - getConfiguration().getCsvSeparator(), - meta - ); + result = asSeenExportFactory; } else { + result = defaultExportFactory; + } + return result; + } - // normla export add topiaId column - model = EntityCsvModel.newModel( +// protected Export<TopiaEntity> prepareExport(TableMeta<EchoBaseEntityEnum> tableMeta, boolean asSeen) { +// +// List<TopiaEntity> datas = defaultPrepareDataForExport.prepareData(tableMeta); +// +// ExportModel<TopiaEntity> model; +// if (asSeen) { +// model = asSeenExportFactory.buildForExport(tableMeta); +// } else { +// model = defaultExportFactory.buildForExport(tableMeta); +// +// } +// return Export.newExport(model, datas); +// } + +// protected Export<TopiaEntity> prepareExport(AssociationMeta<EchoBaseEntityEnum> associationMeta) { +// +// List<TopiaEntity> datas = defaultPrepareDataForExport.prepareExport(associationMeta); +// ExportModel<TopiaEntity> model = defaultExportFactory.buildForExport(associationMeta); +// return Export.newExport(model, datas); +// } + + private ExportModelFactory<EchoBaseEntityEnum> defaultExportFactory = new ExportModelFactory<EchoBaseEntityEnum>() { + + @Override + public <E extends TopiaEntity> ExportModel<E> buildForExport(TableMeta<EchoBaseEntityEnum> meta) { + + // normal export add topiaId column + EntityCsvModel<EchoBaseEntityEnum, E> model = EntityCsvModel.newModel( getConfiguration().getCsvSeparator(), meta, TopiaEntity.TOPIA_ID ); - } - DecoratorService service = getService(DecoratorService.class); + for (ColumnMeta columnMeta : meta) { + String propertyName = columnMeta.getName(); + Class<?> type = columnMeta.getType(); + if (columnMeta.isFK()) { - for (ColumnMeta columnMeta : meta) { - String propertyName = columnMeta.getName(); - Class<?> type = columnMeta.getType(); - if (columnMeta.isFK()) { + Class<TopiaEntity> entityType = (Class<TopiaEntity>) type; - Class<TopiaEntity> entityType = (Class<TopiaEntity>) type; - if (asSeen) { - // export decorated foreign key value - Decorator<TopiaEntity> decorator = - service.getDecorator(getLocale(), entityType, null); - model.addDecoratedForeignKeyForExport(propertyName, propertyName, decorator); - } else { - // export foreign key value as his topiaId model.addForeignKeyForExport(propertyName, entityType); + + } else { + model.addDefaultColumn(propertyName, type); } - } else { - model.addDefaultColumn(propertyName, type); } + return model; } - return model; - } - public String exportDatas(TableMeta<EchoBaseEntityEnum> tableMeta, boolean asSeen) { + @Override + public <E extends TopiaEntity> ExportModel<E> buildForExport(AssociationMeta<EchoBaseEntityEnum> associationMeta) { + ExportModel<E> model = EntityAssociationExportModel.newExportModel( + getConfiguration().getCsvSeparator(), + associationMeta + ); + return model; + } + }; - Export<TopiaEntity> export = prepareExport(tableMeta, asSeen); + private ExportModelFactory<EchoBaseEntityEnum> asSeenExportFactory = new ExportModelFactory<EchoBaseEntityEnum>() { - try { - return export.toString(Charsets.UTF_8); - } catch (Exception eee) { - throw new EchoBaseTechnicalException("Can not export datas", eee); - } - } + @Override + public <E extends TopiaEntity> ExportModel<E> buildForExport(TableMeta<EchoBaseEntityEnum> meta) { - public void exportDatas(TableMeta<EchoBaseEntityEnum> tableMeta, File file) { - if (log.isInfoEnabled()) { - log.info("Export table " + tableMeta + " to " + file); - } - long s1 = TimeLog.getTime(); - Export<TopiaEntity> export = prepareExport(tableMeta, false); - TIME_LOG.log(s1, "exportDatas::prepareExport"); - long s2 = TimeLog.getTime(); - try { - export.write(file, Charsets.UTF_8); - } catch (Exception eee) { - throw new EchoBaseTechnicalException("Can not export datas", eee); - } - TIME_LOG.log(s2, "exportDatas::exportToFile"); - } + // no need to have topiaId as first column + EntityCsvModel<EchoBaseEntityEnum, E> model = EntityCsvModel.newModel( + getConfiguration().getCsvSeparator(), + meta + ); - public void exportDatas(AssociationMeta<EchoBaseEntityEnum> associationMeta, File file) { - if (log.isInfoEnabled()) { - log.info("Export association " + associationMeta + " to " + file); + DecoratorService service = getService(DecoratorService.class); + + for (ColumnMeta columnMeta : meta) { + String propertyName = columnMeta.getName(); + Class<?> type = columnMeta.getType(); + if (columnMeta.isFK()) { + + Class<TopiaEntity> entityType = (Class<TopiaEntity>) type; + + // export decorated foreign key value + Decorator<TopiaEntity> decorator = + service.getDecorator(getLocale(), entityType, null); + model.addDecoratedForeignKeyForExport(propertyName, propertyName, decorator); + + } else { + model.addDefaultColumn(propertyName, type); + } + } + return model; } - long s1 = TimeLog.getTime(); - Export<TopiaEntity> export = prepareExport(associationMeta); - TIME_LOG.log(s1, "exportDatas::prepareExport"); - long s2 = TimeLog.getTime(); - try { - export.write(file, Charsets.UTF_8); - } catch (Exception eee) { - throw new EchoBaseTechnicalException("Can not export datas", eee); + @Override + public <E extends TopiaEntity> ExportModel<E> buildForExport(AssociationMeta<EchoBaseEntityEnum> associationMeta) { + ExportModel<E> model = EntityAssociationExportModel.newExportModel( + getConfiguration().getCsvSeparator(), + associationMeta + ); + return model; } - TIME_LOG.log(s2, "exportDatas::exportToFile"); - } + }; - protected Export<TopiaEntity> prepareExport(TableMeta<EchoBaseEntityEnum> tableMeta, boolean asSeen) { - DbEditorService service = getService(DbEditorService.class); + private PrepareDataForExport<EchoBaseEntityEnum> defaultPrepareDataForExport = new PrepareDataForExport<EchoBaseEntityEnum>() { - List<TopiaEntity> datas = service.getEntities(tableMeta, null, null, null, null); - ExportModel<TopiaEntity> model = buildForExport(tableMeta, asSeen); - return Export.newExport(model, datas); - } + @Override + public <E extends TopiaEntity> List<E> prepareData(TableMeta<EchoBaseEntityEnum> tableMeta) { + DbEditorService service = getService(DbEditorService.class); - protected Export<TopiaEntity> prepareExport(AssociationMeta<EchoBaseEntityEnum> associationMeta) { + List<E> data = service.getEntities(tableMeta, null, null, null, null); + return data; + } - DbEditorService service = getService(DbEditorService.class); + @Override + public <E extends TopiaEntity> List<E> prepareData(AssociationMeta<EchoBaseEntityEnum> associationMeta) { + DbEditorService service = getService(DbEditorService.class); - TableMeta<EchoBaseEntityEnum> tableMeta = service.getTableMeta(associationMeta.getSource()); - List<TopiaEntity> datas = service.getEntities(tableMeta, null, null, null, "size(e." + associationMeta.getName() + ") > 0"); - ExportModel<TopiaEntity> model = buildForExport(associationMeta); - return Export.newExport(model, datas); - } - + TableMeta<EchoBaseEntityEnum> tableMeta = service.getTableMeta(associationMeta.getSource()); + List<E> data = service.getEntities(tableMeta, null, null, null, "size(e." + associationMeta.getName() + ") > 0"); + return data; + } + }; } Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/EntityLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/EntityLoader.java 2012-08-16 16:21:10 UTC (rev 553) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/EntityLoader.java 2012-08-16 22:44:13 UTC (rev 554) @@ -297,7 +297,7 @@ File out = getTableFile(outputDir, meta, targetType); - getExportService().exportDatas(meta, out); + getExportService().exportData(meta, out); } protected void copyAndLoad(File outputDir) throws IOException, TopiaException { @@ -401,7 +401,7 @@ FileType targetType, AssociationMeta<EchoBaseEntityEnum> associationMeta) throws IOException { File out = getTableFile(outputDir, associationMeta, targetType); - getExportService().exportDatas(associationMeta, out); + getExportService().exportData(associationMeta, out); } Modified: trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/VoyageLoader.java =================================================================== --- trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/VoyageLoader.java 2012-08-16 16:21:10 UTC (rev 553) +++ trunk/echobase-tools/src/main/java/fr/ifremer/echobase/tools/loaders/VoyageLoader.java 2012-08-16 22:44:13 UTC (rev 554) @@ -215,16 +215,16 @@ // Export echotypes out = getTableFile(outputDir, echotypeMeta, FileType.NEW); - getExportService().exportDatas(echotypeMeta, out); + getExportService().exportData(echotypeMeta, out); // Export echotype - species association out = getTableFile(outputDir, echotypeSpeciesAssociationMeta, FileType.ASSOCIATION); - getExportService().exportDatas(echotypeSpeciesAssociationMeta, out); + getExportService().exportData(echotypeSpeciesAssociationMeta, out); // Export voyage - echotype association out = getTableFile(outputDir, voyageEchotypeAssociationMeta, FileType.ASSOCIATION); - getExportService().exportDatas(voyageEchotypeAssociationMeta, out); + getExportService().exportData(voyageEchotypeAssociationMeta, out); } finally {
participants (1)
-
tchemit@users.forge.codelutin.com