Author: tchemit Date: 2012-03-19 16:58:51 +0100 (Mon, 19 Mar 2012) New Revision: 373 Url: http://forge.codelutin.com/repositories/revision/echobase/373 Log: redo embeddedApplication service using csv export-import (works much much better than hibernate replication) Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ReplicateEntityVisitor.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/DefaultProgressionModel.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/ProgressionModel.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ExportDbServiceTest.java Removed: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/EchoBaseImport.java Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EmbeddedApplicationService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ExportDbService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ImportDbService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/AbstractEchobaseActionConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/EmbeddedApplicationConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/ExportDbConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/ImportDbConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AcousticDataImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/CatchesDataImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/CommonDataImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/OperationImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ResultsImportService.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EmbeddedApplicationServiceTest.java trunk/echobase-services/src/test/resources/import-data/echobase-0.3-catches-and-acoustic-and-voyage-result.h2.db.gz trunk/echobase-services/src/test/resources/log4j.properties trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Import.java Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java 2012-03-19 15:55:36 UTC (rev 372) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceSupport.java 2012-03-19 15:58:51 UTC (rev 373) @@ -74,6 +74,17 @@ } } + public final <E extends TopiaEntity> long countEntities(Class<E> entityType) { + Preconditions.checkNotNull(entityType); + try { + long result = getDAO(entityType).count(); + return result; + } catch (TopiaException eee) { + throw new EchoBaseTechnicalException( + "Could not count data for type " + entityType, eee); + } + } + public final <E extends TopiaEntity> E getEntityById(Class<E> entityType, String id) { Preconditions.checkNotNull(entityType); Preconditions.checkArgument(StringUtils.isNotEmpty(id)); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EmbeddedApplicationService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EmbeddedApplicationService.java 2012-03-19 15:55:36 UTC (rev 372) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EmbeddedApplicationService.java 2012-03-19 15:58:51 UTC (rev 373) @@ -28,19 +28,17 @@ import fr.ifremer.echobase.EchoBaseIOUtil; import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.EchoBaseTopiaRootContextFactory; -import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.EchoBaseUser; -import fr.ifremer.echobase.entities.EntitiesUtil; import fr.ifremer.echobase.entities.ExportQuery; import fr.ifremer.echobase.services.configurations.EmbeddedApplicationConfiguration; +import fr.ifremer.echobase.services.configurations.ExportDbConfiguration; +import fr.ifremer.echobase.services.configurations.ImportDbConfiguration; import fr.ifremer.echobase.services.exceptions.ExportQueryNameAlreadyExistException; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; -import org.nuiton.topia.replication.TopiaReplicationService; -import org.nuiton.topia.replication.model.ReplicationModel; import org.nuiton.util.FileUtil; import java.io.File; @@ -123,8 +121,15 @@ // copy war to / FileUtil.copy(warLocation, new File(dir, warLocation.getName())); + // create export zip file + File exportZipFile = exportDb(model, tempDirectory); + + if (log.isInfoEnabled()) { + log.info("Export zip file = " + exportZipFile); + } + // create h2 db in /db - createH2Batabase(model, dir, true); + createH2Batabase(model, dir, true, exportZipFile); } catch (Exception eee) { throw new EchoBaseTechnicalException( @@ -136,8 +141,21 @@ return zipFile; } - protected void copyEmbeddedFiles(EmbeddedApplicationConfiguration model, File zipDirectory) throws IOException, URISyntaxException { + protected File exportDb(EmbeddedApplicationConfiguration model, + File tempDirectory) throws IOException { + ExportDbConfiguration exportconfiguration = new ExportDbConfiguration(model); + exportconfiguration.setFileName("echobase-export"); + exportconfiguration.setWorkingDirectory(new File(tempDirectory, "exportDb")); + exportconfiguration.setVoyageIds(model.getVoyageIds()); + ExportDbService exportDbService = serviceContext.newService(ExportDbService.class); + exportDbService.exportPartialDb(exportconfiguration, false); + return exportconfiguration.getExportFile(); + } + + protected void copyEmbeddedFiles(EmbeddedApplicationConfiguration model, + File zipDirectory) throws IOException, URISyntaxException { + for (EmbeddedFile startFile : EmbeddedFile.values()) { String in = startFile.getInputFileName(); @@ -167,7 +185,8 @@ protected TopiaContext createH2Batabase(EmbeddedApplicationConfiguration model, File zipDirectory, - boolean closeRootContext + boolean closeRootContext, + File exportZipFile ) throws IOException, TopiaException, ExportQueryNameAlreadyExistException { model.incrementsProgression(); @@ -229,18 +248,8 @@ model.incrementsProgression(); - // replicate referentiel to new h2 db - replicateReferentiel(topiaContext); + importDb(model, newServiceContext, exportZipFile, admin); - String[] voyageIds = model.getVoyageIds(); - - if (voyageIds != null) { - - model.incrementsProgression(); - - // replicate selected voyage to new h2 db - replicateData(topiaContext, voyageIds); - } } finally { if (closeRootContext) { rootContext.closeContext(); @@ -249,30 +258,17 @@ return rootContext; } - protected void replicateData(TopiaContext topiaContextDest, - String... voyagesIds) throws TopiaException { - TopiaReplicationService service = getTransaction().getService(TopiaReplicationService.class); - ReplicationModel replicationModel = service.prepare(EntitiesUtil.getDataTypes(), true, voyagesIds); - try { - service.doReplicate(replicationModel, topiaContextDest); - } catch (Exception eee) { - throw new EchoBaseTechnicalException( - "Failed to replicate referentiel : ", eee); - } - } + protected void importDb(EmbeddedApplicationConfiguration model, + EchoBaseServiceContext newServiceContext, + File exportZipFile, + EchoBaseUser admin) throws IOException, TopiaException { + ImportDbConfiguration importConfiguration = new ImportDbConfiguration(model, getLocale()); + importConfiguration.getInput().setFile(exportZipFile); + importConfiguration.setWorkingDirectory(new File(model.getWorkingDirectory(), "importDb")); - protected void replicateReferentiel(TopiaContext topiaContextDest) throws TopiaException { + ImportDbService importDbService = newServiceContext.newService(ImportDbService.class); - // Get all referenciel contracts - EchoBaseEntityEnum[] referencielClass = EntitiesUtil.getReferenceTypes(); - TopiaReplicationService service = getTransaction().getService(TopiaReplicationService.class); - ReplicationModel replicationModel = service.prepareForAll(referencielClass); - try { - service.doReplicate(replicationModel, topiaContextDest); - } catch (Exception eee) { - throw new EchoBaseTechnicalException( - "Failed to replicate referentiel : ", eee); - } + importDbService.importDb(importConfiguration, admin, false); } } 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-03-19 15:55:36 UTC (rev 372) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ExportDbService.java 2012-03-19 15:58:51 UTC (rev 373) @@ -23,8 +23,11 @@ */ package fr.ifremer.echobase.services; +import com.google.common.collect.Multimap; import fr.ifremer.echobase.EchoBaseIOUtil; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.EntitiesUtil; +import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.meta.AssociationMeta; import fr.ifremer.echobase.entities.meta.MetaFilenameAware; import fr.ifremer.echobase.entities.meta.TableMeta; @@ -92,8 +95,88 @@ exportService.exportDatas(meta, entryFile); } } + if (log.isInfoEnabled()) { + log.info("Export zip file = " + zipFile); + } + EchoBaseIOUtil.compressZipFile(zipFile, dir); + } + /** + * Export the partial db into csv files at the given location. + * + * @param model file name of the zip to create + * @param computeSteps flag to compute stesp inside this method + * @throws IOException if could not create or write files. + */ + public void exportPartialDb(ExportDbConfiguration model, + boolean computeSteps) throws IOException { + + String fileName = model.getFileName(); + + File tempDirectory = model.getWorkingDirectory(); + File dir = new File(tempDirectory, "echobase"); + FileUtil.createDirectoryIfNecessary(dir); + + if (log.isInfoEnabled()) { + log.info("Will export to " + dir); + } + + File zipFile = new File(tempDirectory, fileName + ".zip"); + model.setExportFile(zipFile); + + ExportService exportService = getService(ExportService.class); + + MetaFilenameAware[] refEntries = + EntitiesUtil.getReferenceEntries(getDbMeta()); + + if (computeSteps) { + int nbstesp = refEntries.length; + + if (model.getVoyageIds() != null) { + nbstesp += model.getVoyageIds().length; + } + + model.setNbSteps(nbstesp); + } + for (MetaFilenameAware entry : refEntries) { + + model.incrementsProgression(); + + File entryFile = new File(dir, entry.getFilename()); + if (entry instanceof AssociationMeta) { + AssociationMeta associationMeta = (AssociationMeta) entry; + exportService.exportDatas(associationMeta, entryFile); + } else { + TableMeta meta = (TableMeta) entry; + exportService.exportDatas(meta, entryFile); + } + } + + MetaFilenameAware[] dataEntries = + EntitiesUtil.getDataEntries(getDbMeta()); + Multimap<EchoBaseEntityEnum, MetaFilenameAware> dataAssociationEntries = + EntitiesUtil.getDataAssociationsEntries(getDbMeta()); + + ReplicateEntityVisitor visitor = ReplicateEntityVisitor.createVisitor( + exportService, + dataEntries, + dataAssociationEntries, + dir + ); + + try { + for (String voyageId : model.getVoyageIds()) { + + model.incrementsProgression(); + + Voyage voyage = getEntityById(Voyage.class, voyageId); + visitor.export(voyage); + } + } finally { + // clear visitor will close export files + visitor.clear(); + } + EchoBaseIOUtil.compressZipFile(zipFile, dir); } - } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ImportDbService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ImportDbService.java 2012-03-19 15:55:36 UTC (rev 372) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ImportDbService.java 2012-03-19 15:58:51 UTC (rev 373) @@ -33,6 +33,7 @@ import fr.ifremer.echobase.entities.meta.MetaFilenameAware; import fr.ifremer.echobase.entities.meta.TableMeta; import fr.ifremer.echobase.services.configurations.ImportDbConfiguration; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaException; @@ -73,11 +74,12 @@ * * @param model model of the db import operation * @param user user which perform the import + * @param computeSteps flag to compute stesp inside this method * @throws IOException if any io exception while import * @throws TopiaException if any pb while topia treatment */ public void importDb(ImportDbConfiguration model, - EchoBaseUser user) throws IOException, TopiaException { + EchoBaseUser user, boolean computeSteps) throws IOException, TopiaException { File file = model.getInput().getFile(); @@ -87,8 +89,10 @@ Map<MetaFilenameAware, ZipEntry> entriestoConsume = discoverEntries( file, zipFile); - int size = entriestoConsume.size(); - model.setNbSteps(size + 1); + if (computeSteps) { + int size = entriestoConsume.size(); + model.setNbSteps(size + 1); + } // consume all found entries for (Map.Entry<MetaFilenameAware, ZipEntry> entry : @@ -282,12 +286,14 @@ String topiaId = (String) row.get(TopiaEntity.TOPIA_ID); String[] associations = (String[]) row.get("target"); for (String association : associations) { - builder.append(String.format(updateString, topiaId, association)).append('\n'); - compt++; - if (compt % 10000 == 0) { - // flush it - getTransaction().executeSQL(builder.toString()); - builder = new StringBuilder(); + if (StringUtils.isNotEmpty(association)) { + builder.append(String.format(updateString, topiaId, association)).append('\n'); + compt++; + if (compt % 10000 == 0) { + // flush it + getTransaction().executeSQL(builder.toString()); + builder = new StringBuilder(); + } } } csvResult.incrementsNumberUpdated(); Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ReplicateEntityVisitor.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ReplicateEntityVisitor.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ReplicateEntityVisitor.java 2012-03-19 15:58:51 UTC (rev 373) @@ -0,0 +1,229 @@ +/* + * #%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 com.google.common.base.Preconditions; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import fr.ifremer.echobase.EchoBaseTechnicalException; +import fr.ifremer.echobase.csv.EntityExportContext; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.entities.meta.AssociationMeta; +import fr.ifremer.echobase.entities.meta.MetaFilenameAware; +import fr.ifremer.echobase.entities.meta.TableMeta; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.EntityVisitor; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.TimeLog; +import org.nuiton.util.csv.ExportModel; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.Collection; +import java.util.Map; + +/** + * entity visitor to export data to csv files. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class ReplicateEntityVisitor implements EntityVisitor { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(ReplicateEntityVisitor.class); + + public static final TimeLog TIME_LOG = + new TimeLog(ReplicateEntityVisitor.class); + + public static ReplicateEntityVisitor createVisitor(ExportService service, + MetaFilenameAware[] entityMetas, + Multimap<EchoBaseEntityEnum, MetaFilenameAware> associations, + File container) throws FileNotFoundException { + + Preconditions.checkNotNull(service); + Preconditions.checkNotNull(entityMetas); + Preconditions.checkNotNull(associations); + Preconditions.checkNotNull(container); + + Map<Class<?>, EntityExportContext> contexts = Maps.newHashMap(); + + for (MetaFilenameAware entityMeta : entityMetas) { + TableMeta meta = (TableMeta) entityMeta; + EchoBaseEntityEnum source = meta.getSource(); + + Collection<MetaFilenameAware> metaFilenameAwares = associations.get(source); + + ExportModel<TopiaEntity> model = service.buildForExport(meta, false); + + EntityExportContext exportContext = new EntityExportContext( + model, + meta, + container); + + // save both for contract and implementation with same context + contexts.put(source.getContract(), exportContext); + contexts.put(source.getImplementation(), exportContext); + + for (MetaFilenameAware metaFilenameAware : metaFilenameAwares) { + AssociationMeta associationMeta = (AssociationMeta) metaFilenameAware; + + ExportModel<TopiaEntity> associationModel = + service.buildForExport(associationMeta); + exportContext.addAssociationExportContext(associationMeta, + associationModel, + container); + } + } + + ReplicateEntityVisitor result = new ReplicateEntityVisitor(contexts); + return result; + } + + /** Export for simple entity. */ + protected final Map<Class<?>, EntityExportContext> entityExporters; + + public ReplicateEntityVisitor(Map<Class<?>, EntityExportContext> entityExporters) { + this.entityExporters = entityExporters; + } + + public void export(TopiaEntity entity) { + Preconditions.checkNotNull(entity); + long s1 = TimeLog.getTime(); + try { + entity.accept(this); + } catch (TopiaException e) { + throw new EchoBaseTechnicalException( + "Could not export entity " + entity.getTopiaId(), e); + } finally { + TIME_LOG.log(s1, "export::" + entity.getTopiaId()); + } + } + + @Override + public void start(TopiaEntity entity) { + try { + if (log.isDebugEnabled()) { + log.debug("Starts export of entity " + entity.getTopiaId()); + } + EntityExportContext entityExporter = + entityExporters.get(entity.getClass()); + entityExporter.setData(entity); + entityExporter.write(); + } catch (Exception e) { + throw new EchoBaseTechnicalException( + "Could not export entity " + entity, e); + } finally { + if (log.isDebugEnabled()) { + log.debug("Ends export of entity " + entity.getTopiaId()); + } + } + } + + @Override + public void end(TopiaEntity entity) { + try { + if (log.isDebugEnabled()) { + log.debug("Starts export of association of entity " + + entity.getTopiaId()); + } + EntityExportContext entityExporter = + entityExporters.get(entity.getClass()); + entityExporter.writeAssociations(); + } catch (Exception e) { + throw new EchoBaseTechnicalException( + "Could not export associations of entity " + entity, e); + } finally { + if (log.isDebugEnabled()) { + log.debug("Ends export of association of entity " + + entity.getTopiaId()); + } + } + } + + @Override + public void visit(TopiaEntity entity, String propertyName, + Class<?> type, Object value) { + // do nothing + } + + @Override + public void visit(TopiaEntity entity, + String propertyName, + Class<?> collectionType, + Class<?> type, + Object value) { + + if (TopiaEntity.class.isAssignableFrom(type) && + entityExporters.containsKey(type)) { + Collection<?> cValue = (Collection<?>) value; + + if (CollectionUtils.isNotEmpty(cValue)) { + + int i = 0; + for (Object currentValue : cValue) { + TopiaEntity currentEntity = (TopiaEntity) currentValue; + visit(entity, + propertyName, + type, + collectionType, + i++, + currentEntity + ); + + } + } + } + } + + @Override + public void visit(TopiaEntity entity, + String propertyName, + Class<?> collectionType, Class<?> type, + int index, + Object value) { + try { + ((TopiaEntity) value).accept(this); + } catch (TopiaException e) { + if (log.isErrorEnabled()) { + log.error("Can not visit entity " + value, e); + } + } + } + + @Override + public void clear() { + + // use at the end of visit (or later) + + for (EntityExportContext exportContext : entityExporters.values()) { + IOUtils.closeQuietly(exportContext); + } + } +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/ReplicateEntityVisitor.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/AbstractEchobaseActionConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/AbstractEchobaseActionConfiguration.java 2012-03-19 15:55:36 UTC (rev 372) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/AbstractEchobaseActionConfiguration.java 2012-03-19 15:58:51 UTC (rev 373) @@ -34,58 +34,65 @@ * @author tchemit <chemit@codelutin.com> * @since 0.2 */ -public abstract class AbstractEchobaseActionConfiguration implements Serializable { +public abstract class AbstractEchobaseActionConfiguration implements Serializable, ProgressionModel { private static final long serialVersionUID = 1L; - private int nbSteps; + private final ProgressionModel progressionModel; - private float stepIncrement; + private Exception error; - private float progression; + protected AbstractEchobaseActionConfiguration() { + progressionModel = new DefaultProgressionModel(); + } - private long startTime; + protected AbstractEchobaseActionConfiguration(ProgressionModel progressionModel) { + this.progressionModel = progressionModel; + } - private long endTime; - - private Exception error; - - public final int getNbSteps() { - return nbSteps; + @Override + public final long getNbSteps() { + return progressionModel.getNbSteps(); } + @Override public final float getProgression() { - return progression; + return progressionModel.getProgression(); } + @Override public final void setProgression(float progression) { - this.progression = progression; + progressionModel.setProgression(progression); } + @Override public final void incrementsProgression() { - setProgression(progression + stepIncrement); + progressionModel.incrementsProgression(); } - public final void setNbSteps(int nbSteps) { - - this.nbSteps = nbSteps; - stepIncrement = 100f / nbSteps; + @Override + public final void setNbSteps(long nbSteps) { + progressionModel.setNbSteps(nbSteps); } + @Override public final long getStartTime() { - return startTime; + return progressionModel.getStartTime(); } + @Override public final void setStartTime(long startTime) { - this.startTime = startTime; + progressionModel.setStartTime(startTime); } + @Override public final long getEndTime() { - return endTime; + return progressionModel.getEndTime(); } + @Override public final void setEndTime(long endTime) { - this.endTime = endTime; + progressionModel.setEndTime(endTime); } public Exception getError() { @@ -96,10 +103,9 @@ this.error = error; } + @Override public String getActionTime() { - long sTime = getStartTime(); - long eTime = getEndTime(); - return StringUtil.convertTime(eTime - sTime); + return progressionModel.getActionTime(); } public void beginAction() { Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/DefaultProgressionModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/DefaultProgressionModel.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/DefaultProgressionModel.java 2012-03-19 15:58:51 UTC (rev 373) @@ -0,0 +1,79 @@ +package fr.ifremer.echobase.services.configurations; + +import org.nuiton.util.StringUtil; + +/** + * Default progression model implementation. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class DefaultProgressionModel implements ProgressionModel { + + private static final long serialVersionUID = 1L; + + private long nbSteps; + + private float stepIncrement; + + private float progression; + + private long startTime; + + private long endTime; + + @Override + public long getNbSteps() { + return nbSteps; + } + + @Override + public float getProgression() { + return progression; + } + + @Override + public void setProgression(float progression) { + this.progression = progression; + } + + @Override + public long getStartTime() { + return startTime; + } + + @Override + public void setStartTime(long startTime) { + this.startTime = startTime; + } + + @Override + public long getEndTime() { + return endTime; + } + + + @Override + public void setEndTime(long endTime) { + this.endTime = endTime; + } + + @Override + public final void incrementsProgression() { + setProgression(progression + stepIncrement); + } + + @Override + public final void setNbSteps(long nbSteps) { + + this.nbSteps = nbSteps; + stepIncrement = 100f / nbSteps; + } + + @Override + public String getActionTime() { + long sTime = getStartTime(); + long eTime = getEndTime(); + return StringUtil.convertTime(eTime - sTime); + } +} Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/EmbeddedApplicationConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/EmbeddedApplicationConfiguration.java 2012-03-19 15:55:36 UTC (rev 372) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/EmbeddedApplicationConfiguration.java 2012-03-19 15:58:51 UTC (rev 373) @@ -82,7 +82,7 @@ return voyageIds; } - public void setVoyageIds(String[] voyageIds) { + public void setVoyageIds(String... voyageIds) { this.voyageIds = Arrays.copyOf(voyageIds, voyageIds.length); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/ExportDbConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/ExportDbConfiguration.java 2012-03-19 15:55:36 UTC (rev 372) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/ExportDbConfiguration.java 2012-03-19 15:58:51 UTC (rev 373) @@ -44,6 +44,16 @@ private File exportFile; + /** Ids of voyages to push in embedded application (with all their datas). */ + private String[] voyageIds; + + public ExportDbConfiguration() { + } + + public ExportDbConfiguration(ProgressionModel progressionModel) { + super(progressionModel); + } + public String getFileName() { return fileName; } @@ -68,6 +78,14 @@ this.exportFile = exportFile; } + public String[] getVoyageIds() { + return voyageIds; + } + + public void setVoyageIds(String... voyageIds) { + this.voyageIds = voyageIds; + } + @Override public void destroy() throws IOException { if (workingDirectory != null) { Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/ImportDbConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/ImportDbConfiguration.java 2012-03-19 15:55:36 UTC (rev 372) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/ImportDbConfiguration.java 2012-03-19 15:58:51 UTC (rev 373) @@ -44,11 +44,16 @@ protected File workingDirectory; - protected InputFile input; + protected final InputFile input; + public ImportDbConfiguration(ProgressionModel progressionModel, + Locale locale) { + super(progressionModel); + input = InputFile.newFile(l_(locale, "echobase.common.importDbFile")); + } + public ImportDbConfiguration(Locale locale) { - input = InputFile.newFile( - l_(locale, "echobase.common.importDbFile")); + input = InputFile.newFile(l_(locale, "echobase.common.importDbFile")); } public File getWorkingDirectory() { Added: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/ProgressionModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/ProgressionModel.java (rev 0) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/ProgressionModel.java 2012-03-19 15:58:51 UTC (rev 373) @@ -0,0 +1,55 @@ +/* + * #%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.configurations; + +import java.io.Serializable; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since TODO + */ +public interface ProgressionModel extends Serializable { + + long getNbSteps(); + + float getProgression(); + + void setProgression(float progression); + + void incrementsProgression(); + + void setNbSteps(long nbSteps); + + long getStartTime(); + + void setStartTime(long startTime); + + long getEndTime(); + + void setEndTime(long endTime); + + String getActionTime(); +} Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/configurations/ProgressionModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Deleted: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/EchoBaseImport.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/EchoBaseImport.java 2012-03-19 15:55:36 UTC (rev 372) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/EchoBaseImport.java 2012-03-19 15:58:51 UTC (rev 373) @@ -1,137 +0,0 @@ -/* - * #%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.csv; - -import com.google.common.base.Charsets; -import org.nuiton.util.StringUtil; -import org.nuiton.util.csv.Import; -import org.nuiton.util.csv.ImportModel; -import org.nuiton.util.csv.ImportRuntimeException; -import org.nuiton.util.csv.ImportableColumn; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; - -import static org.nuiton.i18n.I18n._; - -/** - * This extends of the {@link Import} offers to allow case on header names. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ -public class EchoBaseImport<E> extends Import<E> { - - public static String[] getHeader(File file, char charSeprator) { - - try { - BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), Charsets.UTF_8.name())); - try { - String header = reader.readLine(); - String[] result = header.split(charSeprator + ""); - return result; - } finally { - reader.close(); - } - } catch (IOException e) { - throw new ImportRuntimeException("Could not obtain header of file " + file, e); - } - } - - public static <E> EchoBaseImport<E> newImport(ImportModel<E> model, - InputStream inputStream) { - return new EchoBaseImport<E>(model, inputStream); - } - - public static <E> EchoBaseImport<E> newImport(ImportModel<E> model, - Reader reader) { - return new EchoBaseImport<E>(model, reader); - } - - public EchoBaseImport(ImportModel<E> importModel, InputStream inputStream) { - super(importModel, inputStream); - } - - public EchoBaseImport(ImportModel<E> importModel, Reader reader) { - super(importModel, reader); - } - - @Override - protected void checkAllMandatoryHeadersArePresent(String[] headers) { - - List<String> csvHeaders = new ArrayList<String>(); - for (String header : headers) { - csvHeaders.add(header.toLowerCase()); - } -// Collections.addAll(csvHeaders, headers); - - List<String> mandatoryHeadersNames = new ArrayList<String>(); - for (ImportableColumn<E, ?> field : getAllMandatoryHeaders()) { -// mandatoryHeadersNames.add(field.getHeaderName()); - mandatoryHeadersNames.add(field.getHeaderName().toLowerCase()); - } - mandatoryHeadersNames.removeAll(csvHeaders); - - if (!mandatoryHeadersNames.isEmpty()) { - String validationMessage = - _("csv.import.error.missingMandatoryHeaders", - StringUtil.join(mandatoryHeadersNames, ", ", true)); - throw new ImportRuntimeException(validationMessage); - } - } - - @Override - protected void checkHeaderNamesAreAllKnown(String[] headers) { - List<String> csvHeaders = new ArrayList<String>(); - for (String header : headers) { - csvHeaders.add(header.toLowerCase()); - } -// Collections.addAll(csvHeaders, headers); - - for (ImportableColumn<E, ?> field : model.getColumnsForImport()) { - csvHeaders.remove(field.getHeaderName().toLowerCase()); -// csvHeaders.remove(field.getHeaderName()); - } - if (!csvHeaders.isEmpty()) { - List<String> validHeaderNames = new LinkedList<String>(); - for (ImportableColumn<E, ?> importableColumn : - model.getColumnsForImport()) { - validHeaderNames.add(importableColumn.getHeaderName()); - } - String validationMessage = - _("csv.import.error.unrecognizedHeaders", - StringUtil.join(csvHeaders, ", ", true), - StringUtil.join(validHeaderNames, ", ", true)); - throw new ImportRuntimeException(validationMessage); - } - } -} Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AcousticDataImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AcousticDataImportService.java 2012-03-19 15:55:36 UTC (rev 372) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AcousticDataImportService.java 2012-03-19 15:58:51 UTC (rev 373) @@ -28,6 +28,7 @@ import fr.ifremer.echobase.EchoBaseFunctions; import fr.ifremer.echobase.EchoBasePredicates; import fr.ifremer.echobase.InputFile; +import fr.ifremer.echobase.csv.EchoBaseImport; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.data.Cell; @@ -50,7 +51,6 @@ import fr.ifremer.echobase.services.csv.AcousticDataImportModel; import fr.ifremer.echobase.services.csv.AcousticDataImportModelRow; import fr.ifremer.echobase.services.csv.CsvFileImportResult; -import fr.ifremer.echobase.services.csv.EchoBaseImport; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/CatchesDataImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/CatchesDataImportService.java 2012-03-19 15:55:36 UTC (rev 372) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/CatchesDataImportService.java 2012-03-19 15:58:51 UTC (rev 373) @@ -29,6 +29,7 @@ import fr.ifremer.echobase.EchoBaseFunctions; import fr.ifremer.echobase.EchoBasePredicates; import fr.ifremer.echobase.InputFile; +import fr.ifremer.echobase.csv.EchoBaseImport; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.data.Operation; @@ -51,7 +52,6 @@ import fr.ifremer.echobase.services.csv.BiometrySampleImportModel; import fr.ifremer.echobase.services.csv.BiometrySampleImportModelRow; import fr.ifremer.echobase.services.csv.CsvFileImportResult; -import fr.ifremer.echobase.services.csv.EchoBaseImport; import fr.ifremer.echobase.services.csv.SubSampleImportModel; import fr.ifremer.echobase.services.csv.SubSampleImportModelRow; import fr.ifremer.echobase.services.csv.TotalSampleImportModel; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/CommonDataImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/CommonDataImportService.java 2012-03-19 15:55:36 UTC (rev 372) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/CommonDataImportService.java 2012-03-19 15:58:51 UTC (rev 373) @@ -29,6 +29,7 @@ import fr.ifremer.echobase.EchoBaseFunctions; import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.InputFile; +import fr.ifremer.echobase.csv.EchoBaseImport; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.data.Transect; @@ -45,7 +46,6 @@ import fr.ifremer.echobase.services.exceptions.MissionNameAlreadyExistException; import fr.ifremer.echobase.services.configurations.CommonDataImportConfiguration; import fr.ifremer.echobase.services.csv.CsvFileImportResult; -import fr.ifremer.echobase.services.csv.EchoBaseImport; import fr.ifremer.echobase.services.csv.TransectImportModel; import fr.ifremer.echobase.services.csv.TransectImportModelRow; import fr.ifremer.echobase.services.csv.TransitImportModel; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/OperationImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/OperationImportService.java 2012-03-19 15:55:36 UTC (rev 372) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/OperationImportService.java 2012-03-19 15:58:51 UTC (rev 373) @@ -27,6 +27,7 @@ import com.google.common.collect.Maps; import fr.ifremer.echobase.EchoBaseFunctions; import fr.ifremer.echobase.InputFile; +import fr.ifremer.echobase.csv.EchoBaseImport; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.data.GearMetadataValue; @@ -46,7 +47,6 @@ import fr.ifremer.echobase.services.ImportException; import fr.ifremer.echobase.services.configurations.OperationImportConfiguration; import fr.ifremer.echobase.services.csv.CsvFileImportResult; -import fr.ifremer.echobase.services.csv.EchoBaseImport; import fr.ifremer.echobase.services.csv.GearMetadataValueImportModel; import fr.ifremer.echobase.services.csv.GearMetadataValueImportModelRow; import fr.ifremer.echobase.services.csv.OperationImportModel; Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ResultsImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ResultsImportService.java 2012-03-19 15:55:36 UTC (rev 372) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ResultsImportService.java 2012-03-19 15:58:51 UTC (rev 373) @@ -30,6 +30,7 @@ import fr.ifremer.echobase.EchoBaseFunctions; import fr.ifremer.echobase.EchoBasePredicates; import fr.ifremer.echobase.InputFile; +import fr.ifremer.echobase.csv.EchoBaseImport; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.data.Category; @@ -58,7 +59,6 @@ import fr.ifremer.echobase.services.csv.AcousticResultByEchotypeImportModel; import fr.ifremer.echobase.services.csv.AcousticResultByEchotypeImportModelRow; import fr.ifremer.echobase.services.csv.CsvFileImportResult; -import fr.ifremer.echobase.services.csv.EchoBaseImport; import fr.ifremer.echobase.services.csv.EchotypeImportModel; import fr.ifremer.echobase.services.csv.EchotypeImportModelRow; import fr.ifremer.echobase.services.csv.LengthAgeKeyImportModel; Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EmbeddedApplicationServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EmbeddedApplicationServiceTest.java 2012-03-19 15:55:36 UTC (rev 372) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/EmbeddedApplicationServiceTest.java 2012-03-19 15:58:51 UTC (rev 373) @@ -23,15 +23,10 @@ */ package fr.ifremer.echobase.services; -import fr.ifremer.echobase.entities.EchoBaseDAOHelper; -import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.entities.data.VoyageDAO; import fr.ifremer.echobase.services.configurations.EmbeddedApplicationConfiguration; import fr.ifremer.echobase.services.importdata.AbstractImportDataServiceIT; import org.junit.Assert; import org.junit.Test; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.util.FileUtil; import java.io.File; @@ -46,13 +41,13 @@ protected FakeEchoBaseServiceContext initContext() { return new FakeEchoBaseServiceContext( - AbstractImportDataServiceIT.IMPORT_DATA_ECHOBASE_OPERATION_RESULT); + AbstractImportDataServiceIT.IMPORT_DATA_ECHOBASE_CATCHES_AND_ACOUSTIC_AND_VOYAGE_RESULT); } @Test public void testCreateEmbeddedApplication() throws Exception { EmbeddedApplicationConfiguration conf = new EmbeddedApplicationConfiguration(); - conf.setVoyageIds(new String[]{getVoyageId()}); + conf.setVoyageIds(getVoyageId()); File workingDirectory = new File(getTestDir(), "work-dir"); FileUtil.createDirectoryIfNecessary(workingDirectory); @@ -69,43 +64,43 @@ Assert.assertTrue(zipFile.exists()); } - @Test - public void replicateVoyageEntity() throws Exception { - - String voyageId = getVoyageId(); - - // create new H2 dataBase in target/voyageId - TopiaEntity voyageMocked = getEntityById(Voyage.class, voyageId); - - File testBaseDir = new File(getTestDir(), "replicated"); - - EmbeddedApplicationService service = - getService(EmbeddedApplicationService.class); - - EmbeddedApplicationConfiguration conf = new EmbeddedApplicationConfiguration(); - conf.setVoyageIds(new String[]{voyageId}); - TopiaContext rootContextDest = service.createH2Batabase(conf, - testBaseDir, - false); - - // verify that replicated voyage is in new base - TopiaContext transactionDest = null; - try { - transactionDest = rootContextDest.beginTransaction(); - VoyageDAO voyageDAO = EchoBaseDAOHelper.getVoyageDAO(transactionDest); - Voyage voyageReplicated = voyageDAO.findByTopiaId(voyageId); - - // assert voyage is in new base - Assert.assertNotNull(voyageReplicated); - - // and same ids - Assert.assertEquals(voyageMocked, voyageReplicated); - - // TODO sletellier 20111124 : try to test deph equality between entities - } finally { - if (transactionDest != null) { - transactionDest.closeContext(); - } - } - } +// @Test +// public void replicateVoyageEntity() throws Exception { +// +// String voyageId = getVoyageId(); +// +// // create new H2 dataBase in target/voyageId +// TopiaEntity voyageMocked = getEntityById(Voyage.class, voyageId); +// +// File testBaseDir = new File(getTestDir(), "replicated"); +// +// EmbeddedApplicationService service = +// getService(EmbeddedApplicationService.class); +// +// EmbeddedApplicationConfiguration conf = new EmbeddedApplicationConfiguration(); +// conf.setVoyageIds(voyageId); +// TopiaContext rootContextDest = service.createH2Batabase(conf, +// testBaseDir, +// false); +// +// // verify that replicated voyage is in new base +// TopiaContext transactionDest = null; +// try { +// transactionDest = rootContextDest.beginTransaction(); +// VoyageDAO voyageDAO = EchoBaseDAOHelper.getVoyageDAO(transactionDest); +// Voyage voyageReplicated = voyageDAO.findByTopiaId(voyageId); +// +// // assert voyage is in new base +// Assert.assertNotNull(voyageReplicated); +// +// // and same ids +// Assert.assertEquals(voyageMocked, voyageReplicated); +// +// // TODO sletellier 20111124 : try to test deph equality between entities +// } finally { +// if (transactionDest != null) { +// transactionDest.closeContext(); +// } +// } +// } } Added: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ExportDbServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ExportDbServiceTest.java (rev 0) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ExportDbServiceTest.java 2012-03-19 15:58:51 UTC (rev 373) @@ -0,0 +1,82 @@ +/* + * #%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.services.configurations.ExportDbConfiguration; +import fr.ifremer.echobase.services.importdata.AbstractImportDataServiceIT; +import org.junit.Test; +import org.nuiton.util.FileUtil; + +import java.io.File; +import java.io.IOException; + +/** + * Test {@link ExportDbService}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class ExportDbServiceTest extends EchoBaseTestServiceSupport { + + protected FakeEchoBaseServiceContext initContext() { + return new FakeEchoBaseServiceContext( + AbstractImportDataServiceIT.IMPORT_DATA_ECHOBASE_CATCHES_AND_ACOUSTIC_AND_VOYAGE_RESULT); + } + + @Test + public void exportDb() throws IOException { + + ExportDbService service = + serviceContext.newService(ExportDbService.class); + + ExportDbConfiguration conf = new ExportDbConfiguration(); + + conf.setVoyageIds(getVoyageId()); + + File workingDirectory = new File(getTestDir(), "work-dir"); + FileUtil.createDirectoryIfNecessary(workingDirectory); + conf.setWorkingDirectory(workingDirectory); + conf.setFileName("echobase"); + + service.exportDb(conf); + } + + @Test + public void exportPartialDb() throws IOException { + + ExportDbService service = + serviceContext.newService(ExportDbService.class); + + ExportDbConfiguration conf = new ExportDbConfiguration(); + + conf.setVoyageIds(getVoyageId()); + + File workingDirectory = new File(getTestDir(), "work-dir"); + FileUtil.createDirectoryIfNecessary(workingDirectory); + conf.setWorkingDirectory(workingDirectory); + conf.setFileName("echobase"); + + service.exportPartialDb(conf, true); + } +} Property changes on: trunk/echobase-services/src/test/java/fr/ifremer/echobase/services/ExportDbServiceTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-services/src/test/resources/import-data/echobase-0.3-catches-and-acoustic-and-voyage-result.h2.db.gz =================================================================== (Binary files differ) Modified: trunk/echobase-services/src/test/resources/log4j.properties =================================================================== --- trunk/echobase-services/src/test/resources/log4j.properties 2012-03-19 15:55:36 UTC (rev 372) +++ trunk/echobase-services/src/test/resources/log4j.properties 2012-03-19 15:58:51 UTC (rev 373) @@ -30,4 +30,5 @@ # package level log4j.logger.fr.ifremer.echobase=INFO +#log4j.logger.fr.ifremer.echobase.services.ReplicateEntityVisitor=DEBUG log4j.logger.fr.ifremer.echobase.services.importdata.AcousticDataImportService=DEBUG Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Import.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Import.java 2012-03-19 15:55:36 UTC (rev 372) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importDb/Import.java 2012-03-19 15:58:51 UTC (rev 373) @@ -65,7 +65,7 @@ model.getInput().getFileName()); } - service.importDb(model, getEchoBaseSession().getEchoBaseUser()); + service.importDb(model, getEchoBaseSession().getEchoBaseUser(), true); } @Override