branch develop updated (dd885e3 -> 2ae16c6)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository coser. See http://git.codelutin.com/coser.git from dd885e3 fixes #6356: Revue de la documentation du site new 2ae16c6 fixes #5185: Revoir la fonctionnalité d'extraction des données pour les données pelagiques fixes #5692: Can't download source for result The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 2ae16c679c8df98e608cf8dc375ca9348091b27e Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Dec 22 13:54:44 2014 +0100 fixes #5185: Revoir la fonctionnalité d'extraction des données pour les données pelagiques fixes #5692: Can't download source for result Summary of changes: .../ifremer/coser/result/CoserRequestExecutor.java | 46 ++++++++++++++++++- .../echobase/command/AbstractEchoBaseCommand.java | 26 ++++++++++- .../command/ExtractRawDataAndResultsCommand.java | 23 +--------- .../echobase/command/ExtractRawDataCommand.java | 52 +++++++++++++++++++++- .../ifremer/coser/services/WebResultService.java | 25 +++++++++++ .../java/fr/ifremer/coser/web/ServiceHelper.java | 8 +++- .../coser/web/actions/source/SourceDataAction.java | 31 +------------ 7 files changed, 153 insertions(+), 58 deletions(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository coser. See http://git.codelutin.com/coser.git commit 2ae16c679c8df98e608cf8dc375ca9348091b27e Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Dec 22 13:54:44 2014 +0100 fixes #5185: Revoir la fonctionnalité d'extraction des données pour les données pelagiques fixes #5692: Can't download source for result --- .../ifremer/coser/result/CoserRequestExecutor.java | 46 ++++++++++++++++++- .../echobase/command/AbstractEchoBaseCommand.java | 26 ++++++++++- .../command/ExtractRawDataAndResultsCommand.java | 23 +--------- .../echobase/command/ExtractRawDataCommand.java | 52 +++++++++++++++++++++- .../ifremer/coser/services/WebResultService.java | 25 +++++++++++ .../java/fr/ifremer/coser/web/ServiceHelper.java | 8 +++- .../coser/web/actions/source/SourceDataAction.java | 31 +------------ 7 files changed, 153 insertions(+), 58 deletions(-) diff --git a/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequestExecutor.java b/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequestExecutor.java index 903671d..e914ca7 100644 --- a/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequestExecutor.java +++ b/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequestExecutor.java @@ -143,9 +143,51 @@ public class CoserRequestExecutor { repositories.toArray(new ResultRepository[repositories.size()])); } + // Keep matching repository matchingRepositories = ImmutableList.copyOf(repositories); - ResultRepository repository = repositories.get(0); + // Get first matching repository + ResultRepository repository = getFirstMatchingRepository(); + + // execute + CoserResult result = execute(context, repository, request); + + // register result + if (result instanceof FileResult) { + this.fileResult = (FileResult) result; + } else if (result instanceof MapResult) { + this.mapResult = (MapResult) result; + } else if (result instanceof VoidResult) { + this.voidResult = (VoidResult) result; + } + return this; + } + + /** + * Execute the given {@code request} on the first matching result repository. + * <p/> + * If no result repository matches the request a {@link NoResultRepositoryFoundException} will be thrown. + * + * @param context request context + * @param request request to execute + * @return the result of the first matching repository. + * @since 1.5 + */ + public CoserRequestExecutor executeFirst(CoserRequestContext context, CoserRequest request) { + + Preconditions.checkNotNull(request); + Preconditions.checkArgument(request.isFilled(), "Request " + request + " is not filled."); + + List<ResultRepository> repositories = getMatchingRepositories(context, request); + if (CollectionUtils.isEmpty(repositories)) { + throw new NoResultRepositoryFoundException("No result repository matching request", request); + } + + // Keep matching repositories + matchingRepositories = ImmutableList.copyOf(repositories); + + // Get first matching repository + ResultRepository repository = getFirstMatchingRepository(); // execute CoserResult result = execute(context, repository, request); @@ -246,7 +288,7 @@ public class CoserRequestExecutor { return matchingRepositories; } - public ResultRepository getUniqueMatchingRepository() { + public ResultRepository getFirstMatchingRepository() { return matchingRepositories.get(0); } diff --git a/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/AbstractEchoBaseCommand.java b/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/AbstractEchoBaseCommand.java index 2bde01c..69e621f 100644 --- a/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/AbstractEchoBaseCommand.java +++ b/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/AbstractEchoBaseCommand.java @@ -26,6 +26,8 @@ import com.google.common.base.Preconditions; import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Sets; +import fr.ifremer.coser.CoserBusinessConfig; +import fr.ifremer.coser.CoserTechnicalException; import fr.ifremer.coser.bean.IndicatorMap; import fr.ifremer.coser.bean.ZoneMap; import fr.ifremer.coser.result.CoserCommand; @@ -43,10 +45,12 @@ import fr.ifremer.coser.storage.DataStorage; import fr.ifremer.coser.storage.DataStorageWalker; import fr.ifremer.coser.storage.DataStorages; import org.apache.commons.collections4.map.MultiKeyMap; +import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.tuple.Pair; import org.jfree.chart.JFreeChart; import java.io.File; +import java.io.IOException; import java.util.Locale; import java.util.Map; import java.util.Set; @@ -99,6 +103,26 @@ public abstract class AbstractEchoBaseCommand<R extends CoserRequest> implements return context.getLocale(); } + public CoserBusinessConfig getConfig() { + return context.getConfig(); + } + + public void extractRawData(File targetDirectory) { + + try { + FileUtils.forceMkdir(targetDirectory); + } catch (IOException e) { + throw new CoserTechnicalException("Could not create directory: " + targetDirectory, e); + } + try { + File sourceDirectory = repository.getProject().getRawDataDirectory(); + FileUtils.copyDirectory(sourceDirectory, targetDirectory); + } catch (IOException e) { + throw new CoserTechnicalException("Could not extract raw data", e); + } + + } + // --------------------------------------------------------------------- // // --- To create results ----------------------------------------------- // // --------------------------------------------------------------------- // @@ -183,7 +207,7 @@ public abstract class AbstractEchoBaseCommand<R extends CoserRequest> implements speciesList.add(speciesCode); } }; - walkOnCommunity(EchoBasePredicates.communityIndicatorPredicate(indicator),walker); + walkOnCommunity(EchoBasePredicates.communityIndicatorPredicate(indicator), walker); Map<String, String> result = repository.getSpeciesMap().getSpeciesSubMap(speciesList); return result; } diff --git a/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/ExtractRawDataAndResultsCommand.java b/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/ExtractRawDataAndResultsCommand.java index 587812f..d032d18 100644 --- a/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/ExtractRawDataAndResultsCommand.java +++ b/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/ExtractRawDataAndResultsCommand.java @@ -25,7 +25,6 @@ package fr.ifremer.coser.result.repository.echobase.command; import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Lists; -import fr.ifremer.coser.CoserTechnicalException; import fr.ifremer.coser.bean.SpeciesMap; import fr.ifremer.coser.result.repository.echobase.EchoBasePredicates; import fr.ifremer.coser.result.repository.legacy.LegacyPredicates; @@ -37,7 +36,6 @@ import fr.ifremer.coser.storage.DataStorages; import fr.ifremer.coser.util.DataType; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.map.MultiKeyMap; -import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.logging.Log; @@ -45,7 +43,6 @@ import org.apache.commons.logging.LogFactory; import org.jfree.chart.JFreeChart; import java.io.File; -import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -109,7 +106,7 @@ public class ExtractRawDataAndResultsCommand extends AbstractEchoBaseCommand<Ext log.debug("Extracting sources"); } File srcDir = new File(extractDirectory, "sources"); - extractSource(srcDir); + extractRawData(srcDir); } // les cartes doivent se retrouver dans le pdf @@ -151,24 +148,6 @@ public class ExtractRawDataAndResultsCommand extends AbstractEchoBaseCommand<Ext } /** - * Generate raw data after selection in a sub directory (named of the zone) of the given directory. - * - * @param directory where to generate file - */ - protected void extractSource(File directory) { - - File zoneDirectory = new File(directory, repository.getZone()); - - try { - FileUtils.forceMkdir(zoneDirectory); - } catch (IOException e) { - throw new CoserTechnicalException("Could not create directory: " + zoneDirectory, e); - } - - //TODO - } - - /** * Extract all maps for matchings species. * * @param speciesList list of species to extract diff --git a/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/ExtractRawDataCommand.java b/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/ExtractRawDataCommand.java index 455b163..c4c5623 100644 --- a/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/ExtractRawDataCommand.java +++ b/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/ExtractRawDataCommand.java @@ -22,8 +22,18 @@ package fr.ifremer.coser.result.repository.echobase.command; * #L% */ +import fr.ifremer.coser.CoserTechnicalException; import fr.ifremer.coser.result.request.ExtractRawDataRequest; import fr.ifremer.coser.result.result.FileResult; +import fr.ifremer.coser.result.util.Reports; +import org.apache.commons.io.FileUtils; +import org.nuiton.util.FileUtil; +import org.nuiton.util.ZipUtil; + +import java.io.File; +import java.io.IOException; +import java.util.Date; +import java.util.Locale; /** * Created on 3/11/14. @@ -42,8 +52,46 @@ public class ExtractRawDataCommand extends AbstractEchoBaseCommand<ExtractRawDat @Override public FileResult execute(ExtractRawDataRequest r) { - //TODO - throw new IllegalStateException("TODO!"); + Locale locale = getLocale(); + + File resultZip; + + try { + File tempDir = FileUtil.createTempDirectory("coser-source-", "-tmp"); + + File archiveDir = new File(tempDir, "ECHOBASE_" + repository.getProject().getName()); + + // add raw data + extractRawData(archiveDir); + + // add decharge file + String filename = Reports.getDechargeFilename(locale); + File dechargePDF = new File(archiveDir, filename); + + Date lastDataUpdateDate = getConfig().getLastDataUpdateDate(); + + getReports().generateDechargePDF(dechargePDF, + locale, + lastDataUpdateDate, + repository.getSurveyName()); + + // ajout du reftax dans le zip + File reftaxFile = repository.getProject().getSpeciesDefinitionFile(); + FileUtils.copyFileToDirectory(reftaxFile, archiveDir); + + // make zip + resultZip = File.createTempFile("coser-source-", ".zip"); + resultZip.deleteOnExit(); + ZipUtil.compress(resultZip, archiveDir); + + // clean directory + FileUtils.deleteDirectory(tempDir); + } catch (IOException e) { + throw new CoserTechnicalException("Can't create zip file", e); + } + + FileResult result = newFileResult(resultZip); + return result; } } diff --git a/coser-business/src/main/java/fr/ifremer/coser/services/WebResultService.java b/coser-business/src/main/java/fr/ifremer/coser/services/WebResultService.java index b845ea4..79bd33b 100644 --- a/coser-business/src/main/java/fr/ifremer/coser/services/WebResultService.java +++ b/coser-business/src/main/java/fr/ifremer/coser/services/WebResultService.java @@ -41,6 +41,7 @@ import fr.ifremer.coser.result.CoserRequestBuilder; import fr.ifremer.coser.result.CoserRequestContext; import fr.ifremer.coser.result.CoserRequestExecutor; import fr.ifremer.coser.result.DefaultCoserRequestContext; +import fr.ifremer.coser.result.repository.ResultRepository; import fr.ifremer.coser.result.repository.ResultRepositoryProvider; import fr.ifremer.coser.result.repository.ResultRepositoryType; import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepositoryProvider; @@ -111,6 +112,11 @@ public class WebResultService { return executor; } + public CoserRequestExecutor executeFirst(CoserRequestContext context, CoserRequest request) { + CoserRequestExecutor executor = executeFirst(getInternalRepositoryProvider(), context, request); + return executor; + } + public CoserRequestExecutor executeAll(CoserRequestContext context, CoserRequest request) { CoserRequestExecutor executor = executeAll(getInternalRepositoryProvider(), context, request); return executor; @@ -470,6 +476,25 @@ public class WebResultService { return executor; } + protected CoserRequestExecutor executeFirst(CoserMainRepositoryProvider repositoryProvider, + CoserRequestContext context, + CoserRequest request) { + CoserRequestExecutor executor = new CoserRequestExecutor(applicationContext, repositoryProvider); + executor.executeFirst(context, request); + List<ResultRepository> matchingRepositories = executor.getMatchingRepositories(); + if (matchingRepositories.size() > 1) { + String message = "Found more than one matching repository: "; + for (ResultRepository matchingRepository : matchingRepositories) { + message += "\n\t" + matchingRepository.getProjectName(); + } + if (log.isWarnEnabled()) { + log.warn(message); + } + } + return executor; + } + + protected CoserRequestExecutor executeAll(CoserMainRepositoryProvider repositoryProvider, CoserRequestContext context, CoserRequest request) { diff --git a/coser-web/src/main/java/fr/ifremer/coser/web/ServiceHelper.java b/coser-web/src/main/java/fr/ifremer/coser/web/ServiceHelper.java index cccb1fc..7fdf352 100644 --- a/coser-web/src/main/java/fr/ifremer/coser/web/ServiceHelper.java +++ b/coser-web/src/main/java/fr/ifremer/coser/web/ServiceHelper.java @@ -167,6 +167,12 @@ public class ServiceHelper { return result; } + public FileResult toFirstFileResult(CoserRequest request) { + CoserRequestContext context = newRequestContext(); + FileResult result = webResultService.executeFirst(context, request).toFileResult(); + return result; + } + public MapResult toMapResult(CoserRequest request) { CoserRequestContext context = newRequestContext(); MapResult result = webResultService.executeUnique(context, request).toMapResult(); @@ -200,7 +206,7 @@ public class ServiceHelper { CoserRequestContext context = newRequestContext(); CoserRequestExecutor coserRequestExecutor = webResultService.executeAll(context, request); //FIXME We tak the first repository... - ResultRepository matchingRepository = coserRequestExecutor.getUniqueMatchingRepository(); + ResultRepository matchingRepository = coserRequestExecutor.getFirstMatchingRepository(); return matchingRepository.getResultRepositoryType(); } diff --git a/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceDataAction.java b/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceDataAction.java index cd38537..ef34f07 100644 --- a/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceDataAction.java +++ b/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceDataAction.java @@ -55,7 +55,6 @@ public class SourceDataAction extends SourceAction { return accepted; } - // @Action(results = {@Result(type = "stream", params = {"contentType", "application/zip", "inputName", "inputStream", "contentDisposition", "attachment; filename=\"${filename}\""})}) @Action(results = {@Result(type = "stream", params = {"contentType", "application/zip", "contentDisposition", "attachment; filename=\"${filename}\""})}) public String execute() { @@ -63,7 +62,7 @@ public class SourceDataAction extends SourceAction { addFacade(facade). addZone(zone). toRequest(); - result = getService().toFileResult(request); + result = getService().toFirstFileResult(request); return SUCCESS; } @@ -75,32 +74,4 @@ public class SourceDataAction extends SourceAction { return result.getInputStream(); } -// @Override -// public void validate() { -// -// if (!accepted) { -// addFieldError("accepted", getText("message.quality.notaccepted")); -// } -// -// } -// -// public InputStream getInputStream() { -// WebService webService = ServiceFactory.getWebService(); -// -// Locale locale = getLocale(); -// -// InputStream input = null; -// try { -// -// File sourceZip = webService.getSourceZip(zone, locale); -// input = new FileInputStream(sourceZip); -// } catch (Exception ex) { -// if (log.isErrorEnabled()) { -// log.error("Can't get file data", ex); -// } -// throw new CoserWebException("Can't get source zip file", ex); -// } -// -// return input; -// } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm