r385 - in trunk: echobase-entities/src/main/java/fr/ifremer/echobase/csv echobase-entities/src/main/java/fr/ifremer/echobase/entities/meta echobase-services/src/main/java/fr/ifremer/echobase/services echobase-services/src/test/java/fr/ifremer/echobase/services echobase-services/src/test/resources
Author: tchemit Date: 2012-03-20 11:45:03 +0100 (Tue, 20 Mar 2012) New Revision: 385 Url: http://forge.codelutin.com/repositories/revision/echobase/385 Log: fix db export Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/AssociationExportContext.java trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EntityExportContext.java trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/meta/AssociationMeta.java trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/meta/MetaFilenameAware.java trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/meta/TableMeta.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ReplicateEntityVisitor.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ImportDbServiceTest.java trunk/echobase-services/src/test/resources/echobase-0.3-importDb-referentiel.zip Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/AssociationExportContext.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/AssociationExportContext.java 2012-03-20 08:14:10 UTC (rev 384) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/AssociationExportContext.java 2012-03-20 10:45:03 UTC (rev 385) @@ -23,7 +23,6 @@ */ package fr.ifremer.echobase.csv; -import com.google.common.base.Charsets; import com.google.common.base.Preconditions; import fr.ifremer.echobase.entities.meta.AssociationMeta; import org.apache.commons.io.FileUtils; @@ -35,10 +34,7 @@ import java.io.Closeable; import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; import java.io.IOException; -import java.io.OutputStreamWriter; import java.io.Writer; import java.util.List; @@ -68,7 +64,7 @@ public AssociationExportContext(ExportModel<TopiaEntity> model, AssociationMeta meta, File container, - List<TopiaEntity> data) throws FileNotFoundException { + List<TopiaEntity> data) { Preconditions.checkNotNull(model); Preconditions.checkNotNull(meta); Preconditions.checkNotNull(container); @@ -77,12 +73,12 @@ export = EchoBaseExport.newExport(model, data, true); - entryFile = new File(container, meta.getFilename()); + entryFile = meta.newFile(container); if (log.isDebugEnabled()) { - log.debug("Creates AssociationExportContext::" + meta + " - " + entryFile.getName()); + log.debug("Creates AssociationExportContext::" + meta + + " - " + entryFile.getName()); } - writer = new OutputStreamWriter(new FileOutputStream(entryFile), - Charsets.UTF_8); + writer = meta.newWriter(container); } @Override Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EntityExportContext.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EntityExportContext.java 2012-03-20 08:14:10 UTC (rev 384) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/csv/EntityExportContext.java 2012-03-20 10:45:03 UTC (rev 385) @@ -23,7 +23,6 @@ */ package fr.ifremer.echobase.csv; -import com.google.common.base.Charsets; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import fr.ifremer.echobase.entities.meta.AssociationMeta; @@ -37,10 +36,7 @@ import java.io.Closeable; import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; import java.io.IOException; -import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Collection; import java.util.List; @@ -67,9 +63,9 @@ /** * Unique list to store data to export. (will be shared with - * association export context.) + * association export contexts.) */ - protected final List<TopiaEntity> data; + private final List<TopiaEntity> data; /** Association export context for this type of entity. */ protected final Collection<AssociationExportContext> associationExportContexts; @@ -78,24 +74,26 @@ public EntityExportContext(ExportModel<TopiaEntity> model, TableMeta meta, - File container) throws FileNotFoundException { + File container) { Preconditions.checkNotNull(model); Preconditions.checkNotNull(meta); Preconditions.checkNotNull(container); this.meta = meta; - export = EchoBaseExport.newExport(model, data = Lists.newArrayList(), true); - entryFile = new File(container, meta.getFilename()); + data = Lists.newArrayList(); + export = EchoBaseExport.newExport(model, data, true); + entryFile = meta.newFile(container); if (log.isDebugEnabled()) { - log.debug("Creates EntityExportContext::" + meta + " - " + entryFile.getName()); + log.debug("Creates EntityExportContext::" + meta + " - " + + entryFile.getName()); } - writer = new OutputStreamWriter(new FileOutputStream(entryFile), Charsets.UTF_8); + writer = meta.newWriter(container); associationExportContexts = Lists.newArrayList(); } public void addAssociationExportContext(AssociationMeta meta, ExportModel<TopiaEntity> model, - File container) throws FileNotFoundException { + File container) { associationExportContexts.add( new AssociationExportContext(model, meta, @@ -104,11 +102,6 @@ ); } - public void setData(TopiaEntity entity) { - data.clear(); - data.add(entity); - } - @Override public void close() throws IOException { @@ -131,13 +124,27 @@ } } - public void write() throws Exception { - export.write(writer); + public void write(TopiaEntity data) throws Exception { + this.data.add(data); + try { + export.write(writer); + } finally { + this.data.clear(); + } } - public void writeAssociations() throws Exception { - for (AssociationExportContext c : associationExportContexts) { - c.write(); + public void writeAssociations(TopiaEntity data) throws Exception { + this.data.add(data); + try { + for (AssociationExportContext c : associationExportContexts) { + AssociationMeta cMeta = c.meta; + boolean emptyChild = cMeta.isChildEmpty(data); + if (!emptyChild) { + c.write(); + } + } + } finally { + this.data.clear(); } } } Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/meta/AssociationMeta.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/meta/AssociationMeta.java 2012-03-20 08:14:10 UTC (rev 384) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/meta/AssociationMeta.java 2012-03-20 10:45:03 UTC (rev 385) @@ -23,13 +23,20 @@ */ package fr.ifremer.echobase.entities.meta; +import com.google.common.base.Charsets; +import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.entities.EchoBaseDAOHelper; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.util.EntityOperator; import org.nuiton.util.ObjectUtil; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.OutputStreamWriter; import java.io.Serializable; +import java.io.Writer; import java.util.Collection; /** @@ -84,6 +91,22 @@ return source.name() + "_" + name + CSV_EXTENSION; } + @Override + public File newFile(File container) { + return new File(container, getFilename()); + } + + @Override + public Writer newWriter(File container) { + File file = newFile(container); + try { + return new OutputStreamWriter(new FileOutputStream(file), + Charsets.UTF_8); + } catch (FileNotFoundException e) { + throw new EchoBaseTechnicalException("Could not find file "+file); + } + } + public EchoBaseEntityEnum getTarget() { return target; } @@ -104,6 +127,11 @@ public void setChilds(TopiaEntity entity, Collection<TopiaEntity> childs) { getOperator().addAllChild(name, entity, childs); } + + public boolean isChildEmpty(TopiaEntity entity) { + boolean result = getOperator().isChildEmpty(name, entity); + return result; + } public EntityOperator<TopiaEntity> getOperator() { if (operator == null) { Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/meta/MetaFilenameAware.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/meta/MetaFilenameAware.java 2012-03-20 08:14:10 UTC (rev 384) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/meta/MetaFilenameAware.java 2012-03-20 10:45:03 UTC (rev 385) @@ -25,6 +25,9 @@ import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import java.io.File; +import java.io.Writer; + /** * Contract for exportable some Meta. * @@ -40,4 +43,9 @@ String getName(); String getFilename(); + + File newFile(File container); + + Writer newWriter(File container); + } Modified: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/meta/TableMeta.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/meta/TableMeta.java 2012-03-20 08:14:10 UTC (rev 384) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/entities/meta/TableMeta.java 2012-03-20 10:45:03 UTC (rev 385) @@ -23,9 +23,11 @@ */ package fr.ifremer.echobase.entities.meta; +import com.google.common.base.Charsets; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.entities.EchoBaseDAOHelper; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import org.nuiton.topia.persistence.TopiaEntity; @@ -34,7 +36,12 @@ import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderModelBuilder; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.OutputStreamWriter; import java.io.Serializable; +import java.io.Writer; import java.util.Iterator; import java.util.List; import java.util.Set; @@ -84,6 +91,22 @@ } @Override + public File newFile(File container) { + return new File(container, getFilename()); + } + + @Override + public Writer newWriter(File container) { + File file = newFile(container); + try { + return new OutputStreamWriter(new FileOutputStream(file), + Charsets.UTF_8); + } catch (FileNotFoundException e) { + throw new EchoBaseTechnicalException("Could not find file "+file); + } + } + + @Override public String toString() { return "<" + source + ">"; } 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-03-20 08:14:10 UTC (rev 384) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ReplicateEntityVisitor.java 2012-03-20 10:45:03 UTC (rev 385) @@ -43,7 +43,6 @@ import org.nuiton.util.csv.ExportModel; import java.io.File; -import java.io.FileNotFoundException; import java.util.Collection; import java.util.Map; @@ -65,7 +64,7 @@ public static ReplicateEntityVisitor createVisitor(ExportService service, MetaFilenameAware[] entityMetas, Multimap<EchoBaseEntityEnum, MetaFilenameAware> associations, - File container) throws FileNotFoundException { + File container) { Preconditions.checkNotNull(service); Preconditions.checkNotNull(entityMetas); @@ -134,8 +133,7 @@ } EntityExportContext entityExporter = entityExporters.get(entity.getClass()); - entityExporter.setData(entity); - entityExporter.write(); + entityExporter.write(entity); } catch (Exception e) { throw new EchoBaseTechnicalException( "Could not export entity " + entity, e); @@ -155,7 +153,7 @@ } EntityExportContext entityExporter = entityExporters.get(entity.getClass()); - entityExporter.writeAssociations(); + entityExporter.writeAssociations(entity); } catch (Exception e) { throw new EchoBaseTechnicalException( "Could not export associations of entity " + entity, e); Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ImportDbServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ImportDbServiceTest.java 2012-03-20 08:14:10 UTC (rev 384) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ImportDbServiceTest.java 2012-03-20 10:45:03 UTC (rev 385) @@ -1,3 +1,26 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ package fr.ifremer.echobase.services; import fr.ifremer.echobase.entities.EchoBaseUser; Property changes on: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ImportDbServiceTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Property changes on: trunk/echobase-services/src/test/resources/echobase-0.3-importDb-referentiel.zip ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL
participants (1)
-
tchemit@users.forge.codelutin.com