r518 - in trunk: echobase-entities/src/main/java/fr/ifremer/echobase/entities echobase-services/src/main/java/fr/ifremer/echobase/services
Author: tchemit Date: 2012-04-10 22:02:10 +0200 (Tue, 10 Apr 2012) New Revision: 518 Url: http://forge.codelutin.com/repositories/revision/echobase/518 Log: refs #1102: La cr?\195?\169ation d'une base embarqu?\195?\169e ne fonctionne pas avec les donn?\195?\169es 2011 Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/EntitiesUtil.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ExportDbService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ReplicateEntityVisitor.java Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/EntitiesUtil.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/EntitiesUtil.java 2012-04-10 18:05:02 UTC (rev 517) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/EntitiesUtil.java 2012-04-10 20:02:10 UTC (rev 518) @@ -139,13 +139,12 @@ return entities.toArray(new MetaFilenameAware[entities.size()]); } - public static MetaFilenameAware[] getReferenceEntries(DbMeta dbMeta, EchoBaseEntityEnum... extraTypes) { + public static MetaFilenameAware[] getReferenceEntries(DbMeta dbMeta) { List<MetaFilenameAware> entities = Lists.newArrayList(); List<MetaFilenameAware> associations = Lists.newArrayList(); addEntries(dbMeta, entities, associations, getReferenceTypes()); - addEntries(dbMeta, entities, associations, extraTypes); entities.addAll(associations); return entities.toArray(new MetaFilenameAware[entities.size()]); 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-04-10 18:05:02 UTC (rev 517) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ExportDbService.java 2012-04-10 20:02:10 UTC (rev 518) @@ -125,10 +125,9 @@ ExportService exportService = getService(ExportService.class); - // export all referentiel + category (defined for all datas) - MetaFilenameAware[] refEntries = - EntitiesUtil.getReferenceEntries(getDbMeta(), - EchoBaseEntityEnum.Category); + // export all referentiel + MetaFilenameAware[] refEntries = EntitiesUtil.getReferenceEntries( + getDbMeta()); boolean withVoyages = model.getVoyageIds() != null; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ReplicateEntityVisitor.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ReplicateEntityVisitor.java 2012-04-10 18:05:02 UTC (rev 517) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ReplicateEntityVisitor.java 2012-04-10 20:02:10 UTC (rev 518) @@ -26,10 +26,12 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.csv.EntityExportContext; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.data.Cell; +import fr.ifremer.echobase.entities.data.Result; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.meta.AssociationMeta; import fr.ifremer.echobase.entities.meta.MetaFilenameAware; @@ -47,6 +49,7 @@ import java.io.File; import java.util.Collection; import java.util.Map; +import java.util.Set; /** * entity visitor to export data to csv files. @@ -63,10 +66,6 @@ public static final TimeLog TIME_LOG = new TimeLog(ReplicateEntityVisitor.class); -// protected Set<String> ids = Sets.newHashSetWithExpectedSize(2000000000); -// -// protected Deque<String> stack = new ArrayDeque<String>(); - public static ReplicateEntityVisitor createVisitor(ExportService service, MetaFilenameAware[] entityMetas, Multimap<EchoBaseEntityEnum, MetaFilenameAware> associations, @@ -114,8 +113,11 @@ /** Export for simple entity. */ protected final Map<Class<?>, EntityExportContext> entityExporters; + protected final Set<String> categoryIds; + public ReplicateEntityVisitor(Map<Class<?>, EntityExportContext> entityExporters) { this.entityExporters = entityExporters; + categoryIds = Sets.newHashSet(); } public void export(TopiaEntity entity) { @@ -135,16 +137,6 @@ public void start(TopiaEntity entity) { String topiaId = entity.getTopiaId(); try { -// stack.push(topiaId); -// boolean added = ids.add(topiaId); -// if (!added) { -// -// // Never do me! can not accept to treat twice an object -// throw new EchoBaseTechnicalException( -// "Wanted to treat twice entity " + topiaId + -// "\n Current stack " + stack.toString()); -// -// } if (log.isDebugEnabled()) { log.debug("Starts export of entity " + topiaId); } @@ -163,7 +155,6 @@ @Override public void end(TopiaEntity entity) { -// stack.pop(); try { if (log.isDebugEnabled()) { log.debug("Starts export of association of entity " + @@ -186,7 +177,23 @@ @Override public void visit(TopiaEntity entity, String propertyName, Class<?> type, Object value) { - // do nothing + if (Result.PROPERTY_CATEGORY.equals(propertyName) && + entity instanceof Result) { + + // export category + try { + TopiaEntity topiaEntity = (TopiaEntity) value; + if (categoryIds.add(topiaEntity.getTopiaId())) { + // add this new category + topiaEntity.accept(this); + } + + } catch (TopiaException e) { + if (log.isErrorEnabled()) { + log.error("Can not visit entity " + value, e); + } + } + } } @Override @@ -241,6 +248,8 @@ // use at the end of visit (or later) + categoryIds.clear(); + for (EntityExportContext exportContext : entityExporters.values()) { IOUtils.closeQuietly(exportContext); }
participants (1)
-
tchemit@users.forge.codelutin.com