This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository echobase. See http://git.codelutin.com/echobase.git commit 7db77e56e18ed5bbe9664792a5e6b64e598b320f Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Dec 30 10:59:19 2014 +0100 enregistrement des fichiers d'import --- .../services/service/UserDbPersistenceService.java | 53 +++++++++++++++++++++- .../importdata/AbstractImportDataService.java | 51 ++++++++++++++++----- 2 files changed, 90 insertions(+), 14 deletions(-) diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java index 644a18c..f7db9b5 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java @@ -23,6 +23,7 @@ package fr.ifremer.echobase.services.service; import com.google.common.base.Function; import com.google.common.base.Optional; +import com.google.common.base.Preconditions; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; @@ -30,6 +31,7 @@ import com.google.common.collect.Sets; import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.entities.EchoBaseUserPersistenceContext; import fr.ifremer.echobase.entities.EntityModificationLog; +import fr.ifremer.echobase.entities.ImportFile; import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Category; @@ -62,7 +64,9 @@ import fr.ifremer.echobase.entities.references.SizeCategory; import fr.ifremer.echobase.entities.references.Species; import fr.ifremer.echobase.entities.references.SpeciesCategory; import fr.ifremer.echobase.entities.references.Vessel; +import fr.ifremer.echobase.io.InputFile; import fr.ifremer.echobase.services.EchoBaseServiceSupport; +import org.apache.commons.io.IOUtils; import org.nuiton.csv.ValueParser; import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.topia.persistence.TopiaEntity; @@ -72,11 +76,18 @@ import org.nuiton.topia.persistence.TopiaNotFoundException; import org.nuiton.topia.persistence.support.TopiaSqlQuery; import javax.inject.Inject; +import javax.sql.rowset.serial.SerialBlob; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.OutputStream; import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.zip.GZIPOutputStream; /** * TODO @@ -401,8 +412,7 @@ public class UserDbPersistenceService extends EchoBaseServiceSupport { ImportLog.PROPERTY_IMPORT_USER, userEMail, ImportLog.PROPERTY_IMPORT_DATE, date, ImportLog.PROPERTY_IMPORT_TEXT, comment, - ImportLog.PROPERTY_IMPORT_ID, importIds - ); + ImportLog.PROPERTY_IMPORT_ID, importIds); return importLog; } @@ -410,6 +420,45 @@ public class UserDbPersistenceService extends EchoBaseServiceSupport { persistenceContext.getImportLogDao().delete(importLog); } + public ImportFile createImportFile(InputFile inputFile) { + + Preconditions.checkNotNull(inputFile); + Preconditions.checkArgument(inputFile.hasFile()); + + File file = inputFile.getFile(); + + SerialBlob serialBlob; + + try { + + + try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { + + try (OutputStream outputStream = new GZIPOutputStream(out)) { + + try (InputStream stream = new FileInputStream(file)) { + + IOUtils.copy(stream, outputStream); + + } + } + + byte[] fileContent = out.toByteArray(); + serialBlob = new SerialBlob(fileContent); + + } + + } catch (Exception e) { + throw new EchoBaseTechnicalException("Could not serialize file content " + file, e); + } + + ImportFile importFile = persistenceContext.getImportFileDao().create( + ImportFile.PROPERTY_NAME, inputFile.getFileName(), + ImportFile.PROPERTY_FILE, serialBlob); + return importFile; + + } + //------------------------------------------------------------------------// //--- LengthAgeKey -------------------------------------------------------// //------------------------------------------------------------------------// diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/AbstractImportDataService.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/AbstractImportDataService.java index 123327d..75098d2 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/AbstractImportDataService.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/AbstractImportDataService.java @@ -27,6 +27,7 @@ import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.EchoBaseUserEntityEnum; +import fr.ifremer.echobase.entities.ImportFile; import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.data.Category; import fr.ifremer.echobase.entities.data.Cell; @@ -57,6 +58,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; +import java.sql.SQLException; import java.util.Date; import java.util.List; import java.util.Locale; @@ -131,8 +133,8 @@ public abstract class AbstractImportDataService<M extends AbstractImportConfigur return new EchoBaseCsvFileImportResult(inputFile.getFileName()); } - public ImportLog computeImportLogEntry(M configuration, - EchoBaseUser user) { + public ImportLog computeImportLogEntry(M configuration, EchoBaseUser user) { + Date importDate = newDate(); String importUser = user.getEmail(); @@ -170,19 +172,44 @@ public abstract class AbstractImportDataService<M extends AbstractImportConfigur } String importText = buffer.toString().trim(); - ImportLog importLog = persistenceService.createImportLog( - configuration.getVoyageId(), - configuration.getImportType(), - importUser, - importDate, - importText, - importIds - ); + ImportLog importLog = persistenceService.createImportLog(configuration.getVoyageId(), + configuration.getImportType(), + importUser, + importDate, + importText, + importIds); + + addImportFiles(importLog, configuration.getInputFiles()); + return importLog; + + } + + protected void addImportFiles(ImportLog importLog, InputFile... inputFiles) { + + for (InputFile inputFile : inputFiles) { + + if (inputFile.hasFile()) { + + ImportFile importFile = persistenceService.createImportFile(inputFile); + + if (log.isInfoEnabled()) { + try { + log.info("Add ImportFile: " + importFile.getName() + " - size: " + importFile.getFile().length()); + } catch (SQLException e) { + throw new EchoBaseTechnicalException("Can't get length of importFile " + importFile.getName()); + } + } + importLog.addImportFile(importFile); + + } + + } + } - protected String computeResultAndLogBookEntry(M configuration, - EchoBaseUser user) { + + protected String computeResultAndLogBookEntry(M configuration, EchoBaseUser user) { Date importDate = newDate(); String importUser = user.getEmail(); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.