r170 - in trunk/echobase-services/src/main/java/fr/ifremer/echobase/services: . models
Author: tchemit Date: 2011-12-12 14:13:41 +0100 (Mon, 12 Dec 2011) New Revision: 170 Url: http://forge.codelutin.com/repositories/revision/echobase/170 Log: improve Association entity ie Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbImportExportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/models/CsvModelUtil.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/models/EntityAssociationCsvModel.java 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 2011-12-11 21:40:50 UTC (rev 169) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2011-12-12 13:13:41 UTC (rev 170) @@ -48,6 +48,7 @@ import org.nuiton.util.beans.BeanMonitor; import org.nuiton.util.beans.PropertyDiff; import org.nuiton.util.csv.Export; +import org.nuiton.util.csv.ExportModel; import org.nuiton.util.csv.ExportableColumn; import org.nuiton.util.csv.Import; import org.nuiton.util.csv.ImportExportModel; @@ -538,16 +539,16 @@ return model; } - public <E extends TopiaEntity> ImportExportModel<E> buildForExport(AssociationMeta associationMeta) { + public <E extends TopiaEntity> ExportModel<E> buildForExport(AssociationMeta associationMeta) { - ImportExportModel<E> model = EntityAssociationCsvModel.newModel( + ExportModel<E> model = EntityAssociationCsvModel.newExportModel( getConfiguration().getCsvSeparator(), associationMeta ); return model; } - public <E extends TopiaEntity> ImportExportModel<E> buildForExport(MetaFilenameAware meta) { + public <E extends TopiaEntity> ExportModel<E> buildForExport(MetaFilenameAware meta) { if (meta instanceof AssociationMeta) { return buildForExport((AssociationMeta) meta); } @@ -557,7 +558,7 @@ throw new IllegalStateException("Can't do a thing with " + meta); } - public <E extends TopiaEntity> ImportExportModel<E> buildForExport(TableMeta meta) { + public <E extends TopiaEntity> ExportModel<E> buildForExport(TableMeta meta) { EntityCsvModel<E> model = EntityCsvModel.newModel( getConfiguration().getCsvSeparator(), @@ -646,7 +647,7 @@ protected Export<TopiaEntity> prepareExport(TableMeta tableMeta) { List<TopiaEntity> datas = getEntities(tableMeta, null, null, null, null); - ImportExportModel<TopiaEntity> model = buildForExport(tableMeta); + ExportModel<TopiaEntity> model = buildForExport(tableMeta); return Export.newExport(model, datas); } @@ -657,7 +658,7 @@ TableMeta tableMeta = getTableMeta(associationMeta.getSource()); List<TopiaEntity> datas = getEntities(tableMeta, null, null, null, "size(e." + associationMeta.getName() + ") > 0"); - ImportExportModel<TopiaEntity> model = buildForExport(associationMeta); + ExportModel<TopiaEntity> model = buildForExport(associationMeta); return Export.newExport(model, datas); } } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbImportExportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbImportExportService.java 2011-12-11 21:40:50 UTC (rev 169) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbImportExportService.java 2011-12-12 13:13:41 UTC (rev 170) @@ -44,11 +44,13 @@ import org.nuiton.util.StringUtil; import org.nuiton.util.csv.Import; import org.nuiton.util.csv.ImportExportModel; +import org.nuiton.util.csv.ImportModel; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.zip.ZipEntry; @@ -194,25 +196,15 @@ AssociationMeta associationMeta = (AssociationMeta) entry; - EchoBaseEntityEnum source = associationMeta.getSource(); - List<TopiaEntity> sourceEntities = getEntities(source); - Map<String, TopiaEntity> sourcesById; - Map<String, TopiaEntity> targetsById; - sourcesById = Maps.uniqueIndex(sourceEntities, CsvModelUtil.TO_TOPIAID); EchoBaseEntityEnum target = associationMeta.getTarget(); - if (source.equals(target)) { - targetsById = sourcesById; - } else { + List<TopiaEntity> targetEntities = getEntities(target); + Map<String, TopiaEntity> targetsById = + Maps.uniqueIndex(targetEntities, CsvModelUtil.TO_TOPIAID); - List<TopiaEntity> targetEntities = getEntities(target); - targetsById = Maps.uniqueIndex(targetEntities, CsvModelUtil.TO_TOPIAID); - } - - ImportExportModel<TopiaEntity> model = - EntityAssociationCsvModel.newModel( + ImportModel<TopiaEntity> model = + EntityAssociationCsvModel.newImportModel( getConfiguration().getCsvSeparator(), associationMeta, - sourcesById, targetsById ); @@ -300,7 +292,7 @@ } protected <E extends TopiaEntity> void importEntityAssociation(AssociationMeta meta, - ImportExportModel<E> csvModel, + ImportModel<E> csvModel, CsvImportResult result, Reader reader) { if (log.isInfoEnabled()) { @@ -308,17 +300,22 @@ } try { - EchoBaseEntityEnum sourceType = meta.getSource(); - EchoBaseEntityEnum targetType = meta.getTarget(); + EchoBaseEntityEnum sourceType = meta.getSource(); +// EchoBaseEntityEnum targetType = meta.getTarget(); - Import<E> importer = Import.newImport(csvModel, reader); + Import<E> importer = Import.newImport(csvModel, reader); TopiaDAO<E> sourceDAO = getDAO(sourceType); - TopiaDAO<TopiaEntity> targetDAO = getDAO(targetType); +// TopiaDAO<TopiaEntity> targetDAO = getDAO(targetType); + List<E> sourceEntities = getEntities(sourceType); + Map<String, E> sourcesById = + Maps.uniqueIndex(sourceEntities, CsvModelUtil.TO_TOPIAID); + try { + for (E row : importer) { + E entityToSave = sourcesById.get(row.getTopiaId()); + Collection<TopiaEntity> assoc = meta.getChilds(row); + meta.setChilds(entityToSave, assoc); +// sourceDAO.update(entityToSave); - try { - for (E row : importer) { - - sourceDAO.update(row); // E entityToSave = sourceDAO.findByTopiaId(row.getTopiaId()); // // // check entity exits ? @@ -338,13 +335,13 @@ // result.incrementsNumberUpdated(); // } // meta.setChilds(entityToSave, associationToSave); - } - } finally { - - importer.close(); } + } finally { - commitTransaction("Could not commit transaction"); + importer.close(); + } + + commitTransaction("Could not commit transaction"); } catch (TopiaException eee) { throw new EchoBaseTechnicalException(eee); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/models/CsvModelUtil.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/models/CsvModelUtil.java 2011-12-11 21:40:50 UTC (rev 169) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/models/CsvModelUtil.java 2011-12-12 13:13:41 UTC (rev 170) @@ -31,7 +31,6 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.util.ObjectUtil; import org.nuiton.util.StringUtil; import org.nuiton.util.csv.Common; import org.nuiton.util.csv.ValueFormatter; @@ -54,7 +53,7 @@ @Override public String apply(TopiaEntity input) { - return input.getTopiaId().toLowerCase(); + return input.getTopiaId(); } }; @@ -81,6 +80,10 @@ return new ForeignKeyDecoratedValue<E>(entityType, decoratorService, locale); } + public static <E extends TopiaEntity> ValueFormatter<Collection<E>> newAssociationValueFormatter() { + return new AssociationValueParserFormatter<E>(null, null); + } + public static <E extends TopiaEntity> AssociationValueParserFormatter<E> newAssociationValueParserFormatter(Class<E> entityType, Map<String, E> universe) { return new AssociationValueParserFormatter<E>(entityType, universe); @@ -106,8 +109,8 @@ String[] ids = value.split("\\|"); for (String id : ids) { - E association = ObjectUtil.newInstance(entityType); -// E association = universe.get(id); +// E association = ObjectUtil.newInstance(entityType); + E association = universe.get(id); association.setTopiaId(id); result.add(association); } @@ -152,7 +155,7 @@ if (StringUtils.isNotBlank(value)) { // get entity from universe - result = universe.get(value.toLowerCase()); + result = universe.get(value); if (result == null) { Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/models/EntityAssociationCsvModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/models/EntityAssociationCsvModel.java 2011-12-11 21:40:50 UTC (rev 169) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/models/EntityAssociationCsvModel.java 2011-12-12 13:13:41 UTC (rev 170) @@ -25,8 +25,10 @@ import fr.ifremer.echobase.entities.meta.AssociationMeta; import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.csv.ExportModel; import org.nuiton.util.csv.ExportableColumn; import org.nuiton.util.csv.ImportExportModel; +import org.nuiton.util.csv.ImportModel; import org.nuiton.util.csv.ImportableColumn; import org.nuiton.util.csv.ModelBuilder; @@ -48,17 +50,50 @@ protected ModelBuilder<E> modelBuilder; - public static <E extends TopiaEntity> EntityAssociationCsvModel<E> newModel(char separator, - AssociationMeta meta, - Map<String, E> sourcesById, - Map<String, TopiaEntity> targetsById + public static <E extends TopiaEntity> ImportModel<E> newImportModel(char separator, + AssociationMeta meta, + Map<String, TopiaEntity> targetsById ) { EntityAssociationCsvModel<E> model = new EntityAssociationCsvModel<E>( + separator, meta); + + // topiaId <-> topiaId + model.modelBuilder.newColumnForImportExport( + TopiaEntity.TOPIA_ID, + TopiaEntity.TOPIA_ID + ); + + // add association -> target + Class<TopiaEntity> target = + (Class<TopiaEntity>) meta.getTarget().getImplementation(); + + model.modelBuilder.newColumnForImportExport( + meta.getName(), + meta.getName(), + CsvModelUtil.newAssociationValueParserFormatter(target, targetsById) + ); + + return model; + } + + public static <E extends TopiaEntity> ExportModel<E> newExportModel(char separator, + AssociationMeta meta + ) { + EntityAssociationCsvModel<E> model = new EntityAssociationCsvModel<E>( separator, - meta, - sourcesById, - targetsById); + meta); + // topiaId <-> topiaId + model.modelBuilder.newColumnForExport( + TopiaEntity.TOPIA_ID, + TopiaEntity.TOPIA_ID + ); + + model.modelBuilder.newColumnForExport( + meta.getName(), + meta.getName(), + CsvModelUtil.newAssociationValueFormatter() + ); return model; } @@ -88,34 +123,10 @@ return (E) meta.newEntity(); } - protected EntityAssociationCsvModel(char separator, - AssociationMeta meta, - Map<String, E> sourcesById, - Map<String, TopiaEntity> targetsById) { + protected EntityAssociationCsvModel(char separator, AssociationMeta meta) { this.separator = separator; this.meta = meta; modelBuilder = new ModelBuilder<E>(); - - Class<E> source= - (Class<E>) meta.getSource().getContract(); - - // topiaId <-> topiaId - modelBuilder.newColumnForImportExport( - TopiaEntity.TOPIA_ID, - TopiaEntity.TOPIA_ID, - CsvModelUtil.newForeignKeyValue(source, sourcesById) - ); - - // add association -> target - Class<TopiaEntity> target = - (Class<TopiaEntity>) meta.getTarget().getImplementation(); - - modelBuilder.newColumnForImportExport( - meta.getName(), - meta.getName(), - CsvModelUtil.newAssociationValueParserFormatter(target,targetsById) -// CsvModelUtil.newAssociationValueParserFormatter(meta.getTarget().getImplementation()) - ); }
participants (1)
-
tchemit@users.forge.codelutin.com