r1146 - in trunk: coser-business/src/main/java/fr/ifremer/coser coser-business/src/main/java/fr/ifremer/coser/bean coser-business/src/main/java/fr/ifremer/coser/result coser-business/src/main/java/fr/ifremer/coser/result/repository coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy coser-business/src/main/java/fr/ifremer
Author: tchemit Date: 2014-03-15 16:11:29 +0100 (Sat, 15 Mar 2014) New Revision: 1146 Url: http://forge.codelutin.com/projects/coser/repository/revisions/1146 Log: refs-90 #4664 Added: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserApplicationContext.java trunk/coser-business/src/main/java/fr/ifremer/coser/CoserServiceContext.java trunk/coser-business/src/main/java/fr/ifremer/coser/DefaultCoserApplicationContext.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserCommandFactory.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserMainRepositoryProvider.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequestBuilder.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequestContext.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequestExecutor.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/DefaultCoserRequestContext.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBasePredicates.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/AbstractEchoBaseCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetCommunityIndicatorResultDataCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetCommunityIndicatorResultGraphCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetPopulationIndicatorResultDataCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetPopulationIndicatorResultGraphCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesForExtractRawDataAndResultsCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/package-info.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyPredicates.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/AbstractLegacyCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetCommunityIndicatorResultDataCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetCommunityIndicatorResultGraphCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetPopulationIndicatorResultDataCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetPopulationIndicatorResultGraphCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesForExtractRawDataAndResultsCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForExtractRawDataAndResultsCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/package-info.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestExtractTypeListAware.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestRepositoryResultTypeAware.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestRepositoryTypeAware.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetCommunityIndicatorResultDataRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetCommunityIndicatorResultGraphRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetPopulationIndicatorResultDataRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetPopulationIndicatorResultGraphRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesForExtractRawDataAndResultsRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/ trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/ExtractRawDataAndResultsResult.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/FileResult.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/MapResult.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/VoidResult.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/package-info.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/ trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/Charts.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/Extracts.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/Reports.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/package-info.java trunk/coser-business/src/main/java/fr/ifremer/coser/storage/DataStorageWalker.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/CoserWebApplicationContext.java Removed: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserServiceContext.java trunk/coser-business/src/main/java/fr/ifremer/coser/DefaultCoserServiceContext.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserResultEngine.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/FileResult.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/MapResult.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/Reports.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/VoidResult.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepositoryCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepositoryCommandEngine.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryCommandEngine.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetCommunityIndicatorResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetPopulationIndicatorResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesListForExtractRawDataAndResultsCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepositoryCommandEngine.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetCommunityIndicatorResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetPopulationIndicatorResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesListForExtractRawDataAndResultsCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesListForExtractRawDataAndResultsCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestBuilder.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetCommunityIndicatorResultRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetPopulationIndicatorResultRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesListForExtractRawDataAndResultsRequest.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/CoserApplicationContext.java Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/IndicatorMap.java trunk/coser-business/src/main/java/fr/ifremer/coser/bean/SpeciesListMap.java trunk/coser-business/src/main/java/fr/ifremer/coser/bean/SpeciesMap.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepository.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepositoryProvider.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepositoryType.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepository.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryProvider.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryType.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/DeleteResultsCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/ExtractRawDataAndResultsCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/ExtractRawDataCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetAllResultsCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetIndicatorsForCommunityIndicatorResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetIndicatorsForExtractRawDataAndResultsCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetIndicatorsForPopulationIndicatorResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetMapResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesForMapResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesForPopulationIndicatorResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesListForCommunityIndicatorResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForCommunityIndicatorResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForExtractRawDataAndResultsCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForExtractRawDataCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForMapResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForPopulationIndicatorResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/package-info.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepository.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepositoryProvider.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepositoryType.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/DeleteResultsCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/ExtractRawDataAndResultsCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/ExtractRawDataCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetAllResultsCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetIndicatorsForCommunityIndicatorResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetIndicatorsForExtractRawDataAndResultsCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetIndicatorsForPopulationIndicatorResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetMapResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesForMapResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesForPopulationIndicatorResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesListForCommunityIndicatorResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForCommunityIndicatorResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForExtractRawDataCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForMapResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForPopulationIndicatorResultCommand.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/package-info.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/AbstractGetIndicatorResultRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/DeleteResultsRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/ExtractRawDataAndResultsRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/ExtractRawDataRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetAllResultsRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetIndicatorsForCommunityIndicatorResultRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetIndicatorsForExtractRawDataAndResultsRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetIndicatorsForPopulationIndicatorResultRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetMapResultRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesForMapResultRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesForPopulationIndicatorResultRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesListForCommunityIndicatorResultRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForCommunityIndicatorResultRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForExtractRawDataAndResultsRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForExtractRawDataRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForMapResultRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForPopulationIndicatorResultRequest.java trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/package-info.java trunk/coser-business/src/main/java/fr/ifremer/coser/storage/DataStorages.java trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties trunk/coser-business/src/test/java/fr/ifremer/coser/bean/IndicatorMapTest.java trunk/coser-business/src/test/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryProviderTest.java trunk/coser-business/src/test/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryTest.java trunk/coser-business/src/test/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepositoryProviderTest.java trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/CoserApplicationListener.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/ServiceHelper.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/admin/DeleteProjectsAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/admin/ListProjectsAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDataAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDownloadAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/IndicatorAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/ZoneAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonIndicator.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonZone.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CoserAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapDataAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/SpeciesAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/ZoneAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphDataAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphDownloadAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/IndicatorAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/SpeciesAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/ZoneAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/search/ExtractAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceDataAction.java trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/ZoneAction.java Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserApplicationContext.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/CoserServiceContext.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserApplicationContext.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserApplicationContext.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,89 @@ +package fr.ifremer.coser; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import fr.ifremer.coser.bean.IndicatorMap; +import fr.ifremer.coser.bean.ZoneMap; +import fr.ifremer.coser.result.CoserCommandFactory; +import fr.ifremer.coser.result.CoserMainRepositoryProvider; +import fr.ifremer.coser.result.repository.ResultRepositoryType; +import fr.ifremer.coser.result.util.Charts; +import fr.ifremer.coser.result.util.Extracts; +import fr.ifremer.coser.result.util.Reports; + +import java.util.ServiceLoader; +import java.util.Set; + +/** + * Created on 3/11/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public interface CoserApplicationContext { + + /** + * @return application configuration + */ + CoserBusinessConfig getConfig(); + + /** + * @return all types of {@link ResultRepositoryType} found via the {@link ServiceLoader} mecanism + */ + Set<ResultRepositoryType> getRepositoryTypes(); + + /** + * @return repository provider + */ + CoserMainRepositoryProvider getRepositoryProvider(); + + /** + * @return factory of command + */ + CoserCommandFactory getCommandFactory(); + + /** + * @return indicator map + */ + IndicatorMap getIndicatorMap(); + + /** + * @return zone map + */ + ZoneMap getZoneMap(); + + /** + * @return reports helper + */ + Reports getReports(); + + /** + * @return charts helper + */ + Charts getCharts(); + + /** + * @return extracts helper + */ + Extracts getExtracts(); +} Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserServiceContext.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserServiceContext.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserServiceContext.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,49 +0,0 @@ -package fr.ifremer.coser; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import fr.ifremer.coser.bean.IndicatorMap; -import fr.ifremer.coser.bean.ZoneMap; -import fr.ifremer.coser.result.repository.ResultRepositoryProvider; -import fr.ifremer.coser.result.repository.ResultRepositoryType; - -import java.util.Set; - -/** - * Created on 3/11/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public interface CoserServiceContext { - - CoserBusinessConfig getConfig(); - - Set<ResultRepositoryType> getResultRepositoryTypes(); - - Set<ResultRepositoryProvider<?>> getResultRepositoryProviders(); - - IndicatorMap getIndicatorsMap(); - - ZoneMap getZonesMap(); -} Added: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserServiceContext.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserServiceContext.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserServiceContext.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,38 @@ +package fr.ifremer.coser; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import java.io.File; + +/** + * Created on 3/14/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public interface CoserServiceContext { + + CoserApplicationContext getApplicationContext(); + + File getTemporaryDirectory(); +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserServiceContext.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/DefaultCoserApplicationContext.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/DefaultCoserServiceContext.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/DefaultCoserApplicationContext.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/DefaultCoserApplicationContext.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,171 @@ +package fr.ifremer.coser; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.Sets; +import fr.ifremer.coser.bean.IndicatorMap; +import fr.ifremer.coser.bean.ZoneMap; +import fr.ifremer.coser.result.CoserCommandFactory; +import fr.ifremer.coser.result.CoserMainRepositoryProvider; +import fr.ifremer.coser.result.repository.ResultRepositoryProvider; +import fr.ifremer.coser.result.repository.ResultRepositoryType; +import fr.ifremer.coser.result.util.Charts; +import fr.ifremer.coser.result.util.Extracts; +import fr.ifremer.coser.result.util.Reports; +import org.nuiton.config.ArgumentsParserException; + +import java.util.ServiceLoader; +import java.util.Set; + +/** + * Created on 3/11/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class DefaultCoserApplicationContext implements CoserApplicationContext { + + /** + * Application configuration. + */ + protected CoserBusinessConfig config; + + /** + * Result repository types (loaded by service loader). + */ + protected Set<ResultRepositoryType> repositoryTypes; + + /** + * Result repository provider. + */ + protected CoserMainRepositoryProvider repositoryProvider; + + /** + * Factory of commands. + */ + protected CoserCommandFactory commandFactory; + + /** + * Cache of indicator definition. + */ + protected IndicatorMap indicatorsMap; + + /** + * Cache of zone definition. + */ + protected ZoneMap zonesMap; + + /** + * Reports helper. + */ + protected Reports reports; + + /** + * Charts helper. + */ + protected Charts charts; + + private Extracts extracts; + + public DefaultCoserApplicationContext(CoserBusinessConfig config) { + this.config = config; + try { + config.parse(); + } catch (ArgumentsParserException ex) { + throw new CoserTechnicalException("Can't read configuration", ex); + } + } + + @Override + public CoserBusinessConfig getConfig() { + return config; + } + + @Override + public Set<ResultRepositoryType> getRepositoryTypes() { + if (repositoryTypes == null) { + ServiceLoader<ResultRepositoryType> loader = ServiceLoader.load(ResultRepositoryType.class); + repositoryTypes = Sets.newHashSet(loader); + } + return repositoryTypes; + } + + @Override + public IndicatorMap getIndicatorMap() { + if (indicatorsMap == null) { + indicatorsMap = new IndicatorMap(config.getWebIndicatorsFile()); + } + return indicatorsMap; + } + + @Override + public ZoneMap getZoneMap() { + if (zonesMap == null) { + zonesMap = new ZoneMap(config.getWebZonesFile()); + } + return zonesMap; + } + + @Override + public Reports getReports() { + if (reports == null) { + reports = new Reports(); + } + return reports; + } + + @Override + public Charts getCharts() { + if (charts == null) { + charts = new Charts(); + } + return charts; + } + + @Override + public Extracts getExtracts() { + if (extracts == null) { + extracts = new Extracts(); + } + return extracts; + } + + @Override + public CoserMainRepositoryProvider getRepositoryProvider() { + if (repositoryProvider == null) { + + Set<ResultRepositoryProvider<?>> repositoryProviders = CoserMainRepositoryProvider.createDefaultRepositoryProviders(config); + repositoryProvider = new CoserMainRepositoryProvider(repositoryProviders); + } + return repositoryProvider; + } + + @Override + public CoserCommandFactory getCommandFactory() { + if (commandFactory == null) { + commandFactory = new CoserCommandFactory(getRepositoryTypes()); + } + return commandFactory; + } + +} Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/DefaultCoserServiceContext.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/DefaultCoserServiceContext.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/DefaultCoserServiceContext.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,130 +0,0 @@ -package fr.ifremer.coser; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; -import com.google.common.collect.Sets; -import fr.ifremer.coser.bean.IndicatorMap; -import fr.ifremer.coser.bean.ZoneMap; -import fr.ifremer.coser.result.repository.ResultRepositoryProvider; -import fr.ifremer.coser.result.repository.ResultRepositoryType; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepositoryProvider; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepositoryProvider; - -import java.util.ServiceLoader; -import java.util.Set; - -/** - * Created on 3/11/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class DefaultCoserServiceContext implements CoserServiceContext { - - /** - * Application configuration. - */ - protected CoserBusinessConfig config; - - /** - * Available type of result repositories (loaded by service loader). - */ - protected Set<ResultRepositoryType> resultRepositoryTypes; - - /** - * Result repositories providers. - */ - protected Set<ResultRepositoryProvider<?>> resultRepositoryProviders; - - /** - * Cache of indicator definition. - */ - protected IndicatorMap indicatorsMap; - - /** - * Cache of zone definition. - */ - protected ZoneMap zonesMap; - - public DefaultCoserServiceContext(CoserBusinessConfig config) { - this.config = config; - } - - public static Set<ResultRepositoryProvider<?>> createDefaultRepositoryProviders(CoserBusinessConfig config) { - Preconditions.checkNotNull(config); - Set<ResultRepositoryProvider<?>> result = Sets.newHashSet(); - - // add legacy map repository - Preconditions.checkNotNull(config.getWebMapsProjectsDirectory()); - result.add(new LegacyResultRepositoryProvider(config.getWebMapsProjectsDirectory())); - - // add legacy indicators repository - Preconditions.checkNotNull(config.getWebIndicatorsProjectsDirectory()); - result.add(new LegacyResultRepositoryProvider(config.getWebIndicatorsProjectsDirectory())); - - // add EchoBase repository - Preconditions.checkNotNull(config.getWebEchobaseProjectsDirectory()); - result.add(new EchoBaseResultRepositoryProvider(config.getWebEchobaseProjectsDirectory())); - return result; - } - - @Override - public CoserBusinessConfig getConfig() { - return config; - } - - @Override - public Set<ResultRepositoryType> getResultRepositoryTypes() { - if (resultRepositoryTypes == null) { - ServiceLoader<ResultRepositoryType> loader = ServiceLoader.load(ResultRepositoryType.class); - resultRepositoryTypes = Sets.newHashSet(loader); - } - return resultRepositoryTypes; - } - - @Override - public Set<ResultRepositoryProvider<?>> getResultRepositoryProviders() { - if (resultRepositoryProviders == null) { - resultRepositoryProviders = createDefaultRepositoryProviders(config); - } - return resultRepositoryProviders; - } - - @Override - public IndicatorMap getIndicatorsMap() { - if (indicatorsMap == null) { - indicatorsMap = new IndicatorMap(config.getWebIndicatorsFile()); - } - return indicatorsMap; - } - - @Override - public ZoneMap getZonesMap() { - if (zonesMap == null) { - zonesMap = new ZoneMap(config.getWebZonesFile()); - } - return zonesMap; - } - -} Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/IndicatorMap.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/bean/IndicatorMap.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/IndicatorMap.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -24,7 +24,9 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; 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.logging.Log; @@ -32,9 +34,10 @@ import java.io.File; import java.util.Collection; -import java.util.Iterator; +import java.util.Collections; import java.util.Locale; import java.util.Map; +import java.util.Set; /** * Contains the localized indicator definitions. @@ -50,79 +53,105 @@ private static final Log log = LogFactory.getLog(IndicatorMap.class); /** - * Indicator map (id, locale > translation, id, "unit" > unit) (etat du service). + * To get french translations. */ + protected static final String KEY_FRENCH = Locale.FRENCH.getLanguage(); + + /** + * To get english translations. + */ + protected static final String KEY_ENGLISH = Locale.ENGLISH.getLanguage(); + + /** + * To get spanish translations. + */ + protected static final String KEY_SPANISH = "es"; + + /** + * To get unit translations. + */ + protected static final String KEY_UNIT = "unit"; + + /** + * Universe of safe keys usable in the cache. + * + * @see #getSafeLocaleKey(String) + */ + protected static final Set<String> SAFE_KEYS = Collections.unmodifiableSet( + Sets.newHashSet(KEY_FRENCH, KEY_ENGLISH, KEY_UNIT, KEY_SPANISH)); + + /** + * Localized Indicator map (id, locale > translation, id, "unit" > unit). + */ protected final MultiKeyMap<String, String> map; public IndicatorMap(File indicatorsFile) { Preconditions.checkNotNull(indicatorsFile); + Preconditions.checkArgument(indicatorsFile.exists(), "Indicator file: " + indicatorsFile + " does not exist."); if (log.isInfoEnabled()) { log.info("Loading Indicator file: " + indicatorsFile); } this.map = new MultiKeyMap<String, String>(); - DataStorage indicatorsStorage; - indicatorsStorage = DataStorages.load(indicatorsFile); - Iterator<String[]> iteratorInd = indicatorsStorage.iterator(true); - while (iteratorInd.hasNext()) { - // "id";"label_fr";"label_en";"label_es";"unit" - String[] indicator = iteratorInd.next(); - map.put(indicator[0], "fr", indicator[1]); - map.put(indicator[0], "en", indicator[2]); - map.put(indicator[0], "es", indicator[3]); - map.put(indicator[0], "unit", indicator[4]); - } + + DataStorage storage = DataStorages.load(indicatorsFile); + DataStorages.walk(storage, new DataStorageWalker() { + @Override + public void onRow(String... row) { + String indicatorCode = row[0]; + map.put(indicatorCode, KEY_FRENCH, row[1]); + map.put(indicatorCode, KEY_ENGLISH, row[2]); + map.put(indicatorCode, KEY_SPANISH, row[3]); + map.put(indicatorCode, KEY_UNIT, row[4]); + } + }); } - public String getIndicatorValue(String indicator, Locale locale) { + public String getIndicatorValue(Locale locale, String indicator) { + Preconditions.checkNotNull(locale); Preconditions.checkNotNull(indicator); - Preconditions.checkNotNull(locale); - String translations = getIndicatorValue(indicator, locale.getLanguage()); - if (translations == null) { - translations = "##" + indicator + "##" + locale.getLanguage(); - } - return translations; + String localeCode = getSafeLocaleKey(locale.getLanguage()); + String translation = getIndicatorValue(localeCode, indicator); + return translation; } public String getIndicatorUnit(String indicator) { Preconditions.checkNotNull(indicator); - return getIndicatorValue(indicator, "unit"); + return getIndicatorValue(KEY_UNIT, indicator); } - /** - * Get indicator translation by checking correct locale. - * - * @param indicator indicator code - * @param localeCode locale - * @return indicator translation - */ - public String getIndicatorValue(String indicator, String localeCode) { - Preconditions.checkNotNull(indicator); - Preconditions.checkNotNull(localeCode); - String localLocaleCode = localeCode; - if (!"fr".equals(localLocaleCode) && !"es".equals(localLocaleCode) - && !"unit".equals(localLocaleCode)) { - localLocaleCode = "en"; // en by default - } - return map.get(indicator, localLocaleCode); - } + public Map<String, String> getIndicatorsValues(Locale locale, + Collection<String> indicatorList) { - public Map<String, String> getIndicatorsValues(Collection<String> indicatorList, Locale locale) { - Map<String, String> result = Maps.newTreeMap(); if (indicatorList != null) { + String localeCode = getSafeLocaleKey(locale.getLanguage()); for (String indicator : indicatorList) { - String indicatorLabel = getIndicatorValue(indicator, locale); + String indicatorLabel = getIndicatorValue(localeCode, indicator); result.put(indicator, indicatorLabel); } } - return result; } - protected MultiKeyMap<String, String> getMap() { - return map; + protected String getIndicatorValue(String localeCode, String indicator) { + Preconditions.checkNotNull(localeCode); + Preconditions.checkNotNull(indicator); + Preconditions.checkArgument(SAFE_KEYS.contains(localeCode)); + String translation = map.get(indicator, localeCode); + if (translation == null) { + translation = "##" + indicator + "##" + localeCode; + } + return translation; } + + protected String getSafeLocaleKey(String localeCode) { + if (!SAFE_KEYS.contains(localeCode)) { + localeCode = KEY_ENGLISH; // en by default + } + return localeCode; + } + } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/SpeciesListMap.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/bean/SpeciesListMap.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/SpeciesListMap.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,13 +22,19 @@ * #L% */ +import com.google.common.base.Predicate; +import com.google.common.collect.Maps; +import fr.ifremer.coser.result.repository.legacy.LegacyPredicates; import fr.ifremer.coser.storage.DataStorage; +import fr.ifremer.coser.storage.DataStorageWalker; import fr.ifremer.coser.storage.DataStorages; import org.nuiton.i18n.I18n; import java.io.File; +import java.util.Collection; import java.util.Iterator; import java.util.Locale; +import java.util.Map; /** * Created on 3/11/14. @@ -50,42 +56,64 @@ public String getSpeciesListName(Locale locale, String specesList) { // recherche de la traduction de l'id de liste // les liste sont a1, T1, T2 ... - String listLetter = String.valueOf(specesList.charAt(0)); - String translation = "## " + specesList + " not found ##"; - Iterator<String[]> typeIterator = iterator(true); - while (typeIterator.hasNext()) { - // "Types";"Commentaire";"NumSys min";"NumSys max";"Code" - String[] tupleType = typeIterator.next(); - if (tupleType[4].equals(listLetter)) { - // gestion du groupe "Tous" - // cas special, c'est la seule valeur du fichier - // code type espece qui a besoin d'une traduction - if (tupleType[4].equalsIgnoreCase("T")) { + Predicate<String[]> predicate = LegacyPredicates.speciesListPredicate(specesList); + GetNameWalker walker = new GetNameWalker(locale, specesList); + DataStorages.walk(storage, predicate, walker); + String translation = walker.getTranslation(); - translation = I18n.l(locale, "coser.business.specesList.nameForAll", specesList.charAt(1)); -// if (locale != null && "fr".equals(locale.getLanguage())) { -// translation = "Tous Liste " + specesList.charAt(1); -// } else if (locale != null && "en".equals(locale.getLanguage())) { -// translation = "Todo Lista " + specesList.charAt(1); -// } else { -// translation = "All List " + specesList.charAt(1); -// } - } else { - // ajout de la traduction du nom de liste plus le numéro - translation = I18n.l(locale, "coser.business.specesList.name", tupleType[0], specesList.charAt(1)); -// if (locale != null && "fr".equals(locale.getLanguage())) { -// translation = tupleType[0] + " Liste " + specesList.charAt(1); -// } else if (locale != null && "en".equals(locale.getLanguage())) { -// translation = tupleType[0] + " Lista " + specesList.charAt(1); -// } else { -// translation = tupleType[0] + " List " + specesList.charAt(1); -// } - } - break; +// String listLetter = String.valueOf(specesList.charAt(0)); +// String translation = "## " + specesList + " not found ##"; +// Iterator<String[]> typeIterator = iterator(true); +// while (typeIterator.hasNext()) { +// // "Types";"Commentaire";"NumSys min";"NumSys max";"Code" +// String[] tupleType = typeIterator.next(); +// if (tupleType[4].equals(listLetter)) { +// +// // gestion du groupe "Tous" +// // cas special, c'est la seule valeur du fichier +// // code type espece qui a besoin d'une traduction +// if (tupleType[4].equalsIgnoreCase("T")) { +// +// translation = I18n.l(locale, "coser.business.specesList.nameForAll", specesList.charAt(1)); +//// if (locale != null && "fr".equals(locale.getLanguage())) { +//// translation = "Tous Liste " + specesList.charAt(1); +//// } else if (locale != null && "en".equals(locale.getLanguage())) { +//// translation = "Todo Lista " + specesList.charAt(1); +//// } else { +//// translation = "All List " + specesList.charAt(1); +//// } +// } else { +// // ajout de la traduction du nom de liste plus le numéro +// translation = I18n.l(locale, "coser.business.specesList.name", tupleType[0], specesList.charAt(1)); +//// if (locale != null && "fr".equals(locale.getLanguage())) { +//// translation = tupleType[0] + " Liste " + specesList.charAt(1); +//// } else if (locale != null && "en".equals(locale.getLanguage())) { +//// translation = tupleType[0] + " Lista " + specesList.charAt(1); +//// } else { +//// translation = tupleType[0] + " List " + specesList.charAt(1); +//// } +// } +// break; +// } +// } + return translation; + } + + public Map<String, String> getSpeciesSubMap(Locale locale, Collection<String> speciesList) { + + // keep incoming order + Map<String, String> result = Maps.newLinkedHashMap(); + + if (speciesList != null) { + + for (String species : speciesList) { + String speciesLabel = getSpeciesListName(locale, species); + result.put(species, speciesLabel); } } - return translation; + + return result; } protected Iterator<String[]> iterator(boolean skipFirstLine) { @@ -93,4 +121,37 @@ Iterator<String[]> iterator = storage.iterator(skipFirstLine); return iterator; } + + public static class GetNameWalker implements DataStorageWalker { + + protected String translation; + + protected String speciesList; + + protected final Locale locale; + + public GetNameWalker(Locale locale, String speciesList) { + this.speciesList = speciesList; + this.locale = locale; + translation = "## " + speciesList + " not found ##"; + } + + public String getTranslation() { + return translation; + } + + @Override + public void onRow(String... tuple) { + + // gestion du groupe "Tous" + // cas special, c'est la seule valeur du fichier + // code type espece qui a besoin d'une traduction + if (tuple[4].equalsIgnoreCase("T")) { + translation = I18n.l(locale, "coser.business.specesList.nameForAll", speciesList.charAt(1)); + } else { + // ajout de la traduction du nom de liste plus le numéro + translation = I18n.l(locale, "coser.business.specesList.name", tuple[0], speciesList.charAt(1)); + } + } + } } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/SpeciesMap.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/bean/SpeciesMap.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/SpeciesMap.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -25,6 +25,7 @@ import com.google.common.collect.Maps; import fr.ifremer.coser.storage.DataStorage; import fr.ifremer.coser.storage.DataStorages; +import org.apache.commons.lang3.StringUtils; import java.io.File; import java.util.Collection; @@ -95,7 +96,9 @@ Map<String, String> map = getSpeciesMap(); for (String species : speciesList) { String speciesLabel = map.get(species); - result.put(species, speciesLabel); + if (StringUtils.isNotEmpty(speciesLabel)) { + result.put(species, speciesLabel); + } } } Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserCommand.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepositoryCommand.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserCommand.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,44 @@ +package fr.ifremer.coser.result; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import fr.ifremer.coser.result.repository.ResultRepository; + +/** + * To execute a command on a request for a given result repository. + * <p/> + * Created on 3/11/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public interface CoserCommand<Repository extends ResultRepository, Request extends CoserRequest> { + + boolean accept(Request request); + + CoserResult execute(Request request); + + void setRepository(Repository repository); + + void setRequestContext(CoserRequestContext context); +} Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserCommandFactory.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserCommandFactory.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserCommandFactory.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,80 @@ +package fr.ifremer.coser.result; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import fr.ifremer.coser.CoserTechnicalException; +import fr.ifremer.coser.result.repository.ResultRepository; +import fr.ifremer.coser.result.repository.ResultRepositoryType; +import org.apache.commons.collections4.map.MultiKeyMap; + +import java.util.Map; +import java.util.Set; + +/** + * To create commands. + * Created on 3/14/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class CoserCommandFactory { + + /** + * Cache of command types. + * <p/> + * Keys are (repository type id, request type). + */ + protected final MultiKeyMap<Object, Class<? extends CoserCommand>> commands; + + public CoserCommandFactory(Set<ResultRepositoryType> resultRepositoryTypes) { + this.commands = new MultiKeyMap<Object, Class<? extends CoserCommand>>(); + for (ResultRepositoryType resultRepositoryType : resultRepositoryTypes) { + + String resultRepositoryTypeId = resultRepositoryType.getId(); + + Map<Class<? extends CoserRequest>, Class<? extends CoserCommand>> commandTypes = resultRepositoryType.getCommandTypes(); + for (Map.Entry<Class<? extends CoserRequest>, Class<? extends CoserCommand>> entry : commandTypes.entrySet()) { + commands.put(resultRepositoryTypeId, entry.getKey(), entry.getValue()); + } + } + } + + public <Repo extends ResultRepository, R extends CoserRequest> CoserCommand<Repo, R> newCommand(CoserRequestContext requestContext, + Repo repository, + R request) { + + Class<? extends CoserCommand> commandType = commands.get(repository.getResultRepositoryType().getId(), request.getClass()); + + try { + // instanciate the command to get the request type :( + CoserCommand<Repo, R> command = commandType.newInstance(); + command.setRepository(repository); + command.setRequestContext(requestContext); + return command; + } catch (InstantiationException e) { + throw new CoserTechnicalException(e); + } catch (IllegalAccessException e) { + throw new CoserTechnicalException(e); + } + } +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserCommandFactory.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserMainRepositoryProvider.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserMainRepositoryProvider.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserMainRepositoryProvider.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,123 @@ +package fr.ifremer.coser.result; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Preconditions; +import com.google.common.collect.Sets; +import fr.ifremer.coser.CoserBusinessConfig; +import fr.ifremer.coser.result.repository.ResultRepository; +import fr.ifremer.coser.result.repository.ResultRepositoryProvider; +import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepositoryProvider; +import fr.ifremer.coser.result.repository.legacy.LegacyResultRepositoryProvider; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Set; + +/** + * Created on 3/15/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class CoserMainRepositoryProvider { + + /** Logger. */ + private static final Log log = LogFactory.getLog(CoserMainRepositoryProvider.class); + + /** + * Repositories providers. + */ + protected final Set<ResultRepositoryProvider<?>> repositoryProviders; + + /** + * Cache of repositories. + */ + protected Set<ResultRepository> repositories; + + public static Set<ResultRepositoryProvider<?>> createDefaultRepositoryProviders(CoserBusinessConfig config) { + Preconditions.checkNotNull(config); + Set<ResultRepositoryProvider<?>> result = Sets.newHashSet(); + + // add legacy map repository + Preconditions.checkNotNull(config.getWebMapsProjectsDirectory()); + result.add(new LegacyResultRepositoryProvider(config, config.getWebMapsProjectsDirectory())); + + // add legacy indicators repository + Preconditions.checkNotNull(config.getWebIndicatorsProjectsDirectory()); + result.add(new LegacyResultRepositoryProvider(config, config.getWebIndicatorsProjectsDirectory())); + + // add EchoBase repository + Preconditions.checkNotNull(config.getWebEchobaseProjectsDirectory()); + result.add(new EchoBaseResultRepositoryProvider(config.getWebEchobaseProjectsDirectory())); + return result; + } + + public CoserMainRepositoryProvider(Set<ResultRepositoryProvider<?>> repositoryProviders) { + Preconditions.checkNotNull(repositoryProviders); + this.repositoryProviders = repositoryProviders; + } + + public void resetRepositories() { + repositories = null; + } + + public Set<ResultRepository> getResultRepositories() { + if (repositories == null) { + Set<String> ids = Sets.newHashSet(); + repositories = Sets.newHashSet(); + for (ResultRepositoryProvider<?> repositoryProvider : repositoryProviders) { + + Set<ResultRepository> repos = loadFromRepositoryProvider(repositoryProvider, ids); + repositories.addAll(repos); + } + if (log.isInfoEnabled()) { + log.info("Found " + repositories.size() + " result repository(ies)."); + } + } + return repositories; + } + + protected Set<ResultRepository> loadFromRepositoryProvider(ResultRepositoryProvider<?> repositoryProvider, + Set<String> ids) { + + Set<? extends ResultRepository> resultRepositories = repositoryProvider.loadRepositories(); + + Set<ResultRepository> result = Sets.newHashSet(); + + // check all repository use a unique id + for (ResultRepository resultRepository : resultRepositories) { + String id = resultRepository.getId(); + if (log.isDebugEnabled()) { + log.debug("Try to register result Repository: " + id); + } + if (!ids.add(id)) { + + // there is already a repository with this id + throw new ResultRepositoryInitializationException(repositoryProvider, "Duplicate result repository with id: " + id, null); + } + result.add(resultRepository); + } + return result; + } +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserMainRepositoryProvider.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -23,7 +23,6 @@ */ import java.io.Serializable; -import java.util.Locale; /** * Request to obtain results. @@ -35,9 +34,11 @@ */ public interface CoserRequest extends Serializable { - Locale getLocale(); - - void setLocale(Locale locale); - + /** + * Is the request is filled to be consumed? + * + * @return {@code true} if all mandatory fields of the request + * are filled, {@code false} otherwise + */ boolean isFilled(); } Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequestBuilder.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestBuilder.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequestBuilder.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequestBuilder.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,290 @@ +package fr.ifremer.coser.result; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Preconditions; +import com.google.common.collect.Maps; +import fr.ifremer.coser.CoserTechnicalException; +import fr.ifremer.coser.result.request.CoserRequestExtractTypeListAware; +import fr.ifremer.coser.result.request.CoserRequestFacadeAware; +import fr.ifremer.coser.result.request.CoserRequestIndicatorAware; +import fr.ifremer.coser.result.request.CoserRequestRepositoryResultTypeAware; +import fr.ifremer.coser.result.request.CoserRequestRepositoryTypeAware; +import fr.ifremer.coser.result.request.CoserRequestSpeciesAware; +import fr.ifremer.coser.result.request.CoserRequestZoneAware; +import fr.ifremer.coser.result.request.CoserRequestZoneListAware; +import fr.ifremer.coser.result.request.ExtractRawDataAndResultsRequest; +import fr.ifremer.coser.util.DataType; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.List; +import java.util.Locale; +import java.util.Map; + +/** + * To build requests. + * <p/> + * TO build a new request, instanciate a new build, add some parameters and then use the {@link #toRequest()} method. + * <p/> + * Example: + * <pre> + * MapRequest r = CoserRequestBuilder. + * newBuilder(locale,MapRequest.class). + * addFacade(facade). + * addZone(zone). + * toRequest(); + * </pre> + * Created on 3/7/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class CoserRequestBuilder<R extends CoserRequest> { + + protected static final String PARAMETER_RESULT_TYPE = "resultType"; + + protected static final String PARAMETER_REPOSITORY_TYPE = "resultRepositoryType"; + + protected static final String PARAMETER_INDICATOR = "indicator"; + + protected static final String PARAMETER_ZONE_LIST = "zoneList"; + + protected static final String PARAMETER_SPECIES = "species"; + + protected static final String PARAMETER_ZONE = "zone"; + + protected static final String PARAMETER_FACADE = "facade"; + + protected static final String PARAMETER_SPECIES_LIST = "speciesList"; + + protected static final String PARAMETER_POPULATION_INDICATOR_LIST = "populationIndicatorList"; + + protected static final String PARAMETER_COMMUNITY_INDICATOR_LIST = "communityIndicatorList"; + + protected static final String PARAMETER_EXTRACT_TYPE_LIST = "extractTypeList"; + + /** + * Locale to inject in request. + */ + protected final Locale locale; + + /** + * Type of request to build. + */ + protected final Class<R> requestType; + + /** + * Holder of parameters to inject in request. + */ + protected final Map<String, Object> parameters; + + public static <R extends CoserRequest> CoserRequestBuilder<R> newBuilder(Locale locale, + Class<R> requestType) { + return new CoserRequestBuilder<R>(locale, requestType); + } + + protected CoserRequestBuilder(Locale locale, Class<R> requestType) { + Preconditions.checkNotNull(locale); + Preconditions.checkNotNull(requestType); + this.locale = locale; + this.requestType = requestType; + this.parameters = Maps.newTreeMap(); + } + + public CoserRequestBuilder<R> addFacade(String facade) { + parameters.put(PARAMETER_FACADE, facade); + return this; + } + + public CoserRequestBuilder<R> addZone(String zone) { + parameters.put(PARAMETER_ZONE, zone); + return this; + } + + public CoserRequestBuilder<R> addSpecies(String species) { + parameters.put(PARAMETER_SPECIES, species); + return this; + } + + public CoserRequestBuilder<R> addIndicator(String indicator) { + parameters.put(PARAMETER_INDICATOR, indicator); + return this; + } + + public CoserRequestBuilder<R> addExtractTypeList(List<DataType> extractTypeList) { + parameters.put(PARAMETER_EXTRACT_TYPE_LIST, extractTypeList); + return this; + } + + public CoserRequestBuilder<R> addZoneList(List<String> zoneList) { + parameters.put(PARAMETER_ZONE_LIST, zoneList); + return this; + } + + public CoserRequestBuilder<R> addSpeciesList(List<String> speciesList) { + parameters.put(PARAMETER_SPECIES_LIST, speciesList); + return this; + } + + public CoserRequestBuilder<R> addPopulationIndicatorList(List<String> populationIndicatorList) { + parameters.put(PARAMETER_POPULATION_INDICATOR_LIST, populationIndicatorList); + return this; + } + + public CoserRequestBuilder<R> addCommunityIndicatorList(List<String> communityIndicatorList) { + parameters.put(PARAMETER_COMMUNITY_INDICATOR_LIST, communityIndicatorList); + return this; + } + + public CoserRequestBuilder<R> addRepositoryType(String repositoryType) { + parameters.put(PARAMETER_REPOSITORY_TYPE, repositoryType); + return this; + } + + public CoserRequestBuilder<R> addResultType(ResultType resultType) { + parameters.put(PARAMETER_RESULT_TYPE, resultType); + return this; + } + + public R toRequest() { + try { + R request = requestType.newInstance(); + flushCoserRequestFacadeAware(request); + flushCoserRequestZoneAware(request); + flushCoserRequestZoneListAware(request); + flushCoserRequestSpeciesAware(request); + flushCoserRequestIndicatorAware(request); + flushCoserRequestRepositoryTypeAware(request); + flushCoserRequestRepositoryResultTypeAware(request); + flushCoserRequestExtractTypeListAware(request); + flushExtractRawDataAndResultsRequest(request); + return request; + } catch (InstantiationException e) { + throw new CoserTechnicalException(e); + } catch (IllegalAccessException e) { + throw new CoserTechnicalException(e); + } + } + + protected void flushExtractRawDataAndResultsRequest(R request) { + if (request instanceof ExtractRawDataAndResultsRequest) { + ExtractRawDataAndResultsRequest r = (ExtractRawDataAndResultsRequest) request; + + List<String> populationIndicatorList = getListParam(PARAMETER_POPULATION_INDICATOR_LIST); + if (CollectionUtils.isNotEmpty(populationIndicatorList)) { + r.setPopulationIndicatorList(populationIndicatorList); + } + List<String> communityIndicatorList = getListParam(PARAMETER_COMMUNITY_INDICATOR_LIST); + if (CollectionUtils.isNotEmpty(communityIndicatorList)) { + r.setCommunityIndicatorList(communityIndicatorList); + } + List<String> speciesList = getListParam(PARAMETER_SPECIES_LIST); + if (CollectionUtils.isNotEmpty(speciesList)) { + r.setSpeciesList(speciesList); + } + } + } + + protected void flushCoserRequestFacadeAware(R request) { + if (request instanceof CoserRequestFacadeAware) { + String facade = getParam(PARAMETER_FACADE); + if (facade != null) { + ((CoserRequestFacadeAware) request).setFacade(facade); + } + } + } + + protected void flushCoserRequestZoneAware(R request) { + if (request instanceof CoserRequestZoneAware) { + String zone = getParam(PARAMETER_ZONE); + if (zone != null) { + ((CoserRequestZoneAware) request).setZone(zone); + } + } + } + + protected void flushCoserRequestSpeciesAware(R request) { + if (request instanceof CoserRequestSpeciesAware) { + String species = getParam(PARAMETER_SPECIES); + if (species != null) { + ((CoserRequestSpeciesAware) request).setSpecies(species); + } + } + } + + protected void flushCoserRequestZoneListAware(R request) { + if (request instanceof CoserRequestZoneListAware) { + List<String> zoneList = getListParam(PARAMETER_ZONE_LIST); + if (CollectionUtils.isNotEmpty(zoneList)) { + ((CoserRequestZoneListAware) request).setZoneList(zoneList); + } + } + } + + protected void flushCoserRequestExtractTypeListAware(R request) { + if (request instanceof CoserRequestExtractTypeListAware) { + List<DataType> zoneList = getListParam(PARAMETER_EXTRACT_TYPE_LIST); + if (CollectionUtils.isNotEmpty(zoneList)) { + ((CoserRequestExtractTypeListAware) request).setExtractTypeList(zoneList); + } + } + } + + protected void flushCoserRequestIndicatorAware(R request) { + if (request instanceof CoserRequestIndicatorAware) { + String indicator = getParam(PARAMETER_INDICATOR); + if (indicator != null) { + ((CoserRequestIndicatorAware) request).setIndicator(indicator); + } + } + } + + protected void flushCoserRequestRepositoryTypeAware(R request) { + if (request instanceof CoserRequestRepositoryTypeAware) { + String repositoryType = getParam(PARAMETER_REPOSITORY_TYPE); + if (repositoryType != null) { + ((CoserRequestRepositoryTypeAware) request).setRepositoryType(repositoryType); + } + } + } + + protected void flushCoserRequestRepositoryResultTypeAware(R request) { + if (request instanceof CoserRequestRepositoryResultTypeAware) { + ResultType resultType = getParam(PARAMETER_RESULT_TYPE); + if (resultType != null) { + ((CoserRequestRepositoryResultTypeAware) request).setResultType(resultType); + } + } + } + + protected <O> O getParam(String parameterName) { + Object o = parameters.get(parameterName); + return (O) o; + } + + protected <O> List<O> getListParam(String parameterName) { + Object o = parameters.get(parameterName); + return (List<O>) o; + } + +} Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequestContext.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequestContext.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequestContext.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,61 @@ +package fr.ifremer.coser.result; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import fr.ifremer.coser.CoserBusinessConfig; +import fr.ifremer.coser.bean.IndicatorMap; +import fr.ifremer.coser.bean.ZoneMap; +import fr.ifremer.coser.result.util.Charts; +import fr.ifremer.coser.result.util.Extracts; +import fr.ifremer.coser.result.util.Reports; + +import java.io.File; +import java.util.Locale; + +/** + * Useful object used by commands. + * <p/> + * Created on 3/14/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public interface CoserRequestContext { + + Locale getLocale(); + + IndicatorMap getIndicatorMap(); + + ZoneMap getZoneMap(); + + Reports getReports(); + + Charts getCharts(); + + Extracts getExtracts(); + + CoserBusinessConfig getConfig(); + + File getTemporaryDirectory(); + +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequestContext.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequestExecutor.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserResultEngine.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequestExecutor.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserRequestExecutor.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,201 @@ +package fr.ifremer.coser.result; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +import fr.ifremer.coser.CoserApplicationContext; +import fr.ifremer.coser.CoserTechnicalException; +import fr.ifremer.coser.result.repository.ResultRepository; +import fr.ifremer.coser.result.request.ExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.result.FileResult; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.io.FileUtils; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Set; + +/** + * To execute request all over coser result repositories. + * <p/> + * This new API will let us to define any result format to be queried. + * <p/> + * Created on 3/4/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class CoserRequestExecutor { + + /** + * To get repositories. + */ + protected final CoserMainRepositoryProvider repositoryProvider; + + /** + * To create commands. + */ + protected final CoserCommandFactory commandFactory; + + public CoserRequestExecutor(CoserApplicationContext applicationContext) { + this.commandFactory = applicationContext.getCommandFactory(); + this.repositoryProvider = applicationContext.getRepositoryProvider(); + } + + /** + * Extract some raw data and results from repositories and assembly them as an archive. + * + * @param context request context + * @param request extract request + * @return the file result containing the archive + */ + public FileResult executeUnique(CoserRequestContext context, + ExtractRawDataAndResultsRequest request) { + + File extractDirectory = new File(context.getTemporaryDirectory(), "Indicateurs_Ifremer"); + request.setExtractDirectory(extractDirectory); + + try { + FileUtils.forceMkdir(extractDirectory); + } catch (IOException e) { + throw new CoserTechnicalException("Could not create directory: " + extractDirectory, e); + } + + // Get all extracted stuff from matching repositories + List repositoryResults = executeAll(context, request); + + File file = context.getExtracts().assemblyExtractResult(context, + extractDirectory, + request.getZoneList(), + repositoryResults); + FileResult result = new FileResult("ALL", file); + return result; + } + + /** + * Execute the given {@code request} to botain a single result. + * <p/> + * A unique result repository must match this request, otherwise a {@link DuplicatedResultException} will be thrown. + * <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 unique result + */ + public CoserResult executeUnique(CoserRequestContext context, CoserRequest request) { + + Preconditions.checkNotNull(request); + Preconditions.checkArgument(request.isFilled()); + + List<ResultRepository> repositories = getMatchingRepositories(context, request); + if (CollectionUtils.isEmpty(repositories)) { + throw new NoResultRepositoryFoundException("No result repository matching request", request); + } + + if (repositories.size() > 1) { + throw new DuplicatedResultException( + repositories.toArray(new ResultRepository[repositories.size()])); + } + + ResultRepository repository = repositories.get(0); + + CoserResult result = execute(context, repository, request); + return result; + } + + /** + * Execute the given {@code request} on any 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 list of result (one by each result repository). + */ + public List<CoserResult> executeAll(CoserRequestContext context, CoserRequest request) { + + Preconditions.checkNotNull(request); + Preconditions.checkArgument(request.isFilled()); + + List<CoserResult> result = Lists.newArrayList(); + + List<ResultRepository> repositories = getMatchingRepositories(context, request); + if (CollectionUtils.isEmpty(repositories)) { + throw new NoResultRepositoryFoundException("No result repository matching request", request); + } + + for (ResultRepository repository : repositories) { + + CoserResult repositoryResult = execute(context, repository, request); + + result.add(repositoryResult); + } + return result; + } + + protected List<ResultRepository> getMatchingRepositories(CoserRequestContext context, CoserRequest request) { + + List<ResultRepository> result = Lists.newArrayList(); + + Set<ResultRepository> repositories = repositoryProvider.getResultRepositories(); + for (ResultRepository repository : repositories) { + + if (accept(context, repository, request)) { + result.add(repository); + } + } + return result; + } + + protected <Request extends CoserRequest, Repository extends ResultRepository> boolean + accept(CoserRequestContext context, Repository repository, Request request) { + + CoserCommand<Repository, Request> command = newCommand(context, repository, request); + + boolean result = command.accept(request); + return result; + } + + protected <Request extends CoserRequest, Repository extends ResultRepository> CoserResult + execute(CoserRequestContext context, Repository repository, Request request) { + + CoserCommand<Repository, Request> command = newCommand(context, repository, request); + + CoserResult result = command.execute(request); + if (result == null) { + throw new NoResultFoundException(repository.getId(), request); + } + return result; + } + + protected <Request extends CoserRequest, Repository extends ResultRepository> CoserCommand<Repository, Request> + newCommand(CoserRequestContext context, Repository repository, Request request) { + + CoserCommand<Repository, Request> command = + commandFactory.newCommand(context, repository, request); + return command; + } +} Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserResultEngine.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserResultEngine.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/CoserResultEngine.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,162 +0,0 @@ -package fr.ifremer.coser.result; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import fr.ifremer.coser.CoserServiceContext; -import fr.ifremer.coser.result.repository.ResultRepository; -import fr.ifremer.coser.result.repository.ResultRepositoryCommandEngine; -import fr.ifremer.coser.result.repository.ResultRepositoryProvider; -import fr.ifremer.coser.result.repository.ResultRepositoryType; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * To execute command all over coser result repositories. - * <p/> - * This new API will let us to define any result format to be queried. - * <p/> - * Created on 3/4/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class CoserResultEngine { - - /** Logger. */ - private static final Log log = LogFactory.getLog(CoserResultEngine.class); - - protected Set<ResultRepositoryCommandEngine> repositories; - - protected final CoserServiceContext serviceContext; - - public CoserResultEngine(CoserServiceContext serviceContext) { - Preconditions.checkNotNull(serviceContext); - this.serviceContext = serviceContext; - } - - public Map<String, ResultRepositoryType> getRepositoryTypes() { - Map<String, ResultRepositoryType> result = Maps.newHashMap(); - for (ResultRepositoryType resultRepositoryType : serviceContext.getResultRepositoryTypes()) { - result.put(resultRepositoryType.getId(), resultRepositoryType); - } - return result; - } - - public void resetRepositories() { - this.repositories = null; - } - - public CoserResult getUniqueResult(CoserRequest request) throws DuplicatedResultException { - - Preconditions.checkArgument(request.isFilled()); - - ResultRepositoryCommandEngine repository = getMatchingRepository(request); - - if (repository == null) { - throw new NoResultRepositoryFoundException("No result repository matching request", request); - } - CoserResult result = repository.executeRequest(request); - if (result == null) { - throw new NoResultFoundException(repository.getResultRepository().getId(), request); - } - return result; - } - - public List<CoserResult> getMultipleResult(CoserRequest request) throws DuplicatedResultException { - - Preconditions.checkArgument(request.isFilled()); - - List<CoserResult> result = Lists.newArrayList(); - for (ResultRepositoryCommandEngine repository : getRepositories()) { - if (repository.acceptRequest(request)) { - - CoserResult repositoryResult = repository.executeRequest(request); - result.add(repositoryResult); - } - } - return result; - } - - protected ResultRepositoryCommandEngine getMatchingRepository(CoserRequest request) throws DuplicatedResultException { - - List<ResultRepositoryCommandEngine> repositoryList = Lists.newArrayList(); - - for (ResultRepositoryCommandEngine resultRepository : getRepositories()) { - - if (resultRepository.acceptRequest(request)) { - repositoryList.add(resultRepository); - } - } - - ResultRepositoryCommandEngine repository; - switch (repositoryList.size()) { - case 0: - repository = null; - break; - case 1: - repository = repositoryList.get(0); - break; - default: - throw new DuplicatedResultException( - repositoryList.toArray(new ResultRepository[repositoryList.size()])); - } - return repository; - } - - protected Set<ResultRepositoryCommandEngine> getRepositories() { - if (repositories == null) { - Set<String> ids = Sets.newHashSet(); - repositories = Sets.newHashSet(); - for (ResultRepositoryProvider repositoryProvider : serviceContext.getResultRepositoryProviders()) { - Set<ResultRepository> resultRepositories = repositoryProvider.loadRepositories(serviceContext); - - // check all repository use a unique id - for (ResultRepository resultRepository : resultRepositories) { - String id = resultRepository.getId(); - if (log.isDebugEnabled()) { - log.debug("Try to register result Repository: " + id); - } - if (!ids.add(id)) { - - // there is already a repository with this id - throw new ResultRepositoryInitializationException(repositoryProvider, "Duplicate result repository with id: " + id, null); - } - ResultRepositoryCommandEngine repositoryCommandEngine = repositoryProvider.newEngine(resultRepository); - repositories.add(repositoryCommandEngine); - } - } - if (log.isInfoEnabled()) { - log.info("Found " + repositories.size() + " result repository(ies)."); - } - } - return repositories; - } -} Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/DefaultCoserRequestContext.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/DefaultCoserRequestContext.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/DefaultCoserRequestContext.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,104 @@ +package fr.ifremer.coser.result; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import fr.ifremer.coser.CoserApplicationContext; +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.util.Charts; +import fr.ifremer.coser.result.util.Extracts; +import fr.ifremer.coser.result.util.Reports; + +import java.io.File; +import java.io.IOException; +import java.util.Locale; + +/** + * Created on 3/14/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class DefaultCoserRequestContext implements CoserRequestContext { + + protected final CoserApplicationContext applicationContext; + + protected final Locale locale; + + protected File temporaryDirectory; + + public DefaultCoserRequestContext(CoserApplicationContext applicationContext, Locale locale) { + this.applicationContext = applicationContext; + this.locale = locale; + } + + @Override + public Locale getLocale() { + return locale; + } + + @Override + public IndicatorMap getIndicatorMap() { + return applicationContext.getIndicatorMap(); + } + + @Override + public ZoneMap getZoneMap() { + return applicationContext.getZoneMap(); + } + + @Override + public Reports getReports() { + return applicationContext.getReports(); + } + + @Override + public Charts getCharts() { + return applicationContext.getCharts(); + } + + @Override + public Extracts getExtracts() { + return applicationContext.getExtracts(); + } + + @Override + public CoserBusinessConfig getConfig() { + return applicationContext.getConfig(); + } + + @Override + public File getTemporaryDirectory() { + if (temporaryDirectory == null) { + try { + temporaryDirectory = File.createTempFile("coser-", ""); + } catch (IOException e) { + throw new CoserTechnicalException("Could not create temporary directory.", e); + } + } + return temporaryDirectory; + } + +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/DefaultCoserRequestContext.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/FileResult.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/FileResult.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/FileResult.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,74 +0,0 @@ -package fr.ifremer.coser.result; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import fr.ifremer.coser.CoserTechnicalException; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.InputStream; - -/** - * A result with only one file. - * <p/> - * A useful method is offered to obtain directly a {@link InputStream} from the result file ({@link #getInputStream()}). - * <p/> - * Created on 3/4/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class FileResult implements CoserResult { - - private static final long serialVersionUID = 1L; - - protected final String source; - - protected final File file; - - public FileResult(String source, File file) { - this.file = file; - this.source = source; - } - - @Override - public String getSource() { - return source; - } - - @Override - public File getResult() { - return file; - } - - public InputStream getInputStream() { - try { - InputStream inputStream = new FileInputStream(file); - return inputStream; - } catch (FileNotFoundException e) { - // should never happen ? - throw new CoserTechnicalException("Could not find file: " + file, e); - } - } -} Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/MapResult.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/MapResult.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/MapResult.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,56 +0,0 @@ -package fr.ifremer.coser.result; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import java.util.Map; - -/** - * Created on 3/12/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class MapResult implements CoserResult { - - private static final long serialVersionUID = 1L; - - protected final String source; - - protected final Map<String, String> map; - - public MapResult(String source, Map<String, String> map) { - this.map = map; - this.source = source; - } - - @Override - public String getSource() { - return source; - } - - @Override - public Map<String, String> getResult() { - return map; - } - -} \ No newline at end of file Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/Reports.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/Reports.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/Reports.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,465 +0,0 @@ -package fr.ifremer.coser.result; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; -import com.itextpdf.text.DocumentException; -import fr.ifremer.coser.CoserConstants; -import fr.ifremer.coser.CoserTechnicalException; -import fr.ifremer.coser.CoserUtils; -import fr.ifremer.coser.bean.IndicatorMap; -import fr.ifremer.coser.bean.Project; -import fr.ifremer.coser.bean.RSufiResult; -import fr.ifremer.coser.bean.RSufiResultPath; -import fr.ifremer.coser.bean.Selection; -import fr.ifremer.coser.bean.ZoneMap; -import fr.ifremer.coser.storage.DataStorage; -import fr.ifremer.coser.storage.DataStorages; -import freemarker.cache.ClassTemplateLoader; -import freemarker.ext.beans.BeansWrapper; -import freemarker.template.Configuration; -import freemarker.template.Template; -import freemarker.template.TemplateException; -import org.apache.commons.collections4.keyvalue.MultiKey; -import org.apache.commons.collections4.map.MultiKeyMap; -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.StringEscapeUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.i18n.I18n; -import org.w3c.dom.Document; -import org.xhtmlrenderer.pdf.ITextRenderer; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.io.StringWriter; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import java.util.SortedSet; -import java.util.TreeSet; - -import static org.nuiton.i18n.I18n.l; - -/** - * For reports generation. - * <p/> - * Created on 3/7/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class Reports { - - /** Logger. */ - private static final Log log = LogFactory.getLog(Reports.class); - - /** Freemarker. */ - protected Configuration freemarkerConfiguration; - - public Reports() { - - freemarkerConfiguration = new Configuration(); - - // needed to overwrite "Defaults to default system encoding." - // fix encoding issue on some systems - freemarkerConfiguration.setEncoding(Locale.getDefault(), "UTF-8"); - - // specific template loader to get template from jars (classpath) - ClassTemplateLoader templateLoader = new ClassTemplateLoader(Reports.class, "/ftl"); - freemarkerConfiguration.setTemplateLoader(templateLoader); - - // pour les maps dans les template (entre autre) - freemarkerConfiguration.setObjectWrapper(new BeansWrapper()); - } - - public String getDechargeFilename(Locale locale) { - Preconditions.checkNotNull(locale); - String filename = I18n.l(locale, "coser.business.dataDisclaimer.filename"); -// if (locale != null && "fr".equals(locale.getLanguage())) { -// filename = "DechargeDonnees.pdf"; -// } else if (locale != null && "es".equals(locale.getLanguage())) { -// filename = "DatosDeExencionDeResponsabilidad.pdf"; -// } else { -// filename = "DataDisclaimer.pdf"; -// } - return filename; - } - - public String getYearChartTitle(Locale locale) { - Preconditions.checkNotNull(locale); - String yearAxis = I18n.l(locale, "coser.business.year"); -// String yearAxis = "Year"; -// if ("fr".equals(locale.getLanguage())) { -// yearAxis = "Ann\u00E9e"; -// } else if ("es".equals(locale.getLanguage())) { -// yearAxis = "A\u00F1o"; -// } - return yearAxis; - } - - /** - * Genere le fichier PDF d'information sur les espèces incluses dans les - * calculs des indicateurs de communautés, à jointe à chaque téléchargement. - * - * @param path path to result - * @param resultDirectory result directory - * @param locale locale - * @param indicatorLocalizedMap localized indicator map - * @return generated pdf file - */ - public File generateMetaFilePDF(RSufiResultPath path, - File resultDirectory, - Locale locale, - IndicatorMap indicatorLocalizedMap) { - - Project project = path.getProject(); - Selection selection = path.getSelection(); - RSufiResult rsufiResult = path.getRsufiResult(); - - File result = null; - - // chargement du reftax et des code types especes pour connaitre - // le type des especes de poissons - // parcourt du fichier des types de données - Map<String, Integer> refTaxSpeciesNumSys = new HashMap<String, Integer>(); - Map<String, String> refTaxSpeciesName = new HashMap<String, String>(); - Iterator<String[]> itReftax = project.getRefTaxSpecies().iterator(true); - while (itReftax.hasNext()) { - String[] tuple = itReftax.next(); - // "C_Perm","NumSys","NivSys","C_VALIDE","L_VALIDE","AA_VALIDE","C_TxP\u00E8re","Taxa" - String speciesCode = tuple[3]; - Integer iNumSys = Integer.valueOf(tuple[1]); - refTaxSpeciesNumSys.put(speciesCode, iNumSys); - - // fix html entities bug - String speciesSciName = StringEscapeUtils.escapeXml(tuple[4]); - String speciesAuthor = StringEscapeUtils.escapeXml(tuple[5]); - - // TODO little hack for italic species - refTaxSpeciesName.put(speciesCode, "<span style='font-style:italic'>" + speciesSciName + "</span> " + speciesAuthor); - } - - // code type / especes - Map<String, Integer[]> specyTypes = new HashMap<String, Integer[]>(); - Iterator<String[]> itTypeSpecies = project.getTypeEspeces().iterator(true); - while (itTypeSpecies.hasNext()) { - // "Types";"Commentaire";"NumSys min";"NumSys max","Code" - String[] tuple = itTypeSpecies.next(); - String specyTypeCode = tuple[4]; - - Integer iMinNumSys = Integer.valueOf(tuple[2]); - Integer iMaxNumSys = Integer.valueOf(tuple[3]); - specyTypes.put(specyTypeCode, new Integer[]{iMinNumSys, iMaxNumSys}); - } - - // le fichier estpopind - File estComIndFile = new File(resultDirectory, rsufiResult.getEstComIndName()); - - // donnees intermediare (map liste id > liste des indicateurs) - Map<String, SortedSet<String>> indicatorMap = new HashMap<String, SortedSet<String>>(); - - // le resutat sera une map complexe - // map liste id > liste des especes (nom complet) - Map<String, SortedSet<String>> speciesMap = new HashMap<String, SortedSet<String>>(); - - // Campagne Indicateur Liste Strate Annee Estimation EcartType CV - DataStorage dataStorage = DataStorages.load(estComIndFile, CoserConstants.CSV_RESULT_SEPARATOR_CHAR); - Iterator<String[]> estComIndIterator = dataStorage.iterator(true); - while (estComIndIterator.hasNext()) { - String[] tuple = estComIndIterator.next(); - - String indicatorCode = tuple[1]; - String listIdCode = tuple[2]; // c1, p2, T3 ... - - String listNumber = listIdCode.substring(1); // 1, 2, 3 - - // get indicator list - SortedSet<String> indicatorList = indicatorMap.get(listNumber); - if (indicatorList == null) { - indicatorList = new TreeSet<String>(); - indicatorMap.put(listNumber, indicatorList); - } - - // get indicator full name - String indicatorName = indicatorLocalizedMap.getIndicatorValue(indicatorCode, locale.getLanguage()); - // peut arriver pour les indicateurs inconnu par coser - if (indicatorName != null) { - indicatorList.add(indicatorName); - } - } - - // seconde pass, remplit la map speciesMap avec les listes configurées - // dans la selection - for (String listNumber : indicatorMap.keySet()) { - List<String> selectionSpeciesList = null; - if ("1".equals(listNumber)) { - selectionSpeciesList = selection.getSelectedSpecies(); - } else if ("2".equals(listNumber)) { - selectionSpeciesList = selection.getSelectedSpeciesOccDens(); - } else if ("3".equals(listNumber)) { - selectionSpeciesList = selection.getSelectedSpeciesSizeAllYear(); - } else if ("4".equals(listNumber)) { - selectionSpeciesList = selection.getSelectedSpeciesMaturity(); - } - - if (selectionSpeciesList != null) { - SortedSet<String> speciesList = new TreeSet<String>(); - - for (String speciesCode : selectionSpeciesList) { - // get species full name - String speciesName = refTaxSpeciesName.get(speciesCode); - - // recupere le code type de l'espece, "m", "c", "p" ... - Integer speciesNumSys = refTaxSpeciesNumSys.get(speciesCode); - for (Map.Entry<String, Integer[]> speciesTypeEntry : specyTypes.entrySet()) { - String speciesTypeCode = speciesTypeEntry.getKey(); - Integer[] bound = speciesTypeEntry.getValue(); - - if (speciesNumSys >= bound[0] && speciesNumSys <= bound[1]) { - speciesName = "(" + speciesTypeCode + ") " + speciesName; - break; - } - } - // end code type espece - - speciesList.add(speciesName); - } - speciesMap.put(listNumber, speciesList); - } else { - if (log.isWarnEnabled()) { - log.warn("Can't get species list for list id " + listNumber); - } - } - } - - OutputStream os = null; - try { - // render freemarker template - Template mapTemplate = freemarkerConfiguration.getTemplate("metainfo.ftl", locale); - - Map<String, Object> root = new HashMap<String, Object>(); - root.put("indicatorsMap", indicatorMap); - root.put("speciesMap", speciesMap); - - Writer out = new StringWriter(); - mapTemplate.process(root, out); - out.flush(); - - // get content as w3c document - Document document = CoserUtils.parseDocument(out.toString()); - - // render template output as pdf - result = File.createTempFile("coser-metainfo-", ".pdf"); - result.deleteOnExit(); - os = new FileOutputStream(result); - - ITextRenderer renderer = new ITextRenderer(); - renderer.setDocument(document, null); - renderer.layout(); - renderer.createPDF(os); - - os.close(); - } catch (IOException ex) { - throw new CoserTechnicalException("Can't generate meta info file", ex); - } catch (TemplateException ex) { - throw new CoserTechnicalException("Can't generate meta info file", ex); - } catch (DocumentException ex) { - throw new CoserTechnicalException("Can't generate meta info file", ex); - } finally { - IOUtils.closeQuietly(os); - } - - return result; - } - - /** - * Genere le PDF dynamique de decharge à partir du template freemarker. - * - * @param disclamerPdf pdf file to generate - * @param locale generated pdf locale - */ - public void generateDechargePDF(File disclamerPdf, Locale locale, Date updateDate, String surveyName) { - - OutputStream os = null; - - try { - // get some info to put into pdf -// Date updateDate = getLastDataUpdateDate(); - -// // il se peut que pour l'extraction un fichier de décharge ne soit -// // pas généré pour une campagne en particulier -// // on passe un nom vide a freemarker -// String surveyName = ""; -// if (resultDirectory != null && rSufiResult != null) { -// surveyName = projectService.getProjectSurveyName(resultDirectory, rSufiResult); -// } - - // render freemarker template - Template mapTemplate = freemarkerConfiguration.getTemplate("decharge.ftl", locale); - - Map<String, Object> root = new HashMap<String, Object>(); - root.put("updateDate", updateDate); - root.put("surveyName", surveyName); - - Writer out = new StringWriter(); - mapTemplate.process(root, out); - out.flush(); - - // get content as w3c document - Document document = CoserUtils.parseDocument(out.toString()); - - // render template output as pdf - os = new FileOutputStream(disclamerPdf); - - ITextRenderer renderer = new ITextRenderer(); - renderer.setDocument(document, null); - renderer.layout(); - renderer.createPDF(os); - - os.close(); - } catch (IOException ex) { - throw new CoserTechnicalException("Can't generate decharge file", ex); - } catch (TemplateException ex) { - throw new CoserTechnicalException("Can't generate decharge file", ex); - } catch (DocumentException ex) { - throw new CoserTechnicalException("Can't generate decharge file", ex); - } finally { - IOUtils.closeQuietly(os); - } - } - - /** - * Generate pdf file filled with maps and charts. - * - * @param directory directory to generate pdf to - * @param zones zones ids - * @param pdfMaps pdf maps (can be {@code null}) - * @param pdfCharts pdf charts (can be {@code null}) - * @param zoneMap zoneMap (to get zone fullnames) - * @param locale locale to use for translations - */ - public void generateExtractPDF(File directory, - List<String> zones, - MultiKeyMap pdfMaps, - MultiKeyMap pdfCharts, - ZoneMap zoneMap, - Locale locale) { - - for (String zone : zones) { - Collection<File> toDelete = new ArrayList<File>(); - OutputStream os = null; - - try { - StringBuilder htmlContent = new StringBuilder(); - htmlContent.append("<html><head>"); - htmlContent.append("<title>").append(l(locale, "coser.business.extract.extracttitle")).append("</title>"); - htmlContent.append("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />"); - htmlContent.append("</head><body>"); - - if (pdfMaps != null) { - for (Map.Entry<MultiKey, File> mapEntry : (Set<Map.Entry<MultiKey, File>>) pdfMaps.entrySet()) { - String zoneId = (String) mapEntry.getKey().getKey(0); - if (zoneId.equals(zone)) { - String speciesName = (String) mapEntry.getKey().getKey(1); - File file = mapEntry.getValue(); - - String zoneName = zoneMap.getZoneFullName(zoneId); - htmlContent.append("<div style='page-break-after: always'>"); - htmlContent.append("<p>").append(zoneName).append(" - ").append(speciesName).append("</p>"); - htmlContent.append("<img src='file://").append(file.getAbsolutePath()).append("' />"); - htmlContent.append("</div>"); - } - } - } - - if (pdfCharts != null) { - for (Map.Entry<MultiKey, Object[]> chartFileAndData : (Set<Map.Entry<MultiKey, Object[]>>) pdfCharts.entrySet()) { - String zoneId = (String) chartFileAndData.getKey().getKey(0); - if (zoneId.equals(zone)) { - File chartFile = (File) chartFileAndData.getValue()[0]; - String content = (String) chartFileAndData.getValue()[1]; - - htmlContent.append("<div style='page-break-after: always'>"); - htmlContent.append("<img src='file://"); - htmlContent.append(chartFile.getAbsolutePath()); - htmlContent.append("' />"); - htmlContent.append("<br />"); - htmlContent.append(l(locale, "coser.business.extract.extractdata")).append(" :"); - htmlContent.append("<pre>").append(content).append("</pre>"); - htmlContent.append("</div>"); - - // les graphiques ont été générés, a supprimer donc - // a ne surtout pas faire avec les cartes !!! - toDelete.add(chartFile); - } - } - } - - htmlContent.append("</body></html>"); - - // get content as w3c document - Document document = CoserUtils.parseDocument(htmlContent.toString()); - - // render template output as pdf - // remove accents and strange characters from zone display name - String zoneDisplay = zoneMap.getZoneFullName(zone); - zoneDisplay = StringUtils.stripAccents(zoneDisplay); - zoneDisplay = zoneDisplay.replaceAll("[^\\w- ]", "_"); - File pdfFile = new File(directory, zoneDisplay + ".pdf"); - os = new FileOutputStream(pdfFile); - - ITextRenderer renderer = new ITextRenderer(); - renderer.setDocument(document, null); - renderer.layout(); - renderer.createPDF(os); - - os.close(); - } catch (IOException ex) { - throw new CoserTechnicalException("Can't generate log pdf", ex); - } catch (DocumentException ex) { - throw new CoserTechnicalException("Can't generate log pdf", ex); - } finally { - IOUtils.closeQuietly(os); - - - // delete file collection - for (File file : toDelete) { -// file.delete(); - FileUtils.deleteQuietly(file); - } - } - } - } -} Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/VoidResult.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/VoidResult.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/VoidResult.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,50 +0,0 @@ -package fr.ifremer.coser.result; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -/** - * Created on 3/12/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class VoidResult implements CoserResult { - - private static final long serialVersionUID = 1L; - - protected final String source; - - public VoidResult(String source) { - this.source = source; - } - - @Override - public String getSource() { - return source; - } - - @Override - public Void getResult() { - return null; - } -} Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepository.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepository.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepository.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,6 +22,8 @@ * #L% */ +import java.io.File; + /** * General contract of a repository of results in CoserWeb. * <p/> @@ -41,4 +43,23 @@ * @return the type of result repository */ ResultRepositoryType getResultRepositoryType(); + + /** + * @return base directory of the result repository + */ + File getBasedir(); + + String getProjectName(); + + String getZone(); + + String getSurveyName(); + + boolean isMapsResult(); + + boolean isIndicatorsResult(); + + boolean isDataResult(); + + boolean isPubliableResult(); } Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepositoryCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepositoryCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepositoryCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,50 +0,0 @@ -package fr.ifremer.coser.result.repository; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import fr.ifremer.coser.result.CoserRequest; -import fr.ifremer.coser.result.CoserResult; - -/** - * To execute a command on a result. - * <p/> - * Created on 3/11/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public interface ResultRepositoryCommand<Repo extends ResultRepository, Request extends CoserRequest> { - - Class<Request> getRequestType(); - - boolean accept(Repo repository, Request request); - - CoserResult execute(Repo repository, Request request); - -// Map<String, String> getAvailableZones(Repo repository, Request request); -// -// Map<String, String> getAvailableSpecies(Repo repository, Request request); -// -// Map<String, String> getAvailableIndicators(Repo repository, Request request); - -} Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepositoryCommandEngine.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepositoryCommandEngine.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepositoryCommandEngine.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,56 +0,0 @@ -package fr.ifremer.coser.result.repository; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import fr.ifremer.coser.result.CoserRequest; -import fr.ifremer.coser.result.CoserResult; - -/** - * To execute commands on a result repository. - * <p/> - * Created on 3/12/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public interface ResultRepositoryCommandEngine { - - ResultRepository getResultRepository(); - - /** - * @param request request to test - * @return {@code true} if this repository has some result for the given - * request, {@code false} otherwise - */ - <R extends CoserRequest> boolean acceptRequest(R request); - - /** - * Execute given request. - * <p/> - * We assume here that the repository has a result for the given request. - * - * @param request request to execute - * @return the result for the given request - */ - <R extends CoserRequest> CoserResult executeRequest(R request); -} Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepositoryProvider.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepositoryProvider.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepositoryProvider.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,26 +22,25 @@ * #L% */ -import fr.ifremer.coser.CoserServiceContext; -import fr.ifremer.coser.result.ResultRepositoryInitializationException; - import java.util.Set; /** - * Provides some {@link ResultRepository}. + * Provides some {@link ResultRepository} for a given type of result repository. * <p/> * Created on 3/5/14. * * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public interface ResultRepositoryProvider<R extends ResultRepository> { +public interface ResultRepositoryProvider<Repository extends ResultRepository> { /** - * @param serviceContext service context - * @return the set of provided result repositories. + * @return the type of result repository. */ - Set<R> loadRepositories(CoserServiceContext serviceContext) throws ResultRepositoryInitializationException; + ResultRepositoryType getRepositoryType(); - ResultRepositoryCommandEngine newEngine(R repository); + /** + * @return the set of provided result repositories. + */ + Set<Repository> loadRepositories(); } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepositoryType.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepositoryType.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/ResultRepositoryType.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,17 +22,19 @@ * #L% */ +import fr.ifremer.coser.result.CoserCommand; +import fr.ifremer.coser.result.CoserRequest; import fr.ifremer.coser.result.ResultType; import fr.ifremer.coser.result.request.GetAllResultsRequest; import java.io.Serializable; +import java.util.Map; import java.util.Set; /** * To define a new type of result repository. * <p/> - * This contract does nothing in special, but is just loaded by - * a service loader to know all possible result repositories type. + * <strong>Important Note:</strong> Each repository type must have a unique id ({@link #getId()}). * <p/> * Created on 3/11/14. * @@ -47,4 +49,6 @@ String getLabelKey(); Set<ResultType> getResultTypes(); + + Map<Class<? extends CoserRequest>, Class<? extends CoserCommand>> getCommandTypes(); } Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBasePredicates.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBasePredicates.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBasePredicates.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,137 @@ +package fr.ifremer.coser.result.repository.echobase; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Predicate; +import com.google.common.collect.Lists; + +import java.util.List; + +/** + * Created on 3/13/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class EchoBasePredicates { + + protected EchoBasePredicates() { + // avoid instances + } + + public static Predicate<String[]> communityIndicatorPredicate(String indicator) { + return new CommunityIndicatorPredicate(Lists.newArrayList(indicator)); + } + + public static Predicate<String[]> communityIndicatorPredicate(List<String> indicator) { + return new CommunityIndicatorPredicate(indicator); + } + + public static Predicate<String[]> communitySpeciesPredicate(String species) { + return new CommunitySpeciesPredicate(Lists.newArrayList(species)); + } + + public static Predicate<String[]> communitySpeciesPredicate(List<String> species) { + return new CommunitySpeciesPredicate(species); + } + + public static Predicate<String[]> populationSpeciesPredicate(String species) { + return new PopulationSpeciesPredicate(Lists.newArrayList(species)); + } + + public static Predicate<String[]> populationSpeciesPredicate(List<String> species) { + return new PopulationSpeciesPredicate(species); + } + + public static Predicate<String[]> populationIndicatorPredicate(String indicator) { + return new PopulationIndicatorPredicate(Lists.newArrayList(indicator)); + } + + public static Predicate<String[]> populationIndicatorPredicate(List<String> indicator) { + return new PopulationIndicatorPredicate(indicator); + } + + protected static class CommunitySpeciesPredicate implements Predicate<String[]> { + + private final List<String> species; + + CommunitySpeciesPredicate(List<String> species) { + this.species = species; + } + + @Override + public boolean apply(String[] input) { + String speciesCode = input[3]; + boolean result = species.contains(speciesCode); + return result; + } + } + + protected static class CommunityIndicatorPredicate implements Predicate<String[]> { + + private final List<String> indicator; + + CommunityIndicatorPredicate(List<String> indicator) { + this.indicator = indicator; + } + + @Override + public boolean apply(String[] input) { + String indicatorCode = input[1]; + boolean result = indicator.contains(indicatorCode); + return result; + } + } + + protected static class PopulationSpeciesPredicate implements Predicate<String[]> { + + private final List<String> species; + + PopulationSpeciesPredicate(List<String> species) { + this.species = species; + } + + @Override + public boolean apply(String[] input) { + String speciesCode = input[3]; + boolean result = species.contains(speciesCode); + return result; + } + } + + protected static class PopulationIndicatorPredicate implements Predicate<String[]> { + + private final List<String> indicator; + + PopulationIndicatorPredicate(List<String> indicator) { + this.indicator = indicator; + } + + @Override + public boolean apply(String[] input) { + String indicatorCode = input[1]; + boolean result = indicator.contains(indicatorCode); + return result; + } + } +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBasePredicates.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepository.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepository.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepository.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -24,26 +24,29 @@ import com.google.common.base.Function; import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import fr.ifremer.coser.CoserServiceContext; import fr.ifremer.coser.bean.EchoBaseProject; -import fr.ifremer.coser.bean.IndicatorMap; import fr.ifremer.coser.bean.SpeciesMap; -import fr.ifremer.coser.bean.ZoneMap; -import fr.ifremer.coser.result.Reports; +import fr.ifremer.coser.result.ResultType; import fr.ifremer.coser.result.repository.ResultRepository; +import fr.ifremer.coser.result.request.CoserRequestExtractTypeListAware; import fr.ifremer.coser.result.request.CoserRequestFacadeAware; +import fr.ifremer.coser.result.request.CoserRequestRepositoryResultTypeAware; +import fr.ifremer.coser.result.request.CoserRequestRepositoryTypeAware; import fr.ifremer.coser.result.request.CoserRequestZoneAware; +import fr.ifremer.coser.result.request.CoserRequestZoneListAware; import fr.ifremer.coser.storage.DataStorage; import fr.ifremer.coser.storage.DataStorages; +import fr.ifremer.coser.util.DataType; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.io.File; import java.io.FilenameFilter; -import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -63,11 +66,6 @@ protected final EchoBaseProject project; /** - * Maps directory. - */ - protected final File mapsDirectory; - - /** * Transform a map result species file to the species code. */ protected final Function<File, String> mapFileToSpeciesCode; @@ -83,36 +81,27 @@ protected final FilenameFilter mapSpeciesFilenameFilter; /** - * Service context. - */ - protected final CoserServiceContext serviceContext; - - /** * Cache of species definition. */ protected SpeciesMap speciesMap; /** - * Report helper. + * Unique id of the result repository. */ - protected final Reports reports; + protected final String id; - public EchoBaseResultRepository(CoserServiceContext serviceContext, - EchoBaseProject project) { - Preconditions.checkNotNull(serviceContext); + public EchoBaseResultRepository(EchoBaseProject project) { Preconditions.checkNotNull(project); - this.serviceContext = serviceContext; this.project = project; - this.mapsDirectory = project.getMapsDirectory(); - this.reports = new Reports(); String surveyName = project.getSurveyName(); this.mapFileToSpeciesCode = EchoBaseProject.newMapFileToSpeciesCode(surveyName); this.speciesCodeToMapFile = EchoBaseProject.newSpeciesCodeToMapFileName(surveyName); this.mapSpeciesFilenameFilter = EchoBaseProject.newMapSpeciesFilenameFilter(surveyName); + this.id = EchoBaseResultRepositoryType.ID + "::" + project.getBasedir(); if (log.isInfoEnabled()) { - log.info("New result repository: " + getId()); + log.info("New result repository: " + id); } } @@ -122,7 +111,7 @@ @Override public String getId() { - return EchoBaseResultRepositoryType.ID + "::" + project.getBasedir(); + return id; } @Override @@ -130,99 +119,109 @@ return EchoBaseResultRepositoryType.INSTANCE; } + @Override public File getBasedir() { return project.getBasedir(); } - public EchoBaseProject getProject() { - return project; - } - + @Override public String getProjectName() { return project.getName(); } - public Reports getReports() { - return reports; - } - + @Override public String getSurveyName() { return project.getSurveyName(); } + @Override public String getZone() { return project.getZoneName(); } + @Override public boolean isMapsResult() { return true; } + @Override public boolean isIndicatorsResult() { return true; } + @Override + public boolean isDataResult() { + //FIXME + return false; + } + + @Override public boolean isPubliableResult() { return project.isPubliableResult(); } + public EchoBaseProject getProject() { + return project; + } + // --------------------------------------------------------------------- // // --- Matchers -------------------------------------------------------- // // --------------------------------------------------------------------- // public boolean matchFacade(CoserRequestFacadeAware request) { - return project.getFacadeName().equals(request.getFacade()); + return getProject().getFacadeName().equals(request.getFacade()); } public boolean matchZone(CoserRequestZoneAware request) { - return project.getZoneName().equals(request.getZone()); + return getZone().equals(request.getZone()); } - public boolean matchIndicatorSpecies(String[] tuple, String species) { - String speciesCode = tuple[3]; - boolean result = species.equals(speciesCode); + public boolean matchZone(CoserRequestZoneListAware request) { + List<String> zoneList = request.getZoneList(); + boolean result = zoneList.contains(getZone()); return result; } - public boolean matchIndicatorIndicator(String[] tuple, String indicator) { - String indicatorCode = tuple[1]; - boolean result = indicator.equals(indicatorCode); + public boolean matchRepositoryType(CoserRequestRepositoryTypeAware request) { + boolean result = request.getRepositoryType().equals(EchoBaseResultRepositoryType.ID); return result; } - public boolean matchIndicatorSpeciesAndIndicator(String[] tuple, - String species, - String indicator) { - String speciesCode = tuple[3]; - String indicatorCode = tuple[1]; - boolean result = species.equals(speciesCode) && - indicator.equals(indicatorCode); + public boolean matchResultType(CoserRequestRepositoryResultTypeAware request) { + ResultType resultType = request.getResultType(); + boolean result = ResultType.MAP_AND_INDICATOR == resultType; return result; } - public boolean matchCommunityIndicatorAndSpeciesList(String[] tuple, - String indicator, - String speciesList) { - String indicatorCode = tuple[1]; - String speciesListCode = tuple[2]; - boolean result = indicator.equals(indicatorCode) && - speciesList.equals(speciesListCode); + public boolean matchExtractTypeList(CoserRequestExtractTypeListAware request) { + boolean result = false; + if (isMapsResult()) { + result = request.getExtractTypeList().contains(DataType.SOURCE); + } else if (isIndicatorsResult()) { + result = request.getExtractTypeList().contains(DataType.POPULATION) || + request.getExtractTypeList().contains(DataType.COMMUNITY); + } + if (isDataResult()) { + result |= request.getExtractTypeList().contains(DataType.SOURCE); + } return result; } - public boolean matchIndicatorList(String[] tuple, List<String> indicatorList) { - String indicatorCode = tuple[1]; - boolean result = indicatorList.contains(indicatorCode); + public boolean matchCommunity(Predicate<String[]> predicate) { + Preconditions.checkNotNull(predicate); + + DataStorage storage = getCommunityIndicatorStorage(); + boolean result = DataStorages.match(storage, predicate, true); + return result; } - public boolean matchIndicatorListAndSpeciesList(String[] tuple, - List<String> indicatorList, - List<String> speciesList) { - String indicatorCode = tuple[1]; - String speciesCode = tuple[3]; - boolean result = indicatorList.contains(indicatorCode) && - speciesList.contains(speciesCode); + public boolean matchPopulation(Predicate<String[]> predicate) { + Preconditions.checkNotNull(predicate); + + DataStorage storage = getPopulationIndicatorStorage(); + boolean result = DataStorages.match(storage, predicate, true); + return result; } @@ -232,99 +231,22 @@ public File getMapSpeciesFile(String species) { String fileName = speciesCodeToMapFile.apply(species); - File file = fileName == null ? null : new File(mapsDirectory, fileName); + File file = fileName == null ? null : new File(project.getMapsDirectory(), fileName); return file; } - // --------------------------------------------------------------------- // - // --- Get species lists ----------------------------------------------- // - // --------------------------------------------------------------------- // - - public Set<String> getMapSpecies() { - Set<String> result = Sets.newHashSet(); + public Map<String, String> getMapSpecies() { + Set<String> speciesList = Sets.newHashSet(); File[] files = project.getMapsDirectory().listFiles(mapSpeciesFilenameFilter); if (files != null) { List<String> transform = Lists.transform(Lists.newArrayList(files), mapFileToSpeciesCode); - result.addAll(transform); + speciesList.addAll(transform); } + Map<String, String> result = getSpeciesMap().getSpeciesSubMap(speciesList); return result; } - public Set<String> getPopulationIndicatorSpecies() { - Set<String> result = Sets.newHashSet(); - Iterator<String[]> iterator = loadPopulationIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - String speciesCode = tuple[3]; - result.add(speciesCode); - } - return result; - } - - public Set<String> getCommunityIndicatorSpecies() { - Iterator<String[]> iterator = loadCommunityIndicatorStorage(true); - Set<String> result = Sets.newHashSet(); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - String speciesCode = tuple[2]; - result.add(speciesCode); - } - return result; - } - - public Set<String> getCommunityIndicatorSpecies(String indicator) { - Iterator<String[]> iterator = loadCommunityIndicatorStorage(true); - Set<String> result = Sets.newHashSet(); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (matchIndicatorIndicator(tuple, indicator)) { - String speciesCode = tuple[2]; - result.add(speciesCode); - } - } - return result; - } - // --------------------------------------------------------------------- // - // --- Get indicator lists --------------------------------------------- // - // --------------------------------------------------------------------- // - - public Set<String> getCommunityIndicators() { - Iterator<String[]> iterator = loadCommunityIndicatorStorage(true); - Set<String> result = Sets.newHashSet(); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - String indicatorCode = tuple[1]; - result.add(indicatorCode); - } - return result; - } - - public Set<String> getPopulationIndicators() { - Iterator<String[]> iterator = loadPopulationIndicatorStorage(true); - Set<String> result = Sets.newHashSet(); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - String indicatorCode = tuple[1]; - result.add(indicatorCode); - } - return result; - } - - protected Set<String> getPopulationIndicators(String species) { - Iterator<String[]> iterator = loadPopulationIndicatorStorage(true); - Set<String> result = Sets.newHashSet(); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (matchIndicatorSpecies(tuple, species)) { - String indicatorCode = tuple[1]; - result.add(indicatorCode); - } - } - return result; - } - - // --------------------------------------------------------------------- // // --- Get definition maps --------------------------------------------- // // --------------------------------------------------------------------- // @@ -336,32 +258,22 @@ return speciesMap; } - public IndicatorMap getIndicatorsMap() { - return serviceContext.getIndicatorsMap(); - } - - public ZoneMap getZonesMap() { - return serviceContext.getZonesMap(); - } - // --------------------------------------------------------------------- // - // --- storage util methods -------------------------------------------- // + // --- storage methods ------------------------------------------------- // // --------------------------------------------------------------------- // - public Iterator<String[]> loadPopulationIndicatorStorage(boolean skipFirstLine) { + public DataStorage getPopulationIndicatorStorage() { File file = project.getPopulationIndicatorsFile(); // Campagne Indicateur Liste Espece Strate Annee Estimation EcartType CV - DataStorage dataStorage = DataStorages.load(file); - Iterator<String[]> iterator = dataStorage.iterator(skipFirstLine); - return iterator; + DataStorage result = DataStorages.load(file); + return result; } - public Iterator<String[]> loadCommunityIndicatorStorage(boolean skipFirstLine) { + public DataStorage getCommunityIndicatorStorage() { File file = project.getCommunityIndicatorsFile(); // Campagne Indicateur Liste Espece Strate Annee Estimation EcartType CV - DataStorage dataStorage = DataStorages.load(file); - Iterator<String[]> iterator = dataStorage.iterator(skipFirstLine); - return iterator; + DataStorage result = DataStorages.load(file); + return result; } } Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryCommandEngine.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryCommandEngine.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryCommandEngine.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,135 +0,0 @@ -package fr.ifremer.coser.result.repository.echobase; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; -import com.google.common.collect.Maps; -import fr.ifremer.coser.result.CoserRequest; -import fr.ifremer.coser.result.CoserResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.ResultRepositoryCommandEngine; -import fr.ifremer.coser.result.repository.echobase.command.DeleteResultsCommand; -import fr.ifremer.coser.result.repository.echobase.command.ExtractRawDataAndResultsCommand; -import fr.ifremer.coser.result.repository.echobase.command.ExtractRawDataCommand; -import fr.ifremer.coser.result.repository.echobase.command.GetAllResultsCommand; -import fr.ifremer.coser.result.repository.echobase.command.GetCommunityIndicatorResultCommand; -import fr.ifremer.coser.result.repository.echobase.command.GetIndicatorsForCommunityIndicatorResultCommand; -import fr.ifremer.coser.result.repository.echobase.command.GetIndicatorsForExtractRawDataAndResultsCommand; -import fr.ifremer.coser.result.repository.echobase.command.GetIndicatorsForPopulationIndicatorResultCommand; -import fr.ifremer.coser.result.repository.echobase.command.GetMapResultCommand; -import fr.ifremer.coser.result.repository.echobase.command.GetPopulationIndicatorResultCommand; -import fr.ifremer.coser.result.repository.echobase.command.GetSpeciesListForExtractRawDataAndResultsCommand; -import fr.ifremer.coser.result.repository.echobase.command.GetSpeciesForMapResultCommand; -import fr.ifremer.coser.result.repository.echobase.command.GetSpeciesForPopulationIndicatorResultCommand; -import fr.ifremer.coser.result.repository.echobase.command.GetSpeciesListForCommunityIndicatorResultCommand; -import fr.ifremer.coser.result.repository.echobase.command.GetZonesForCommunityIndicatorResultCommand; -import fr.ifremer.coser.result.repository.echobase.command.GetZonesForExtractRawDataAndResultsCommand; -import fr.ifremer.coser.result.repository.echobase.command.GetZonesForExtractRawDataCommand; -import fr.ifremer.coser.result.repository.echobase.command.GetZonesForMapResultCommand; -import fr.ifremer.coser.result.repository.echobase.command.GetZonesForPopulationIndicatorResultCommand; - -import java.util.Map; - -/** - * Created on 3/12/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class EchoBaseResultRepositoryCommandEngine implements ResultRepositoryCommandEngine { - - protected final EchoBaseResultRepository resultRepository; - - protected final Map<String, ResultRepositoryCommand<EchoBaseResultRepository, ?>> commands; - - public EchoBaseResultRepositoryCommandEngine(EchoBaseResultRepository resultRepository) { - this.resultRepository = resultRepository; - this.commands = Maps.newHashMap(); - - // get map result - loadCommand(new GetZonesForMapResultCommand()); - loadCommand(new GetSpeciesForMapResultCommand()); - loadCommand(new GetMapResultCommand()); - - // get community indicator result - loadCommand(new GetZonesForCommunityIndicatorResultCommand()); - loadCommand(new GetIndicatorsForCommunityIndicatorResultCommand()); - loadCommand(new GetSpeciesListForCommunityIndicatorResultCommand()); - loadCommand(new GetCommunityIndicatorResultCommand()); - - // get population indicator result - loadCommand(new GetZonesForPopulationIndicatorResultCommand()); - loadCommand(new GetSpeciesForPopulationIndicatorResultCommand()); - loadCommand(new GetIndicatorsForPopulationIndicatorResultCommand()); - loadCommand(new GetPopulationIndicatorResultCommand()); - - // get all results - loadCommand(new GetAllResultsCommand()); - - // extract raw data - loadCommand(new GetZonesForExtractRawDataCommand()); - loadCommand(new ExtractRawDataCommand()); - - // extract raw data and results - loadCommand(new GetZonesForExtractRawDataAndResultsCommand()); - loadCommand(new GetSpeciesListForExtractRawDataAndResultsCommand()); - loadCommand(new GetIndicatorsForExtractRawDataAndResultsCommand()); - loadCommand(new ExtractRawDataAndResultsCommand()); - - // delete results - loadCommand(new DeleteResultsCommand()); - } - - @Override - public EchoBaseResultRepository getResultRepository() { - return resultRepository; - } - - @Override - public <R extends CoserRequest> boolean acceptRequest(R request) { - - ResultRepositoryCommand<EchoBaseResultRepository, R> command = getCommand(request); - boolean result = command.accept(resultRepository, request); - return result; - } - - @Override - public <R extends CoserRequest> CoserResult executeRequest(R request) { - ResultRepositoryCommand<EchoBaseResultRepository, R> command = getCommand(request); - CoserResult result = command.execute(resultRepository, request); - return result; - } - - protected <R extends CoserRequest> ResultRepositoryCommand<EchoBaseResultRepository, R> getCommand(R request) { - Preconditions.checkNotNull(request); - String requestTypeName = request.getClass().getName(); - ResultRepositoryCommand<EchoBaseResultRepository, ?> resultRepositoryCommand = commands.get(requestTypeName); - Preconditions.checkNotNull(resultRepositoryCommand); - return (ResultRepositoryCommand<EchoBaseResultRepository, R>) resultRepositoryCommand; - } - - protected void loadCommand(ResultRepositoryCommand<EchoBaseResultRepository, ?> command) { - String name = command.getRequestType().getName(); - this.commands.put(name, command); - } -} Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryProvider.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryProvider.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryProvider.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -24,10 +24,8 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Sets; -import fr.ifremer.coser.CoserServiceContext; import fr.ifremer.coser.bean.EchoBaseProject; import fr.ifremer.coser.result.ResultRepositoryInitializationException; -import fr.ifremer.coser.result.repository.ResultRepositoryCommandEngine; import fr.ifremer.coser.result.repository.ResultRepositoryProvider; import org.apache.commons.io.filefilter.AbstractFileFilter; import org.apache.commons.io.filefilter.AndFileFilter; @@ -62,8 +60,13 @@ } @Override - public Set<EchoBaseResultRepository> loadRepositories(CoserServiceContext serviceContext) { + public EchoBaseResultRepositoryType getRepositoryType() { + return EchoBaseResultRepositoryType.INSTANCE; + } + @Override + public Set<EchoBaseResultRepository> loadRepositories() { + if (log.isInfoEnabled()) { log.info(String.format("Scan for projects from basedir: %s", basedir)); } @@ -93,7 +96,7 @@ } catch (IOException e) { throw new ResultRepositoryInitializationException(this, "Could not load project file", e); } - result.add(new EchoBaseResultRepository(serviceContext, project)); + result.add(new EchoBaseResultRepository(project)); } } if (log.isInfoEnabled()) { @@ -101,9 +104,4 @@ } return result; } - - @Override - public ResultRepositoryCommandEngine newEngine(EchoBaseResultRepository repository) { - return new EchoBaseResultRepositoryCommandEngine(repository); - } } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryType.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryType.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryType.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,10 +22,56 @@ * #L% */ +import com.google.common.collect.Maps; import com.google.common.collect.Sets; +import fr.ifremer.coser.result.CoserRequest; import fr.ifremer.coser.result.ResultType; +import fr.ifremer.coser.result.CoserCommand; import fr.ifremer.coser.result.repository.ResultRepositoryType; +import fr.ifremer.coser.result.repository.echobase.command.DeleteResultsCommand; +import fr.ifremer.coser.result.repository.echobase.command.ExtractRawDataAndResultsCommand; +import fr.ifremer.coser.result.repository.echobase.command.ExtractRawDataCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetAllResultsCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetCommunityIndicatorResultDataCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetCommunityIndicatorResultGraphCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetIndicatorsForCommunityIndicatorResultCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetIndicatorsForExtractRawDataAndResultsCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetIndicatorsForPopulationIndicatorResultCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetMapResultCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetPopulationIndicatorResultDataCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetPopulationIndicatorResultGraphCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetSpeciesForExtractRawDataAndResultsCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetSpeciesForMapResultCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetSpeciesForPopulationIndicatorResultCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetSpeciesListForCommunityIndicatorResultCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetZonesForCommunityIndicatorResultCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetZonesForExtractRawDataAndResultsCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetZonesForExtractRawDataCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetZonesForMapResultCommand; +import fr.ifremer.coser.result.repository.echobase.command.GetZonesForPopulationIndicatorResultCommand; +import fr.ifremer.coser.result.request.DeleteResultsRequest; +import fr.ifremer.coser.result.request.ExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.request.ExtractRawDataRequest; +import fr.ifremer.coser.result.request.GetAllResultsRequest; +import fr.ifremer.coser.result.request.GetCommunityIndicatorResultDataRequest; +import fr.ifremer.coser.result.request.GetCommunityIndicatorResultGraphRequest; +import fr.ifremer.coser.result.request.GetIndicatorsForCommunityIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetIndicatorsForExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.request.GetIndicatorsForPopulationIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetMapResultRequest; +import fr.ifremer.coser.result.request.GetPopulationIndicatorResultDataRequest; +import fr.ifremer.coser.result.request.GetPopulationIndicatorResultGraphRequest; +import fr.ifremer.coser.result.request.GetSpeciesForExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.request.GetSpeciesForMapResultRequest; +import fr.ifremer.coser.result.request.GetSpeciesForPopulationIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetSpeciesListForCommunityIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetZonesForCommunityIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetZonesForExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.request.GetZonesForExtractRawDataRequest; +import fr.ifremer.coser.result.request.GetZonesForMapResultRequest; +import fr.ifremer.coser.result.request.GetZonesForPopulationIndicatorResultRequest; +import java.util.Map; import java.util.Set; import static org.nuiton.i18n.I18n.n; @@ -62,4 +108,45 @@ return Sets.immutableEnumSet(ResultType.MAP_AND_INDICATOR); } + @Override + public Map<Class<? extends CoserRequest>, Class<? extends CoserCommand>> getCommandTypes() { + Map<Class<? extends CoserRequest>, Class<? extends CoserCommand>> result = Maps.newHashMap(); + + // get map result + result.put(GetZonesForMapResultRequest.class, GetZonesForMapResultCommand.class); + result.put(GetSpeciesForMapResultRequest.class, GetSpeciesForMapResultCommand.class); + result.put(GetMapResultRequest.class, GetMapResultCommand.class); + + // get community indicator result + result.put(GetZonesForCommunityIndicatorResultRequest.class, GetZonesForCommunityIndicatorResultCommand.class); + result.put(GetIndicatorsForCommunityIndicatorResultRequest.class, GetIndicatorsForCommunityIndicatorResultCommand.class); + result.put(GetSpeciesListForCommunityIndicatorResultRequest.class, GetSpeciesListForCommunityIndicatorResultCommand.class); + result.put(GetCommunityIndicatorResultDataRequest.class, GetCommunityIndicatorResultDataCommand.class); + result.put(GetCommunityIndicatorResultGraphRequest.class, GetCommunityIndicatorResultGraphCommand.class); + + // get population indicator result + result.put(GetZonesForPopulationIndicatorResultRequest.class, GetZonesForPopulationIndicatorResultCommand.class); + result.put(GetSpeciesForPopulationIndicatorResultRequest.class, GetSpeciesForPopulationIndicatorResultCommand.class); + result.put(GetIndicatorsForPopulationIndicatorResultRequest.class, GetIndicatorsForPopulationIndicatorResultCommand.class); + result.put(GetPopulationIndicatorResultDataRequest.class, GetPopulationIndicatorResultDataCommand.class); + result.put(GetPopulationIndicatorResultGraphRequest.class, GetPopulationIndicatorResultGraphCommand.class); + + // get all results + result.put(GetAllResultsRequest.class, GetAllResultsCommand.class); + + // extract raw data + result.put(GetZonesForExtractRawDataRequest.class, GetZonesForExtractRawDataCommand.class); + result.put(ExtractRawDataRequest.class, ExtractRawDataCommand.class); + + // extract raw data and results + result.put(GetZonesForExtractRawDataAndResultsRequest.class, GetZonesForExtractRawDataAndResultsCommand.class); + result.put(GetSpeciesForExtractRawDataAndResultsRequest.class, GetSpeciesForExtractRawDataAndResultsCommand.class); + result.put(GetIndicatorsForExtractRawDataAndResultsRequest.class, GetIndicatorsForExtractRawDataAndResultsCommand.class); + result.put(ExtractRawDataAndResultsRequest.class, ExtractRawDataAndResultsCommand.class); + + // delete results + result.put(DeleteResultsRequest.class, DeleteResultsCommand.class); + return result; + } + } Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/AbstractEchoBaseCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/AbstractEchoBaseCommand.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/AbstractEchoBaseCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,373 @@ +package fr.ifremer.coser.result.repository.echobase.command; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +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.bean.IndicatorMap; +import fr.ifremer.coser.bean.ZoneMap; +import fr.ifremer.coser.result.CoserCommand; +import fr.ifremer.coser.result.CoserRequest; +import fr.ifremer.coser.result.CoserRequestContext; +import fr.ifremer.coser.result.repository.echobase.EchoBasePredicates; +import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; +import fr.ifremer.coser.result.result.ExtractRawDataAndResultsResult; +import fr.ifremer.coser.result.result.FileResult; +import fr.ifremer.coser.result.result.MapResult; +import fr.ifremer.coser.result.result.VoidResult; +import fr.ifremer.coser.result.util.Charts; +import fr.ifremer.coser.result.util.Reports; +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.lang3.tuple.Pair; +import org.jfree.chart.JFreeChart; + +import java.io.File; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +import static org.nuiton.i18n.I18n.l; + +/** + * Created on 3/11/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public abstract class AbstractEchoBaseCommand<R extends CoserRequest> implements CoserCommand<EchoBaseResultRepository, R> { + + protected CoserRequestContext context; + + protected EchoBaseResultRepository repository; + + @Override + public void setRequestContext(CoserRequestContext context) { + this.context = context; + } + + @Override + public void setRepository(EchoBaseResultRepository repository) { + this.repository = repository; + } + + // --------------------------------------------------------------------- // + // --- Context shortcuts method ---------------------------------------- // + // --------------------------------------------------------------------- // + + public IndicatorMap getIndicatorsMap() { + return context.getIndicatorMap(); + } + + public ZoneMap getZonesMap() { + return context.getZoneMap(); + } + + public Reports getReports() { + return context.getReports(); + } + + public Charts getCharts() { + return context.getCharts(); + } + + public Locale getLocale() { + return context.getLocale(); + } + + // --------------------------------------------------------------------- // + // --- To create results ----------------------------------------------- // + // --------------------------------------------------------------------- // + + protected MapResult newMapResult(Map<String, String> map) { + MapResult result = new MapResult(repository.getId(), map); + return result; + } + + protected FileResult newFileResult(File file) { + FileResult result = new FileResult(repository.getId(), file); + return result; + } + + protected VoidResult newVoidResult() { + VoidResult result = new VoidResult(repository.getId()); + return result; + } + + protected ExtractRawDataAndResultsResult newExtractRawDataAndResultsResult(MultiKeyMap<String, File> pdfMaps, Map<String, Pair<File, String>> pdfCharts) { + ExtractRawDataAndResultsResult result = new ExtractRawDataAndResultsResult( + repository.getId(), pdfMaps, pdfCharts); + return result; + } + + // --------------------------------------------------------------------- // + // --- Get species lists ----------------------------------------------- // + // --------------------------------------------------------------------- // + + protected Set<String> getPopulationSpecies() { + final Set<String> result = Sets.newHashSet(); + + DataStorageWalker walker = new DataStorageWalker() { + @Override + public void onRow(String... tuple) { + String speciesCode = tuple[3]; + result.add(speciesCode); + } + }; + walkOnPopulation(walker); + return result; + } + + protected Map<String, String> getPopulationSpeciesMap() { + final Set<String> speciesList = Sets.newHashSet(); + + DataStorageWalker walker = new DataStorageWalker() { + @Override + public void onRow(String... tuple) { + String speciesCode = tuple[3]; + speciesList.add(speciesCode); + } + }; + walkOnPopulation(walker); + Map<String, String> result = repository.getSpeciesMap().getSpeciesSubMap(speciesList); + return result; + } + + protected Map<String, String> getCommunitySpeciesMap() { + final Set<String> speciesList = Sets.newHashSet(); + + DataStorageWalker walker = new DataStorageWalker() { + @Override + public void onRow(String... tuple) { + String speciesCode = tuple[3]; + speciesList.add(speciesCode); + } + }; + walkOnCommunity(walker); + Map<String, String> result = repository.getSpeciesMap().getSpeciesSubMap(speciesList); + return result; + } + + // --------------------------------------------------------------------- // + // --- Get indicator lists --------------------------------------------- // + // --------------------------------------------------------------------- // + + protected Set<String> getCommunityIndicators() { + final Set<String> result = Sets.newHashSet(); + + DataStorageWalker walker = new DataStorageWalker() { + @Override + public void onRow(String... tuple) { + String indicatorCode = tuple[1]; + result.add(indicatorCode); + } + }; + walkOnCommunity(walker); + return result; + } + + protected Set<String> getPopulationIndicators() { + final Set<String> result = Sets.newHashSet(); + + DataStorageWalker walker = new DataStorageWalker() { + @Override + public void onRow(String... tuple) { + String indicatorCode = tuple[1]; + result.add(indicatorCode); + } + }; + walkOnPopulation(walker); + return result; + } + + protected Set<String> getPopulationIndicators(String species) { + Preconditions.checkNotNull(species); + + final Set<String> result = Sets.newHashSet(); + + DataStorageWalker walker = new DataStorageWalker() { + @Override + public void onRow(String... tuple) { + String indicatorCode = tuple[1]; + result.add(indicatorCode); + } + }; + walkOnPopulation(EchoBasePredicates.populationSpeciesPredicate(species), walker); + return result; + } + + // --------------------------------------------------------------------- // + // --- Walk on indicators ---------------------------------------------- // + // --------------------------------------------------------------------- // + + protected void walkOnCommunity(DataStorageWalker walker) { + Preconditions.checkNotNull(walker); + + DataStorage storage = repository.getCommunityIndicatorStorage(); + DataStorages.walk(storage, walker); + } + + protected void walkOnCommunity(Predicate<String[]> predicate, DataStorageWalker walker) { + Preconditions.checkNotNull(walker); + Preconditions.checkNotNull(predicate); + + DataStorage storage = repository.getCommunityIndicatorStorage(); + DataStorages.walk(storage, predicate, walker); + } + + protected void walkOnPopulation(DataStorageWalker walker) { + Preconditions.checkNotNull(walker); + + DataStorage storage = repository.getPopulationIndicatorStorage(); + DataStorages.walk(storage, walker); + } + + protected void walkOnPopulation(Predicate<String[]> predicate, DataStorageWalker walker) { + Preconditions.checkNotNull(walker); + Preconditions.checkNotNull(predicate); + + DataStorage storage = repository.getPopulationIndicatorStorage(); + DataStorages.walk(storage, predicate, walker); + } + + // --------------------------------------------------------------------- // + // --- Extract indicator data ------------------------------------------ // + // --------------------------------------------------------------------- // + + protected DataStorage extractCommunity(Predicate<String[]> predicate) { + Preconditions.checkNotNull(predicate); + + String headerList = l(getLocale(), "coser.business.echobase.community.header"); + String header[] = headerList.split("\\s*,\\s*"); + + DataStorage source = repository.getCommunityIndicatorStorage(); + DataStorage result = DataStorages.sub(source, predicate, header); + return result; + } + + protected DataStorage extractPopulation(Predicate<String[]> predicate) { + Preconditions.checkNotNull(predicate); + + String headerList = l(getLocale(), "coser.business.echobase.population.header"); + String header[] = headerList.split("\\s*,\\s*"); + + DataStorage source = repository.getPopulationIndicatorStorage(); + DataStorage result = DataStorages.sub(source, predicate, header); + return result; + } + + // --------------------------------------------------------------------- // + // --- Generate indicator charts --------------------------------------- // + // --------------------------------------------------------------------- // + + protected JFreeChart generateCommunityChart(String zone, + String indicator, + String species) { + + Predicate<String[]> predicate = Predicates.and( + EchoBasePredicates.communityIndicatorPredicate(indicator), + EchoBasePredicates.communitySpeciesPredicate(species)); + + Charts.ExtractGraphDataWalker walker = new Charts.ExtractGraphDataWalker() { + + @Override + protected String getEstimationData(String... tuple) { + return tuple[5]; + } + + @Override + protected String getEcartData(String... tuple) { + return tuple[6]; + } + + @Override + protected String getYearData(String... tuple) { + return tuple[4]; + } + }; + walkOnCommunity(predicate, walker); + + Locale locale = getLocale(); + + // get graph title + String zoneDisplayName = getZonesMap().getZoneFullName(zone); + String indicatorName = getIndicatorsMap().getIndicatorValue(locale, indicator); + String speciesListName = repository.getSpeciesMap().getSpeciesName(species); + String chartTitle = zoneDisplayName + " - " + indicatorName + " - " + speciesListName; + + JFreeChart chart = getCharts().generateCommunityChart(locale, + walker, + getIndicatorsMap(), + indicator, + chartTitle); + return chart; + } + + protected JFreeChart generatePopulationChart(String zone, + String species, + String indicator) { + + // get data to put in graph + Predicate<String[]> predicate = Predicates.and( + EchoBasePredicates.populationSpeciesPredicate(species), + EchoBasePredicates.populationIndicatorPredicate(indicator)); + + Charts.ExtractGraphDataWalker walker = new Charts.ExtractGraphDataWalker() { + + @Override + protected String getEstimationData(String... tuple) { + return tuple[6]; + } + + @Override + protected String getEcartData(String... tuple) { + return tuple[7]; + } + + @Override + protected String getYearData(String... tuple) { + return tuple[5]; + } + }; + walkOnPopulation(predicate, walker); + + Locale locale = getLocale(); + + // get graph title + String zoneDisplayName = getZonesMap().getZoneFullName(zone); + String indicatorName = getIndicatorsMap().getIndicatorValue(locale, indicator); + String speciesName = repository.getSpeciesMap().getReportDisplayName(species); + String chartTitle = zoneDisplayName + " - " + indicatorName + " - " + speciesName; + + JFreeChart chart = getCharts().generatePopulationChart(locale, + walker, + getIndicatorsMap(), + indicator, + chartTitle); + return chart; + } +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/AbstractEchoBaseCommand.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/DeleteResultsCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/DeleteResultsCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/DeleteResultsCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -24,11 +24,6 @@ import fr.ifremer.coser.CoserTechnicalException; import fr.ifremer.coser.result.CoserResult; -import fr.ifremer.coser.result.ResultType; -import fr.ifremer.coser.result.VoidResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepositoryType; import fr.ifremer.coser.result.request.DeleteResultsRequest; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; @@ -36,7 +31,6 @@ import java.io.File; import java.io.IOException; -import java.util.List; /** * Created on 3/11/14. @@ -44,29 +38,22 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class DeleteResultsCommand implements ResultRepositoryCommand<EchoBaseResultRepository, DeleteResultsRequest> { +public class DeleteResultsCommand extends AbstractEchoBaseCommand<DeleteResultsRequest> { /** Logger. */ private static final Log log = LogFactory.getLog(DeleteResultsCommand.class); @Override - public Class<DeleteResultsRequest> getRequestType() { - return DeleteResultsRequest.class; - } - - @Override - public boolean accept(EchoBaseResultRepository repository, - DeleteResultsRequest request) { - boolean result = matchRepositoryType(request) && - matchResultType(request) && - matchPublish(repository) && - matchZone(repository, request); + public boolean accept(DeleteResultsRequest request) { + boolean result = repository.matchRepositoryType(request) && + repository.matchResultType(request) && + repository.isPubliableResult() && + repository.matchZone(request); return result; } @Override - public CoserResult execute(EchoBaseResultRepository repository, - DeleteResultsRequest request) { + public CoserResult execute(DeleteResultsRequest request) { File basedir = repository.getBasedir(); if (log.isInfoEnabled()) { log.info("Will delete project at: " + basedir); @@ -76,34 +63,7 @@ } catch (IOException e) { throw new CoserTechnicalException("Could not delete project at: " + basedir, e); } - return new VoidResult(repository.getId()); + return newVoidResult(); } - // --------------------------------------------------------------------- // - // --- Matchers -------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchRepositoryType(DeleteResultsRequest request) { - boolean result = request.getResultRepositoryType().equals(EchoBaseResultRepositoryType.ID); - return result; - } - - protected boolean matchResultType(DeleteResultsRequest request) { - ResultType resultType = request.getResultType(); - boolean result = ResultType.MAP_AND_INDICATOR == resultType; - return result; - } - - protected boolean matchPublish(EchoBaseResultRepository repository) { - boolean result = repository.isPubliableResult(); - return result; - } - - protected boolean matchZone(EchoBaseResultRepository repository, - DeleteResultsRequest request) { - List<String> zoneList = request.getZoneList(); - boolean result = zoneList.contains(repository.getZone()); - return result; - } - } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/ExtractRawDataAndResultsCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/ExtractRawDataAndResultsCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/ExtractRawDataAndResultsCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,53 +22,34 @@ * #L% */ -import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import fr.ifremer.coser.CoserTechnicalException; -import fr.ifremer.coser.bean.IndicatorMap; import fr.ifremer.coser.bean.SpeciesMap; -import fr.ifremer.coser.result.FileResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; +import fr.ifremer.coser.result.repository.echobase.EchoBasePredicates; +import fr.ifremer.coser.result.repository.legacy.LegacyPredicates; import fr.ifremer.coser.result.request.ExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.result.ExtractRawDataAndResultsResult; import fr.ifremer.coser.storage.DataStorage; +import fr.ifremer.coser.storage.DataStorageWalker; import fr.ifremer.coser.storage.DataStorages; -import fr.ifremer.coser.storage.MemoryDataStorage; import fr.ifremer.coser.util.DataType; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.collections4.MapUtils; -import org.apache.commons.collections4.keyvalue.MultiKey; 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; import org.apache.commons.logging.LogFactory; -import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; -import org.jfree.chart.axis.CategoryAxis; -import org.jfree.chart.axis.CategoryLabelPositions; -import org.jfree.chart.axis.NumberAxis; -import org.jfree.chart.axis.ValueAxis; -import org.jfree.chart.plot.CategoryPlot; -import org.jfree.chart.plot.PlotOrientation; -import org.jfree.chart.renderer.category.CategoryItemRenderer; -import org.jfree.chart.renderer.category.StatisticalLineAndShapeRenderer; -import org.jfree.data.statistics.DefaultStatisticalCategoryDataset; -import org.nuiton.util.FileUtil; -import org.nuiton.util.ZipUtil; -import java.awt.Color; import java.io.File; import java.io.IOException; -import java.io.StringWriter; -import java.util.Collection; import java.util.HashMap; -import java.util.Iterator; import java.util.List; -import java.util.Locale; import java.util.Map; -import java.util.Set; /** * Created on 3/11/14. @@ -76,120 +57,89 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class ExtractRawDataAndResultsCommand implements ResultRepositoryCommand<EchoBaseResultRepository, ExtractRawDataAndResultsRequest> { +public class ExtractRawDataAndResultsCommand extends AbstractEchoBaseCommand<ExtractRawDataAndResultsRequest> { /** Logger. */ private static final Log log = LogFactory.getLog(ExtractRawDataAndResultsCommand.class); @Override - public Class<ExtractRawDataAndResultsRequest> getRequestType() { - return ExtractRawDataAndResultsRequest.class; - } + public boolean accept(ExtractRawDataAndResultsRequest request) { + //TODO Remove false when will be ok... + boolean result = false && repository.matchExtractTypeList(request) && + repository.matchZone(request); + if (result) { - @Override - public boolean accept(EchoBaseResultRepository repository, - ExtractRawDataAndResultsRequest request) { - return matchExtractTypeSet(request) && - matchZoneList(repository, request) && - (matchPopulationIndicatorListAndSpeciesList(repository, request) || - matchCommunityIndicatorListAndSpeciesList(repository, request)); - } + if (request.getExtractTypeList().contains(DataType.POPULATION)) { - @Override - public FileResult execute(EchoBaseResultRepository repository, - ExtractRawDataAndResultsRequest r) { + // match population indicator? + Predicate<String[]> predicate = Predicates.and( + EchoBasePredicates.populationIndicatorPredicate(request.getPopulationIndicatorList()), + EchoBasePredicates.populationSpeciesPredicate(request.getSpeciesList())); + result = repository.matchPopulation(predicate); + } - Locale locale = r.getLocale(); - List<String> zoneList = r.getZoneList(); - List<DataType> extractTypeList = r.getExtractTypeList(); - List<String> speciesList = r.getSpeciesList(); - List<String> communityIndicatorList = r.getCommunityIndicatorList(); - List<String> populationIndicatorList = r.getPopulationIndicatorList(); + if (!result) { - File resultZip = null; - File tempDir = null; - try { - tempDir = FileUtil.createTempDirectory("coser-extract-", "-tmp"); + if (request.getExtractTypeList().contains(DataType.COMMUNITY)) { - File subDir = new File(tempDir, "Indicateurs_Ifremer"); - FileUtils.forceMkdir(subDir); - - // les sources se retrouve dans le zip a cote du pdf - if (extractTypeList.contains(DataType.SOURCE)) { - if (log.isDebugEnabled()) { - log.debug("Extracting sources"); + // match community indicator? + Predicate<String[]> predicate = Predicates.and( + EchoBasePredicates.communityIndicatorPredicate(request.getCommunityIndicatorList()), + EchoBasePredicates.communitySpeciesPredicate(request.getSpeciesList())); + result = repository.matchCommunity(predicate); } - File srcDir = new File(subDir, "sources"); - extractSource(srcDir); } + } + return result; + } - // les cartes doivent se retrouver dans le pdf - MultiKeyMap pdfMaps = null; - if (extractTypeList.contains(DataType.MAP)) { - if (log.isDebugEnabled()) { - log.debug("Extracting maps"); - } - String zone = repository.getZone(); - SpeciesMap speciesMap = repository.getSpeciesMap(); - for (String species : speciesList) { - File mapFile = repository.getMapSpeciesFile(species); - pdfMaps.put(zone, speciesMap.getSpeciesName(species), mapFile); - } - } + @Override + public ExtractRawDataAndResultsResult execute(ExtractRawDataAndResultsRequest request) { - // les graphiques sont également dans le pdf - MultiKeyMap pdfCharts = null; - if (CollectionUtils.isNotEmpty(communityIndicatorList) || - CollectionUtils.isNotEmpty(populationIndicatorList)) { - if (log.isDebugEnabled()) { - log.debug("Extracting charts"); - } - pdfCharts = extractCharts(repository, - speciesList, - communityIndicatorList, - populationIndicatorList, - locale); - } + List<DataType> extractTypeList = request.getExtractTypeList(); + List<String> speciesList = request.getSpeciesList(); + List<String> communityIndicatorList = request.getCommunityIndicatorList(); + List<String> populationIndicatorList = request.getPopulationIndicatorList(); - // generate pdf if necessary - if (MapUtils.isNotEmpty(pdfMaps) || MapUtils.isNotEmpty(pdfCharts)) { - if (log.isDebugEnabled()) { - log.debug("Generated Extract PDF"); - } - repository.getReports().generateExtractPDF(subDir, - zoneList, - pdfMaps, - pdfCharts, - repository.getZonesMap(), - locale); - } + File extractDirectory = request.getExtractDirectory(); - // fichier de décharge en pdf + // les sources se retrouve dans le zip a cote du pdf + if (extractTypeList.contains(DataType.SOURCE)) { if (log.isDebugEnabled()) { - log.debug("Generated decharge PDF"); + log.debug("Extracting sources"); } - String filename = repository.getReports().getDechargeFilename(locale); - File dechargePDF = new File(subDir, filename); - repository.getReports().generateDechargePDF(dechargePDF, locale, null, null); + File srcDir = new File(extractDirectory, "sources"); + extractSource(srcDir); + } - // make zip + // les cartes doivent se retrouver dans le pdf + MultiKeyMap<String, File> pdfMaps = null; + if (extractTypeList.contains(DataType.MAP)) { if (log.isDebugEnabled()) { - log.debug("Make final archive"); + log.debug("Extracting maps"); } - resultZip = File.createTempFile("coser-extract-", ".zip"); - resultZip.deleteOnExit(); - ZipUtil.compress(resultZip, subDir); - - // clean directory - FileUtils.deleteDirectory(tempDir); - } catch (IOException ex) { - throw new CoserTechnicalException("Can't create zip file", ex); - } finally { - // clean directory - FileUtils.deleteQuietly(tempDir); + pdfMaps = new MultiKeyMap<String, File>(); + SpeciesMap speciesMap = repository.getSpeciesMap(); + String zone = repository.getZone(); + for (String species : speciesList) { + File mapFile = repository.getMapSpeciesFile(species); + String speciesName = speciesMap.getSpeciesName(species); + pdfMaps.put(zone, speciesName, mapFile); + } } - FileResult result = new FileResult(repository.getId(), resultZip); + // les graphiques sont également dans le pdf + Map<String, Pair<File, String>> pdfCharts = null; + if (CollectionUtils.isNotEmpty(communityIndicatorList) || + CollectionUtils.isNotEmpty(populationIndicatorList)) { + if (log.isDebugEnabled()) { + log.debug("Extracting charts"); + } + pdfCharts = extractCharts(speciesList, + communityIndicatorList, + populationIndicatorList); + } + ExtractRawDataAndResultsResult result = newExtractRawDataAndResultsResult(pdfMaps, pdfCharts); return result; } @@ -200,521 +150,170 @@ */ 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 } /** - * Retourne les indicateurs calculés avec leurs traductions scientifique - * pour la zone et l'especes souhaitées. - * - * @param species especes (if {@code null} look for com indicators - * @param comIndicators comIndicator - * @param popIndicators popIndicators - * @param locale locale - * @return la liste des indicateurs (zone, speciesname, [graphfile, graphdata]) + * @param species species to extract in population indicators + * @param communityIndicators community indicators to extract + * @param populationIndicators population indicators to extract + * @return charts files and their data with key: zone , indicator [- speciesName for population]) + * and value: (graphFile, graphData) */ - protected MultiKeyMap extractCharts(EchoBaseResultRepository repository, - Collection<String> species, - Collection<String> comIndicators, - Collection<String> popIndicators, - Locale locale) { + protected Map<String, Pair<File, String>> extractCharts(List<String> species, + List<String> communityIndicators, + List<String> populationIndicators) { - MultiKeyMap chartFileAndDatas = new MultiKeyMap(); - String zone = repository.getZone(); - String zoneDisplayName = repository.getZonesMap().getZoneFullName(zone); - if (CollectionUtils.isNotEmpty(comIndicators)) { - Map<String, Pair<File, String>> chartFileAndDataCom = getRsufiResultComCharts(repository, - comIndicators, - zoneDisplayName, - repository.getIndicatorsMap(), - locale, - 650, - 430); - // put in multimap as zone,speciesname, data - for (Map.Entry<String, Pair<File, String>> entry : chartFileAndDataCom.entrySet()) { - chartFileAndDatas.put(zone, entry.getKey(), entry.getValue()); - } + Map<String, Pair<File, String>> result = Maps.newLinkedHashMap(); + + if (CollectionUtils.isNotEmpty(communityIndicators)) { + result.putAll(extractCommunityResults(communityIndicators, + zone, + 650, + 430)); } - if (CollectionUtils.isNotEmpty(popIndicators)) { - Map<String, Pair<File, String>> chartFileAndDataPop = getRsufiResultPopCharts(repository, - species, - popIndicators, - zoneDisplayName, - repository.getIndicatorsMap(), - locale, - 650, - 430); - // put in multimap as zone,speciesname, data - for (Map.Entry<String, Pair<File, String>> entry : chartFileAndDataPop.entrySet()) { - chartFileAndDatas.put(zone, entry.getKey(), entry.getValue()); - } + if (CollectionUtils.isNotEmpty(populationIndicators)) { + result.putAll(extractPopulationResults(species, + populationIndicators, + zone, + 650, + 430)); } - return chartFileAndDatas; + return result; } /** - * Generate community graph for selected indicators. - * Used by web ui extraction. + * Generate community graph and their data for selected indicators. * - * @param indicators indicators to extract - * @param zoneDisplayName zone full name - * @param indicatorMap indicator localized map - * @param locale locale - * @param width graph width - * @param height graph height + * @param selectedIndicators indicators to extract + * @param zone zone + * @param width graph width + * @param height graph height * @return maps of generated graph image (temp file) and data indexed by natural key (indicator - species) */ - public Map<String, Pair<File, String>> getRsufiResultComCharts(EchoBaseResultRepository repository, - Collection<String> indicators, - String zoneDisplayName, - IndicatorMap indicatorMap, - Locale locale, - int width, int height) { + public Map<String, Pair<File, String>> extractCommunityResults(List<String> selectedIndicators, + String zone, + int width, + int height) { - Map<String, Pair<File, String>> result = Maps.newHashMap(); + // Get exact list of indicators usable for this result + List<String> indicators = Lists.newArrayList(getCommunityIndicators()); + indicators.retainAll(selectedIndicators); - int multiplicator = 1; - int minYear = Integer.MAX_VALUE; - int maxYear = Integer.MIN_VALUE; - - Map<String, Map<Integer, Double[]>> indicatorGraphData = new HashMap<String, Map<Integer, Double[]>>(); - Map<String, String> indicatorLists = new HashMap<String, String>(); - Map<String, DataStorage> indicatorStorages = new HashMap<String, DataStorage>(); - - // Campagne Indicateur Liste Strate Annee Estimation EcartType CV - Iterator<String[]> estComIndIterator = repository.loadCommunityIndicatorStorage(true); - while (estComIndIterator.hasNext()) { - // Campagne Indicateur Liste Strate Annee Estimation EcartType CV - String[] tuple = estComIndIterator.next(); - String indicatorCode = tuple[1]; - String indicatorList = tuple[2]; - - if (indicators.contains(indicatorCode)) { - - // si pas de list selectionnée, on prend la premiere + //FIXME Check if this is correct + // get for all indicators the first species list found (we only extract this one) + final Map<String, String> indicatorLists = new HashMap<String, String>(); + walkOnCommunity(LegacyPredicates.communityIndicatorPredicate(indicators), new DataStorageWalker() { + @Override + public void onRow(String... row) { + String indicatorCode = row[1]; String localList = indicatorLists.get(indicatorCode); + //FIXME Should only test if indicatorCode is present ? if (StringUtils.isBlank(localList)) { - localList = indicatorList; - indicatorLists.put(indicatorCode, localList); + String indicatorList = row[2]; + indicatorLists.put(indicatorCode, indicatorList); } - - if (indicatorList.equals(localList)) { - Double estimation = Double.parseDouble(tuple[5]); - Double ecart = Double.parseDouble(tuple[6]); - int year = Integer.parseInt(tuple[4]); - - if (year < minYear) { - minYear = year; - } - if (year > maxYear) { - maxYear = year; - } - Map<Integer, Double[]> graphData = indicatorGraphData.get(indicatorCode); - if (graphData == null) { - graphData = new HashMap<Integer, Double[]>(); - indicatorGraphData.put(indicatorCode, graphData); - } - graphData.put(year, new Double[]{estimation, ecart}); - - // si les données sont énormes, on affiche les données - // / multiplicator et on le mentionne dans la légende - if (estimation > 1e9) { - multiplicator = 1000000; - } - if (estimation > 1e6 && multiplicator < 1000000) { - multiplicator = 1000; - } - - // for data part - DataStorage subDataStorage = indicatorStorages.get(indicatorCode); - if (subDataStorage == null) { - subDataStorage = new MemoryDataStorage(); - if ("fr".equals(locale.getLanguage())) { - subDataStorage.add(new String[]{"Campagne", "Indice", "Liste", "Strate", "Année", "Estimation", "EcartType", "CV"}); - } else { - subDataStorage.add(new String[]{"Survey", "Index", "List", "Stratum", "Year", "Estimate", "StandardDeviation", "CV"}); - } - indicatorStorages.put(indicatorCode, subDataStorage); - } - subDataStorage.add(tuple); - } } - } + }); - // avec l'extraction des données, on peut demander a générer un graphique - // sur un indicateur qui n'est pas présent dans le projet courant, - // dans ce cas, on retourne null - for (String indicator : indicatorGraphData.keySet()) { - // get graph title - String chartTitle = zoneDisplayName; - String indicatorName = indicatorMap.getIndicatorValue(indicator, locale); - String unit = indicatorMap.getIndicatorUnit(indicator); - chartTitle += " - " + indicatorName; + Map<String, Pair<File, String>> result = Maps.newHashMap(); - // ajout de la traduction de la liste d'indicateur - // les liste sont a1, T1, T2 ... - String localList = indicatorLists.get(indicator); - String listLetter = String.valueOf(localList.charAt(0)); - Iterator<String[]> typeIterator = repository.getSpeciesMap().iterator(true); - while (typeIterator.hasNext()) { - // "Types";"Commentaire";"NumSys min";"NumSys max";"Code" - String[] tuple = typeIterator.next(); - if (tuple[4].equals(listLetter)) { - /// gestion du groupe "Tous" - // cas special, c'est la seule valeur du fichier - // code type espece qui a besoin d'une traduction - if (tuple[4].equalsIgnoreCase("T")) { - if ("fr".equals(locale.getLanguage())) { - chartTitle += " - " + "Tous Liste " + localList.charAt(1); - } else if ("es".equals(locale.getLanguage())) { - chartTitle += " - " + "Todo Lista " + localList.charAt(1); - } else { - chartTitle += " - " + "All List " + localList.charAt(1); - } - } else { - // ajout de la traduction du nom de liste plus le numéro - if ("fr".equals(locale.getLanguage())) { - chartTitle += " - " + tuple[0] + " Liste " + localList.charAt(1); - } else if ("es".equals(locale.getLanguage())) { - chartTitle += " - " + tuple[0] + " Lista " + localList.charAt(1); - } else { - chartTitle += " - " + tuple[0] + " List " + localList.charAt(1); - } - } - break; - } - } + for (String indicator : indicators) { - // generate dataset with sorted data - Map<Integer, Double[]> graphData = indicatorGraphData.get(indicator); - DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset(); - for (int indexYear = minYear; indexYear <= maxYear; ++indexYear) { - Double[] entry = graphData.get(indexYear); - if (entry != null) { - Double estimation = entry[0] / multiplicator; - Double ecart = entry[1] / multiplicator; - statisticalDataset.add(estimation, ecart, "Serie1", (Comparable) indexYear); - } else { - statisticalDataset.add(null, null, "Serie1", indexYear); - } - } + String speciesList = indicatorLists.get(indicator); - // configure chart - //CategoryAxis categoryAxis = new CategoryAxis(t("coser.business.common.year")); - String yearAxis = repository.getReports().getYearChartTitle(locale); - CategoryAxis categoryAxis = new CategoryAxis(yearAxis); - categoryAxis.setCategoryMargin(0); - categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90); - // label horizontaux - String legendY = indicatorName; - if (multiplicator != 1) { - // affiche par exemple : cm * 1000 - legendY += " (" + unit + "*" + multiplicator + ")"; - } else if (StringUtils.isNotEmpty(unit)) { - legendY += " (" + unit + ")"; - } - ValueAxis valueAxis = new NumberAxis(legendY); - valueAxis.setUpperMargin(0.1); + Predicate<String[]> predicate = Predicates.and( + LegacyPredicates.communityIndicatorPredicate(indicator), + LegacyPredicates.communitySpeciesListPredicate(speciesList)); - CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true); + // extract raw data + DataStorage storage = extractCommunity(predicate); - // n'affiche pas les nombre sur le graphique - //StandardCategoryItemLabelGenerator itemLabelGenerator = new StandardCategoryItemLabelGenerator(); - //renderer.setBaseItemLabelGenerator(itemLabelGenerator); - //renderer.setBaseItemLabelsVisible(true); + String rawDataText = DataStorages.toString(storage); - CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer); - plot.setOrientation(PlotOrientation.VERTICAL); - JFreeChart chart = new JFreeChart(chartTitle, - JFreeChart.DEFAULT_TITLE_FONT, plot, true); + // generate chart + JFreeChart chart = generateCommunityChart(zone, + indicator, + speciesList); - // remove series legend - chart.removeLegend(); - // white background - chart.setBackgroundPaint(Color.WHITE); + // generate chart file + File chartFile = getCharts().generateChartFile("coser-community-chart-", + chart, + width, + height); - try { - File chartFile = File.createTempFile("coser-community-chart-", ".png"); - chartFile.deleteOnExit(); - ChartUtilities.saveChartAsPNG(chartFile, chart, width, height); - //ByteArrayOutputStream out = new ByteArrayOutputStream(); - //ChartUtilities.writeChartAsPNG(out, chart, width, height); - - // data extraction - DataStorage subDataStorage = indicatorStorages.get(indicator); - StringWriter writer = new StringWriter(); - DataStorages.save(subDataStorage, writer); - - // add chart file dans chart data in result - result.put(indicator, Pair.of(chartFile, writer.toString())); - writer.close(); - } catch (IOException ex) { - throw new CoserTechnicalException("Can't save chart", ex); - } + result.put(indicator, Pair.of(chartFile, rawDataText)); } - return result; } /** - * Generate population graph for selected species and indicator. + * Generate population graph and their data for selected indicators. * - * @param species species to extract - * @param indicators indicators to extract - * @param zoneDisplayName zone full name - * @param indicatorMap indicator localized map - * @param locale locale - * @param width graph width - * @param height graph height + * @param selectedSpecies species to extract + * @param selectedIndicators indicators to extract + * @param zone zone + * @param width graph width + * @param height graph height * @return maps of generated graph image (temp file) and data indexed by natural key (indicator - species) */ - public Map<String, Pair<File, String>> getRsufiResultPopCharts(EchoBaseResultRepository repository, - Collection<String> species, - Collection<String> indicators, - String zoneDisplayName, - IndicatorMap indicatorMap, - Locale locale, - int width, - int height) { + public Map<String, Pair<File, String>> extractPopulationResults(List<String> selectedSpecies, + List<String> selectedIndicators, + String zone, + int width, + int height) { + // Get exact list of species to use + List<String> speciesList = Lists.newArrayList(getPopulationSpecies()); + speciesList.retainAll(selectedSpecies); + Map<String, Pair<File, String>> result = Maps.newHashMap(); - int multiplicator = 1; - int minYear = Integer.MAX_VALUE; - int maxYear = Integer.MIN_VALUE; + for (String species : speciesList) { - MultiKeyMap indicatorGraphData = new MultiKeyMap(); - MultiKeyMap indicatorStorages = new MultiKeyMap(); + // Get extact indicators to use + List<String> indicators = Lists.newArrayList(getPopulationIndicators(species)); + indicators.retainAll(selectedIndicators); - // Campagne Indicateur Liste Species Strate Annee Estimation EcartType CV - Iterator<String[]> estPopIndIterator = repository.loadPopulationIndicatorStorage(true); - while (estPopIndIterator.hasNext()) { - String[] tuple = estPopIndIterator.next(); + for (String indicator : indicators) { - String speciesCode = tuple[3]; - String indicatorCode = tuple[1]; - if (species.contains(speciesCode) && indicators.contains(indicatorCode)) { + Predicate<String[]> predicate = Predicates.and( + LegacyPredicates.populationIndicatorPredicate(indicator), + LegacyPredicates.populationSpeciesPredicate(species)); - // XXX echatellier, maybe take care of list here ? + // extract raw data + DataStorage storage = extractPopulation(predicate); - Double estimation = Double.parseDouble(tuple[6]); - Double ecart = Double.parseDouble(tuple[7]); - int year = Integer.parseInt(tuple[5]); + String rawDataText = DataStorages.toString(storage); - if (year < minYear) { - minYear = year; - } - if (year > maxYear) { - maxYear = year; - } - Map<Integer, Double[]> graphData = (Map<Integer, Double[]>) indicatorGraphData.get(indicatorCode, speciesCode); - if (graphData == null) { - graphData = new HashMap<Integer, Double[]>(); - indicatorGraphData.put(indicatorCode, speciesCode, graphData); - } - graphData.put(year, new Double[]{estimation, ecart}); + // generate chart + JFreeChart chart = generatePopulationChart(zone, + indicator, + species); - // si les données sont énormes, on affiche les données - // / multiplicator et on le mentionne dans la légende - if (estimation > 1e9) { - multiplicator = 1000000; - } - if (estimation > 1e6 && multiplicator < 1000000) { - multiplicator = 1000; - } + // generate chart file + File chartFile = getCharts().generateChartFile("coser-population-chart-", + chart, + width, + height); - // for data part - DataStorage subDataStorage = (DataStorage) indicatorStorages.get(indicatorCode, speciesCode); - if (subDataStorage == null) { - subDataStorage = new MemoryDataStorage(); - if ("fr".equals(locale.getLanguage())) { - subDataStorage.add(new String[]{"Campagne", "Indice", "Liste", "Espèce", "Strate", "Annee", "Estimation", "EcartType", "CV"}); - } else { - subDataStorage.add(new String[]{"Survey", "Index", "List", "Species", "Stratum", "Year", "Estimate", "StandardDeviation", "CV"}); - } - indicatorStorages.put(indicatorCode, speciesCode, subDataStorage); - } - subDataStorage.add(tuple); + result.put(indicator + "-" + species, Pair.of(chartFile, rawDataText)); } } - - // avec l'extraction des données, on peut demander a générer un graphique - // sur un indicateur qui n'est pas présent dans le projet courant, - // dans ce cas, on retourne null - for (MultiKey indicatorSpecies : (Set<MultiKey>) indicatorGraphData.keySet()) { - String indicator = (String) indicatorSpecies.getKey(0); - String aSpecies = (String) indicatorSpecies.getKey(1); - // get graph title - String title = zoneDisplayName; - String indicatorName = indicatorMap.getIndicatorValue(indicator, locale); - String unit = indicatorMap.getIndicatorUnit(indicator); - title += " - " + indicatorName; - title += " - " + repository.getSpeciesMap().getReportDisplayName(aSpecies); - - // generate dataset with sorted data - DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset(); - Map<Integer, Double[]> graphData = (Map<Integer, Double[]>) indicatorGraphData.get(indicator, aSpecies); - for (int indexYear = minYear; indexYear <= maxYear; ++indexYear) { - Double[] entry = graphData.get(indexYear); - if (entry != null) { - Double estimation = entry[0] / multiplicator; - Double ecart = entry[1] / multiplicator; - statisticalDataset.add(estimation, ecart, "Serie1", (Comparable) indexYear); - } else { - statisticalDataset.add(null, null, "Serie1", indexYear); - } - } - - // configure chart - //CategoryAxis categoryAxis = new CategoryAxis(t("coser.business.common.year")); - String yearAxis = repository.getReports().getYearChartTitle(locale); - CategoryAxis categoryAxis = new CategoryAxis(yearAxis); - categoryAxis.setCategoryMargin(0); - categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90); - // label horizontaux - String legendY = indicatorName; - if (multiplicator != 1) { - // affiche par exemple : cm * 1000 - legendY += " (" + unit + "*" + multiplicator + ")"; - } else if (StringUtils.isNotEmpty(unit)) { - legendY += " (" + unit + ")"; - } - ValueAxis valueAxis = new NumberAxis(legendY); - valueAxis.setUpperMargin(0.1); - - CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true); - - // n'affiche pas les nombre sur le graphique - //StandardCategoryItemLabelGenerator itemLabelGenerator = new StandardCategoryItemLabelGenerator(); - //renderer.setBaseItemLabelGenerator(itemLabelGenerator); - //renderer.setBaseItemLabelsVisible(true); - - CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer); - plot.setOrientation(PlotOrientation.VERTICAL); - JFreeChart chart = new JFreeChart(title, - JFreeChart.DEFAULT_TITLE_FONT, plot, true); - - // remove series legend - chart.removeLegend(); - // white background - chart.setBackgroundPaint(Color.WHITE); - - try { - File chartFile = File.createTempFile("coser-population-chart-", ".png"); - chartFile.deleteOnExit(); - ChartUtilities.saveChartAsPNG(chartFile, chart, width, height); - //ByteArrayOutputStream out = new ByteArrayOutputStream(); - //ChartUtilities.writeChartAsPNG(out, chart, width, height); - - // data extraction - DataStorage subDataStorage = (DataStorage) indicatorStorages.get(indicator, aSpecies); - StringWriter writer = new StringWriter(); - DataStorages.save(subDataStorage, writer); - - // add chart file dans chart data in result - result.put(indicator + "-" + aSpecies, Pair.of(chartFile, writer.toString())); - writer.close(); - } catch (IOException ex) { - throw new CoserTechnicalException("Can't save chart", ex); - } - } - return result; } - // --------------------------------------------------------------------- // - // --- Matchers -------------------------------------------------------- // - // --------------------------------------------------------------------- // - protected boolean matchExtractTypeSet(ExtractRawDataAndResultsRequest request) { - //TODO Should deal also with raw-data type - return !request.getExtractTypeList().contains(DataType.SOURCE); - } - - protected boolean matchZoneList(EchoBaseResultRepository repository, - ExtractRawDataAndResultsRequest request) { - return request.getZoneList().contains(repository.getZone()); - } - - protected boolean matchCommunityIndicatorList(EchoBaseResultRepository repository, - ExtractRawDataAndResultsRequest request) { - Preconditions.checkNotNull(request.getCommunityIndicatorList()); - - List<String> indicatorList = request.getCommunityIndicatorList(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadCommunityIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchIndicatorList(tuple, indicatorList)) { - result = true; - break; - } - } - return result; - } - - protected boolean matchPopulationIndicatorList(EchoBaseResultRepository repository, - ExtractRawDataAndResultsRequest request) { - Preconditions.checkNotNull(request.getPopulationIndicatorList()); - - List<String> indicatorList = request.getPopulationIndicatorList(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadPopulationIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchIndicatorList(tuple, indicatorList)) { - result = true; - break; - } - } - return result; - } - - protected boolean matchPopulationIndicatorListAndSpeciesList(EchoBaseResultRepository repository, - ExtractRawDataAndResultsRequest request) { - Preconditions.checkNotNull(request.getPopulationIndicatorList()); - - List<String> indicatorList = request.getPopulationIndicatorList(); - List<String> speciesList = request.getSpeciesList(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadPopulationIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchIndicatorListAndSpeciesList(tuple, indicatorList, speciesList)) { - result = true; - break; - } - } - return result; - } - - protected boolean matchCommunityIndicatorListAndSpeciesList(EchoBaseResultRepository repository, - ExtractRawDataAndResultsRequest request) { - Preconditions.checkNotNull(request.getCommunityIndicatorList()); - - List<String> indicatorList = request.getCommunityIndicatorList(); - List<String> speciesList = request.getSpeciesList(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadCommunityIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchIndicatorListAndSpeciesList(tuple, indicatorList, speciesList)) { - result = true; - break; - } - } - return result; - } } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/ExtractRawDataCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/ExtractRawDataCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/ExtractRawDataCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,10 +22,8 @@ * #L% */ -import fr.ifremer.coser.result.FileResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; import fr.ifremer.coser.result.request.ExtractRawDataRequest; +import fr.ifremer.coser.result.result.FileResult; /** * Created on 3/11/14. @@ -33,31 +31,19 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class ExtractRawDataCommand implements ResultRepositoryCommand<EchoBaseResultRepository, ExtractRawDataRequest> { +public class ExtractRawDataCommand extends AbstractEchoBaseCommand<ExtractRawDataRequest> { @Override - public Class<ExtractRawDataRequest> getRequestType() { - return ExtractRawDataRequest.class; - } - - @Override - public boolean accept(EchoBaseResultRepository repository, - ExtractRawDataRequest request) { + public boolean accept(ExtractRawDataRequest request) { return repository.matchFacade(request) && repository.matchZone(request); } @Override - public FileResult execute(EchoBaseResultRepository repository, - ExtractRawDataRequest r) { + public FileResult execute(ExtractRawDataRequest r) { //TODO throw new IllegalStateException("TODO!"); } - // --------------------------------------------------------------------- // - // --- Matchers ------------------------------------------------------- // - // --------------------------------------------------------------------- // - - //TODO } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetAllResultsCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetAllResultsCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetAllResultsCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -24,12 +24,8 @@ import com.google.common.collect.Maps; import fr.ifremer.coser.result.CoserResult; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.ResultType; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepositoryType; import fr.ifremer.coser.result.request.GetAllResultsRequest; +import fr.ifremer.coser.result.result.MapResult; import java.util.Map; @@ -39,48 +35,22 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetAllResultsCommand implements ResultRepositoryCommand<EchoBaseResultRepository, GetAllResultsRequest> { +public class GetAllResultsCommand extends AbstractEchoBaseCommand<GetAllResultsRequest> { @Override - public Class<GetAllResultsRequest> getRequestType() { - return GetAllResultsRequest.class; - } - - @Override - public boolean accept(EchoBaseResultRepository repository, - GetAllResultsRequest request) { - boolean result = matchRepositoryType(request) && - matchResultType(request) && - matchPublish(repository); + public boolean accept(GetAllResultsRequest request) { + boolean result = repository.matchRepositoryType(request) && + repository.matchResultType(request) && + repository.isPubliableResult(); return result; } @Override - public CoserResult execute(EchoBaseResultRepository repository, - GetAllResultsRequest request) { + public CoserResult execute(GetAllResultsRequest request) { Map<String, String> map = Maps.newHashMap(); map.put(repository.getZone(), repository.getSurveyName()); - MapResult result = new MapResult(repository.getId(), map); - return result; - } - // --------------------------------------------------------------------- // - // --- Matchers -------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchRepositoryType(GetAllResultsRequest request) { - boolean result = request.getResultRepositoryType().equals(EchoBaseResultRepositoryType.ID); + MapResult result = newMapResult(map); return result; } - - protected boolean matchResultType(GetAllResultsRequest request) { - ResultType resultType = request.getResultType(); - boolean result = ResultType.MAP_AND_INDICATOR == resultType; - return result; - } - - protected boolean matchPublish(EchoBaseResultRepository repository) { - boolean result = repository.isPubliableResult(); - return result; - } } Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetCommunityIndicatorResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetCommunityIndicatorResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetCommunityIndicatorResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,379 +0,0 @@ -package fr.ifremer.coser.result.repository.echobase.command; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; -import fr.ifremer.coser.CoserTechnicalException; -import fr.ifremer.coser.result.FileResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; -import fr.ifremer.coser.result.request.GetCommunityIndicatorResultRequest; -import fr.ifremer.coser.storage.DataStorage; -import fr.ifremer.coser.storage.DataStorages; -import fr.ifremer.coser.storage.MemoryDataStorage; -import org.apache.commons.io.FileUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.jfree.chart.ChartUtilities; -import org.jfree.chart.JFreeChart; -import org.jfree.chart.axis.CategoryAxis; -import org.jfree.chart.axis.CategoryLabelPositions; -import org.jfree.chart.axis.NumberAxis; -import org.jfree.chart.axis.ValueAxis; -import org.jfree.chart.plot.CategoryPlot; -import org.jfree.chart.plot.PlotOrientation; -import org.jfree.chart.renderer.category.CategoryItemRenderer; -import org.jfree.chart.renderer.category.StatisticalLineAndShapeRenderer; -import org.jfree.data.statistics.DefaultStatisticalCategoryDataset; -import org.nuiton.util.FileUtil; -import org.nuiton.util.ZipUtil; - -import java.awt.Color; -import java.io.File; -import java.io.IOException; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Locale; -import java.util.Map; - -/** - * Created on 3/11/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class GetCommunityIndicatorResultCommand implements ResultRepositoryCommand<EchoBaseResultRepository, GetCommunityIndicatorResultRequest> { - - /** Logger. */ - private static final Log log = LogFactory.getLog(GetCommunityIndicatorResultCommand.class); - - @Override - public Class<GetCommunityIndicatorResultRequest> getRequestType() { - return GetCommunityIndicatorResultRequest.class; - } - - @Override - public boolean accept(EchoBaseResultRepository repository, GetCommunityIndicatorResultRequest request) { - return repository.matchFacade(request) && - repository.matchZone(request) && - matchIndicatorAndSpeciesList(repository, request); - } - - @Override - public FileResult execute(EchoBaseResultRepository repository, GetCommunityIndicatorResultRequest r) { - - File file = null; - switch (r.getIndicatorResultType()) { - case DATA: - file = getCommunityIndicatorDataFile(repository, - r.getLocale(), - r.getIndicator(), - r.getSpecies()); - break; - - case GRAPH: - file = getCommunityIndicatorGraphFile(repository, - r.getLocale(), - r.getZone(), - r.getIndicator(), - r.getSpecies()); - break; - } - FileResult result = new FileResult(repository.getId(), file); - return result; - } - - - protected File getCommunityIndicatorDataFile(EchoBaseResultRepository repository, Locale locale, - String indicator, - String speciesList) { - - try { - - File tempDir = FileUtil.createTempDirectory("coser-chart-population-indicator", "-tmp"); - - File baseDir = new File(tempDir, repository.getSurveyName()); - FileUtils.forceMkdir(baseDir); - - // ajout du fichier csv avec les indicateurs - DataStorage dataStorage = new MemoryDataStorage(); - - Iterator<String[]> iterator = repository.loadCommunityIndicatorStorage(false); - - // add header - dataStorage.add(iterator.next()); - - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchCommunityIndicatorAndSpeciesList(tuple, indicator, speciesList)) { - dataStorage.add(tuple); - } - } - File csvFile = DataStorages.save(dataStorage, "coser-chart-community-indicator", - ".csv" - ); - - File csvFileCopied = new File(baseDir, indicator + ".csv"); - FileUtils.copyFile(csvFile, csvFileCopied); - FileUtils.forceDelete(csvFile); - - //TODO See what to generate here (we don't have any selection in echobase results). -// // ajout du fichier d'information sur les espèces incluses dans -// // les calculs des indicateurs de communautés -// // load project (without data to get reftax data) -// Project project = path.getProject(); -// Selection selection = path.getSelection(); -// File metaFile = webService.generateMetaFilePDF(project, -// selection, -// resultDirectory, -// rSufiResult, -// indicator, -// locale); -// File metaFileCopied = new File(baseDir, "Information.pdf"); -// FileUtils.copyFile(metaFile, metaFileCopied); - - // make zip - File result = File.createTempFile("coser-chart-community-indicator", ".zip"); - result.deleteOnExit(); - ZipUtil.compress(result, baseDir); - - // clean directory - FileUtils.deleteDirectory(tempDir); - return result; - } catch (Exception e) { - throw new CoserTechnicalException("Can't create zip file", e); - } - } - - protected File getCommunityIndicatorGraphFile(EchoBaseResultRepository repository, - Locale locale, - String zone, - String indicator, - String speciesList) { - - // indicator list to take care - // pour avoir une valeur non nulle si list est null - // on prend dans ce cas la premiere valeur trouvée - String localList = speciesList; - - if (log.isDebugEnabled()) { - log.debug("Searching list for indicator : " + indicator); - } - - int multiplicator = 1; - int minYear = Integer.MAX_VALUE; - int maxYear = Integer.MIN_VALUE; - boolean indicatorFound = false; - Map<Integer, Double[]> graphData = new HashMap<Integer, Double[]>(); - Iterator<String[]> iterator = repository.loadCommunityIndicatorStorage(true); - while (iterator.hasNext()) { - // Campagne Indicateur Liste Strate Annee Estimation EcartType CV - String[] tuple = iterator.next(); - String indicatorList = tuple[2]; - - if (repository.matchIndicatorIndicator(tuple, indicator)) { - indicatorFound = true; - - // si pas de list selectionnée, on prend la premiere - if (StringUtils.isBlank(localList)) { - localList = indicatorList; - } - - if (indicatorList.equals(localList)) { - Double estimation = Double.parseDouble(tuple[5]); - Double ecart = Double.parseDouble(tuple[6]); - int year = Integer.parseInt(tuple[4]); - - if (year < minYear) { - minYear = year; - } - if (year > maxYear) { - maxYear = year; - } - graphData.put(year, new Double[]{estimation, ecart}); - - // si les données sont énormes, on affiche les données - // / multiplicator et on le mentionne dans la légende - if (estimation > 1e9) { - multiplicator = 1000000; - } - if (estimation > 1e6 && multiplicator < 1000000) { - multiplicator = 1000; - } - } - } - } - - File result = null; - - // avec l'extraction des données, on peut demander a générer un graphique - // sur un indicateur qui n'est pas présent dans le projet courant, - // dans ce cas, on retourne null - if (indicatorFound) { - - String zoneDisplayName = repository.getZonesMap().getZoneFullName(zone); - String indicatorName = repository.getIndicatorsMap().getIndicatorValue(indicator, locale); - String unit = repository.getIndicatorsMap().getIndicatorUnit(indicator); - - // get graph title - String chartTitle = zoneDisplayName; - chartTitle += " - " + indicatorName; - - // ajout de la traduction de la liste d'indicateur - // les liste sont a1, T1, T2 ... - String listLetter = String.valueOf(localList.charAt(0)); - Iterator<String[]> typeIterator = repository.getSpeciesMap().iterator(true); - while (typeIterator.hasNext()) { - // "Types";"Commentaire";"NumSys min";"NumSys max";"Code" - String[] tuple = typeIterator.next(); - if (tuple[4].equals(listLetter)) { - /// gestion du groupe "Tous" - // cas special, c'est la seule valeur du fichier - // code type espece qui a besoin d'une traduction - if (tuple[4].equalsIgnoreCase("T")) { - if ("fr".equals(locale.getLanguage())) { - chartTitle += " - " + "Tous Liste " + localList.charAt(1); - } else if ("es".equals(locale.getLanguage())) { - chartTitle += " - " + "Todo Lista " + localList.charAt(1); - } else { - chartTitle += " - " + "All List " + localList.charAt(1); - } - } else { - // ajout de la traduction du nom de liste plus le numéro - if ("fr".equals(locale.getLanguage())) { - chartTitle += " - " + tuple[0] + " Liste " + localList.charAt(1); - } else if ("es".equals(locale.getLanguage())) { - chartTitle += " - " + tuple[0] + " Lista " + localList.charAt(1); - } else { - chartTitle += " - " + tuple[0] + " List " + localList.charAt(1); - } - } - break; - } - } - - // generate dataset with sorted data - DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset(); - for (int indexYear = minYear; indexYear <= maxYear; ++indexYear) { - Double[] entry = graphData.get(indexYear); - if (entry != null) { - Double estimation = entry[0] / multiplicator; - Double ecart = entry[1] / multiplicator; - statisticalDataset.add(estimation, ecart, "Serie1", (Comparable) indexYear); - } else { - statisticalDataset.add(null, null, "Serie1", indexYear); - } - } - - // configure chart - //CategoryAxis categoryAxis = new CategoryAxis(t("coser.business.common.year")); - String yearAxis = repository.getReports().getYearChartTitle(locale); - - CategoryAxis categoryAxis = new CategoryAxis(yearAxis); - categoryAxis.setCategoryMargin(0); - categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90); - // label horizontaux - String legendY = indicatorName; - if (multiplicator != 1) { - // affiche par exemple : cm * 1000 - legendY += " (" + unit + "*" + multiplicator + ")"; - } else if (StringUtils.isNotEmpty(unit)) { - legendY += " (" + unit + ")"; - } - ValueAxis valueAxis = new NumberAxis(legendY); - valueAxis.setUpperMargin(0.1); - - CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true); - - // n'affiche pas les nombre sur le graphique - //StandardCategoryItemLabelGenerator itemLabelGenerator = new StandardCategoryItemLabelGenerator(); - //renderer.setBaseItemLabelGenerator(itemLabelGenerator); - //renderer.setBaseItemLabelsVisible(true); - - CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer); - plot.setOrientation(PlotOrientation.VERTICAL); - JFreeChart chart = new JFreeChart(chartTitle, - JFreeChart.DEFAULT_TITLE_FONT, plot, true); - - // remove series legend - chart.removeLegend(); - // white background - chart.setBackgroundPaint(Color.WHITE); - - try { - result = File.createTempFile("coser-chart-community-indicator-", ".png"); - result.deleteOnExit(); - ChartUtilities.saveChartAsPNG(result, chart, 800, 400); - } catch (IOException ex) { - throw new CoserTechnicalException("Can't save chart", ex); - } - } - - return result; - } - - // --------------------------------------------------------------------- // - // --- Matchers -------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchIndicator(EchoBaseResultRepository repository, - GetCommunityIndicatorResultRequest request) { - Preconditions.checkNotNull(request.getIndicator()); - - String indicator = request.getIndicator(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadCommunityIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchIndicatorIndicator(tuple, indicator)) { - result = true; - break; - } - } - return result; - } - - protected boolean matchIndicatorAndSpeciesList(EchoBaseResultRepository repository, - GetCommunityIndicatorResultRequest request) { - Preconditions.checkNotNull(request.getIndicator()); - Preconditions.checkNotNull(request.getSpecies()); - - String indicator = request.getIndicator(); - String speciesList = request.getSpecies(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadCommunityIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchCommunityIndicatorAndSpeciesList(tuple, indicator, speciesList)) { - result = true; - break; - } - } - return result; - } -} Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetCommunityIndicatorResultDataCommand.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetCommunityIndicatorResultCommand.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetCommunityIndicatorResultDataCommand.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetCommunityIndicatorResultDataCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,125 @@ +package fr.ifremer.coser.result.repository.echobase.command; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import fr.ifremer.coser.CoserTechnicalException; +import fr.ifremer.coser.result.repository.echobase.EchoBasePredicates; +import fr.ifremer.coser.result.request.GetCommunityIndicatorResultDataRequest; +import fr.ifremer.coser.result.result.FileResult; +import fr.ifremer.coser.storage.DataStorage; +import fr.ifremer.coser.storage.DataStorages; +import org.apache.commons.io.FileUtils; +import org.nuiton.util.FileUtil; +import org.nuiton.util.ZipUtil; + +import java.io.File; + +/** + * Created on 3/11/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class GetCommunityIndicatorResultDataCommand extends AbstractEchoBaseCommand<GetCommunityIndicatorResultDataRequest> { + + @Override + public boolean accept(GetCommunityIndicatorResultDataRequest request) { + boolean result = repository.matchFacade(request) && + repository.matchZone(request); + if (result) { + Predicate<String[]> predicate = createPredicate(request); + result = repository.matchCommunity(predicate); + } + return result; + } + + @Override + public FileResult execute(GetCommunityIndicatorResultDataRequest request) { + + Predicate<String[]> predicate = createPredicate(request); + + File file = getCommunityIndicatorDataFile(predicate, + request.getIndicator()); + + FileResult result = newFileResult(file); + return result; + } + + protected File getCommunityIndicatorDataFile(Predicate<String[]> predicate, + String indicator) { + + try { + + File tempDir = FileUtil.createTempDirectory("coser-chart-population-indicator", "-tmp"); + + File baseDir = new File(tempDir, repository.getSurveyName()); + FileUtils.forceMkdir(baseDir); + + // ajout du fichier csv avec les indicateurs + DataStorage dataStorage = extractCommunity(predicate); + File csvFile = DataStorages.save(dataStorage, "coser-chart-community-indicator", ".csv"); + + File csvFileCopied = new File(baseDir, indicator + ".csv"); + FileUtils.copyFile(csvFile, csvFileCopied); + FileUtils.forceDelete(csvFile); + + //TODO See what to generate here (we don't have any selection in echobase results). +// // ajout du fichier d'information sur les espèces incluses dans +// // les calculs des indicateurs de communautés +// // load project (without data to get reftax data) +// Project project = path.getProject(); +// Selection selection = path.getSelection(); +// File metaFile = webService.generateMetaFilePDF(project, +// selection, +// resultDirectory, +// rSufiResult, +// indicator, +// locale); +// File metaFileCopied = new File(baseDir, "Information.pdf"); +// FileUtils.copyFile(metaFile, metaFileCopied); + + // make zip + File result = File.createTempFile("coser-chart-community-indicator", ".zip"); + result.deleteOnExit(); + ZipUtil.compress(result, baseDir); + + // clean directory + FileUtils.deleteDirectory(tempDir); + return result; + } catch (Exception e) { + throw new CoserTechnicalException("Can't create zip file", e); + } + } + + // --------------------------------------------------------------------- // + // --- Matchers -------------------------------------------------------- // + // --------------------------------------------------------------------- // + + protected Predicate<String[]> createPredicate(GetCommunityIndicatorResultDataRequest request) { + return Predicates.and( + EchoBasePredicates.communityIndicatorPredicate(request.getIndicator()), + EchoBasePredicates.communitySpeciesPredicate(request.getSpecies())); + } +} Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetCommunityIndicatorResultGraphCommand.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetCommunityIndicatorResultCommand.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetCommunityIndicatorResultGraphCommand.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetCommunityIndicatorResultGraphCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,74 @@ +package fr.ifremer.coser.result.repository.echobase.command; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import fr.ifremer.coser.result.repository.echobase.EchoBasePredicates; +import fr.ifremer.coser.result.request.GetCommunityIndicatorResultGraphRequest; +import fr.ifremer.coser.result.result.FileResult; +import org.jfree.chart.JFreeChart; + +import java.io.File; + +/** + * Created on 3/11/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class GetCommunityIndicatorResultGraphCommand extends AbstractEchoBaseCommand<GetCommunityIndicatorResultGraphRequest> { + + @Override + public boolean accept(GetCommunityIndicatorResultGraphRequest request) { + boolean result = repository.isIndicatorsResult() && + repository.matchFacade(request) && + repository.matchZone(request); + if (result) { + Predicate<String[]> predicate = Predicates.and( + EchoBasePredicates.communityIndicatorPredicate(request.getIndicator()), + EchoBasePredicates.communitySpeciesPredicate(request.getSpecies())); + result = repository.matchCommunity(predicate); + } + return result; + } + + @Override + public FileResult execute(GetCommunityIndicatorResultGraphRequest request) { + + // generate chart + JFreeChart chart = generateCommunityChart(request.getZone(), + request.getIndicator(), + request.getSpecies()); + + // generate file from chart + File file = getCharts().generateChartFile("coser-chart-community-indicator-", + chart, + 800, + 400); + + FileResult result = newFileResult(file); + return result; + } + +} Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetIndicatorsForCommunityIndicatorResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetIndicatorsForCommunityIndicatorResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetIndicatorsForCommunityIndicatorResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,10 +22,8 @@ * #L% */ -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; import fr.ifremer.coser.result.request.GetIndicatorsForCommunityIndicatorResultRequest; +import fr.ifremer.coser.result.result.MapResult; import java.util.Map; import java.util.Set; @@ -36,29 +34,21 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetIndicatorsForCommunityIndicatorResultCommand implements ResultRepositoryCommand<EchoBaseResultRepository, GetIndicatorsForCommunityIndicatorResultRequest> { +public class GetIndicatorsForCommunityIndicatorResultCommand extends AbstractEchoBaseCommand<GetIndicatorsForCommunityIndicatorResultRequest> { @Override - public Class<GetIndicatorsForCommunityIndicatorResultRequest> getRequestType() { - return GetIndicatorsForCommunityIndicatorResultRequest.class; - } - - @Override - public boolean accept(EchoBaseResultRepository repository, - GetIndicatorsForCommunityIndicatorResultRequest request) { + public boolean accept(GetIndicatorsForCommunityIndicatorResultRequest request) { return repository.matchFacade(request) && repository.matchZone(request); } @Override - public MapResult execute(EchoBaseResultRepository repository, - GetIndicatorsForCommunityIndicatorResultRequest request) { + public MapResult execute(GetIndicatorsForCommunityIndicatorResultRequest request) { - Set<String> indicatorList = repository.getCommunityIndicators(); - Map<String, String> map = repository.getIndicatorsMap().getIndicatorsValues(indicatorList, request.getLocale()); + Set<String> indicatorList = getCommunityIndicators(); + Map<String, String> map = getIndicatorsMap().getIndicatorsValues(getLocale(), indicatorList); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } - } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetIndicatorsForExtractRawDataAndResultsCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetIndicatorsForExtractRawDataAndResultsCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetIndicatorsForExtractRawDataAndResultsCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,10 +22,8 @@ * #L% */ -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; import fr.ifremer.coser.result.request.GetIndicatorsForExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.result.MapResult; import fr.ifremer.coser.util.DataType; import java.util.Map; @@ -37,57 +35,37 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetIndicatorsForExtractRawDataAndResultsCommand implements ResultRepositoryCommand<EchoBaseResultRepository, GetIndicatorsForExtractRawDataAndResultsRequest> { +public class GetIndicatorsForExtractRawDataAndResultsCommand extends AbstractEchoBaseCommand<GetIndicatorsForExtractRawDataAndResultsRequest> { @Override - public Class<GetIndicatorsForExtractRawDataAndResultsRequest> getRequestType() { - return GetIndicatorsForExtractRawDataAndResultsRequest.class; + public boolean accept(GetIndicatorsForExtractRawDataAndResultsRequest request) { + return repository.matchExtractTypeList(request) && + repository.matchZone(request); } @Override - public boolean accept(EchoBaseResultRepository repository, - GetIndicatorsForExtractRawDataAndResultsRequest request) { - return matchExtractTypeSet(request) && matchZoneList(repository, request); - } + public MapResult execute(GetIndicatorsForExtractRawDataAndResultsRequest request) { - @Override - public MapResult execute(EchoBaseResultRepository repository, - GetIndicatorsForExtractRawDataAndResultsRequest request) { - Set<String> indicatorList = null; if (request.getExtractTypeList().contains(DataType.COMMUNITY)) { // get all community indicators for given zone - indicatorList = repository.getCommunityIndicators(); + indicatorList = getCommunityIndicators(); } else if (request.getExtractTypeList().contains(DataType.POPULATION)) { // get all population indicators for given zone - indicatorList = repository.getPopulationIndicators(); + indicatorList = getPopulationIndicators(); } Map<String, String> map = null; if (indicatorList != null) { - map = repository.getIndicatorsMap().getIndicatorsValues(indicatorList, request.getLocale()); + map = getIndicatorsMap().getIndicatorsValues(getLocale(), indicatorList); } - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } - // --------------------------------------------------------------------- // - // --- Matchers -------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchExtractTypeSet(GetIndicatorsForExtractRawDataAndResultsRequest request) { - //TODO Should deal also with raw-data type - return !request.getExtractTypeList().contains(DataType.SOURCE); - } - - protected boolean matchZoneList(EchoBaseResultRepository repository, - GetIndicatorsForExtractRawDataAndResultsRequest request) { - return request.getZoneList().contains(repository.getZone()); - } - } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetIndicatorsForPopulationIndicatorResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetIndicatorsForPopulationIndicatorResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetIndicatorsForPopulationIndicatorResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,13 +22,11 @@ * #L% */ -import com.google.common.base.Preconditions; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; +import com.google.common.base.Predicate; +import fr.ifremer.coser.result.repository.echobase.EchoBasePredicates; import fr.ifremer.coser.result.request.GetIndicatorsForPopulationIndicatorResultRequest; +import fr.ifremer.coser.result.result.MapResult; -import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -38,53 +36,28 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetIndicatorsForPopulationIndicatorResultCommand implements ResultRepositoryCommand<EchoBaseResultRepository, GetIndicatorsForPopulationIndicatorResultRequest> { +public class GetIndicatorsForPopulationIndicatorResultCommand extends AbstractEchoBaseCommand<GetIndicatorsForPopulationIndicatorResultRequest> { @Override - public Class<GetIndicatorsForPopulationIndicatorResultRequest> getRequestType() { - return GetIndicatorsForPopulationIndicatorResultRequest.class; - } + public boolean accept(GetIndicatorsForPopulationIndicatorResultRequest request) { + boolean result = repository.isIndicatorsResult() && + repository.matchFacade(request) && + repository.matchZone(request); + if (result) { - @Override - public boolean accept(EchoBaseResultRepository repository, - GetIndicatorsForPopulationIndicatorResultRequest request) { - return repository.matchFacade(request) && - repository.matchZone(request) && - matchSpecies(repository, request); + Predicate<String[]> predicate = EchoBasePredicates.populationSpeciesPredicate(request.getSpecies()); + result = repository.matchPopulation(predicate); + } + return result; } @Override - public MapResult execute(EchoBaseResultRepository repository, - GetIndicatorsForPopulationIndicatorResultRequest request) { + public MapResult execute(GetIndicatorsForPopulationIndicatorResultRequest request) { - Set<String> indicatorList = repository.getCommunityIndicators(); - Map<String, String> map = repository.getIndicatorsMap().getIndicatorsValues(indicatorList, request.getLocale()); + Set<String> indicatorList = getCommunityIndicators(); + Map<String, String> map = getIndicatorsMap().getIndicatorsValues(getLocale(), indicatorList); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } - - // --------------------------------------------------------------------- // - // --- Matchers -------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchSpecies(EchoBaseResultRepository repository, - GetIndicatorsForPopulationIndicatorResultRequest request) { - Preconditions.checkNotNull(request.getSpecies()); - - String species = request.getSpecies(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadPopulationIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchIndicatorSpecies(tuple, species)) { - result = true; - break; - } - } - return result; - } - } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetMapResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetMapResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetMapResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,11 +22,8 @@ * #L% */ -import com.google.common.base.Preconditions; -import fr.ifremer.coser.result.FileResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; import fr.ifremer.coser.result.request.GetMapResultRequest; +import fr.ifremer.coser.result.result.FileResult; import java.io.File; @@ -36,39 +33,26 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetMapResultCommand implements ResultRepositoryCommand<EchoBaseResultRepository, GetMapResultRequest> { +public class GetMapResultCommand extends AbstractEchoBaseCommand<GetMapResultRequest> { @Override - public Class<GetMapResultRequest> getRequestType() { - return GetMapResultRequest.class; + public boolean accept(GetMapResultRequest request) { + boolean result = repository.matchFacade(request) && + repository.matchZone(request); + if (result) { + File file = repository.getMapSpeciesFile(request.getSpecies()); + result = file != null; + } + return result; } @Override - public boolean accept(EchoBaseResultRepository repository, - GetMapResultRequest request) { - return repository.matchFacade(request) && - repository.matchZone(request) && - matchSpecies(repository, request); - } + public FileResult execute(GetMapResultRequest request) { - @Override - public FileResult execute(EchoBaseResultRepository repository, - GetMapResultRequest request) { - File file = repository.getMapSpeciesFile(request.getSpecies()); - FileResult result = new FileResult(repository.getId(), file); + FileResult result = newFileResult(file); return result; } - // --------------------------------------------------------------------- // - // --- Matchers -------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchSpecies(EchoBaseResultRepository repository, - GetMapResultRequest request) { - String species = request.getSpecies(); - File file = repository.getMapSpeciesFile(species); - return file != null && file.exists(); - } } Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetPopulationIndicatorResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetPopulationIndicatorResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetPopulationIndicatorResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,283 +0,0 @@ -package fr.ifremer.coser.result.repository.echobase.command; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; -import fr.ifremer.coser.CoserTechnicalException; -import fr.ifremer.coser.result.FileResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; -import fr.ifremer.coser.result.request.GetPopulationIndicatorResultRequest; -import fr.ifremer.coser.storage.DataStorage; -import fr.ifremer.coser.storage.DataStorages; -import fr.ifremer.coser.storage.MemoryDataStorage; -import org.apache.commons.lang3.StringUtils; -import org.jfree.chart.ChartUtilities; -import org.jfree.chart.JFreeChart; -import org.jfree.chart.axis.CategoryAxis; -import org.jfree.chart.axis.CategoryLabelPositions; -import org.jfree.chart.axis.NumberAxis; -import org.jfree.chart.axis.ValueAxis; -import org.jfree.chart.plot.CategoryPlot; -import org.jfree.chart.plot.PlotOrientation; -import org.jfree.chart.renderer.category.CategoryItemRenderer; -import org.jfree.chart.renderer.category.StatisticalLineAndShapeRenderer; -import org.jfree.data.statistics.DefaultStatisticalCategoryDataset; - -import java.awt.Color; -import java.io.File; -import java.io.IOException; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Locale; -import java.util.Map; - -/** - * Created on 3/11/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class GetPopulationIndicatorResultCommand implements ResultRepositoryCommand<EchoBaseResultRepository, GetPopulationIndicatorResultRequest> { - - @Override - public Class<GetPopulationIndicatorResultRequest> getRequestType() { - return GetPopulationIndicatorResultRequest.class; - } - - @Override - public boolean accept(EchoBaseResultRepository repository, GetPopulationIndicatorResultRequest request) { - return repository.matchFacade(request) && - repository.matchZone(request) && - matchSpeciesAndIndicator(repository, request); - } - - @Override - public FileResult execute(EchoBaseResultRepository repository, GetPopulationIndicatorResultRequest r) { - - File file = null; - switch (r.getIndicatorResultType()) { - case DATA: - file = getPopulationIndicatorDataFile(repository, - r.getIndicator(), - r.getSpecies()); - break; - - case GRAPH: - file = getPopulationIndicatorGraphFile(repository, - r.getLocale(), - r.getZone(), - r.getIndicator(), - r.getSpecies()); - break; - } - - - FileResult result = new FileResult(repository.getId(), file); - return result; - } - - protected File getPopulationIndicatorDataFile(EchoBaseResultRepository repository, String species, String indicator) { - - DataStorage dataStorage = new MemoryDataStorage(); - - Iterator<String[]> iterator = repository.loadPopulationIndicatorStorage(false); - - // add header - dataStorage.add(iterator.next()); - - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchIndicatorSpeciesAndIndicator(tuple, species, indicator)) { - dataStorage.add(tuple); - } - } - File result = DataStorages.save(dataStorage, "coser-chart-population-indicator", - ".csv" - ); - return result; - } - - protected File getPopulationIndicatorGraphFile(EchoBaseResultRepository repository, Locale locale, - String zone, - String species, - String indicator) { - - - int multiplicator = 1; - int minYear = Integer.MAX_VALUE; - int maxYear = Integer.MIN_VALUE; - boolean indicatorFound = false; - Map<Integer, Double[]> graphData = new HashMap<Integer, Double[]>(); - Iterator<String[]> iterator = repository.loadPopulationIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - - if (repository.matchIndicatorSpeciesAndIndicator(tuple, species, indicator)) { - indicatorFound = true; - - // XXX echatellier, maybe take care of list here ? - - Double estimation = Double.parseDouble(tuple[6]); - Double ecart = Double.parseDouble(tuple[7]); - int year = Integer.parseInt(tuple[5]); - - if (year < minYear) { - minYear = year; - } - if (year > maxYear) { - maxYear = year; - } - graphData.put(year, new Double[]{estimation, ecart}); - - // si les données sont énormes, on affiche les données - // / multiplicator et on le mentionne dans la légende - if (estimation > 1e9) { - multiplicator = 1000000; - } - if (estimation > 1e6 && multiplicator < 1000000) { - multiplicator = 1000; - } - } - } - - File result = null; - - // avec l'extraction des données, on peut demander a générer un graphique - // sur un indicateur qui n'est pas présent dans le projet courant, - // dans ce cas, on retourne null - if (indicatorFound) { - - String zoneDisplayName = repository.getZonesMap().getZoneFullName(zone); - String indicatorName = repository.getIndicatorsMap().getIndicatorValue(indicator, locale); - String unit = repository.getIndicatorsMap().getIndicatorUnit(indicator); - - // get graph title - String title = zoneDisplayName; - title += " - " + indicatorName; - title += " - " + repository.getSpeciesMap().getReportDisplayName(species); - - // generate dataset with sorted data - DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset(); - for (int indexYear = minYear; indexYear <= maxYear; ++indexYear) { - Double[] entry = graphData.get(indexYear); - if (entry != null) { - Double estimation = entry[0] / multiplicator; - Double ecart = entry[1] / multiplicator; - statisticalDataset.add(estimation, ecart, "Serie1", (Comparable) indexYear); - } else { - statisticalDataset.add(null, null, "Serie1", indexYear); - } - } - - // configure chart - //CategoryAxis categoryAxis = new CategoryAxis(t("coser.business.common.year")); - String yearAxis = repository.getReports().getYearChartTitle(locale); - CategoryAxis categoryAxis = new CategoryAxis(yearAxis); - categoryAxis.setCategoryMargin(0); - categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90); - // label horizontaux - String legendY = indicatorName; - if (multiplicator != 1) { - // affiche par exemple : cm * 1000 - legendY += " (" + unit + "*" + multiplicator + ")"; - } else if (StringUtils.isNotEmpty(unit)) { - legendY += " (" + unit + ")"; - } - ValueAxis valueAxis = new NumberAxis(legendY); - valueAxis.setUpperMargin(0.1); - - CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true); - - // n'affiche pas les nombre sur le graphique - //StandardCategoryItemLabelGenerator itemLabelGenerator = new StandardCategoryItemLabelGenerator(); - //renderer.setBaseItemLabelGenerator(itemLabelGenerator); - //renderer.setBaseItemLabelsVisible(true); - - CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer); - plot.setOrientation(PlotOrientation.VERTICAL); - JFreeChart chart = new JFreeChart(title, - JFreeChart.DEFAULT_TITLE_FONT, plot, true); - - // remove series legend - chart.removeLegend(); - // white background - chart.setBackgroundPaint(Color.WHITE); - - try { - result = File.createTempFile("coser-chart-population-indicator-", ".png"); - result.deleteOnExit(); - ChartUtilities.saveChartAsPNG(result, chart, 800, 400); - } catch (IOException ex) { - throw new CoserTechnicalException("Can't save chart", ex); - } - } - - return result; - } - - // --------------------------------------------------------------------- // - // --- Matchers -------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchSpecies(EchoBaseResultRepository repository, - GetPopulationIndicatorResultRequest request) { - Preconditions.checkNotNull(request.getSpecies()); - - String species = request.getSpecies(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadPopulationIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchIndicatorSpecies(tuple, species)) { - result = true; - break; - } - } - return result; - } - - protected boolean matchSpeciesAndIndicator(EchoBaseResultRepository repository, - GetPopulationIndicatorResultRequest request) { - Preconditions.checkNotNull(request.getSpecies()); - Preconditions.checkNotNull(request.getIndicator()); - - String species = request.getSpecies(); - String indicator = request.getIndicator(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadPopulationIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchIndicatorSpeciesAndIndicator(tuple, species, indicator)) { - result = true; - break; - } - } - return result; - } - -} Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetPopulationIndicatorResultDataCommand.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetPopulationIndicatorResultCommand.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetPopulationIndicatorResultDataCommand.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetPopulationIndicatorResultDataCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,73 @@ +package fr.ifremer.coser.result.repository.echobase.command; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import fr.ifremer.coser.result.repository.echobase.EchoBasePredicates; +import fr.ifremer.coser.result.request.GetPopulationIndicatorResultDataRequest; +import fr.ifremer.coser.result.result.FileResult; +import fr.ifremer.coser.storage.DataStorage; +import fr.ifremer.coser.storage.DataStorages; + +import java.io.File; + +/** + * Created on 3/11/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class GetPopulationIndicatorResultDataCommand extends AbstractEchoBaseCommand<GetPopulationIndicatorResultDataRequest> { + + @Override + public boolean accept(GetPopulationIndicatorResultDataRequest request) { + boolean result = repository.isIndicatorsResult() && + repository.matchFacade(request) && + repository.matchZone(request); + if (result) { + Predicate<String[]> predicate = createPredicate(request); + result = repository.matchPopulation(predicate); + } + return result; + } + + @Override + public FileResult execute(GetPopulationIndicatorResultDataRequest request) { + + Predicate<String[]> predicate = createPredicate(request); + + DataStorage dataStorage = extractPopulation(predicate); + File file = DataStorages.save(dataStorage, "coser-chart-population-indicator", ".csv"); + + FileResult result = newFileResult(file); + return result; + } + + protected Predicate<String[]> createPredicate(GetPopulationIndicatorResultDataRequest request) { + return Predicates.and( + EchoBasePredicates.populationSpeciesPredicate(request.getSpecies()), + EchoBasePredicates.populationIndicatorPredicate(request.getIndicator())); + } + +} Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetPopulationIndicatorResultGraphCommand.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetPopulationIndicatorResultCommand.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetPopulationIndicatorResultGraphCommand.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetPopulationIndicatorResultGraphCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,74 @@ +package fr.ifremer.coser.result.repository.echobase.command; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import fr.ifremer.coser.result.repository.echobase.EchoBasePredicates; +import fr.ifremer.coser.result.request.GetPopulationIndicatorResultGraphRequest; +import fr.ifremer.coser.result.result.FileResult; +import org.jfree.chart.JFreeChart; + +import java.io.File; + +/** + * Created on 3/11/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class GetPopulationIndicatorResultGraphCommand extends AbstractEchoBaseCommand<GetPopulationIndicatorResultGraphRequest> { + + @Override + public boolean accept(GetPopulationIndicatorResultGraphRequest request) { + boolean result = repository.isIndicatorsResult() && + repository.matchFacade(request) && + repository.matchZone(request); + if (result) { + Predicate<String[]> predicate = Predicates.and( + EchoBasePredicates.populationSpeciesPredicate(request.getSpecies()), + EchoBasePredicates.populationIndicatorPredicate(request.getIndicator())); + result = repository.matchPopulation(predicate); + } + return result; + } + + @Override + public FileResult execute(GetPopulationIndicatorResultGraphRequest request) { + + // generate chart + JFreeChart chart = generatePopulationChart(request.getZone(), + request.getSpecies(), + request.getIndicator()); + + // generate file from chart + File file = getCharts().generateChartFile("coser-chart-population-indicator-", + chart, + 800, + 400); + + FileResult result = newFileResult(file); + return result; + } + +} Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesForExtractRawDataAndResultsCommand.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesListForExtractRawDataAndResultsCommand.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesForExtractRawDataAndResultsCommand.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesForExtractRawDataAndResultsCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,57 @@ +package fr.ifremer.coser.result.repository.echobase.command; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.Maps; +import fr.ifremer.coser.result.request.GetSpeciesForExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.result.MapResult; + +import java.util.Map; + +/** + * Created on 3/11/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class GetSpeciesForExtractRawDataAndResultsCommand extends AbstractEchoBaseCommand<GetSpeciesForExtractRawDataAndResultsRequest> { + + @Override + public boolean accept(GetSpeciesForExtractRawDataAndResultsRequest request) { + return repository.matchExtractTypeList(request) && repository.matchZone(request); + } + + @Override + public MapResult execute(GetSpeciesForExtractRawDataAndResultsRequest request) { + + Map<String, String> map = Maps.newHashMap(); + // get all species for population indicators + map.putAll(getPopulationSpeciesMap()); + // get all species for community indicators + map.putAll(getCommunitySpeciesMap()); + + MapResult result = newMapResult(map); + return result; + } + +} Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesForMapResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesForMapResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesForMapResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,13 +22,10 @@ * #L% */ -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; import fr.ifremer.coser.result.request.GetSpeciesForMapResultRequest; +import fr.ifremer.coser.result.result.MapResult; import java.util.Map; -import java.util.Set; /** * Created on 3/11/14. @@ -36,28 +33,20 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetSpeciesForMapResultCommand implements ResultRepositoryCommand<EchoBaseResultRepository, GetSpeciesForMapResultRequest> { +public class GetSpeciesForMapResultCommand extends AbstractEchoBaseCommand<GetSpeciesForMapResultRequest> { @Override - public Class<GetSpeciesForMapResultRequest> getRequestType() { - return GetSpeciesForMapResultRequest.class; - } - - @Override - public boolean accept(EchoBaseResultRepository repository, - GetSpeciesForMapResultRequest request) { + public boolean accept(GetSpeciesForMapResultRequest request) { return repository.matchFacade(request) && repository.matchZone(request); } @Override - public MapResult execute(EchoBaseResultRepository repository, - GetSpeciesForMapResultRequest request) { + public MapResult execute(GetSpeciesForMapResultRequest request) { - Set<String> speciesList = repository.getMapSpecies(); - Map<String, String> map = repository.getSpeciesMap().getSpeciesSubMap(speciesList); + Map<String, String> map = repository.getMapSpecies(); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesForPopulationIndicatorResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesForPopulationIndicatorResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesForPopulationIndicatorResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,13 +22,10 @@ * #L% */ -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; import fr.ifremer.coser.result.request.GetSpeciesForPopulationIndicatorResultRequest; +import fr.ifremer.coser.result.result.MapResult; import java.util.Map; -import java.util.Set; /** * Created on 3/11/14. @@ -36,28 +33,20 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetSpeciesForPopulationIndicatorResultCommand implements ResultRepositoryCommand<EchoBaseResultRepository, GetSpeciesForPopulationIndicatorResultRequest> { +public class GetSpeciesForPopulationIndicatorResultCommand extends AbstractEchoBaseCommand<GetSpeciesForPopulationIndicatorResultRequest> { @Override - public Class<GetSpeciesForPopulationIndicatorResultRequest> getRequestType() { - return GetSpeciesForPopulationIndicatorResultRequest.class; - } - - @Override - public boolean accept(EchoBaseResultRepository repository, - GetSpeciesForPopulationIndicatorResultRequest request) { + public boolean accept(GetSpeciesForPopulationIndicatorResultRequest request) { return repository.matchFacade(request) && repository.matchZone(request); } @Override - public MapResult execute(EchoBaseResultRepository repository, - GetSpeciesForPopulationIndicatorResultRequest request) { + public MapResult execute(GetSpeciesForPopulationIndicatorResultRequest request) { - Set<String> speciesList = repository.getPopulationIndicatorSpecies(); - Map<String, String> map = repository.getSpeciesMap().getSpeciesSubMap(speciesList); + Map<String, String> map = getPopulationSpeciesMap(); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesListForCommunityIndicatorResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesListForCommunityIndicatorResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesListForCommunityIndicatorResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,15 +22,12 @@ * #L% */ -import com.google.common.base.Preconditions; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; +import com.google.common.base.Predicate; +import fr.ifremer.coser.result.repository.echobase.EchoBasePredicates; import fr.ifremer.coser.result.request.GetSpeciesListForCommunityIndicatorResultRequest; +import fr.ifremer.coser.result.result.MapResult; -import java.util.Iterator; import java.util.Map; -import java.util.Set; /** * Created on 3/11/14. @@ -38,52 +35,28 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetSpeciesListForCommunityIndicatorResultCommand implements ResultRepositoryCommand<EchoBaseResultRepository, GetSpeciesListForCommunityIndicatorResultRequest> { +public class GetSpeciesListForCommunityIndicatorResultCommand extends AbstractEchoBaseCommand<GetSpeciesListForCommunityIndicatorResultRequest> { @Override - public Class<GetSpeciesListForCommunityIndicatorResultRequest> getRequestType() { - return GetSpeciesListForCommunityIndicatorResultRequest.class; + public boolean accept(GetSpeciesListForCommunityIndicatorResultRequest request) { + boolean result = repository.isIndicatorsResult() && + repository.matchFacade(request) && + repository.matchZone(request); + if (result) { + Predicate<String[]> predicate = + EchoBasePredicates.communityIndicatorPredicate(request.getIndicator()); + result = repository.matchCommunity(predicate); + } + return result; } @Override - public boolean accept(EchoBaseResultRepository repository, - GetSpeciesListForCommunityIndicatorResultRequest request) { - return repository.matchFacade(request) && - repository.matchZone(request) && - matchIndicator(repository, request); - } + public MapResult execute(GetSpeciesListForCommunityIndicatorResultRequest request) { - @Override - public MapResult execute(EchoBaseResultRepository repository, - GetSpeciesListForCommunityIndicatorResultRequest request) { + Map<String, String> map = getCommunitySpeciesMap(); - Set<String> speciesList = repository.getCommunityIndicatorSpecies(request.getIndicator()); - Map<String, String> map = repository.getSpeciesMap().getSpeciesSubMap(speciesList); - - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } - // --------------------------------------------------------------------- // - // --- Matchers -------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchIndicator(EchoBaseResultRepository repository, - GetSpeciesListForCommunityIndicatorResultRequest request) { - Preconditions.checkNotNull(request.getIndicator()); - - String indicator = request.getIndicator(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadCommunityIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchIndicatorIndicator(tuple, indicator)) { - result = true; - break; - } - } - return result; - } } Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesListForExtractRawDataAndResultsCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesListForExtractRawDataAndResultsCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetSpeciesListForExtractRawDataAndResultsCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,84 +0,0 @@ -package fr.ifremer.coser.result.repository.echobase.command; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.Sets; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; -import fr.ifremer.coser.result.request.GetSpeciesListForExtractRawDataAndResultsRequest; -import fr.ifremer.coser.util.DataType; - -import java.util.Map; -import java.util.Set; - -/** - * Created on 3/11/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class GetSpeciesListForExtractRawDataAndResultsCommand implements ResultRepositoryCommand<EchoBaseResultRepository, GetSpeciesListForExtractRawDataAndResultsRequest> { - - @Override - public Class<GetSpeciesListForExtractRawDataAndResultsRequest> getRequestType() { - return GetSpeciesListForExtractRawDataAndResultsRequest.class; - } - - @Override - public boolean accept(EchoBaseResultRepository repository, - GetSpeciesListForExtractRawDataAndResultsRequest request) { - return matchExtractTypeSet(request) && matchZoneList(repository, request); - } - - @Override - public MapResult execute(EchoBaseResultRepository repository, - GetSpeciesListForExtractRawDataAndResultsRequest request) { - - Set<String> speciesList = Sets.newHashSet(); - // get all species for population indicators - speciesList.addAll(repository.getPopulationIndicatorSpecies()); - // get all species for community indicators - speciesList.addAll(repository.getCommunityIndicatorSpecies()); - - Map<String, String> map = repository.getSpeciesMap().getSpeciesSubMap(speciesList); - - MapResult result = new MapResult(repository.getId(), map); - return result; - } - - // --------------------------------------------------------------------- // - // --- Matchers -------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchExtractTypeSet(GetSpeciesListForExtractRawDataAndResultsRequest request) { - //TODO Should deal also with raw-data type - return !request.getExtractTypeList().contains(DataType.SOURCE); - } - - protected boolean matchZoneList(EchoBaseResultRepository repository, - GetSpeciesListForExtractRawDataAndResultsRequest request) { - return request.getZoneList().contains(repository.getZone()); - } - -} Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForCommunityIndicatorResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForCommunityIndicatorResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForCommunityIndicatorResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -23,10 +23,8 @@ */ import fr.ifremer.coser.bean.ZoneMap; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; import fr.ifremer.coser.result.request.GetZonesForCommunityIndicatorResultRequest; +import fr.ifremer.coser.result.result.MapResult; import java.util.List; import java.util.Map; @@ -37,27 +35,20 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetZonesForCommunityIndicatorResultCommand implements ResultRepositoryCommand<EchoBaseResultRepository, GetZonesForCommunityIndicatorResultRequest> { +public class GetZonesForCommunityIndicatorResultCommand extends AbstractEchoBaseCommand<GetZonesForCommunityIndicatorResultRequest> { @Override - public Class<GetZonesForCommunityIndicatorResultRequest> getRequestType() { - return GetZonesForCommunityIndicatorResultRequest.class; - } - - @Override - public boolean accept(EchoBaseResultRepository repository, - GetZonesForCommunityIndicatorResultRequest request) { + public boolean accept(GetZonesForCommunityIndicatorResultRequest request) { return repository.matchFacade(request); } @Override - public MapResult execute(EchoBaseResultRepository repository, - GetZonesForCommunityIndicatorResultRequest request) { + public MapResult execute(GetZonesForCommunityIndicatorResultRequest request) { - ZoneMap zonesMap = repository.getZonesMap(); + ZoneMap zonesMap = getZonesMap(); List<String> allowedZones = zonesMap.getZonesForFacade(request.getFacade()); Map<String, String> map = zonesMap.getSubZonesMap(repository.getZone(), allowedZones); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForExtractRawDataAndResultsCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForExtractRawDataAndResultsCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForExtractRawDataAndResultsCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -23,10 +23,8 @@ */ import fr.ifremer.coser.bean.ZoneMap; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; import fr.ifremer.coser.result.request.GetZonesForExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.result.MapResult; import java.util.List; import java.util.Map; @@ -37,28 +35,21 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetZonesForExtractRawDataAndResultsCommand implements ResultRepositoryCommand<EchoBaseResultRepository, GetZonesForExtractRawDataAndResultsRequest> { +public class GetZonesForExtractRawDataAndResultsCommand extends AbstractEchoBaseCommand<GetZonesForExtractRawDataAndResultsRequest> { @Override - public Class<GetZonesForExtractRawDataAndResultsRequest> getRequestType() { - return GetZonesForExtractRawDataAndResultsRequest.class; - } - - @Override - public boolean accept(EchoBaseResultRepository repository, - GetZonesForExtractRawDataAndResultsRequest request) { + public boolean accept(GetZonesForExtractRawDataAndResultsRequest request) { return true; } @Override - public MapResult execute(EchoBaseResultRepository repository, - GetZonesForExtractRawDataAndResultsRequest r) { + public MapResult execute(GetZonesForExtractRawDataAndResultsRequest request) { - ZoneMap zonesMap = repository.getZonesMap(); + ZoneMap zonesMap = getZonesMap(); List<String> allowedZones = zonesMap.getZonesForFacade(null); Map<String, String> map = zonesMap.getSubZonesMap(repository.getZone(), allowedZones); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForExtractRawDataCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForExtractRawDataCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForExtractRawDataCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -23,10 +23,8 @@ */ import fr.ifremer.coser.bean.ZoneMap; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; import fr.ifremer.coser.result.request.GetZonesForExtractRawDataRequest; +import fr.ifremer.coser.result.result.MapResult; import java.util.List; import java.util.Map; @@ -37,27 +35,20 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetZonesForExtractRawDataCommand implements ResultRepositoryCommand<EchoBaseResultRepository, GetZonesForExtractRawDataRequest> { +public class GetZonesForExtractRawDataCommand extends AbstractEchoBaseCommand<GetZonesForExtractRawDataRequest> { @Override - public Class<GetZonesForExtractRawDataRequest> getRequestType() { - return GetZonesForExtractRawDataRequest.class; - } - - @Override - public boolean accept(EchoBaseResultRepository repository, - GetZonesForExtractRawDataRequest request) { + public boolean accept(GetZonesForExtractRawDataRequest request) { return repository.matchFacade(request); } @Override - public MapResult execute(EchoBaseResultRepository repository, - GetZonesForExtractRawDataRequest request) { - ZoneMap zonesMap = repository.getZonesMap(); + public MapResult execute(GetZonesForExtractRawDataRequest request) { + ZoneMap zonesMap = getZonesMap(); List<String> allowedZones = zonesMap.getZonesForFacade(request.getFacade()); Map<String, String> map = zonesMap.getSubZonesMap(repository.getZone(), allowedZones); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForMapResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForMapResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForMapResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -23,10 +23,8 @@ */ import fr.ifremer.coser.bean.ZoneMap; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; import fr.ifremer.coser.result.request.GetZonesForMapResultRequest; +import fr.ifremer.coser.result.result.MapResult; import java.util.List; import java.util.Map; @@ -37,28 +35,21 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetZonesForMapResultCommand implements ResultRepositoryCommand<EchoBaseResultRepository, GetZonesForMapResultRequest> { +public class GetZonesForMapResultCommand extends AbstractEchoBaseCommand<GetZonesForMapResultRequest> { @Override - public Class<GetZonesForMapResultRequest> getRequestType() { - return GetZonesForMapResultRequest.class; - } - - @Override - public boolean accept(EchoBaseResultRepository repository, - GetZonesForMapResultRequest request) { + public boolean accept(GetZonesForMapResultRequest request) { return repository.matchFacade(request); } @Override - public MapResult execute(EchoBaseResultRepository repository, - GetZonesForMapResultRequest request) { + public MapResult execute(GetZonesForMapResultRequest request) { - ZoneMap zonesMap = repository.getZonesMap(); + ZoneMap zonesMap = getZonesMap(); List<String> allowedZones = zonesMap.getZonesForFacade(request.getFacade()); Map<String, String> map = zonesMap.getSubZonesMap(repository.getZone(), allowedZones); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForPopulationIndicatorResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForPopulationIndicatorResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/GetZonesForPopulationIndicatorResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -23,10 +23,8 @@ */ import fr.ifremer.coser.bean.ZoneMap; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.echobase.EchoBaseResultRepository; import fr.ifremer.coser.result.request.GetZonesForPopulationIndicatorResultRequest; +import fr.ifremer.coser.result.result.MapResult; import java.util.List; import java.util.Map; @@ -37,27 +35,20 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetZonesForPopulationIndicatorResultCommand implements ResultRepositoryCommand<EchoBaseResultRepository, GetZonesForPopulationIndicatorResultRequest> { +public class GetZonesForPopulationIndicatorResultCommand extends AbstractEchoBaseCommand<GetZonesForPopulationIndicatorResultRequest> { @Override - public Class<GetZonesForPopulationIndicatorResultRequest> getRequestType() { - return GetZonesForPopulationIndicatorResultRequest.class; - } - - @Override - public boolean accept(EchoBaseResultRepository repository, - GetZonesForPopulationIndicatorResultRequest request) { + public boolean accept(GetZonesForPopulationIndicatorResultRequest request) { return repository.matchFacade(request); } @Override - public MapResult execute(EchoBaseResultRepository repository, - GetZonesForPopulationIndicatorResultRequest request) { - ZoneMap zonesMap = repository.getZonesMap(); + public MapResult execute(GetZonesForPopulationIndicatorResultRequest request) { + ZoneMap zonesMap = getZonesMap(); List<String> allowedZones = zonesMap.getZonesForFacade(request.getFacade()); Map<String, String> map = zonesMap.getSubZonesMap(repository.getZone(), allowedZones); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/package-info.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/package-info.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/package-info.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,28 @@ +/** + * Implementations of {@link fr.ifremer.coser.result.CoserCommand} for echobase result repository. + * + * @since 1.5 + */ +package fr.ifremer.coser.result.repository.echobase.command; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/command/package-info.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/package-info.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/package-info.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/echobase/package-info.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,5 +1,5 @@ /** - * Implementation for EchoBase results. + * Implementation for EchoBase result repository. * * @since 1.5 */ Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyPredicates.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyPredicates.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyPredicates.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,175 @@ +package fr.ifremer.coser.result.repository.legacy; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Predicate; +import com.google.common.collect.Lists; + +import java.util.List; + +/** + * Created on 3/13/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class LegacyPredicates { + + protected LegacyPredicates() { + // avoid instances + } + + public static Predicate<String[]> communitySpeciesListPredicate(String species) { + return new CommunitySpeciesListPredicate(Lists.newArrayList(species)); + } + + public static Predicate<String[]> communityIndicatorPredicate(String indicator) { + return new CommunityIndicatorPredicate(Lists.newArrayList(indicator)); + } + + public static Predicate<String[]> communityIndicatorPredicate(List<String> indicator) { + return new CommunityIndicatorPredicate(indicator); + } + + public static Predicate<String[]> communitySpeciesPredicate(List<String> species) { + return new CommunitySpeciesPredicate(Lists.newArrayList(species)); + } + + public static Predicate<String[]> populationSpeciesPredicate(String species) { + return new PopulationSpeciesPredicate(Lists.newArrayList(species)); + } + + public static Predicate<String[]> populationSpeciesPredicate(List<String> species) { + return new PopulationSpeciesPredicate(species); + } + + public static Predicate<String[]> populationIndicatorPredicate(String indicator) { + return new PopulationIndicatorPredicate(Lists.newArrayList(indicator)); + } + + public static Predicate<String[]> populationIndicatorPredicate(List<String> indicator) { + return new PopulationIndicatorPredicate(indicator); + } + + public static Predicate<String[]> speciesListPredicate(String speciesList) { + return new SpeciesListPredicate(speciesList); + } + + protected static class SpeciesListPredicate implements Predicate<String[]> { + + protected final String speciesListLetter; + + SpeciesListPredicate(String speciesList) { + this.speciesListLetter = String.valueOf(speciesList.charAt(0)); + } + + @Override + public boolean apply(String[] input) { + String speciesListCode = input[4]; + boolean result = speciesListLetter.equals(speciesListCode); + return result; + } + } + + protected static class CommunitySpeciesListPredicate implements Predicate<String[]> { + + private final List<String> speciesList; + + CommunitySpeciesListPredicate(List<String> speciesList) { + this.speciesList = speciesList; + } + + @Override + public boolean apply(String[] input) { + // here we match a *speciesList* + String speciesListCode = input[2]; + boolean result = speciesList.contains(speciesListCode); + return result; + } + } + + protected static class CommunitySpeciesPredicate implements Predicate<String[]> { + + private final List<String> species; + + CommunitySpeciesPredicate(List<String> species) { + this.species = species; + } + + @Override + public boolean apply(String[] input) { + // here we match a *species* + String speciesCode = input[3]; + boolean result = species.contains(speciesCode); + return result; + } + } + + protected static class CommunityIndicatorPredicate implements Predicate<String[]> { + + private final List<String> indicator; + + CommunityIndicatorPredicate(List<String> indicator) { + this.indicator = indicator; + } + + @Override + public boolean apply(String[] input) { + String indicatorCode = input[1]; + boolean result = indicator.contains(indicatorCode); + return result; + } + } + + protected static class PopulationSpeciesPredicate implements Predicate<String[]> { + + private final List<String> species; + + PopulationSpeciesPredicate(List<String> species) { + this.species = species; + } + + @Override + public boolean apply(String[] input) { + String speciesCode = input[3]; + boolean result = species.contains(speciesCode); + return result; + } + } + + protected static class PopulationIndicatorPredicate implements Predicate<String[]> { + + private final List<String> indicator; + + PopulationIndicatorPredicate(List<String> indicator) { + this.indicator = indicator; + } + + @Override + public boolean apply(String[] input) { + String indicatorCode = input[1]; + boolean result = indicator.contains(indicatorCode); + return result; + } + } +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyPredicates.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepository.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepository.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepository.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -24,37 +24,31 @@ import com.google.common.base.Function; import com.google.common.base.Preconditions; -import com.google.common.collect.Maps; +import com.google.common.base.Predicate; +import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import fr.ifremer.coser.CoserBusinessConfig; -import fr.ifremer.coser.CoserBusinessException; import fr.ifremer.coser.CoserConstants; -import fr.ifremer.coser.CoserServiceContext; -import fr.ifremer.coser.CoserTechnicalException; import fr.ifremer.coser.bean.EchoBaseProject; -import fr.ifremer.coser.bean.IndicatorMap; import fr.ifremer.coser.bean.RSufiResultPath; import fr.ifremer.coser.bean.SpeciesListMap; import fr.ifremer.coser.bean.SpeciesMap; -import fr.ifremer.coser.bean.ZoneMap; -import fr.ifremer.coser.result.Reports; import fr.ifremer.coser.result.repository.ResultRepository; +import fr.ifremer.coser.result.request.CoserRequestExtractTypeListAware; import fr.ifremer.coser.result.request.CoserRequestFacadeAware; +import fr.ifremer.coser.result.request.CoserRequestRepositoryResultTypeAware; +import fr.ifremer.coser.result.request.CoserRequestRepositoryTypeAware; import fr.ifremer.coser.result.request.CoserRequestZoneAware; -import fr.ifremer.coser.services.ProjectService; +import fr.ifremer.coser.result.request.CoserRequestZoneListAware; import fr.ifremer.coser.storage.DataStorage; import fr.ifremer.coser.storage.DataStorages; +import fr.ifremer.coser.util.DataType; import org.apache.commons.io.FileUtils; -import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.io.File; import java.io.FilenameFilter; -import java.util.Iterator; -import java.util.LinkedHashMap; import java.util.List; -import java.util.Locale; import java.util.Map; import java.util.Set; @@ -105,11 +99,6 @@ protected final FilenameFilter mapSpeciesFilenameFilter; /** - * Service context. - */ - protected final CoserServiceContext serviceContext; - - /** * Survey name (used to get maps). */ protected final String surveyName; @@ -125,22 +114,16 @@ protected SpeciesListMap speciesListMap; /** - * Report helper. + * Unique id of the result */ - protected final Reports reports; + protected final String id; - //FIXME Remove this - protected final ProjectService projectService; - - public LegacyResultRepository(CoserServiceContext serviceContext, - File basedir, + public LegacyResultRepository(File basedir, RSufiResultPath path, String surveyName) { - Preconditions.checkNotNull(serviceContext); Preconditions.checkNotNull(basedir); Preconditions.checkNotNull(path); Preconditions.checkNotNull(surveyName); - this.serviceContext = serviceContext; this.basedir = basedir; this.surveyName = surveyName; this.resultDirectory = FileUtils.getFile( @@ -151,15 +134,18 @@ path.getRsufiResult().getName()); this.mapsDirectory = new File(resultDirectory, CoserConstants.STORAGE_MAPS_DIRECTORY); this.path = path; - this.reports = new Reports(); this.mapFileToSpeciesCode = EchoBaseProject.newMapFileToSpeciesCode(surveyName); this.speciesCodeToMapFile = EchoBaseProject.newSpeciesCodeToMapFileName(surveyName); this.mapSpeciesFilenameFilter = EchoBaseProject.newMapSpeciesFilenameFilter(surveyName); - this.projectService = new ProjectService(serviceContext.getConfig()); + this.id = String.format("%s::%s::%s", + LegacyResultRepositoryType.ID, + resultDirectory, + path.getRsufiResult().isMapsResult() ? "Map" : "Indicator"); + if (log.isInfoEnabled()) { - log.info("New result repository: " + getId()); + log.info("New result repository: " + id); } } @@ -169,11 +155,7 @@ @Override public String getId() { - return String.format("%s::%s::%s", - LegacyResultRepositoryType.ID, - resultDirectory, - path.getRsufiResult().isMapsResult() ? "Map" : "Indicator" - ); + return id; } @Override @@ -181,80 +163,60 @@ return LegacyResultRepositoryType.INSTANCE; } - public File getResultDirectory() { - return resultDirectory; - } - - public RSufiResultPath getPath() { - return path; - } - + @Override public String getSurveyName() { return surveyName; } - public Reports getReports() { - return reports; - } - + @Override public File getBasedir() { return basedir; } + @Override public String getProjectName() { return path.getProject().getName(); } - public String getSelectionName() { - return path.getSelection().getName(); - } - + @Override public String getZone() { return path.getRsufiResult().getZone(); } - public String getResultName() { - return path.getRsufiResult().getName(); - } - + @Override public boolean isMapsResult() { return path.getRsufiResult().isMapsResult(); } + @Override public boolean isIndicatorsResult() { return path.getRsufiResult().isIndicatorsResult(); } + @Override public boolean isPubliableResult() { return path.getRsufiResult().isPubliableResult(); } + @Override public boolean isDataResult() { return path.getRsufiResult().isDataAllowed(); } - //FIXME Remove this - public ProjectService getProjectService() { - return projectService; + public File getResultDirectory() { + return resultDirectory; } - public void loadSelectionData() { - try { - // be sure that data are available for this project - // or it will fail + public RSufiResultPath getPath() { + return path; + } - getProjectService().loadSelectionData(getBasedir().getParentFile(), path.getProject(), path.getSelection()); - } catch (CoserBusinessException e) { - throw new CoserTechnicalException("Could not load project selection", e); - } + public String getSelectionName() { + return path.getSelection().getName(); } - public File extractRSUfiData(File zoneDirectory) { - try { - return getProjectService().extractRSUfiData(path.getProject(), path.getSelection(), zoneDirectory, true); - } catch (CoserBusinessException e) { - throw new CoserTechnicalException("Could not extract raw data", e); - } + public String getResultName() { + return path.getRsufiResult().getName(); } // --------------------------------------------------------------------- // @@ -262,51 +224,72 @@ // --------------------------------------------------------------------- // public boolean matchFacade(CoserRequestFacadeAware request) { + if (log.isTraceEnabled()) { + log.trace("No usage of facade in request: " + request); + } return true; } public boolean matchZone(CoserRequestZoneAware request) { - return path.getRsufiResult().getZone().equals(request.getZone()); + return getZone().equals(request.getZone()); } - public boolean matchPopulationSpecies(String[] tuple, String species) { - String speciesCode = tuple[3]; - boolean result = species.equals(speciesCode); + public boolean matchZone(CoserRequestZoneListAware request) { + List<String> zoneList = request.getZoneList(); + boolean result = zoneList.contains(getZone()); return result; } - public boolean matchPopulationSpeciesAndIndicator(String[] tuple, String species, String indicator) { - String indicatorCode = tuple[1]; - boolean result = matchPopulationSpecies(tuple, species) && indicator.equals(indicatorCode); + public boolean matchRepositoryType(CoserRequestRepositoryTypeAware request) { + boolean result = request.getRepositoryType().equals(LegacyResultRepositoryType.ID); return result; } - public boolean matchCommunityIndicator(String[] tuple, String indicator) { - String indicatorCode = tuple[1]; - boolean result = indicator.equals(indicatorCode); + public boolean matchResultType(CoserRequestRepositoryResultTypeAware request) { + boolean result; + switch (request.getResultType()) { + case MAP: + result = isMapsResult(); + break; + case INDICATOR: + result = isIndicatorsResult(); + break; + default: + result = false; + break; + } return result; } - public boolean matchCommunityIndicatorAndSpeciesList(String[] tuple, String indicator, String speciesList) { - String indicatorCode = tuple[1]; - String speciesListCode = tuple[2]; - boolean result = indicator.equals(indicatorCode) && speciesList.equals(speciesListCode); + public boolean matchExtractTypeList(CoserRequestExtractTypeListAware request) { + boolean result = false; + if (isMapsResult()) { + result = request.getExtractTypeList().contains(DataType.SOURCE); + } else if (isIndicatorsResult()) { + result = request.getExtractTypeList().contains(DataType.POPULATION) || + request.getExtractTypeList().contains(DataType.COMMUNITY); + } + if (isDataResult()) { + result |= request.getExtractTypeList().contains(DataType.SOURCE); + } return result; } - public boolean matchIndicatorList(String[] tuple, List<String> indicatorList) { - String indicatorCode = tuple[1]; - boolean result = indicatorList.contains(indicatorCode); + public boolean matchCommunity(Predicate<String[]> predicate) { + Preconditions.checkNotNull(predicate); + + DataStorage storage = getCommunityIndicatorStorage(); + boolean result = DataStorages.match(storage, predicate, true); + return result; } - public boolean matchIndicatorListAndSpeciesList(String[] tuple, - List<String> indicatorList, - List<String> speciesList) { - String indicatorCode = tuple[1]; - String speciesCode = tuple[3]; - boolean result = indicatorList.contains(indicatorCode) && - speciesList.contains(speciesCode); + public boolean matchPopulation(Predicate<String[]> predicate) { + Preconditions.checkNotNull(predicate); + + DataStorage storage = getPopulationIndicatorStorage(); + boolean result = DataStorages.match(storage, predicate, true); + return result; } @@ -320,107 +303,18 @@ return file; } - // --------------------------------------------------------------------- // - // --- Get species lists ----------------------------------------------- // - // --------------------------------------------------------------------- // - - public Map<String, String> getPopulationIndicatorSpecies() { - Map<String, String> result = Maps.newHashMap(); - - SpeciesMap speciesNames = getSpeciesMap(); - Iterator<String[]> iterator = loadPopulationIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - String speciesCode = tuple[3]; - - String speciesName = speciesNames.getSpeciesName(speciesCode); - - if (StringUtils.isNotEmpty(speciesName)) { - result.put(speciesCode, speciesName); - } - result.put(speciesCode, speciesName); + public Map<String, String> getMapSpeciesMap() { + Set<String> speciesList = Sets.newHashSet(); + File[] files = mapsDirectory.listFiles(mapSpeciesFilenameFilter); + if (files != null) { + List<String> transform = Lists.transform(Lists.newArrayList(files), mapFileToSpeciesCode); + speciesList.addAll(transform); } + Map<String, String> result = getSpeciesMap().getSpeciesSubMap(speciesList); return result; } - public Map<String, String> getCommunityIndicatorSpecies() { - Map<String, String> result = Maps.newHashMap(); - - SpeciesMap speciesNames = getSpeciesMap(); - Iterator<String[]> iterator = loadCommunityIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - String speciesCode = tuple[3]; - - String speciesName = speciesNames.getSpeciesName(speciesCode); - - if (StringUtils.isNotEmpty(speciesName)) { - result.put(speciesCode, speciesName); - } - result.put(speciesCode, speciesName); - } - return result; - } - - public Map<String, String> getCommunityIndicatorSpecies(Locale locale, String indicator) { - - // linked hash map (doit respecter l'ordre d'insertion) - Map<String, String> result = new LinkedHashMap<String, String>(); - - Iterator<String[]> iterator = loadCommunityIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - - if (matchCommunityIndicator(tuple, indicator)) { - String list = tuple[2]; - - String translation = getSpeciesListMap().getSpeciesListName(locale, list); - result.put(list, translation); - } - } - return result; - } - // --------------------------------------------------------------------- // - // --- Get indicator lists --------------------------------------------- // - // --------------------------------------------------------------------- // - - public Set<String> getCommunityIndicators() { - Iterator<String[]> iterator = loadCommunityIndicatorStorage(true); - Set<String> result = Sets.newHashSet(); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - String indicatorCode = tuple[1]; - result.add(indicatorCode); - } - return result; - } - - public Set<String> getPopulationIndicators() { - Iterator<String[]> iterator = loadPopulationIndicatorStorage(true); - Set<String> result = Sets.newHashSet(); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - String indicatorCode = tuple[1]; - result.add(indicatorCode); - } - return result; - } - - public Set<String> getPopulationIndicators(String species) { - Iterator<String[]> iterator = loadPopulationIndicatorStorage(true); - Set<String> result = Sets.newHashSet(); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (matchPopulationSpecies(tuple, species)) { - String indicatorCode = tuple[1]; - result.add(indicatorCode); - } - } - return result; - } - - // --------------------------------------------------------------------- // // --- Get definition maps --------------------------------------------- // // --------------------------------------------------------------------- // @@ -441,43 +335,21 @@ return speciesMap; } - public IndicatorMap getIndicatorsMap() { - return serviceContext.getIndicatorsMap(); - } - - public ZoneMap getZonesMap() { - return serviceContext.getZonesMap(); - } - // --------------------------------------------------------------------- // - // --- storage util methods -------------------------------------------- // + // --- storage methods ------------------------------------------------- // // --------------------------------------------------------------------- // - public Iterator<String[]> loadPopulationIndicatorStorage(boolean skipFirstLine) { + public DataStorage getPopulationIndicatorStorage() { File file = new File(resultDirectory, path.getRsufiResult().getEstPopIndName()); // Campagne Indicateur Liste Espece Strate Annee Estimation EcartType CV - DataStorage dataStorage = DataStorages.load(file, CoserConstants.CSV_RESULT_SEPARATOR_CHAR); - Iterator<String[]> iterator = dataStorage.iterator(skipFirstLine); - return iterator; + DataStorage result = DataStorages.load(file, CoserConstants.CSV_RESULT_SEPARATOR_CHAR); + return result; } - public Iterator<String[]> loadCommunityIndicatorStorage(boolean skipFirstLine) { + public DataStorage getCommunityIndicatorStorage() { File file = new File(resultDirectory, path.getRsufiResult().getEstComIndName()); // Campagne Indicateur Liste Espece Strate Annee Estimation EcartType CV - DataStorage dataStorage = DataStorages.load(file, CoserConstants.CSV_RESULT_SEPARATOR_CHAR); - Iterator<String[]> iterator = dataStorage.iterator(skipFirstLine); - return iterator; + DataStorage result = DataStorages.load(file, CoserConstants.CSV_RESULT_SEPARATOR_CHAR); + return result; } - -// protected <R extends CoserRequest> ResultRepositoryCommand<R> getProducer(R request) { -// Preconditions.checkNotNull(request); -// String requestTypeName = request.getClass().getName(); -// ResultRepositoryCommand<?> resultRepositoryCommand = resultProducers.get(requestTypeName); -// Preconditions.checkNotNull(resultRepositoryCommand); -// return (ResultRepositoryCommand<R>) resultRepositoryCommand; -// } - - public CoserBusinessConfig getConfig() { - return serviceContext.getConfig(); - } } Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepositoryCommandEngine.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepositoryCommandEngine.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepositoryCommandEngine.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,134 +0,0 @@ -package fr.ifremer.coser.result.repository.legacy; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; -import com.google.common.collect.Maps; -import fr.ifremer.coser.result.CoserRequest; -import fr.ifremer.coser.result.CoserResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.ResultRepositoryCommandEngine; -import fr.ifremer.coser.result.repository.legacy.command.DeleteResultsCommand; -import fr.ifremer.coser.result.repository.legacy.command.ExtractRawDataAndResultsCommand; -import fr.ifremer.coser.result.repository.legacy.command.ExtractRawDataCommand; -import fr.ifremer.coser.result.repository.legacy.command.GetAllResultsCommand; -import fr.ifremer.coser.result.repository.legacy.command.GetCommunityIndicatorResultCommand; -import fr.ifremer.coser.result.repository.legacy.command.GetIndicatorsForCommunityIndicatorResultCommand; -import fr.ifremer.coser.result.repository.legacy.command.GetIndicatorsForExtractRawDataAndResultsCommand; -import fr.ifremer.coser.result.repository.legacy.command.GetIndicatorsForPopulationIndicatorResultCommand; -import fr.ifremer.coser.result.repository.legacy.command.GetMapResultCommand; -import fr.ifremer.coser.result.repository.legacy.command.GetPopulationIndicatorResultCommand; -import fr.ifremer.coser.result.repository.legacy.command.GetSpeciesForMapResultCommand; -import fr.ifremer.coser.result.repository.legacy.command.GetSpeciesForPopulationIndicatorResultCommand; -import fr.ifremer.coser.result.repository.legacy.command.GetSpeciesListForCommunityIndicatorResultCommand; -import fr.ifremer.coser.result.repository.legacy.command.GetSpeciesListForExtractRawDataAndResultsCommand; -import fr.ifremer.coser.result.repository.legacy.command.GetZonesForCommunityIndicatorResultCommand; -import fr.ifremer.coser.result.repository.legacy.command.GetZonesForExtractRawDataCommand; -import fr.ifremer.coser.result.repository.legacy.command.GetZonesForMapResultCommand; -import fr.ifremer.coser.result.repository.legacy.command.GetZonesForPopulationIndicatorResultCommand; -import fr.ifremer.coser.result.repository.legacy.command.GetZonesListForExtractRawDataAndResultsCommand; - -import java.util.Map; - -/** - * Created on 3/12/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class LegacyResultRepositoryCommandEngine implements ResultRepositoryCommandEngine { - - protected final LegacyResultRepository resultRepository; - - protected final Map<String, ResultRepositoryCommand<LegacyResultRepository, ?>> commands; - - public LegacyResultRepositoryCommandEngine(LegacyResultRepository resultRepository) { - this.resultRepository = resultRepository; - this.commands = Maps.newHashMap(); - - // get map result - loadCommand(new GetZonesForMapResultCommand()); - loadCommand(new GetSpeciesForMapResultCommand()); - loadCommand(new GetMapResultCommand()); - - // get community indicator result - loadCommand(new GetZonesForCommunityIndicatorResultCommand()); - loadCommand(new GetIndicatorsForCommunityIndicatorResultCommand()); - loadCommand(new GetSpeciesListForCommunityIndicatorResultCommand()); - loadCommand(new GetCommunityIndicatorResultCommand()); - - // get population indicator result - loadCommand(new GetZonesForPopulationIndicatorResultCommand()); - loadCommand(new GetSpeciesForPopulationIndicatorResultCommand()); - loadCommand(new GetIndicatorsForPopulationIndicatorResultCommand()); - loadCommand(new GetPopulationIndicatorResultCommand()); - - // get all results - loadCommand(new GetAllResultsCommand()); - - // extract raw data - loadCommand(new GetZonesForExtractRawDataCommand()); - loadCommand(new ExtractRawDataCommand()); - - // extract raw data and results - loadCommand(new GetZonesListForExtractRawDataAndResultsCommand()); - loadCommand(new GetSpeciesListForExtractRawDataAndResultsCommand()); - loadCommand(new GetIndicatorsForExtractRawDataAndResultsCommand()); - loadCommand(new ExtractRawDataAndResultsCommand()); - - // delete results - loadCommand(new DeleteResultsCommand()); - } - - @Override - public LegacyResultRepository getResultRepository() { - return resultRepository; - } - - @Override - public <R extends CoserRequest> boolean acceptRequest(R request) { - ResultRepositoryCommand<LegacyResultRepository, R> command = getCommand(request); - boolean result = command.accept(resultRepository, request); - return result; - } - - @Override - public <R extends CoserRequest> CoserResult executeRequest(R request) { - ResultRepositoryCommand<LegacyResultRepository, R> command = getCommand(request); - CoserResult result = command.execute(resultRepository, request); - return result; - } - - protected <R extends CoserRequest> ResultRepositoryCommand<LegacyResultRepository, R> getCommand(R request) { - Preconditions.checkNotNull(request); - String requestTypeName = request.getClass().getName(); - ResultRepositoryCommand<LegacyResultRepository, ?> resultRepositoryCommand = commands.get(requestTypeName); - Preconditions.checkNotNull(resultRepositoryCommand); - return (ResultRepositoryCommand<LegacyResultRepository, R>) resultRepositoryCommand; - } - - protected void loadCommand(ResultRepositoryCommand<LegacyResultRepository, ?> command) { - String name = command.getRequestType().getName(); - commands.put(name, command); - } -} Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepositoryProvider.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepositoryProvider.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepositoryProvider.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -24,15 +24,14 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Sets; +import fr.ifremer.coser.CoserBusinessConfig; import fr.ifremer.coser.CoserBusinessException; import fr.ifremer.coser.CoserConstants; -import fr.ifremer.coser.CoserServiceContext; import fr.ifremer.coser.bean.Project; import fr.ifremer.coser.bean.RSufiResult; import fr.ifremer.coser.bean.RSufiResultPath; import fr.ifremer.coser.bean.Selection; import fr.ifremer.coser.result.ResultRepositoryInitializationException; -import fr.ifremer.coser.result.repository.ResultRepositoryCommandEngine; import fr.ifremer.coser.result.repository.ResultRepositoryProvider; import fr.ifremer.coser.services.ProjectService; import org.apache.commons.logging.Log; @@ -57,20 +56,32 @@ */ protected final File basedir; - public LegacyResultRepositoryProvider(File basedir) { + /** + * //FIXME Should remove this + * Application config (used to instanciate some service). + */ + protected final CoserBusinessConfig config; + + public LegacyResultRepositoryProvider(CoserBusinessConfig config, File basedir) { + this.config = config; Preconditions.checkNotNull(basedir); this.basedir = basedir; } @Override - public Set<LegacyResultRepository> loadRepositories(CoserServiceContext serviceContext) { + public LegacyResultRepositoryType getRepositoryType() { + return LegacyResultRepositoryType.INSTANCE; + } + @Override + public Set<LegacyResultRepository> loadRepositories() { + if (log.isInfoEnabled()) { log.info(String.format("Scan for projects from basedir: %s", basedir)); } Set<LegacyResultRepository> result; try { - result = findAllProjectWithResult(serviceContext); + result = findAllProjectWithResult(); } catch (CoserBusinessException e) { throw new ResultRepositoryInitializationException(this, "Could not find projects", e); } @@ -81,24 +92,18 @@ return result; } - @Override - public ResultRepositoryCommandEngine newEngine(LegacyResultRepository repository) { - return new LegacyResultRepositoryCommandEngine(repository); - } - /** * Retourne tous les projets qui ont des résultats. * <p/> * De la forme d'une liste de de path (à la tree path) : * ProjetName/SelectionName/ResultName * - * @param serviceContext service context - * @return results paths + * @return result paths * @throws CoserBusinessException */ - protected Set<LegacyResultRepository> findAllProjectWithResult(CoserServiceContext serviceContext) throws CoserBusinessException { + protected Set<LegacyResultRepository> findAllProjectWithResult() throws CoserBusinessException { - ProjectService projectService = new ProjectService(serviceContext.getConfig()); + ProjectService projectService = new ProjectService(config); Set<LegacyResultRepository> result = Sets.newHashSet(); // loop on projets @@ -134,7 +139,7 @@ } String surveyName = projectService.getProjectSurveyName(rSufiResult, r); - LegacyResultRepository repository = new LegacyResultRepository(serviceContext, existingProject, path, surveyName); + LegacyResultRepository repository = new LegacyResultRepository(existingProject, path, surveyName); if (log.isInfoEnabled()) { Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepositoryType.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepositoryType.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepositoryType.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,10 +22,56 @@ * #L% */ +import com.google.common.collect.Maps; import com.google.common.collect.Sets; +import fr.ifremer.coser.result.CoserRequest; import fr.ifremer.coser.result.ResultType; +import fr.ifremer.coser.result.CoserCommand; import fr.ifremer.coser.result.repository.ResultRepositoryType; +import fr.ifremer.coser.result.repository.legacy.command.DeleteResultsCommand; +import fr.ifremer.coser.result.repository.legacy.command.ExtractRawDataAndResultsCommand; +import fr.ifremer.coser.result.repository.legacy.command.ExtractRawDataCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetAllResultsCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetCommunityIndicatorResultDataCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetCommunityIndicatorResultGraphCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetIndicatorsForCommunityIndicatorResultCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetIndicatorsForExtractRawDataAndResultsCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetIndicatorsForPopulationIndicatorResultCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetMapResultCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetPopulationIndicatorResultDataCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetPopulationIndicatorResultGraphCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetSpeciesForExtractRawDataAndResultsCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetSpeciesForMapResultCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetSpeciesForPopulationIndicatorResultCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetSpeciesListForCommunityIndicatorResultCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetZonesForCommunityIndicatorResultCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetZonesForExtractRawDataAndResultsCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetZonesForExtractRawDataCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetZonesForMapResultCommand; +import fr.ifremer.coser.result.repository.legacy.command.GetZonesForPopulationIndicatorResultCommand; +import fr.ifremer.coser.result.request.DeleteResultsRequest; +import fr.ifremer.coser.result.request.ExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.request.ExtractRawDataRequest; +import fr.ifremer.coser.result.request.GetAllResultsRequest; +import fr.ifremer.coser.result.request.GetCommunityIndicatorResultDataRequest; +import fr.ifremer.coser.result.request.GetCommunityIndicatorResultGraphRequest; +import fr.ifremer.coser.result.request.GetIndicatorsForCommunityIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetIndicatorsForExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.request.GetIndicatorsForPopulationIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetMapResultRequest; +import fr.ifremer.coser.result.request.GetPopulationIndicatorResultDataRequest; +import fr.ifremer.coser.result.request.GetPopulationIndicatorResultGraphRequest; +import fr.ifremer.coser.result.request.GetSpeciesForExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.request.GetSpeciesForMapResultRequest; +import fr.ifremer.coser.result.request.GetSpeciesForPopulationIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetSpeciesListForCommunityIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetZonesForCommunityIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetZonesForExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.request.GetZonesForExtractRawDataRequest; +import fr.ifremer.coser.result.request.GetZonesForMapResultRequest; +import fr.ifremer.coser.result.request.GetZonesForPopulationIndicatorResultRequest; +import java.util.Map; import java.util.Set; import static org.nuiton.i18n.I18n.n; @@ -65,4 +111,44 @@ return Sets.immutableEnumSet(ResultType.MAP, ResultType.INDICATOR); } + @Override + public Map<Class<? extends fr.ifremer.coser.result.CoserRequest>, Class<? extends CoserCommand>> getCommandTypes() { + Map<Class<? extends CoserRequest>, Class<? extends CoserCommand>> result = Maps.newHashMap(); + + // get map result + result.put(GetZonesForMapResultRequest.class, GetZonesForMapResultCommand.class); + result.put(GetSpeciesForMapResultRequest.class, GetSpeciesForMapResultCommand.class); + result.put(GetMapResultRequest.class, GetMapResultCommand.class); + + // get community indicator result + result.put(GetZonesForCommunityIndicatorResultRequest.class, GetZonesForCommunityIndicatorResultCommand.class); + result.put(GetIndicatorsForCommunityIndicatorResultRequest.class, GetIndicatorsForCommunityIndicatorResultCommand.class); + result.put(GetSpeciesListForCommunityIndicatorResultRequest.class, GetSpeciesListForCommunityIndicatorResultCommand.class); + result.put(GetCommunityIndicatorResultDataRequest.class, GetCommunityIndicatorResultDataCommand.class); + result.put(GetCommunityIndicatorResultGraphRequest.class, GetCommunityIndicatorResultGraphCommand.class); + + // get population indicator result + result.put(GetZonesForPopulationIndicatorResultRequest.class, GetZonesForPopulationIndicatorResultCommand.class); + result.put(GetSpeciesForPopulationIndicatorResultRequest.class, GetSpeciesForPopulationIndicatorResultCommand.class); + result.put(GetIndicatorsForPopulationIndicatorResultRequest.class, GetIndicatorsForPopulationIndicatorResultCommand.class); + result.put(GetPopulationIndicatorResultDataRequest.class, GetPopulationIndicatorResultDataCommand.class); + result.put(GetPopulationIndicatorResultGraphRequest.class, GetPopulationIndicatorResultGraphCommand.class); + + // get all results + result.put(GetAllResultsRequest.class, GetAllResultsCommand.class); + + // extract raw data + result.put(GetZonesForExtractRawDataRequest.class, GetZonesForExtractRawDataCommand.class); + result.put(ExtractRawDataRequest.class, ExtractRawDataCommand.class); + + // extract raw data and results + result.put(GetZonesForExtractRawDataAndResultsRequest.class, GetZonesForExtractRawDataAndResultsCommand.class); + result.put(GetSpeciesForExtractRawDataAndResultsRequest.class, GetSpeciesForExtractRawDataAndResultsCommand.class); + result.put(GetIndicatorsForExtractRawDataAndResultsRequest.class, GetIndicatorsForExtractRawDataAndResultsCommand.class); + result.put(ExtractRawDataAndResultsRequest.class, ExtractRawDataAndResultsCommand.class); + + // delete results + result.put(DeleteResultsRequest.class, DeleteResultsCommand.class); + return result; + } } Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/AbstractLegacyCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/AbstractLegacyCommand.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/AbstractLegacyCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,713 @@ +package fr.ifremer.coser.result.repository.legacy.command; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +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.CoserBusinessException; +import fr.ifremer.coser.CoserTechnicalException; +import fr.ifremer.coser.bean.IndicatorMap; +import fr.ifremer.coser.bean.RSufiResultPath; +import fr.ifremer.coser.bean.ZoneMap; +import fr.ifremer.coser.result.CoserCommand; +import fr.ifremer.coser.result.CoserRequest; +import fr.ifremer.coser.result.CoserRequestContext; +import fr.ifremer.coser.result.repository.legacy.LegacyPredicates; +import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; +import fr.ifremer.coser.result.result.ExtractRawDataAndResultsResult; +import fr.ifremer.coser.result.result.FileResult; +import fr.ifremer.coser.result.result.MapResult; +import fr.ifremer.coser.result.result.VoidResult; +import fr.ifremer.coser.result.util.Charts; +import fr.ifremer.coser.result.util.Reports; +import fr.ifremer.coser.services.ProjectService; +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; + +import static org.nuiton.i18n.I18n.l; + +/** + * Created on 3/11/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public abstract class AbstractLegacyCommand<R extends CoserRequest> implements CoserCommand<LegacyResultRepository, R> { + + protected CoserRequestContext context; + + protected LegacyResultRepository repository; + + @Override + public void setRequestContext(CoserRequestContext context) { + this.context = context; + } + + @Override + public void setRepository(LegacyResultRepository repository) { + this.repository = repository; + } + + // --------------------------------------------------------------------- // + // --- Context shortcuts method ---------------------------------------- // + // --------------------------------------------------------------------- // + + public IndicatorMap getIndicatorsMap() { + return context.getIndicatorMap(); + } + + public ZoneMap getZonesMap() { + return context.getZoneMap(); + } + + public Reports getReports() { + return context.getReports(); + } + + public Charts getCharts() { + return context.getCharts(); + } + + public CoserBusinessConfig getConfig() { + return context.getConfig(); + } + + public Locale getLocale() { + return context.getLocale(); + } + + public void loadSelectionData() { + try { + // be sure that data are available for this project + // or it will fail + + ProjectService projectService = new ProjectService(context.getConfig()); + + RSufiResultPath path = repository.getPath(); + projectService.loadSelectionData(repository.getBasedir().getParentFile(), path.getProject(), path.getSelection()); + } catch (CoserBusinessException e) { + throw new CoserTechnicalException("Could not load project selection", e); + } + } + + public File extractRSUfiData(File zoneDirectory) { + try { + FileUtils.forceMkdir(zoneDirectory); + } catch (IOException e) { + throw new CoserTechnicalException("Could not create directory: " + zoneDirectory, e); + } + try { + ProjectService projectService = new ProjectService(context.getConfig()); + + RSufiResultPath path = repository.getPath(); + return projectService.extractRSUfiData(path.getProject(), path.getSelection(), zoneDirectory, true); + } catch (CoserBusinessException e) { + throw new CoserTechnicalException("Could not extract raw data", e); + } + } + + // --------------------------------------------------------------------- // + // --- To create results ----------------------------------------------- // + // --------------------------------------------------------------------- // + + protected MapResult newMapResult(Map<String, String> map) { + MapResult result = new MapResult(repository.getId(), map); + return result; + } + + protected FileResult newFileResult(File file) { + FileResult result = new FileResult(repository.getId(), file); + return result; + } + + protected VoidResult newVoidResult() { + VoidResult result = new VoidResult(repository.getId()); + return result; + } + + protected ExtractRawDataAndResultsResult newExtractRawDataAndResultsResult(MultiKeyMap<String, File> pdfMaps, Map<String, Pair<File, String>> pdfCharts) { + ExtractRawDataAndResultsResult result = new ExtractRawDataAndResultsResult( + repository.getId(), pdfMaps, pdfCharts); + return result; + } + + + + // --------------------------------------------------------------------- // + // --- Get species lists ----------------------------------------------- // + // --------------------------------------------------------------------- // + + protected Set<String> getPopulationSpecies() { + final Set<String> result = Sets.newHashSet(); + + DataStorageWalker walker = new DataStorageWalker() { + @Override + public void onRow(String... tuple) { + String speciesCode = tuple[3]; + result.add(speciesCode); + } + }; + walkOnPopulation(walker); + return result; + } + + protected Map<String, String> getPopulationSpeciesMap() { + final Set<String> speciesList = getPopulationSpecies(); + + Map<String, String> result = repository.getSpeciesMap().getSpeciesSubMap(speciesList); + +// SpeciesMap speciesNames = getSpeciesMap(); +// Iterator<String[]> iterator = loadPopulationIndicatorStorage(true); +// while (iterator.hasNext()) { +// String[] tuple = iterator.next(); +// String speciesCode = tuple[3]; +// +// String speciesName = speciesNames.getSpeciesName(speciesCode); +// +// if (StringUtils.isNotEmpty(speciesName)) { +// result.put(speciesCode, speciesName); +// } +// result.put(speciesCode, speciesName); +// } + return result; + } + + protected Map<String, String> getCommunitySpeciesMap() { + final Set<String> speciesList = Sets.newHashSet(); + + DataStorageWalker walker = new DataStorageWalker() { + @Override + public void onRow(String... tuple) { + String speciesCode = tuple[3]; + speciesList.add(speciesCode); + } + }; + walkOnCommunity(walker); + Map<String, String> result = repository.getSpeciesMap().getSpeciesSubMap(speciesList); + +// SpeciesMap speciesNames = getSpeciesMap(); +// Iterator<String[]> iterator = loadCommunityIndicatorStorage(true); +// while (iterator.hasNext()) { +// String[] tuple = iterator.next(); +// String speciesCode = tuple[3]; +// +// String speciesName = speciesNames.getSpeciesName(speciesCode); +// +// if (StringUtils.isNotEmpty(speciesName)) { +// result.put(speciesCode, speciesName); +// } +// result.put(speciesCode, speciesName); +// } + return result; + } + + // --------------------------------------------------------------------- // + // --- Get indicator lists --------------------------------------------- // + // --------------------------------------------------------------------- // + + protected Set<String> getCommunityIndicators() { + final Set<String> result = Sets.newHashSet(); + DataStorageWalker walker = new DataStorageWalker() { + @Override + public void onRow(String... tuple) { + String indicatorCode = tuple[1]; + result.add(indicatorCode); + } + }; + walkOnCommunity(walker); +// Iterator<String[]> iterator = loadCommunityIndicatorStorage(true); +// final Set<String> result = Sets.newHashSet(); +// while (iterator.hasNext()) { +// String[] tuple = iterator.next(); +// String indicatorCode = tuple[1]; +// result.add(indicatorCode); +// } + return result; + } + + protected Set<String> getPopulationIndicators() { + final Set<String> result = Sets.newHashSet(); + DataStorageWalker walker = new DataStorageWalker() { + @Override + public void onRow(String... tuple) { + String indicatorCode = tuple[1]; + result.add(indicatorCode); + } + }; + walkOnPopulation(walker); +// Iterator<String[]> iterator = loadPopulationIndicatorStorage(true); +// Set<String> result = Sets.newHashSet(); +// while (iterator.hasNext()) { +// String[] tuple = iterator.next(); +// String indicatorCode = tuple[1]; +// result.add(indicatorCode); +// } + return result; + } + + protected Set<String> getPopulationIndicators(String species) { + final Set<String> result = Sets.newHashSet(); + DataStorageWalker walker = new DataStorageWalker() { + @Override + public void onRow(String... tuple) { + String indicatorCode = tuple[1]; + result.add(indicatorCode); + } + }; + walkOnPopulation(LegacyPredicates.populationSpeciesPredicate(species), walker); +// Iterator<String[]> iterator = loadPopulationIndicatorStorage(true); +// Set<String> result = Sets.newHashSet(); +// while (iterator.hasNext()) { +// String[] tuple = iterator.next(); +// if (matchPopulationSpecies(tuple, species)) { +// String indicatorCode = tuple[1]; +// result.add(indicatorCode); +// } +// } + return result; + } + + // --------------------------------------------------------------------- // + // --- Walk on indicators ---------------------------------------------- // + // --------------------------------------------------------------------- // + + protected void walkOnCommunity(DataStorageWalker walker) { + Preconditions.checkNotNull(walker); + + DataStorage storage = repository.getCommunityIndicatorStorage(); + DataStorages.walk(storage, walker); + } + + protected void walkOnCommunity(Predicate<String[]> predicate, DataStorageWalker walker) { + Preconditions.checkNotNull(walker); + Preconditions.checkNotNull(predicate); + + DataStorage storage = repository.getCommunityIndicatorStorage(); + DataStorages.walk(storage, predicate, walker); + } + + protected void walkOnPopulation(DataStorageWalker walker) { + Preconditions.checkNotNull(walker); + + DataStorage storage = repository.getPopulationIndicatorStorage(); + DataStorages.walk(storage, walker); + } + + protected void walkOnPopulation(Predicate<String[]> predicate, DataStorageWalker walker) { + Preconditions.checkNotNull(predicate); + Preconditions.checkNotNull(walker); + + DataStorage storage = repository.getPopulationIndicatorStorage(); + DataStorages.walk(storage, predicate, walker); + } + + // --------------------------------------------------------------------- // + // --- Extract indicator data ------------------------------------------ // + // --------------------------------------------------------------------- // + + protected DataStorage extractCommunity(Predicate<String[]> predicate) { + Preconditions.checkNotNull(predicate); + + String headerList = l(getLocale(), "coser.business.rsufi.community.header"); + String header[] = headerList.split("\\s*,\\s*"); + + DataStorage source = repository.getCommunityIndicatorStorage(); + DataStorage result = DataStorages.sub(source, predicate, header); + return result; + } + + protected DataStorage extractPopulation(Predicate<String[]> predicate) { + Preconditions.checkNotNull(predicate); + + String headerList = l(getLocale(), "coser.business.rsufi.population.header"); + String header[] = headerList.split("\\s*,\\s*"); + + DataStorage source = repository.getPopulationIndicatorStorage(); + DataStorage result = DataStorages.sub(source, predicate, header); + return result; + } + + // --------------------------------------------------------------------- // + // --- Generate indicator charts --------------------------------------- // + // --------------------------------------------------------------------- // + + protected JFreeChart generateCommunityChart(String zone, + String indicator, + String speciesList) { + + Predicate<String[]> predicate = Predicates.and( + LegacyPredicates.communityIndicatorPredicate(indicator), + LegacyPredicates.communitySpeciesListPredicate(speciesList)); + + Charts.ExtractGraphDataWalker walker = new Charts.ExtractGraphDataWalker() { + + @Override + protected String getEstimationData(String... tuple) { + return tuple[5]; + } + + @Override + protected String getEcartData(String... tuple) { + return tuple[6]; + } + + @Override + protected String getYearData(String... tuple) { + return tuple[4]; + } + }; + walkOnCommunity(predicate, walker); + + Locale locale = getLocale(); + + // get graph title + String zoneDisplayName = getZonesMap().getZoneFullName(zone); + String indicatorName = getIndicatorsMap().getIndicatorValue(locale, indicator); + String speciesListName = repository.getSpeciesListMap().getSpeciesListName(locale, speciesList); + String chartTitle = zoneDisplayName + " - " + indicatorName + " - " + speciesListName; + + JFreeChart chart = getCharts().generateCommunityChart(locale, + walker, + getIndicatorsMap(), + indicator, + chartTitle); + return chart; + } + + protected JFreeChart generatePopulationChart(String zone, + String species, + String indicator) { + + // get data to put in graph + Predicate<String[]> predicate = Predicates.and( + LegacyPredicates.populationSpeciesPredicate(species), + LegacyPredicates.populationIndicatorPredicate(indicator)); + + Charts.ExtractGraphDataWalker walker = new Charts.ExtractGraphDataWalker() { + + @Override + protected String getEstimationData(String... tuple) { + return tuple[6]; + } + + @Override + protected String getEcartData(String... tuple) { + return tuple[7]; + } + + @Override + protected String getYearData(String... tuple) { + return tuple[5]; + } + }; + walkOnPopulation(predicate, walker); + + Locale locale = getLocale(); + + // get graph title + String zoneDisplayName = getZonesMap().getZoneFullName(zone); + String indicatorName = getIndicatorsMap().getIndicatorValue(locale, indicator); + String speciesName = repository.getSpeciesMap().getReportDisplayName(species); + String chartTitle = zoneDisplayName + " - " + indicatorName + " - " + speciesName; + + JFreeChart chart = getCharts().generatePopulationChart(locale, + walker, + getIndicatorsMap(), + indicator, + chartTitle); + return chart; + } + +// protected JFreeChart generateCommunityChart(Locale locale, +// String zone, +// String indicator, +// String speciesList) { +// +// Predicate<String[]> predicate = Predicates.and( +// LegacyPredicates.communityIndicatorPredicate(indicator), +// LegacyPredicates.communitySpeciesListPredicate(speciesList)); +// +// CommunityExtractGraphDataWalker walker = new CommunityExtractGraphDataWalker(); +// walkOnCommunity(predicate, walker); +// +// // get graph title +// String zoneDisplayName = getZoneMap().getZoneFullName(zone); +// String indicatorName = getIndicatorMap().getIndicatorValue(locale, indicator); +// String speciesListName = repository.getSpeciesListMap().getSpeciesListName(locale, speciesList); +// String chartTitle = zoneDisplayName + " - " + indicatorName + " - " + speciesListName; +// +// int multiplicator = walker.getMultiplicator(); +// int minYear = walker.getMinYear(); +// int maxYear = walker.getMaxYear(); +// Map<Integer, Double[]> graphData = walker.getGraphData(); +// +// // generate dataset with sorted data +// DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset(); +// for (int indexYear = minYear; indexYear <= maxYear; ++indexYear) { +// Double[] entry = graphData.get(indexYear); +// if (entry != null) { +// Double estimation = entry[0] / multiplicator; +// Double ecart = entry[1] / multiplicator; +// statisticalDataset.add(estimation, ecart, "Serie1", (Comparable) indexYear); +// } else { +// statisticalDataset.add(null, null, "Serie1", indexYear); +// } +// } +// +// // configure chart +// String yearAxis = Reports.getYearChartTitle(locale); +// CategoryAxis categoryAxis = new CategoryAxis(yearAxis); +// categoryAxis.setCategoryMargin(0); +// categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90); +// +// String unit = getIndicatorMap().getIndicatorUnit(indicator); +// // label horizontaux +// String legendY = indicatorName; +// if (multiplicator != 1) { +// // affiche par exemple : cm * 1000 +// legendY += " (" + unit + "*" + multiplicator + ")"; +// } else if (StringUtils.isNotEmpty(unit)) { +// legendY += " (" + unit + ")"; +// } +// ValueAxis valueAxis = new NumberAxis(legendY); +// valueAxis.setUpperMargin(0.1); +// +// CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true); +// +// CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer); +// plot.setOrientation(PlotOrientation.VERTICAL); +// JFreeChart chart = new JFreeChart(chartTitle, JFreeChart.DEFAULT_TITLE_FONT, plot, true); +// +// // remove series legend +// chart.removeLegend(); +// // white background +// chart.setBackgroundPaint(Color.WHITE); +// +// return chart; +// } + +// protected JFreeChart generatePopulationChart(Locale locale, +// String zone, +// String species, +// String indicator) { +// +// // get data to put in graph +// Predicate<String[]> predicate = Predicates.and( +// LegacyPredicates.populationSpeciesPredicate(species), +// LegacyPredicates.populationIndicatorPredicate(indicator)); +// +// PopulationExtractGraphDataWalker walker = new PopulationExtractGraphDataWalker(); +// walkOnPopulation(predicate, walker); +// +// int multiplicator = walker.getMultiplicator(); +// int minYear = walker.getMinYear(); +// int maxYear = walker.getMaxYear(); +// Map<Integer, Double[]> graphData = walker.getGraphData(); +// +// String zoneDisplayName = getZoneMap().getZoneFullName(zone); +// String indicatorName = getIndicatorMap().getIndicatorValue(locale, indicator); +// +// // get graph title +// String title = zoneDisplayName + " - " + indicatorName + " - " + repository.getSpeciesMap().getReportDisplayName(species); +// +// // generate dataset with sorted data +// DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset(); +// for (int indexYear = minYear; indexYear <= maxYear; ++indexYear) { +// Double[] entry = graphData.get(indexYear); +// if (entry != null) { +// Double estimation = entry[0] / multiplicator; +// Double ecart = entry[1] / multiplicator; +// statisticalDataset.add(estimation, ecart, "Serie1", (Comparable) indexYear); +// } else { +// statisticalDataset.add(null, null, "Serie1", indexYear); +// } +// } +// +// // configure chart +// //CategoryAxis categoryAxis = new CategoryAxis(t("coser.business.common.year")); +// String yearAxis = Reports.getYearChartTitle(locale); +// CategoryAxis categoryAxis = new CategoryAxis(yearAxis); +// categoryAxis.setCategoryMargin(0); +// categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90); +// +// // label horizontaux +// String unit = getIndicatorMap().getIndicatorUnit(indicator); +// String legendY = indicatorName; +// if (multiplicator != 1) { +// // affiche par exemple : cm * 1000 +// legendY += " (" + unit + "*" + multiplicator + ")"; +// } else if (StringUtils.isNotEmpty(unit)) { +// legendY += " (" + unit + ")"; +// } +// ValueAxis valueAxis = new NumberAxis(legendY); +// valueAxis.setUpperMargin(0.1); +// +// CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true); +// +// CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer); +// plot.setOrientation(PlotOrientation.VERTICAL); +// JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, true); +// +// // remove series legend +// chart.removeLegend(); +// // white background +// chart.setBackgroundPaint(Color.WHITE); +// +// return chart; +// } +// +// protected static class CommunityExtractGraphDataWalker implements DataStorageWalker { +// +// int multiplicator = 1; +// +// int minYear = Integer.MAX_VALUE; +// +// int maxYear = Integer.MIN_VALUE; +// +// boolean indicatorFound = false; +// +// Map<Integer, Double[]> graphData = new HashMap<Integer, Double[]>(); +// +// @Override +// public void onRow(String... tuple) { +// +// indicatorFound = true; +// +// Double estimation = Double.parseDouble(tuple[5]); +// Double ecart = Double.parseDouble(tuple[6]); +// int year = Integer.parseInt(tuple[4]); +// +// if (year < minYear) { +// minYear = year; +// } +// if (year > maxYear) { +// maxYear = year; +// } +// graphData.put(year, new Double[]{estimation, ecart}); +// +// // si les données sont énormes, on affiche les données +// // / multiplicator et on le mentionne dans la légende +// if (estimation > 1e9) { +// multiplicator = 1000000; +// } +// if (estimation > 1e6 && multiplicator < 1000000) { +// multiplicator = 1000; +// } +// } +// +// public int getMultiplicator() { +// return multiplicator; +// } +// +// public int getMinYear() { +// return minYear; +// } +// +// public int getMaxYear() { +// return maxYear; +// } +// +// public boolean isIndicatorFound() { +// return indicatorFound; +// } +// +// public Map<Integer, Double[]> getGraphData() { +// return graphData; +// } +// } + +// protected static class PopulationExtractGraphDataWalker implements DataStorageWalker { +// +// int multiplicator = 1; +// +// int minYear = Integer.MAX_VALUE; +// +// int maxYear = Integer.MIN_VALUE; +// +// boolean indicatorFound = false; +// +// Map<Integer, Double[]> graphData = new HashMap<Integer, Double[]>(); +// +// @Override +// public void onRow(String... tuple) { +// +// indicatorFound = true; +// +// Double estimation = Double.parseDouble(tuple[6]); +// Double ecart = Double.parseDouble(tuple[7]); +// int year = Integer.parseInt(tuple[5]); +// +// if (year < minYear) { +// minYear = year; +// } +// if (year > maxYear) { +// maxYear = year; +// } +// graphData.put(year, new Double[]{estimation, ecart}); +// +// // si les données sont énormes, on affiche les données +// // / multiplicator et on le mentionne dans la légende +// if (estimation > 1e9) { +// multiplicator = 1000000; +// } +// if (estimation > 1e6 && multiplicator < 1000000) { +// multiplicator = 1000; +// } +// } +// +// public int getMultiplicator() { +// return multiplicator; +// } +// +// public int getMinYear() { +// return minYear; +// } +// +// public int getMaxYear() { +// return maxYear; +// } +// +// public boolean isIndicatorFound() { +// return indicatorFound; +// } +// +// public Map<Integer, Double[]> getGraphData() { +// return graphData; +// } +// } + +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/AbstractLegacyCommand.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/DeleteResultsCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/DeleteResultsCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/DeleteResultsCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -24,11 +24,6 @@ import fr.ifremer.coser.CoserTechnicalException; import fr.ifremer.coser.result.CoserResult; -import fr.ifremer.coser.result.ResultType; -import fr.ifremer.coser.result.VoidResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepositoryType; import fr.ifremer.coser.result.request.DeleteResultsRequest; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; @@ -36,7 +31,6 @@ import java.io.File; import java.io.IOException; -import java.util.List; /** * Created on 3/11/14. @@ -44,42 +38,22 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class DeleteResultsCommand implements ResultRepositoryCommand<LegacyResultRepository, DeleteResultsRequest> { +public class DeleteResultsCommand extends AbstractLegacyCommand<DeleteResultsRequest> { /** Logger. */ private static final Log log = LogFactory.getLog(DeleteResultsCommand.class); -// -// protected final LegacyResultRepository repository; -// -// protected final RSufiResult rsufiResult; -// -// public DeleteResultsCommand(LegacyResultRepository repository) { -// this.repository = repository; -// this.rsufiResult = repository.path.getRsufiResult(); -// } -// -// @Override -// public LegacyResultRepository getRepository() { -// return repository; -// } - @Override - public Class<DeleteResultsRequest> getRequestType() { - return DeleteResultsRequest.class; - } - - @Override - public boolean accept(LegacyResultRepository repository, DeleteResultsRequest request) { - boolean result = matchRepositoryType(request) && - matchResultType(repository, request) && - matchPublish(repository) && - matchZone(repository, request); + public boolean accept(DeleteResultsRequest request) { + boolean result = repository.matchRepositoryType(request) && + repository.matchResultType(request) && + repository.isPubliableResult() && + repository.matchZone(request); return result; } @Override - public CoserResult execute(LegacyResultRepository repository, DeleteResultsRequest request) { + public CoserResult execute(DeleteResultsRequest request) { File basedir = repository.getBasedir(); if (log.isInfoEnabled()) { log.info("Will delete project at: " + basedir); @@ -89,45 +63,7 @@ } catch (IOException e) { throw new CoserTechnicalException("Could not delete project at: " + basedir, e); } - return new VoidResult(repository.getId()); + return newVoidResult(); } - // --------------------------------------------------------------------- // - // --- Matchers -------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchRepositoryType(DeleteResultsRequest request) { - boolean result = request.getResultRepositoryType().equals(LegacyResultRepositoryType.ID); - return result; - } - - protected boolean matchResultType(LegacyResultRepository repository, DeleteResultsRequest request) { - boolean result; - ResultType resultType = request.getResultType(); - switch (resultType) { - - case MAP: - result = repository.isMapsResult(); - break; - case INDICATOR: - result = repository.isIndicatorsResult(); - break; - default: - result = false; - break; - } - return result; - } - - protected boolean matchPublish(LegacyResultRepository repository) { - boolean result = repository.isPubliableResult(); - return result; - } - - protected boolean matchZone(LegacyResultRepository repository, DeleteResultsRequest request) { - List<String> zoneList = request.getZoneList(); - boolean result = zoneList.contains(repository.getZone()); - return result; - } - } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/ExtractRawDataAndResultsCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/ExtractRawDataAndResultsCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/ExtractRawDataAndResultsCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,54 +22,30 @@ * #L% */ -import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import fr.ifremer.coser.CoserTechnicalException; -import fr.ifremer.coser.bean.IndicatorMap; import fr.ifremer.coser.bean.SpeciesMap; -import fr.ifremer.coser.result.FileResult; -import fr.ifremer.coser.result.Reports; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; +import fr.ifremer.coser.result.repository.legacy.LegacyPredicates; import fr.ifremer.coser.result.request.ExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.result.ExtractRawDataAndResultsResult; import fr.ifremer.coser.storage.DataStorage; +import fr.ifremer.coser.storage.DataStorageWalker; import fr.ifremer.coser.storage.DataStorages; -import fr.ifremer.coser.storage.MemoryDataStorage; import fr.ifremer.coser.util.DataType; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.collections4.MapUtils; -import org.apache.commons.collections4.keyvalue.MultiKey; 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; import org.apache.commons.logging.LogFactory; -import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; -import org.jfree.chart.axis.CategoryAxis; -import org.jfree.chart.axis.CategoryLabelPositions; -import org.jfree.chart.axis.NumberAxis; -import org.jfree.chart.axis.ValueAxis; -import org.jfree.chart.plot.CategoryPlot; -import org.jfree.chart.plot.PlotOrientation; -import org.jfree.chart.renderer.category.CategoryItemRenderer; -import org.jfree.chart.renderer.category.StatisticalLineAndShapeRenderer; -import org.jfree.data.statistics.DefaultStatisticalCategoryDataset; -import org.nuiton.util.FileUtil; -import org.nuiton.util.ZipUtil; -import java.awt.Color; import java.io.File; -import java.io.IOException; -import java.io.StringWriter; -import java.util.Collection; import java.util.HashMap; -import java.util.Iterator; import java.util.List; -import java.util.Locale; import java.util.Map; -import java.util.Set; /** * Created on 3/11/14. @@ -77,122 +53,88 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class ExtractRawDataAndResultsCommand implements ResultRepositoryCommand<LegacyResultRepository, ExtractRawDataAndResultsRequest> { +public class ExtractRawDataAndResultsCommand extends AbstractLegacyCommand<ExtractRawDataAndResultsRequest> { /** Logger. */ private static final Log log = LogFactory.getLog(ExtractRawDataAndResultsCommand.class); @Override - public Class<ExtractRawDataAndResultsRequest> getRequestType() { - return ExtractRawDataAndResultsRequest.class; - } + public boolean accept(ExtractRawDataAndResultsRequest request) { + boolean result = repository.matchExtractTypeList(request) && + repository.matchZone(request); + if (result) { - @Override - public boolean accept(LegacyResultRepository repository, - ExtractRawDataAndResultsRequest request) { - return matchExtractTypeSet(repository, request) && - matchZoneList(repository, request) && - (matchPopulationIndicatorListAndSpeciesList(repository, request) || - matchCommunityIndicatorListAndSpeciesList(repository, request)); - } + if (request.getExtractTypeList().contains(DataType.POPULATION)) { - @Override - public FileResult execute(LegacyResultRepository repository, - ExtractRawDataAndResultsRequest r) { + // match population indicator? + Predicate<String[]> predicate = Predicates.and( + LegacyPredicates.populationIndicatorPredicate(request.getPopulationIndicatorList()), + LegacyPredicates.populationSpeciesPredicate(request.getSpeciesList())); + result = repository.matchPopulation(predicate); + } - Locale locale = r.getLocale(); - List<String> zoneList = r.getZoneList(); - List<DataType> extractTypeList = r.getExtractTypeList(); - List<String> speciesList = r.getSpeciesList(); - List<String> communityIndicatorList = r.getCommunityIndicatorList(); - List<String> populationIndicatorList = r.getPopulationIndicatorList(); + if (!result) { - File resultZip = null; - File tempDir = null; - try { - tempDir = FileUtil.createTempDirectory("coser-extract-", "-tmp"); + if (request.getExtractTypeList().contains(DataType.COMMUNITY)) { - File subDir = new File(tempDir, "Indicateurs_Ifremer"); - FileUtils.forceMkdir(subDir); - - // les sources se retrouve dans le zip a cote du pdf - if (extractTypeList.contains(DataType.SOURCE)) { - if (log.isDebugEnabled()) { - log.debug("Extracting sources"); + // match community indicator? + Predicate<String[]> predicate = Predicates.and( + LegacyPredicates.communityIndicatorPredicate(request.getCommunityIndicatorList()), + LegacyPredicates.communitySpeciesPredicate(request.getSpeciesList())); + result = repository.matchCommunity(predicate); } - File srcDir = new File(subDir, "sources"); - extractSource(repository, srcDir); } + } + return result; + } - // les cartes doivent se retrouver dans le pdf - MultiKeyMap pdfMaps = null; - if (extractTypeList.contains(DataType.MAP)) { - if (log.isDebugEnabled()) { - log.debug("Extracting maps"); - } - SpeciesMap speciesMap = repository.getSpeciesMap(); - String zone = repository.getZone(); - for (String species : speciesList) { - File mapFile = repository.getMapSpeciesFile(species); - pdfMaps.put(zone, speciesMap.getSpeciesName(species), mapFile); - } - } + @Override + public ExtractRawDataAndResultsResult execute(ExtractRawDataAndResultsRequest request) { - // les graphiques sont également dans le pdf - MultiKeyMap pdfCharts = null; - if (CollectionUtils.isNotEmpty(communityIndicatorList) || - CollectionUtils.isNotEmpty(populationIndicatorList)) { - if (log.isDebugEnabled()) { - log.debug("Extracting charts"); - } - pdfCharts = extractCharts(repository, - speciesList, - communityIndicatorList, - populationIndicatorList, - locale); - } + List<DataType> extractTypeList = request.getExtractTypeList(); + List<String> speciesList = request.getSpeciesList(); + List<String> communityIndicatorList = request.getCommunityIndicatorList(); + List<String> populationIndicatorList = request.getPopulationIndicatorList(); - Reports reports = repository.getReports(); + File extractDirectory = request.getExtractDirectory(); - // generate pdf if necessary - if (MapUtils.isNotEmpty(pdfMaps) || MapUtils.isNotEmpty(pdfCharts)) { - if (log.isDebugEnabled()) { - log.debug("Generated Extract PDF"); - } - reports.generateExtractPDF(subDir, - zoneList, - pdfMaps, - pdfCharts, - repository.getZonesMap(), - locale); + // les sources se retrouve dans le zip a cote du pdf + if (extractTypeList.contains(DataType.SOURCE)) { + if (log.isDebugEnabled()) { + log.debug("Extracting sources"); } + File srcDir = new File(extractDirectory, "sources"); + extractSource(srcDir); + } - // fichier de décharge en pdf + // les cartes doivent se retrouver dans le pdf + MultiKeyMap<String, File> pdfMaps = null; + if (extractTypeList.contains(DataType.MAP)) { if (log.isDebugEnabled()) { - log.debug("Generated decharge PDF"); + log.debug("Extracting maps"); } - String filename = reports.getDechargeFilename(locale); - File dechargePDF = new File(subDir, filename); - reports.generateDechargePDF(dechargePDF, locale, null, null); + pdfMaps = new MultiKeyMap<String, File>(); + SpeciesMap speciesMap = repository.getSpeciesMap(); + String zone = repository.getZone(); + for (String species : speciesList) { + File mapFile = repository.getMapSpeciesFile(species); + String speciesName = speciesMap.getSpeciesName(species); + pdfMaps.put(zone, speciesName, mapFile); + } + } - // make zip + // les graphiques sont également dans le pdf + Map<String, Pair<File, String>> pdfCharts = null; + if (CollectionUtils.isNotEmpty(communityIndicatorList) || + CollectionUtils.isNotEmpty(populationIndicatorList)) { if (log.isDebugEnabled()) { - log.debug("Make final archive"); + log.debug("Extracting charts"); } - resultZip = File.createTempFile("coser-extract-", ".zip"); - resultZip.deleteOnExit(); - ZipUtil.compress(resultZip, subDir); - - // clean directory - FileUtils.deleteDirectory(tempDir); - } catch (IOException ex) { - throw new CoserTechnicalException("Can't create zip file", ex); - } finally { - // clean directory - FileUtils.deleteQuietly(tempDir); + pdfCharts = extractCharts(speciesList, + communityIndicatorList, + populationIndicatorList); } - - FileResult result = new FileResult(repository.getId(), resultZip); + ExtractRawDataAndResultsResult result = newExtractRawDataAndResultsResult(pdfMaps, pdfCharts); return result; } @@ -201,553 +143,169 @@ * * @param directory where to generate file */ - protected void extractSource(LegacyResultRepository repository, File directory) { + protected void extractSource(File directory) { - repository.loadSelectionData(); + loadSelectionData(); // il ne faut pas les fichiers de selection, mais leurs // export rsufi (sans les lignes, et les quotes) File zoneDirectory = new File(directory, repository.getZone()); - try { - FileUtils.forceMkdir(zoneDirectory); - } catch (IOException e) { - throw new CoserTechnicalException("Could not create directory: " + zoneDirectory, e); - } - - repository.extractRSUfiData(zoneDirectory); + extractRSUfiData(zoneDirectory); } /** - * Retourne les indicateurs calculés avec leurs traductions scientifique - * pour la zone et l'especes souhaitées. - * - * @param species especes (if {@code null} look for com indicators - * @param comIndicators comIndicator - * @param popIndicators popIndicators - * @param locale locale - * @return la liste des indicateurs (zone, speciesname, [graphfile, graphdata]) + * @param species species to extract in population indicators + * @param communityIndicators community indicators to extract + * @param populationIndicators population indicators to extract + * @return charts files and their data with key: zone , indicator [- speciesName for population]) + * and value: (graphFile, graphData) */ - protected MultiKeyMap extractCharts(LegacyResultRepository repository, - Collection<String> species, - Collection<String> comIndicators, - Collection<String> popIndicators, - Locale locale) { + protected Map<String, Pair<File, String>> extractCharts(List<String> species, + List<String> communityIndicators, + List<String> populationIndicators) { - MultiKeyMap chartFileAndDatas = new MultiKeyMap(); - String zone = repository.getZone(); - String zoneDisplayName = repository.getZonesMap().getZoneFullName(zone); - if (CollectionUtils.isNotEmpty(comIndicators)) { - Map<String, Pair<File, String>> chartFileAndDataCom = getRsufiResultComCharts(repository, - comIndicators, - zoneDisplayName, - repository.getIndicatorsMap(), - locale, - 650, - 430); - // put in multimap as zone,speciesname, data - for (Map.Entry<String, Pair<File, String>> entry : chartFileAndDataCom.entrySet()) { - chartFileAndDatas.put(zone, entry.getKey(), entry.getValue()); - } + Map<String, Pair<File, String>> result = Maps.newLinkedHashMap(); + + if (CollectionUtils.isNotEmpty(communityIndicators)) { + result.putAll(extractCommunityResults(communityIndicators, + zone, + 650, + 430)); } - if (CollectionUtils.isNotEmpty(popIndicators)) { - Map<String, Pair<File, String>> chartFileAndDataPop = getRsufiResultPopCharts(repository, - species, - popIndicators, - zoneDisplayName, - repository.getIndicatorsMap(), - locale, - 650, - 430); - // put in multimap as zone,speciesname, data - for (Map.Entry<String, Pair<File, String>> entry : chartFileAndDataPop.entrySet()) { - chartFileAndDatas.put(zone, entry.getKey(), entry.getValue()); - } + if (CollectionUtils.isNotEmpty(populationIndicators)) { + result.putAll(extractPopulationResults(species, + populationIndicators, + zone, + 650, + 430)); } - return chartFileAndDatas; + return result; } /** - * Generate community graph for selected indicators. - * Used by web ui extraction. + * Generate community graph and their data for selected indicators. * - * @param indicators indicators to extract - * @param zoneDisplayName zone full name - * @param indicatorMap indicator localized map - * @param locale locale - * @param width graph width - * @param height graph height + * @param selectedIndicators indicators to extract + * @param zone zone + * @param width graph width + * @param height graph height * @return maps of generated graph image (temp file) and data indexed by natural key (indicator - species) */ - public Map<String, Pair<File, String>> getRsufiResultComCharts(LegacyResultRepository repository, - Collection<String> indicators, - String zoneDisplayName, - IndicatorMap indicatorMap, - Locale locale, - int width, int height) { + public Map<String, Pair<File, String>> extractCommunityResults(List<String> selectedIndicators, + String zone, + int width, + int height) { - Map<String, Pair<File, String>> result = Maps.newHashMap(); + // Get exact list of indicators usable for this result + List<String> indicators = Lists.newArrayList(getCommunityIndicators()); + indicators.retainAll(selectedIndicators); - int multiplicator = 1; - int minYear = Integer.MAX_VALUE; - int maxYear = Integer.MIN_VALUE; - - Map<String, Map<Integer, Double[]>> indicatorGraphData = new HashMap<String, Map<Integer, Double[]>>(); - Map<String, String> indicatorLists = new HashMap<String, String>(); - Map<String, DataStorage> indicatorStorages = new HashMap<String, DataStorage>(); - - // Campagne Indicateur Liste Strate Annee Estimation EcartType CV - Iterator<String[]> estComIndIterator = repository.loadCommunityIndicatorStorage(true); - while (estComIndIterator.hasNext()) { - // Campagne Indicateur Liste Strate Annee Estimation EcartType CV - String[] tuple = estComIndIterator.next(); - String indicatorCode = tuple[1]; - String indicatorList = tuple[2]; - - if (indicators.contains(indicatorCode)) { - - // si pas de list selectionnée, on prend la premiere + //FIXME Check if this is correct + // get for all indicators the first species list found (we only extract this one) + final Map<String, String> indicatorLists = new HashMap<String, String>(); + walkOnCommunity(LegacyPredicates.communityIndicatorPredicate(indicators), new DataStorageWalker() { + @Override + public void onRow(String... row) { + String indicatorCode = row[1]; String localList = indicatorLists.get(indicatorCode); + //FIXME Should only test if indicatorCode is present ? if (StringUtils.isBlank(localList)) { - localList = indicatorList; - indicatorLists.put(indicatorCode, localList); + String indicatorList = row[2]; + indicatorLists.put(indicatorCode, indicatorList); } - - if (indicatorList.equals(localList)) { - Double estimation = Double.parseDouble(tuple[5]); - Double ecart = Double.parseDouble(tuple[6]); - int year = Integer.parseInt(tuple[4]); - - if (year < minYear) { - minYear = year; - } - if (year > maxYear) { - maxYear = year; - } - Map<Integer, Double[]> graphData = indicatorGraphData.get(indicatorCode); - if (graphData == null) { - graphData = new HashMap<Integer, Double[]>(); - indicatorGraphData.put(indicatorCode, graphData); - } - graphData.put(year, new Double[]{estimation, ecart}); - - // si les données sont énormes, on affiche les données - // / multiplicator et on le mentionne dans la légende - if (estimation > 1e9) { - multiplicator = 1000000; - } - if (estimation > 1e6 && multiplicator < 1000000) { - multiplicator = 1000; - } - - // for data part - DataStorage subDataStorage = indicatorStorages.get(indicatorCode); - if (subDataStorage == null) { - subDataStorage = new MemoryDataStorage(); - if ("fr".equals(locale.getLanguage())) { - subDataStorage.add(new String[]{"Campagne", "Indice", "Liste", "Strate", "Année", "Estimation", "EcartType", "CV"}); - } else { - subDataStorage.add(new String[]{"Survey", "Index", "List", "Stratum", "Year", "Estimate", "StandardDeviation", "CV"}); - } - indicatorStorages.put(indicatorCode, subDataStorage); - } - subDataStorage.add(tuple); - } } - } + }); - // avec l'extraction des données, on peut demander a générer un graphique - // sur un indicateur qui n'est pas présent dans le projet courant, - // dans ce cas, on retourne null - for (String indicator : indicatorGraphData.keySet()) { - // get graph title - String chartTitle = zoneDisplayName; - String indicatorName = indicatorMap.getIndicatorValue(indicator, locale); - String unit = indicatorMap.getIndicatorUnit(indicator); - chartTitle += " - " + indicatorName; + Map<String, Pair<File, String>> result = Maps.newHashMap(); - // ajout de la traduction de la liste d'indicateur - // les liste sont a1, T1, T2 ... - String localList = indicatorLists.get(indicator); - String speciesListName = repository.getSpeciesListMap().getSpeciesListName(locale, localList); - chartTitle += " - " + speciesListName; -// String listLetter = String.valueOf(localList.charAt(0)); -// Iterator<String[]> typeIterator = repository.getSpeciesListMap().iterator(true); -// while (typeIterator.hasNext()) { -// // "Types";"Commentaire";"NumSys min";"NumSys max";"Code" -// String[] tuple = typeIterator.next(); -// if (tuple[4].equals(listLetter)) { -// /// gestion du groupe "Tous" -// // cas special, c'est la seule valeur du fichier -// // code type espece qui a besoin d'une traduction -// if (tuple[4].equalsIgnoreCase("T")) { -// if ("fr".equals(locale.getLanguage())) { -// chartTitle += " - " + "Tous Liste " + localList.charAt(1); -// } else if ("es".equals(locale.getLanguage())) { -// chartTitle += " - " + "Todo Lista " + localList.charAt(1); -// } else { -// chartTitle += " - " + "All List " + localList.charAt(1); -// } -// } else { -// // ajout de la traduction du nom de liste plus le numéro -// if ("fr".equals(locale.getLanguage())) { -// chartTitle += " - " + tuple[0] + " Liste " + localList.charAt(1); -// } else if ("es".equals(locale.getLanguage())) { -// chartTitle += " - " + tuple[0] + " Lista " + localList.charAt(1); -// } else { -// chartTitle += " - " + tuple[0] + " List " + localList.charAt(1); -// } -// } -// break; -// } -// } + for (String indicator : indicators) { - // generate dataset with sorted data - Map<Integer, Double[]> graphData = indicatorGraphData.get(indicator); - DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset(); - for (int indexYear = minYear; indexYear <= maxYear; ++indexYear) { - Double[] entry = graphData.get(indexYear); - if (entry != null) { - Double estimation = entry[0] / multiplicator; - Double ecart = entry[1] / multiplicator; - statisticalDataset.add(estimation, ecart, "Serie1", (Comparable) indexYear); - } else { - statisticalDataset.add(null, null, "Serie1", indexYear); - } - } + String speciesList = indicatorLists.get(indicator); - // configure chart - //CategoryAxis categoryAxis = new CategoryAxis(t("coser.business.common.year")); - String yearAxis = repository.getReports().getYearChartTitle(locale); - CategoryAxis categoryAxis = new CategoryAxis(yearAxis); - categoryAxis.setCategoryMargin(0); - categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90); - // label horizontaux - String legendY = indicatorName; - if (multiplicator != 1) { - // affiche par exemple : cm * 1000 - legendY += " (" + unit + "*" + multiplicator + ")"; - } else if (StringUtils.isNotEmpty(unit)) { - legendY += " (" + unit + ")"; - } - ValueAxis valueAxis = new NumberAxis(legendY); - valueAxis.setUpperMargin(0.1); + Predicate<String[]> predicate = Predicates.and( + LegacyPredicates.communityIndicatorPredicate(indicator), + LegacyPredicates.communitySpeciesListPredicate(speciesList)); - CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true); + // extract raw data + DataStorage storage = extractCommunity(predicate); - // n'affiche pas les nombre sur le graphique - //StandardCategoryItemLabelGenerator itemLabelGenerator = new StandardCategoryItemLabelGenerator(); - //renderer.setBaseItemLabelGenerator(itemLabelGenerator); - //renderer.setBaseItemLabelsVisible(true); + String rawDataText = DataStorages.toString(storage); - CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer); - plot.setOrientation(PlotOrientation.VERTICAL); - JFreeChart chart = new JFreeChart(chartTitle, - JFreeChart.DEFAULT_TITLE_FONT, plot, true); + // generate chart + JFreeChart chart = generateCommunityChart(zone, + indicator, + speciesList); - // remove series legend - chart.removeLegend(); - // white background - chart.setBackgroundPaint(Color.WHITE); + // generate chart file + File chartFile = getCharts().generateChartFile("coser-community-chart-", + chart, + width, + height); - try { - File chartFile = File.createTempFile("coser-community-chart-", ".png"); - chartFile.deleteOnExit(); - ChartUtilities.saveChartAsPNG(chartFile, chart, width, height); - //ByteArrayOutputStream out = new ByteArrayOutputStream(); - //ChartUtilities.writeChartAsPNG(out, chart, width, height); - - // data extraction - DataStorage subDataStorage = indicatorStorages.get(indicator); - StringWriter writer = new StringWriter(); - DataStorages.save(subDataStorage, writer); - - // add chart file dans chart data in result - result.put(indicator, Pair.of(chartFile, writer.toString())); - writer.close(); - } catch (IOException ex) { - throw new CoserTechnicalException("Can't save chart", ex); - } + result.put(indicator, Pair.of(chartFile, rawDataText)); } - return result; } /** - * Generate population graph for selected species and indicator. + * Generate population graph and their data for selected indicators. * - * @param species species to extract - * @param indicators indicators to extract - * @param zoneDisplayName zone full name - * @param indicatorMap indicator localized map - * @param locale locale - * @param width graph width - * @param height graph height + * @param selectedSpecies species to extract + * @param selectedIndicators indicators to extract + * @param zone zone + * @param width graph width + * @param height graph height * @return maps of generated graph image (temp file) and data indexed by natural key (indicator - species) */ - public Map<String, Pair<File, String>> getRsufiResultPopCharts(LegacyResultRepository repository, - Collection<String> species, - Collection<String> indicators, - String zoneDisplayName, - IndicatorMap indicatorMap, - Locale locale, - int width, - int height) { + public Map<String, Pair<File, String>> extractPopulationResults(List<String> selectedSpecies, + List<String> selectedIndicators, + String zone, + int width, + int height) { + // Get exact list of species to use + List<String> speciesList = Lists.newArrayList(getPopulationSpecies()); + speciesList.retainAll(selectedSpecies); + Map<String, Pair<File, String>> result = Maps.newHashMap(); - int multiplicator = 1; - int minYear = Integer.MAX_VALUE; - int maxYear = Integer.MIN_VALUE; + for (String species : speciesList) { - MultiKeyMap indicatorGraphData = new MultiKeyMap(); - MultiKeyMap indicatorStorages = new MultiKeyMap(); + // Get extact indicators to use + List<String> indicators = Lists.newArrayList(getPopulationIndicators(species)); + indicators.retainAll(selectedIndicators); - // Campagne Indicateur Liste Species Strate Annee Estimation EcartType CV - Iterator<String[]> estPopIndIterator = repository.loadPopulationIndicatorStorage(true); - while (estPopIndIterator.hasNext()) { - String[] tuple = estPopIndIterator.next(); + for (String indicator : indicators) { - String speciesCode = tuple[3]; - String indicatorCode = tuple[1]; - if (species.contains(speciesCode) && indicators.contains(indicatorCode)) { + Predicate<String[]> predicate = Predicates.and( + LegacyPredicates.populationIndicatorPredicate(indicator), + LegacyPredicates.populationSpeciesPredicate(species)); - // XXX echatellier, maybe take care of list here ? + // extract raw data + DataStorage storage = extractPopulation(predicate); - Double estimation = Double.parseDouble(tuple[6]); - Double ecart = Double.parseDouble(tuple[7]); - int year = Integer.parseInt(tuple[5]); + String rawDataText = DataStorages.toString(storage); - if (year < minYear) { - minYear = year; - } - if (year > maxYear) { - maxYear = year; - } - Map<Integer, Double[]> graphData = (Map<Integer, Double[]>) indicatorGraphData.get(indicatorCode, speciesCode); - if (graphData == null) { - graphData = new HashMap<Integer, Double[]>(); - indicatorGraphData.put(indicatorCode, speciesCode, graphData); - } - graphData.put(year, new Double[]{estimation, ecart}); + // generate chart + JFreeChart chart = generatePopulationChart(zone, + indicator, + species); - // si les données sont énormes, on affiche les données - // / multiplicator et on le mentionne dans la légende - if (estimation > 1e9) { - multiplicator = 1000000; - } - if (estimation > 1e6 && multiplicator < 1000000) { - multiplicator = 1000; - } + // generate chart file + File chartFile = getCharts().generateChartFile("coser-population-chart-", + chart, + width, + height); - // for data part - DataStorage subDataStorage = (DataStorage) indicatorStorages.get(indicatorCode, speciesCode); - if (subDataStorage == null) { - subDataStorage = new MemoryDataStorage(); - if ("fr".equals(locale.getLanguage())) { - subDataStorage.add(new String[]{"Campagne", "Indice", "Liste", "Espèce", "Strate", "Annee", "Estimation", "EcartType", "CV"}); - } else { - subDataStorage.add(new String[]{"Survey", "Index", "List", "Species", "Stratum", "Year", "Estimate", "StandardDeviation", "CV"}); - } - indicatorStorages.put(indicatorCode, speciesCode, subDataStorage); - } - subDataStorage.add(tuple); + result.put(indicator + "-" + species, Pair.of(chartFile, rawDataText)); } } - - SpeciesMap speciesMap = repository.getSpeciesMap(); - - // avec l'extraction des données, on peut demander a générer un graphique - // sur un indicateur qui n'est pas présent dans le projet courant, - // dans ce cas, on retourne null - for (MultiKey indicatorSpecies : (Set<MultiKey>) indicatorGraphData.keySet()) { - String indicator = (String) indicatorSpecies.getKey(0); - String aSpecies = (String) indicatorSpecies.getKey(1); - // get graph title - String title = zoneDisplayName; - String indicatorName = indicatorMap.getIndicatorValue(indicator, locale); - String unit = indicatorMap.getIndicatorUnit(indicator); - title += " - " + indicatorName; - title += " - " + speciesMap.getReportDisplayName(aSpecies); - - // generate dataset with sorted data - DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset(); - Map<Integer, Double[]> graphData = (Map<Integer, Double[]>) indicatorGraphData.get(indicator, aSpecies); - for (int indexYear = minYear; indexYear <= maxYear; ++indexYear) { - Double[] entry = graphData.get(indexYear); - if (entry != null) { - Double estimation = entry[0] / multiplicator; - Double ecart = entry[1] / multiplicator; - statisticalDataset.add(estimation, ecart, "Serie1", (Comparable) indexYear); - } else { - statisticalDataset.add(null, null, "Serie1", indexYear); - } - } - - Reports reports = repository.getReports(); - - // configure chart - //CategoryAxis categoryAxis = new CategoryAxis(t("coser.business.common.year")); - String yearAxis = reports.getYearChartTitle(locale); - CategoryAxis categoryAxis = new CategoryAxis(yearAxis); - categoryAxis.setCategoryMargin(0); - categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90); - // label horizontaux - String legendY = indicatorName; - if (multiplicator != 1) { - // affiche par exemple : cm * 1000 - legendY += " (" + unit + "*" + multiplicator + ")"; - } else if (StringUtils.isNotEmpty(unit)) { - legendY += " (" + unit + ")"; - } - ValueAxis valueAxis = new NumberAxis(legendY); - valueAxis.setUpperMargin(0.1); - - CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true); - - // n'affiche pas les nombre sur le graphique - //StandardCategoryItemLabelGenerator itemLabelGenerator = new StandardCategoryItemLabelGenerator(); - //renderer.setBaseItemLabelGenerator(itemLabelGenerator); - //renderer.setBaseItemLabelsVisible(true); - - CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer); - plot.setOrientation(PlotOrientation.VERTICAL); - JFreeChart chart = new JFreeChart(title, - JFreeChart.DEFAULT_TITLE_FONT, plot, true); - - // remove series legend - chart.removeLegend(); - // white background - chart.setBackgroundPaint(Color.WHITE); - - try { - File chartFile = File.createTempFile("coser-population-chart-", ".png"); - chartFile.deleteOnExit(); - ChartUtilities.saveChartAsPNG(chartFile, chart, width, height); - //ByteArrayOutputStream out = new ByteArrayOutputStream(); - //ChartUtilities.writeChartAsPNG(out, chart, width, height); - - // data extraction - DataStorage subDataStorage = (DataStorage) indicatorStorages.get(indicator, aSpecies); - StringWriter writer = new StringWriter(); - DataStorages.save(subDataStorage, writer); - - // add chart file dans chart data in result - result.put(indicator + "-" + aSpecies, Pair.of(chartFile, writer.toString())); - writer.close(); - } catch (IOException ex) { - throw new CoserTechnicalException("Can't save chart", ex); - } - } - return result; } - // --------------------------------------------------------------------- // - // --- Matchers ------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchExtractTypeSet(LegacyResultRepository repository, - ExtractRawDataAndResultsRequest request) { - boolean result = false; - if (repository.isMapsResult()) { - result = request.getExtractTypeList().contains(DataType.SOURCE); - } - if (repository.isIndicatorsResult()) { - result = request.getExtractTypeList().contains(DataType.POPULATION) || - request.getExtractTypeList().contains(DataType.COMMUNITY); - } - if (repository.isDataResult()) { - result = request.getExtractTypeList().contains(DataType.SOURCE); - } - return result; - } - - protected boolean matchZoneList(LegacyResultRepository repository, - ExtractRawDataAndResultsRequest request) { - return request.getZoneList().contains(repository.getZone()); - } - - protected boolean matchCommunityIndicatorList(LegacyResultRepository repository, - ExtractRawDataAndResultsRequest request) { - Preconditions.checkNotNull(request.getCommunityIndicatorList()); - - List<String> indicatorList = request.getCommunityIndicatorList(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadCommunityIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchIndicatorList(tuple, indicatorList)) { - result = true; - break; - } - } - return result; - } - - protected boolean matchPopulationIndicatorList(LegacyResultRepository repository, - ExtractRawDataAndResultsRequest request) { - Preconditions.checkNotNull(request.getPopulationIndicatorList()); - - List<String> indicatorList = request.getPopulationIndicatorList(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadPopulationIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchIndicatorList(tuple, indicatorList)) { - result = true; - break; - } - } - return result; - } - - protected boolean matchPopulationIndicatorListAndSpeciesList(LegacyResultRepository repository, - ExtractRawDataAndResultsRequest request) { - Preconditions.checkNotNull(request.getPopulationIndicatorList()); - - List<String> indicatorList = request.getPopulationIndicatorList(); - List<String> speciesList = request.getSpeciesList(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadPopulationIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchIndicatorListAndSpeciesList(tuple, indicatorList, speciesList)) { - result = true; - break; - } - } - return result; - } - - protected boolean matchCommunityIndicatorListAndSpeciesList(LegacyResultRepository repository, - ExtractRawDataAndResultsRequest request) { - Preconditions.checkNotNull(request.getCommunityIndicatorList()); - - List<String> indicatorList = request.getCommunityIndicatorList(); - List<String> speciesList = request.getSpeciesList(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadCommunityIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchIndicatorListAndSpeciesList(tuple, indicatorList, speciesList)) { - result = true; - break; - } - } - return result; - } - } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/ExtractRawDataCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/ExtractRawDataCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/ExtractRawDataCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -24,11 +24,9 @@ import fr.ifremer.coser.CoserConstants; import fr.ifremer.coser.CoserTechnicalException; -import fr.ifremer.coser.result.FileResult; -import fr.ifremer.coser.result.Reports; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; 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; @@ -44,28 +42,21 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class ExtractRawDataCommand implements ResultRepositoryCommand<LegacyResultRepository, ExtractRawDataRequest> { +public class ExtractRawDataCommand extends AbstractLegacyCommand<ExtractRawDataRequest> { @Override - public Class<ExtractRawDataRequest> getRequestType() { - return ExtractRawDataRequest.class; - } - - @Override - public boolean accept(LegacyResultRepository repository, - ExtractRawDataRequest request) { + public boolean accept(ExtractRawDataRequest request) { return repository.isDataResult() && repository.matchFacade(request) && repository.matchZone(request); } @Override - public FileResult execute(LegacyResultRepository repository, - ExtractRawDataRequest r) { + public FileResult execute(ExtractRawDataRequest request) { - Locale locale = r.getLocale(); + Locale locale = getLocale(); - repository.loadSelectionData(); + loadSelectionData(); File resultZip; @@ -74,16 +65,18 @@ // il ne faut pas les fichiers de selection, mais leurs // export rsufi (sans les lignes, et les quotes) - File archiveDir = repository.extractRSUfiData(tempDir); + File archiveDir = extractRSUfiData(tempDir); // add decharge file - Reports reports = repository.getReports(); - String filename = reports.getDechargeFilename(locale); + String filename = Reports.getDechargeFilename(locale); File dechargePDF = new File(archiveDir, filename); - Date lastDataUpdateDate = repository.getConfig().getLastDataUpdateDate(); + Date lastDataUpdateDate = getConfig().getLastDataUpdateDate(); - reports.generateDechargePDF(dechargePDF, locale, lastDataUpdateDate, repository.getSurveyName()); + getReports().generateDechargePDF(dechargePDF, + locale, + lastDataUpdateDate, + repository.getSurveyName()); // ajout du reftax dans le zip File reftaxFile = new File(repository.getBasedir(), CoserConstants.Category.REFTAX_SPECIES.getStorageFileName()); @@ -100,7 +93,7 @@ throw new CoserTechnicalException("Can't create zip file", e); } - FileResult result = new FileResult(repository.getId(), resultZip); + FileResult result = newFileResult(resultZip); return result; } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetAllResultsCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetAllResultsCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetAllResultsCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -24,11 +24,7 @@ import com.google.common.collect.Maps; import fr.ifremer.coser.result.CoserResult; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.ResultType; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepositoryType; +import fr.ifremer.coser.result.result.MapResult; import fr.ifremer.coser.result.request.GetAllResultsRequest; import java.util.Map; @@ -39,65 +35,25 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetAllResultsCommand implements ResultRepositoryCommand<LegacyResultRepository, GetAllResultsRequest> { +public class GetAllResultsCommand extends AbstractLegacyCommand<GetAllResultsRequest> { @Override - public Class<GetAllResultsRequest> getRequestType() { - return GetAllResultsRequest.class; - } - - @Override - public boolean accept(LegacyResultRepository repository, - GetAllResultsRequest request) { - boolean result = matchRepositoryType(request) && - matchResultType(repository, request) && - matchPublish(repository); + public boolean accept(GetAllResultsRequest request) { + boolean result = repository.matchRepositoryType(request) && + repository.matchResultType(request) && + repository.isPubliableResult(); return result; } @Override - public CoserResult execute(LegacyResultRepository repository, - GetAllResultsRequest request) { + public CoserResult execute(GetAllResultsRequest request) { Map<String, String> map = Maps.newHashMap(); String resultResultId = repository.getZone(); String name = repository.getProjectName() + "/" + repository.getSelectionName() + "/" + repository.getResultName(); map.put(resultResultId, name); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } - // --------------------------------------------------------------------- // - // --- Matchers -------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchRepositoryType(GetAllResultsRequest request) { - boolean result = request.getResultRepositoryType().equals(LegacyResultRepositoryType.ID); - return result; - } - - protected boolean matchResultType(LegacyResultRepository repository, - GetAllResultsRequest request) { - boolean result; - ResultType resultType = request.getResultType(); - switch (resultType) { - - case MAP: - result = repository.isMapsResult(); - break; - case INDICATOR: - result = repository.isIndicatorsResult(); - break; - default: - result = false; - break; - } - return result; - } - - protected boolean matchPublish(LegacyResultRepository repository) { - boolean result = repository.isPubliableResult(); - return result; - } - } Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetCommunityIndicatorResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetCommunityIndicatorResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetCommunityIndicatorResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,380 +0,0 @@ -package fr.ifremer.coser.result.repository.legacy.command; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; -import fr.ifremer.coser.CoserTechnicalException; -import fr.ifremer.coser.result.FileResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; -import fr.ifremer.coser.result.request.GetCommunityIndicatorResultRequest; -import fr.ifremer.coser.storage.DataStorage; -import fr.ifremer.coser.storage.DataStorages; -import fr.ifremer.coser.storage.MemoryDataStorage; -import org.apache.commons.io.FileUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.jfree.chart.ChartUtilities; -import org.jfree.chart.JFreeChart; -import org.jfree.chart.axis.CategoryAxis; -import org.jfree.chart.axis.CategoryLabelPositions; -import org.jfree.chart.axis.NumberAxis; -import org.jfree.chart.axis.ValueAxis; -import org.jfree.chart.plot.CategoryPlot; -import org.jfree.chart.plot.PlotOrientation; -import org.jfree.chart.renderer.category.CategoryItemRenderer; -import org.jfree.chart.renderer.category.StatisticalLineAndShapeRenderer; -import org.jfree.data.statistics.DefaultStatisticalCategoryDataset; -import org.nuiton.util.FileUtil; -import org.nuiton.util.ZipUtil; - -import java.awt.Color; -import java.io.File; -import java.io.IOException; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Locale; -import java.util.Map; - -/** - * Created on 3/11/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class GetCommunityIndicatorResultCommand implements ResultRepositoryCommand<LegacyResultRepository, GetCommunityIndicatorResultRequest> { - - /** Logger. */ - private static final Log log = LogFactory.getLog(GetCommunityIndicatorResultCommand.class); - - @Override - public Class<GetCommunityIndicatorResultRequest> getRequestType() { - return GetCommunityIndicatorResultRequest.class; - } - - @Override - public boolean accept(LegacyResultRepository repository, - GetCommunityIndicatorResultRequest request) { - return repository.isIndicatorsResult() && - repository.matchFacade(request) && - repository.matchZone(request) && - matchIndicatorAndSpeciesList(repository, request); - } - - @Override - public FileResult execute(LegacyResultRepository repository, - GetCommunityIndicatorResultRequest request) { - - File file = null; - switch (request.getIndicatorResultType()) { - case DATA: - file = getCommunityIndicatorDataFile(repository, - request.getLocale(), - request.getIndicator(), - request.getSpecies()); - break; - - case GRAPH: - file = getCommunityIndicatorGraphFile(repository, - request.getLocale(), - request.getZone(), - request.getIndicator(), - request.getSpecies()); - break; - } - FileResult result = new FileResult(repository.getId(), file); - return result; - } - - protected File getCommunityIndicatorDataFile(LegacyResultRepository repository, - Locale locale, - String indicator, - String speciesList) { - - try { - - File tempDir = FileUtil.createTempDirectory("coser-chart-population-indicator", "-tmp"); - - File baseDir = new File(tempDir, repository.getSurveyName()); - FileUtils.forceMkdir(baseDir); - - // ajout du fichier csv avec les indicateurs - DataStorage dataStorage = new MemoryDataStorage(); - - Iterator<String[]> iterator = repository.loadCommunityIndicatorStorage(false); - - // add header - dataStorage.add(iterator.next()); - - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchCommunityIndicatorAndSpeciesList(tuple, indicator, speciesList)) { - dataStorage.add(tuple); - } - } - File csvFile = DataStorages.save(dataStorage, "coser-chart-community-indicator", - ".csv" - ); - - File csvFileCopied = new File(baseDir, indicator + ".csv"); - FileUtils.copyFile(csvFile, csvFileCopied); - FileUtils.forceDelete(csvFile); - - // ajout du fichier d'information sur les espèces incluses dans - // les calculs des indicateurs de communautés - // load project (without data to get reftax data) - File metaFile = repository.getReports().generateMetaFilePDF(repository.getPath(), - repository.getResultDirectory(), - locale, - repository.getIndicatorsMap() - ); - File metaFileCopied = new File(baseDir, "Information.pdf"); - FileUtils.copyFile(metaFile, metaFileCopied); - - // make zip - File result = File.createTempFile("coser-chart-community-indicator", ".zip"); - result.deleteOnExit(); - ZipUtil.compress(result, baseDir); - - // clean directory - FileUtils.deleteDirectory(tempDir); - return result; - } catch (Exception e) { - throw new CoserTechnicalException("Can't create zip file", e); - } - } - - protected File getCommunityIndicatorGraphFile(LegacyResultRepository repository, - Locale locale, - String zone, - String indicator, - String speciesList) { - - // indicator list to take care - // pour avoir une valeur non nulle si list est null - // on prend dans ce cas la premiere valeur trouvée - String localList = speciesList; - - if (log.isDebugEnabled()) { - log.debug("Searching list for indicator : " + indicator); - } - - int multiplicator = 1; - int minYear = Integer.MAX_VALUE; - int maxYear = Integer.MIN_VALUE; - boolean indicatorFound = false; - Map<Integer, Double[]> graphData = new HashMap<Integer, Double[]>(); - Iterator<String[]> iterator = repository.loadCommunityIndicatorStorage(true); - while (iterator.hasNext()) { - // Campagne Indicateur Liste Strate Annee Estimation EcartType CV - String[] tuple = iterator.next(); - String indicatorList = tuple[2]; - - if (repository.matchCommunityIndicator(tuple, indicator)) { - indicatorFound = true; - - // si pas de list selectionnée, on prend la premiere - if (StringUtils.isBlank(localList)) { - localList = indicatorList; - } - - if (indicatorList.equals(localList)) { - Double estimation = Double.parseDouble(tuple[5]); - Double ecart = Double.parseDouble(tuple[6]); - int year = Integer.parseInt(tuple[4]); - - if (year < minYear) { - minYear = year; - } - if (year > maxYear) { - maxYear = year; - } - graphData.put(year, new Double[]{estimation, ecart}); - - // si les données sont énormes, on affiche les données - // / multiplicator et on le mentionne dans la légende - if (estimation > 1e9) { - multiplicator = 1000000; - } - if (estimation > 1e6 && multiplicator < 1000000) { - multiplicator = 1000; - } - } - } - } - - File result = null; - - // avec l'extraction des données, on peut demander a générer un graphique - // sur un indicateur qui n'est pas présent dans le projet courant, - // dans ce cas, on retourne null - if (indicatorFound) { - - String zoneDisplayName = repository.getZonesMap().getZoneFullName(zone); - String indicatorName = repository.getIndicatorsMap().getIndicatorValue(indicator, locale); - String unit = repository.getIndicatorsMap().getIndicatorUnit(indicator); - - // get graph title - String chartTitle = zoneDisplayName; - chartTitle += " - " + indicatorName; - - String speciesListName = repository.getSpeciesListMap().getSpeciesListName(locale, localList); - chartTitle += " - " + speciesListName; -// // ajout de la traduction de la liste d'indicateur -// // les liste sont a1, T1, T2 ... -// String listLetter = String.valueOf(localList.charAt(0)); -// Iterator<String[]> typeIterator = repository.getSpeciesListMap().iterator(true); -// while (typeIterator.hasNext()) { -// // "Types";"Commentaire";"NumSys min";"NumSys max";"Code" -// String[] tuple = typeIterator.next(); -// if (tuple[4].equals(listLetter)) { -// /// gestion du groupe "Tous" -// // cas special, c'est la seule valeur du fichier -// // code type espece qui a besoin d'une traduction -// if (tuple[4].equalsIgnoreCase("T")) { -// if ("fr".equals(locale.getLanguage())) { -// chartTitle += " - " + "Tous Liste " + localList.charAt(1); -// } else if ("es".equals(locale.getLanguage())) { -// chartTitle += " - " + "Todo Lista " + localList.charAt(1); -// } else { -// chartTitle += " - " + "All List " + localList.charAt(1); -// } -// } else { -// // ajout de la traduction du nom de liste plus le numéro -// if ("fr".equals(locale.getLanguage())) { -// chartTitle += " - " + tuple[0] + " Liste " + localList.charAt(1); -// } else if ("es".equals(locale.getLanguage())) { -// chartTitle += " - " + tuple[0] + " Lista " + localList.charAt(1); -// } else { -// chartTitle += " - " + tuple[0] + " List " + localList.charAt(1); -// } -// } -// break; -// } -// } - - // generate dataset with sorted data - DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset(); - for (int indexYear = minYear; indexYear <= maxYear; ++indexYear) { - Double[] entry = graphData.get(indexYear); - if (entry != null) { - Double estimation = entry[0] / multiplicator; - Double ecart = entry[1] / multiplicator; - statisticalDataset.add(estimation, ecart, "Serie1", (Comparable) indexYear); - } else { - statisticalDataset.add(null, null, "Serie1", indexYear); - } - } - - // configure chart - //CategoryAxis categoryAxis = new CategoryAxis(t("coser.business.common.year")); - String yearAxis = repository.getReports().getYearChartTitle(locale); - - CategoryAxis categoryAxis = new CategoryAxis(yearAxis); - categoryAxis.setCategoryMargin(0); - categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90); - // label horizontaux - String legendY = indicatorName; - if (multiplicator != 1) { - // affiche par exemple : cm * 1000 - legendY += " (" + unit + "*" + multiplicator + ")"; - } else if (StringUtils.isNotEmpty(unit)) { - legendY += " (" + unit + ")"; - } - ValueAxis valueAxis = new NumberAxis(legendY); - valueAxis.setUpperMargin(0.1); - - CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true); - - // n'affiche pas les nombre sur le graphique - //StandardCategoryItemLabelGenerator itemLabelGenerator = new StandardCategoryItemLabelGenerator(); - //renderer.setBaseItemLabelGenerator(itemLabelGenerator); - //renderer.setBaseItemLabelsVisible(true); - - CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer); - plot.setOrientation(PlotOrientation.VERTICAL); - JFreeChart chart = new JFreeChart(chartTitle, - JFreeChart.DEFAULT_TITLE_FONT, plot, true); - - // remove series legend - chart.removeLegend(); - // white background - chart.setBackgroundPaint(Color.WHITE); - - try { - result = File.createTempFile("coser-chart-community-indicator-", ".png"); - result.deleteOnExit(); - ChartUtilities.saveChartAsPNG(result, chart, 800, 400); - } catch (IOException ex) { - throw new CoserTechnicalException("Can't save chart", ex); - } - } - - return result; - } - - // --------------------------------------------------------------------- // - // --- Matchers ------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchIndicator(LegacyResultRepository repository, - GetCommunityIndicatorResultRequest request) { - Preconditions.checkNotNull(request.getIndicator()); - - String indicator = request.getIndicator(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadCommunityIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchCommunityIndicator(tuple, indicator)) { - result = true; - break; - } - } - return result; - } - - protected boolean matchIndicatorAndSpeciesList(LegacyResultRepository repository, - GetCommunityIndicatorResultRequest request) { - Preconditions.checkNotNull(request.getIndicator()); - Preconditions.checkNotNull(request.getSpecies()); - - String indicator = request.getIndicator(); - String speciesList = request.getSpecies(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadCommunityIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchCommunityIndicatorAndSpeciesList(tuple, indicator, speciesList)) { - result = true; - break; - } - } - return result; - } -} Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetCommunityIndicatorResultDataCommand.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetCommunityIndicatorResultCommand.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetCommunityIndicatorResultDataCommand.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetCommunityIndicatorResultDataCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,117 @@ +package fr.ifremer.coser.result.repository.legacy.command; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import fr.ifremer.coser.CoserTechnicalException; +import fr.ifremer.coser.result.repository.legacy.LegacyPredicates; +import fr.ifremer.coser.result.request.GetCommunityIndicatorResultDataRequest; +import fr.ifremer.coser.result.result.FileResult; +import fr.ifremer.coser.storage.DataStorage; +import fr.ifremer.coser.storage.DataStorages; +import org.apache.commons.io.FileUtils; +import org.nuiton.util.FileUtil; +import org.nuiton.util.ZipUtil; + +import java.io.File; + +/** + * Created on 3/11/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class GetCommunityIndicatorResultDataCommand extends AbstractLegacyCommand<GetCommunityIndicatorResultDataRequest> { + + @Override + public boolean accept(GetCommunityIndicatorResultDataRequest request) { + boolean result = repository.isIndicatorsResult() && + repository.matchFacade(request) && + repository.matchZone(request); + if (result) { + Predicate<String[]> predicate = createPredicate(request); + result = repository.matchCommunity(predicate); + } + return result; + } + + @Override + public FileResult execute(GetCommunityIndicatorResultDataRequest request) { + + Predicate<String[]> predicate = createPredicate(request); + + File file = getCommunityIndicatorDataFile(predicate, + request.getIndicator()); + + FileResult result = newFileResult(file); + return result; + } + + protected File getCommunityIndicatorDataFile(Predicate<String[]> predicate, + String indicator) { + + try { + + File tempDir = FileUtil.createTempDirectory("coser-chart-community-indicator", "-tmp"); + + File baseDir = new File(tempDir, repository.getSurveyName()); + FileUtils.forceMkdir(baseDir); + + // ajout du fichier csv avec les indicateurs + DataStorage dataStorage = extractCommunity(predicate); + File csvFile = DataStorages.save(dataStorage, "coser-chart-community-indicator", ".csv"); + + File csvFileCopied = new File(baseDir, indicator + ".csv"); + FileUtils.copyFile(csvFile, csvFileCopied); + FileUtils.forceDelete(csvFile); + + // ajout du fichier d'information sur les espèces incluses dans + // les calculs des indicateurs de communautés + // load project (without data to get reftax data) + File metaFile = getReports().generateMetaFilePDF(repository.getPath(), + repository.getResultDirectory(), + getLocale(), + getIndicatorsMap()); + File metaFileCopied = new File(baseDir, "Information.pdf"); + FileUtils.copyFile(metaFile, metaFileCopied); + + // make zip + File result = File.createTempFile("coser-chart-community-indicator", ".zip"); + result.deleteOnExit(); + ZipUtil.compress(result, baseDir); + + // clean directory + FileUtils.deleteDirectory(tempDir); + return result; + } catch (Exception e) { + throw new CoserTechnicalException("Can't create zip file", e); + } + } + + protected Predicate<String[]> createPredicate(GetCommunityIndicatorResultDataRequest request) { + return Predicates.and( + LegacyPredicates.communityIndicatorPredicate(request.getIndicator()), + LegacyPredicates.communitySpeciesListPredicate(request.getSpecies())); + } +} Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetCommunityIndicatorResultGraphCommand.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetCommunityIndicatorResultCommand.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetCommunityIndicatorResultGraphCommand.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetCommunityIndicatorResultGraphCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,73 @@ +package fr.ifremer.coser.result.repository.legacy.command; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import fr.ifremer.coser.result.repository.legacy.LegacyPredicates; +import fr.ifremer.coser.result.request.GetCommunityIndicatorResultGraphRequest; +import fr.ifremer.coser.result.result.FileResult; +import org.jfree.chart.JFreeChart; + +import java.io.File; + +/** + * Created on 3/11/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class GetCommunityIndicatorResultGraphCommand extends AbstractLegacyCommand<GetCommunityIndicatorResultGraphRequest> { + + @Override + public boolean accept(GetCommunityIndicatorResultGraphRequest request) { + boolean result = repository.isIndicatorsResult() && + repository.matchFacade(request) && + repository.matchZone(request); + if (result) { + Predicate<String[]> predicate = Predicates.and( + LegacyPredicates.communityIndicatorPredicate(request.getIndicator()), + LegacyPredicates.communitySpeciesListPredicate(request.getSpecies())); + result = repository.matchCommunity(predicate); + } + return result; + } + + @Override + public FileResult execute(GetCommunityIndicatorResultGraphRequest request) { + + // generate chart + JFreeChart chart = generateCommunityChart(request.getZone(), + request.getIndicator(), + request.getSpecies()); + + // generate file from chart + File file = getCharts().generateChartFile("coser-chart-community-indicator-", + chart, + 800, + 400); + + FileResult result = newFileResult(file); + return result; + } +} Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetIndicatorsForCommunityIndicatorResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetIndicatorsForCommunityIndicatorResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetIndicatorsForCommunityIndicatorResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,9 +22,7 @@ * #L% */ -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; +import fr.ifremer.coser.result.result.MapResult; import fr.ifremer.coser.result.request.GetIndicatorsForCommunityIndicatorResultRequest; import java.util.Map; @@ -36,29 +34,22 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetIndicatorsForCommunityIndicatorResultCommand implements ResultRepositoryCommand<LegacyResultRepository, GetIndicatorsForCommunityIndicatorResultRequest> { +public class GetIndicatorsForCommunityIndicatorResultCommand extends AbstractLegacyCommand<GetIndicatorsForCommunityIndicatorResultRequest> { @Override - public Class<GetIndicatorsForCommunityIndicatorResultRequest> getRequestType() { - return GetIndicatorsForCommunityIndicatorResultRequest.class; - } - - @Override - public boolean accept(LegacyResultRepository repository, - GetIndicatorsForCommunityIndicatorResultRequest request) { + public boolean accept(GetIndicatorsForCommunityIndicatorResultRequest request) { return repository.isIndicatorsResult() && repository.matchFacade(request) && repository.matchZone(request); } @Override - public MapResult execute(LegacyResultRepository repository, - GetIndicatorsForCommunityIndicatorResultRequest request) { + public MapResult execute(GetIndicatorsForCommunityIndicatorResultRequest request) { - Set<String> indicatorList = repository.getCommunityIndicators(); - Map<String, String> map = repository.getIndicatorsMap().getIndicatorsValues(indicatorList, request.getLocale()); + Set<String> indicatorList = getCommunityIndicators(); + Map<String, String> map = getIndicatorsMap().getIndicatorsValues(getLocale(), indicatorList); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetIndicatorsForExtractRawDataAndResultsCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetIndicatorsForExtractRawDataAndResultsCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetIndicatorsForExtractRawDataAndResultsCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,9 +22,7 @@ * #L% */ -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; +import fr.ifremer.coser.result.result.MapResult; import fr.ifremer.coser.result.request.GetIndicatorsForExtractRawDataAndResultsRequest; import fr.ifremer.coser.util.DataType; @@ -37,69 +35,37 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetIndicatorsForExtractRawDataAndResultsCommand implements ResultRepositoryCommand<LegacyResultRepository, GetIndicatorsForExtractRawDataAndResultsRequest> { +public class GetIndicatorsForExtractRawDataAndResultsCommand extends AbstractLegacyCommand<GetIndicatorsForExtractRawDataAndResultsRequest> { @Override - public Class<GetIndicatorsForExtractRawDataAndResultsRequest> getRequestType() { - return GetIndicatorsForExtractRawDataAndResultsRequest.class; + public boolean accept(GetIndicatorsForExtractRawDataAndResultsRequest request) { + return repository.matchExtractTypeList(request) && + repository.matchZone(request); } @Override - public boolean accept(LegacyResultRepository repository, - GetIndicatorsForExtractRawDataAndResultsRequest request) { - return matchExtractTypeSet(repository, request) && - matchZoneList(repository, request); - } + public MapResult execute(GetIndicatorsForExtractRawDataAndResultsRequest request) { - @Override - public MapResult execute(LegacyResultRepository repository, - GetIndicatorsForExtractRawDataAndResultsRequest request) { - Set<String> indicatorList = null; if (request.getExtractTypeList().contains(DataType.COMMUNITY)) { // get all community indicators for given zone - indicatorList = repository.getCommunityIndicators(); + indicatorList = getCommunityIndicators(); } else if (request.getExtractTypeList().contains(DataType.POPULATION)) { // get all population indicators for given zone - indicatorList = repository.getPopulationIndicators(); + indicatorList = getPopulationIndicators(); } Map<String, String> map = null; if (indicatorList != null) { - map = repository.getIndicatorsMap().getIndicatorsValues(indicatorList, request.getLocale()); + map = getIndicatorsMap().getIndicatorsValues(getLocale(), indicatorList); } - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } - // --------------------------------------------------------------------- // - // --- Matchers ------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchExtractTypeSet(LegacyResultRepository repository, - GetIndicatorsForExtractRawDataAndResultsRequest request) { - boolean result = false; - if (repository.isMapsResult()) { - result = request.getExtractTypeList().contains(DataType.SOURCE); - } - if (repository.isIndicatorsResult()) { - result = request.getExtractTypeList().contains(DataType.POPULATION) || - request.getExtractTypeList().contains(DataType.COMMUNITY); - } - if (repository.isDataResult()) { - result = request.getExtractTypeList().contains(DataType.SOURCE); - } - return result; - } - - protected boolean matchZoneList(LegacyResultRepository repository, - GetIndicatorsForExtractRawDataAndResultsRequest request) { - return request.getZoneList().contains(repository.getZone()); - } - } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetIndicatorsForPopulationIndicatorResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetIndicatorsForPopulationIndicatorResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetIndicatorsForPopulationIndicatorResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,13 +22,11 @@ * #L% */ -import com.google.common.base.Preconditions; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; +import com.google.common.base.Predicate; +import fr.ifremer.coser.result.result.MapResult; +import fr.ifremer.coser.result.repository.legacy.LegacyPredicates; import fr.ifremer.coser.result.request.GetIndicatorsForPopulationIndicatorResultRequest; -import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -38,53 +36,29 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetIndicatorsForPopulationIndicatorResultCommand implements ResultRepositoryCommand<LegacyResultRepository, GetIndicatorsForPopulationIndicatorResultRequest> { +public class GetIndicatorsForPopulationIndicatorResultCommand extends AbstractLegacyCommand<GetIndicatorsForPopulationIndicatorResultRequest> { @Override - public Class<GetIndicatorsForPopulationIndicatorResultRequest> getRequestType() { - return GetIndicatorsForPopulationIndicatorResultRequest.class; - } + public boolean accept(GetIndicatorsForPopulationIndicatorResultRequest request) { + boolean result = repository.isIndicatorsResult() && + repository.matchFacade(request) && + repository.matchZone(request); + if (result) { - @Override - public boolean accept(LegacyResultRepository repository, - GetIndicatorsForPopulationIndicatorResultRequest request) { - return repository.isIndicatorsResult() && - repository.matchFacade(request) && - repository.matchZone(request) && - matchSpecies(repository, request); - } + Predicate<String[]> predicate = LegacyPredicates.populationSpeciesPredicate(request.getSpecies()); + result = repository.matchPopulation(predicate); - @Override - public MapResult execute(LegacyResultRepository repository, - GetIndicatorsForPopulationIndicatorResultRequest request) { - - Set<String> indicatorList = repository.getPopulationIndicators(request.getSpecies()); - Map<String, String> map = repository.getIndicatorsMap().getIndicatorsValues(indicatorList, request.getLocale()); - - MapResult result = new MapResult(repository.getId(), map); + } return result; } - // --------------------------------------------------------------------- // - // --- Matchers -------------------------------------------------------- // - // --------------------------------------------------------------------- // + @Override + public MapResult execute(GetIndicatorsForPopulationIndicatorResultRequest request) { - protected boolean matchSpecies(LegacyResultRepository repository, - GetIndicatorsForPopulationIndicatorResultRequest request) { - Preconditions.checkNotNull(request.getSpecies()); + Set<String> indicatorList = getPopulationIndicators(request.getSpecies()); + Map<String, String> map = getIndicatorsMap().getIndicatorsValues(getLocale(), indicatorList); - String species = request.getSpecies(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadPopulationIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchPopulationSpecies(tuple, species)) { - result = true; - break; - } - } + MapResult result = newMapResult(map); return result; } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetMapResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetMapResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetMapResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,9 +22,7 @@ * #L% */ -import fr.ifremer.coser.result.FileResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; +import fr.ifremer.coser.result.result.FileResult; import fr.ifremer.coser.result.request.GetMapResultRequest; import java.io.File; @@ -35,41 +33,27 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetMapResultCommand implements ResultRepositoryCommand<LegacyResultRepository, GetMapResultRequest> { +public class GetMapResultCommand extends AbstractLegacyCommand<GetMapResultRequest> { @Override - public Class<GetMapResultRequest> getRequestType() { - return GetMapResultRequest.class; + public boolean accept(GetMapResultRequest request) { + boolean result = repository.isMapsResult() && + repository.matchFacade(request) && + repository.matchZone(request); + if (result) { + File file = repository.getMapSpeciesFile(request.getSpecies()); + result = file != null; + } + return result; } @Override - public boolean accept(LegacyResultRepository repository, - GetMapResultRequest request) { - return repository.isMapsResult() && - repository.matchFacade(request) && - repository.matchZone(request) && - matchSpecies(repository, request); - } + public FileResult execute(GetMapResultRequest request) { - @Override - public FileResult execute(LegacyResultRepository repository, - GetMapResultRequest r) { + File resultZip = repository.getMapSpeciesFile(request.getSpecies()); - File resultZip = repository.getMapSpeciesFile(r.getSpecies()); - FileResult result = new FileResult(repository.getId(), resultZip); return result; } - // --------------------------------------------------------------------- // - // --- Matchers ------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchSpecies(LegacyResultRepository repository, - GetMapResultRequest request) { - String species = request.getSpecies(); - File file = repository.getMapSpeciesFile(species); - return file != null; - } - } Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetPopulationIndicatorResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetPopulationIndicatorResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetPopulationIndicatorResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,288 +0,0 @@ -package fr.ifremer.coser.result.repository.legacy.command; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; -import fr.ifremer.coser.CoserTechnicalException; -import fr.ifremer.coser.result.FileResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; -import fr.ifremer.coser.result.request.GetPopulationIndicatorResultRequest; -import fr.ifremer.coser.storage.DataStorage; -import fr.ifremer.coser.storage.DataStorages; -import fr.ifremer.coser.storage.MemoryDataStorage; -import org.apache.commons.lang3.StringUtils; -import org.jfree.chart.ChartUtilities; -import org.jfree.chart.JFreeChart; -import org.jfree.chart.axis.CategoryAxis; -import org.jfree.chart.axis.CategoryLabelPositions; -import org.jfree.chart.axis.NumberAxis; -import org.jfree.chart.axis.ValueAxis; -import org.jfree.chart.plot.CategoryPlot; -import org.jfree.chart.plot.PlotOrientation; -import org.jfree.chart.renderer.category.CategoryItemRenderer; -import org.jfree.chart.renderer.category.StatisticalLineAndShapeRenderer; -import org.jfree.data.statistics.DefaultStatisticalCategoryDataset; - -import java.awt.Color; -import java.io.File; -import java.io.IOException; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Locale; -import java.util.Map; - -/** - * Created on 3/11/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class GetPopulationIndicatorResultCommand implements ResultRepositoryCommand<LegacyResultRepository, GetPopulationIndicatorResultRequest> { - - @Override - public Class<GetPopulationIndicatorResultRequest> getRequestType() { - return GetPopulationIndicatorResultRequest.class; - } - - @Override - public boolean accept(LegacyResultRepository repository, - GetPopulationIndicatorResultRequest request) { - return repository.isIndicatorsResult() && - repository.matchFacade(request) && - repository.matchZone(request) && - matchSpeciesAndIndicator(repository, request); - } - - @Override - public FileResult execute(LegacyResultRepository repository, - GetPopulationIndicatorResultRequest request) { - - File file = null; - switch (request.getIndicatorResultType()) { - case DATA: - file = getPopulationIndicatorDataFile(repository, - request.getIndicator(), - request.getSpecies()); - break; - - case GRAPH: - file = getPopulationIndicatorGraphFile(repository, - request.getLocale(), - request.getZone(), - request.getIndicator(), - request.getSpecies()); - break; - } - - - FileResult result = new FileResult(repository.getId(), file); - return result; - } - - protected File getPopulationIndicatorDataFile(LegacyResultRepository repository, - String species, - String indicator) { - - DataStorage dataStorage = new MemoryDataStorage(); - - Iterator<String[]> iterator = repository.loadPopulationIndicatorStorage(false); - - // add header - dataStorage.add(iterator.next()); - - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchPopulationSpeciesAndIndicator(tuple, species, indicator)) { - dataStorage.add(tuple); - } - } - File result = DataStorages.save(dataStorage, "coser-chart-population-indicator", - ".csv" - ); - return result; - } - - protected File getPopulationIndicatorGraphFile(LegacyResultRepository repository, - Locale locale, - String zone, - String species, - String indicator) { - - int multiplicator = 1; - int minYear = Integer.MAX_VALUE; - int maxYear = Integer.MIN_VALUE; - boolean indicatorFound = false; - Map<Integer, Double[]> graphData = new HashMap<Integer, Double[]>(); - Iterator<String[]> iterator = repository.loadPopulationIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - - if (repository.matchPopulationSpeciesAndIndicator(tuple, species, indicator)) { - indicatorFound = true; - - // XXX echatellier, maybe take care of list here ? - - Double estimation = Double.parseDouble(tuple[6]); - Double ecart = Double.parseDouble(tuple[7]); - int year = Integer.parseInt(tuple[5]); - - if (year < minYear) { - minYear = year; - } - if (year > maxYear) { - maxYear = year; - } - graphData.put(year, new Double[]{estimation, ecart}); - - // si les données sont énormes, on affiche les données - // / multiplicator et on le mentionne dans la légende - if (estimation > 1e9) { - multiplicator = 1000000; - } - if (estimation > 1e6 && multiplicator < 1000000) { - multiplicator = 1000; - } - } - } - - File result = null; - - // avec l'extraction des données, on peut demander a générer un graphique - // sur un indicateur qui n'est pas présent dans le projet courant, - // dans ce cas, on retourne null - if (indicatorFound) { - - String zoneDisplayName = repository.getZonesMap().getZoneFullName(zone); - String indicatorName = repository.getIndicatorsMap().getIndicatorValue(indicator, locale); - String unit = repository.getIndicatorsMap().getIndicatorUnit(indicator); - - // get graph title - String title = zoneDisplayName; - title += " - " + indicatorName; - title += " - " + repository.getSpeciesMap().getReportDisplayName(species); - - // generate dataset with sorted data - DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset(); - for (int indexYear = minYear; indexYear <= maxYear; ++indexYear) { - Double[] entry = graphData.get(indexYear); - if (entry != null) { - Double estimation = entry[0] / multiplicator; - Double ecart = entry[1] / multiplicator; - statisticalDataset.add(estimation, ecart, "Serie1", (Comparable) indexYear); - } else { - statisticalDataset.add(null, null, "Serie1", indexYear); - } - } - - // configure chart - //CategoryAxis categoryAxis = new CategoryAxis(t("coser.business.common.year")); - String yearAxis = repository.getReports().getYearChartTitle(locale); - CategoryAxis categoryAxis = new CategoryAxis(yearAxis); - categoryAxis.setCategoryMargin(0); - categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90); - // label horizontaux - String legendY = indicatorName; - if (multiplicator != 1) { - // affiche par exemple : cm * 1000 - legendY += " (" + unit + "*" + multiplicator + ")"; - } else if (StringUtils.isNotEmpty(unit)) { - legendY += " (" + unit + ")"; - } - ValueAxis valueAxis = new NumberAxis(legendY); - valueAxis.setUpperMargin(0.1); - - CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true); - - // n'affiche pas les nombre sur le graphique - //StandardCategoryItemLabelGenerator itemLabelGenerator = new StandardCategoryItemLabelGenerator(); - //renderer.setBaseItemLabelGenerator(itemLabelGenerator); - //renderer.setBaseItemLabelsVisible(true); - - CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer); - plot.setOrientation(PlotOrientation.VERTICAL); - JFreeChart chart = new JFreeChart(title, - JFreeChart.DEFAULT_TITLE_FONT, plot, true); - - // remove series legend - chart.removeLegend(); - // white background - chart.setBackgroundPaint(Color.WHITE); - - try { - result = File.createTempFile("coser-chart-population-indicator-", ".png"); - result.deleteOnExit(); - ChartUtilities.saveChartAsPNG(result, chart, 800, 400); - } catch (IOException ex) { - throw new CoserTechnicalException("Can't save chart", ex); - } - } - - return result; - } - - // --------------------------------------------------------------------- // - // --- Matchers -------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchSpecies(LegacyResultRepository repository, - GetPopulationIndicatorResultRequest request) { - Preconditions.checkNotNull(request.getSpecies()); - - String species = request.getSpecies(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadPopulationIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchPopulationSpecies(tuple, species)) { - result = true; - break; - } - } - return result; - } - - protected boolean matchSpeciesAndIndicator(LegacyResultRepository repository, - GetPopulationIndicatorResultRequest request) { - Preconditions.checkNotNull(request.getSpecies()); - Preconditions.checkNotNull(request.getIndicator()); - - String species = request.getSpecies(); - String indicator = request.getIndicator(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadPopulationIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchPopulationSpeciesAndIndicator(tuple, species, indicator)) { - result = true; - break; - } - } - return result; - } - -} Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetPopulationIndicatorResultDataCommand.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetPopulationIndicatorResultCommand.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetPopulationIndicatorResultDataCommand.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetPopulationIndicatorResultDataCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,75 @@ +package fr.ifremer.coser.result.repository.legacy.command; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import fr.ifremer.coser.result.repository.legacy.LegacyPredicates; +import fr.ifremer.coser.result.request.GetPopulationIndicatorResultDataRequest; +import fr.ifremer.coser.result.result.FileResult; +import fr.ifremer.coser.storage.DataStorage; +import fr.ifremer.coser.storage.DataStorages; + +import java.io.File; + +/** + * Created on 3/11/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class GetPopulationIndicatorResultDataCommand extends AbstractLegacyCommand<GetPopulationIndicatorResultDataRequest> { + + @Override + public boolean accept(GetPopulationIndicatorResultDataRequest request) { + boolean result = repository.isIndicatorsResult() && + repository.matchFacade(request) && + repository.matchZone(request); + if (result) { + Predicate<String[]> predicate = createPredicate(request); + result = repository.matchPopulation(predicate); + } + return result; + } + + @Override + public FileResult execute(GetPopulationIndicatorResultDataRequest request) { + + Predicate<String[]> predicate = createPredicate(request); + + DataStorage dataStorage = extractPopulation(predicate); + File file = DataStorages.save(dataStorage, + "coser-chart-population-indicator", + ".csv"); + + FileResult result = newFileResult(file); + return result; + } + + protected Predicate<String[]> createPredicate(GetPopulationIndicatorResultDataRequest request) { + return Predicates.and( + LegacyPredicates.populationSpeciesPredicate(request.getSpecies()), + LegacyPredicates.populationIndicatorPredicate(request.getIndicator())); + } + +} Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetPopulationIndicatorResultGraphCommand.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetPopulationIndicatorResultCommand.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetPopulationIndicatorResultGraphCommand.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetPopulationIndicatorResultGraphCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,74 @@ +package fr.ifremer.coser.result.repository.legacy.command; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import fr.ifremer.coser.result.result.FileResult; +import fr.ifremer.coser.result.repository.legacy.LegacyPredicates; +import fr.ifremer.coser.result.request.GetPopulationIndicatorResultGraphRequest; +import org.jfree.chart.JFreeChart; + +import java.io.File; + +/** + * Created on 3/11/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class GetPopulationIndicatorResultGraphCommand extends AbstractLegacyCommand<GetPopulationIndicatorResultGraphRequest> { + + @Override + public boolean accept(GetPopulationIndicatorResultGraphRequest request) { + boolean result = repository.isIndicatorsResult() && + repository.matchFacade(request) && + repository.matchZone(request); + if (result) { + Predicate<String[]> predicate = Predicates.and( + LegacyPredicates.populationSpeciesPredicate(request.getSpecies()), + LegacyPredicates.populationIndicatorPredicate(request.getIndicator())); + result = repository.matchPopulation(predicate); + } + return result; + } + + @Override + public FileResult execute(GetPopulationIndicatorResultGraphRequest request) { + + // generate chart + JFreeChart chart = generatePopulationChart(request.getZone(), + request.getSpecies(), + request.getIndicator()); + + // generate file from chart + File file = getCharts().generateChartFile("coser-chart-population-indicator-", + chart, + 800, + 400); + + FileResult result = newFileResult(file); + return result; + } + +} Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesForExtractRawDataAndResultsCommand.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesListForExtractRawDataAndResultsCommand.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesForExtractRawDataAndResultsCommand.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesForExtractRawDataAndResultsCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,59 @@ +package fr.ifremer.coser.result.repository.legacy.command; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.Maps; +import fr.ifremer.coser.result.result.MapResult; +import fr.ifremer.coser.result.request.GetSpeciesForExtractRawDataAndResultsRequest; + +import java.util.Map; + +/** + * Created on 3/11/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class GetSpeciesForExtractRawDataAndResultsCommand extends AbstractLegacyCommand<GetSpeciesForExtractRawDataAndResultsRequest> { + + @Override + public boolean accept(GetSpeciesForExtractRawDataAndResultsRequest request) { + return repository.matchExtractTypeList(request) && + repository.matchZone(request); + } + + @Override + public MapResult execute(GetSpeciesForExtractRawDataAndResultsRequest request) { + + Map<String, String> map = Maps.newHashMap(); + + // get all species for population indicators + map.putAll(getPopulationSpeciesMap()); + // get all species for community indicators + map.putAll(getCommunitySpeciesMap()); + + MapResult result = newMapResult(map); + return result; + } + +} Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesForMapResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesForMapResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesForMapResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,9 +22,7 @@ * #L% */ -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; +import fr.ifremer.coser.result.result.MapResult; import fr.ifremer.coser.result.request.GetSpeciesForMapResultRequest; import java.util.Map; @@ -35,27 +33,24 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetSpeciesForMapResultCommand implements ResultRepositoryCommand<LegacyResultRepository, GetSpeciesForMapResultRequest> { +public class GetSpeciesForMapResultCommand extends AbstractLegacyCommand<GetSpeciesForMapResultRequest> { @Override - public Class<GetSpeciesForMapResultRequest> getRequestType() { - return GetSpeciesForMapResultRequest.class; - } - - @Override - public boolean accept(LegacyResultRepository repository, GetSpeciesForMapResultRequest request) { + public boolean accept(GetSpeciesForMapResultRequest request) { return repository.isMapsResult() && repository.matchFacade(request) && repository.matchZone(request); } @Override - public MapResult execute(LegacyResultRepository repository, GetSpeciesForMapResultRequest request) { + public MapResult execute(GetSpeciesForMapResultRequest request) { - Map<String, String> map = repository.getPopulationIndicatorSpecies(); +// Map<String, String> map = repository.getPopulationSpeciesMap(); + Map<String, String> map = repository.getMapSpeciesMap(); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } + } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesForPopulationIndicatorResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesForPopulationIndicatorResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesForPopulationIndicatorResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,9 +22,7 @@ * #L% */ -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; +import fr.ifremer.coser.result.result.MapResult; import fr.ifremer.coser.result.request.GetSpeciesForPopulationIndicatorResultRequest; import java.util.Map; @@ -35,28 +33,21 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetSpeciesForPopulationIndicatorResultCommand implements ResultRepositoryCommand<LegacyResultRepository, GetSpeciesForPopulationIndicatorResultRequest> { +public class GetSpeciesForPopulationIndicatorResultCommand extends AbstractLegacyCommand<GetSpeciesForPopulationIndicatorResultRequest> { @Override - public Class<GetSpeciesForPopulationIndicatorResultRequest> getRequestType() { - return GetSpeciesForPopulationIndicatorResultRequest.class; - } - - @Override - public boolean accept(LegacyResultRepository repository, - GetSpeciesForPopulationIndicatorResultRequest request) { + public boolean accept(GetSpeciesForPopulationIndicatorResultRequest request) { return repository.isIndicatorsResult() && repository.matchFacade(request) && repository.matchZone(request); } @Override - public MapResult execute(LegacyResultRepository repository, - GetSpeciesForPopulationIndicatorResultRequest request) { + public MapResult execute(GetSpeciesForPopulationIndicatorResultRequest request) { - Map<String, String> map = repository.getPopulationIndicatorSpecies(); + Map<String, String> map = getPopulationSpeciesMap(); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesListForCommunityIndicatorResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesListForCommunityIndicatorResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesListForCommunityIndicatorResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,14 +22,15 @@ * #L% */ -import com.google.common.base.Preconditions; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; +import com.google.common.base.Predicate; +import com.google.common.collect.Sets; +import fr.ifremer.coser.result.repository.legacy.LegacyPredicates; import fr.ifremer.coser.result.request.GetSpeciesListForCommunityIndicatorResultRequest; +import fr.ifremer.coser.result.result.MapResult; +import fr.ifremer.coser.storage.DataStorageWalker; -import java.util.Iterator; import java.util.Map; +import java.util.Set; /** * Created on 3/11/14. @@ -37,54 +38,41 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetSpeciesListForCommunityIndicatorResultCommand implements ResultRepositoryCommand<LegacyResultRepository, GetSpeciesListForCommunityIndicatorResultRequest> { +public class GetSpeciesListForCommunityIndicatorResultCommand extends AbstractLegacyCommand<GetSpeciesListForCommunityIndicatorResultRequest> { @Override - public Class<GetSpeciesListForCommunityIndicatorResultRequest> getRequestType() { - return GetSpeciesListForCommunityIndicatorResultRequest.class; - } + public boolean accept(GetSpeciesListForCommunityIndicatorResultRequest request) { + boolean result = repository.isIndicatorsResult() && + repository.matchFacade(request) && + repository.matchZone(request); + if (result) { - @Override - public boolean accept(LegacyResultRepository repository, - GetSpeciesListForCommunityIndicatorResultRequest request) { - return repository.isIndicatorsResult() && - repository.matchFacade(request) && - repository.matchZone(request) && - matchIndicator(repository, request); + Predicate<String[]> predicate = + LegacyPredicates.communityIndicatorPredicate(request.getIndicator()); + result = repository.matchCommunity(predicate); + } + return result; } @Override - public MapResult execute(LegacyResultRepository repository, - GetSpeciesListForCommunityIndicatorResultRequest request) { + public MapResult execute(GetSpeciesListForCommunityIndicatorResultRequest request) { - Map<String, String> map = repository.getCommunityIndicatorSpecies(request.getLocale(), - request.getIndicator()); + // linked hash map (doit respecter l'ordre d'insertion) + final Set<String> speciesList = Sets.newLinkedHashSet(); + DataStorageWalker walker = new DataStorageWalker() { + @Override + public void onRow(String... tuple) { + String speciesListCode = tuple[2]; + speciesList.add(speciesListCode); + } + }; + Predicate<String[]> predicate = LegacyPredicates.communityIndicatorPredicate(request.getIndicator()); + walkOnCommunity(predicate, walker); + Map<String, String> map = repository.getSpeciesListMap().getSpeciesSubMap(getLocale(), + speciesList); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } - // --------------------------------------------------------------------- // - // --- Matchers ------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchIndicator(LegacyResultRepository repository, - GetSpeciesListForCommunityIndicatorResultRequest request) { - Preconditions.checkNotNull(request.getIndicator()); - - String indicator = request.getIndicator(); - - boolean result = false; - - Iterator<String[]> iterator = repository.loadCommunityIndicatorStorage(true); - while (iterator.hasNext()) { - String[] tuple = iterator.next(); - if (repository.matchCommunityIndicator(tuple, indicator)) { - result = true; - break; - } - } - return result; - } - } Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesListForExtractRawDataAndResultsCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesListForExtractRawDataAndResultsCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetSpeciesListForExtractRawDataAndResultsCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,93 +0,0 @@ -package fr.ifremer.coser.result.repository.legacy.command; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.Maps; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; -import fr.ifremer.coser.result.request.GetSpeciesListForExtractRawDataAndResultsRequest; -import fr.ifremer.coser.util.DataType; - -import java.util.Map; - -/** - * Created on 3/11/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class GetSpeciesListForExtractRawDataAndResultsCommand implements ResultRepositoryCommand<LegacyResultRepository, GetSpeciesListForExtractRawDataAndResultsRequest> { - - @Override - public Class<GetSpeciesListForExtractRawDataAndResultsRequest> getRequestType() { - return GetSpeciesListForExtractRawDataAndResultsRequest.class; - } - - @Override - public boolean accept(LegacyResultRepository repository, - GetSpeciesListForExtractRawDataAndResultsRequest request) { - return matchExtractTypeSet(repository, request) && - matchZoneList(repository, request); - } - - @Override - public MapResult execute(LegacyResultRepository repository, - GetSpeciesListForExtractRawDataAndResultsRequest request) { - - Map<String, String> map = Maps.newHashMap(); - - // get all species for population indicators - map.putAll(repository.getPopulationIndicatorSpecies()); - // get all species for community indicators - map.putAll(repository.getCommunityIndicatorSpecies()); - - MapResult result = new MapResult(repository.getId(), map); - return result; - } - - // --------------------------------------------------------------------- // - // --- Matchers ------------------------------------------------------- // - // --------------------------------------------------------------------- // - - protected boolean matchExtractTypeSet(LegacyResultRepository repository, - GetSpeciesListForExtractRawDataAndResultsRequest request) { - boolean result = false; - if (repository.isMapsResult()) { - result = request.getExtractTypeList().contains(DataType.SOURCE); - } - if (repository.isIndicatorsResult()) { - result = request.getExtractTypeList().contains(DataType.POPULATION) || - request.getExtractTypeList().contains(DataType.COMMUNITY); - } - if (repository.isDataResult()) { - result = request.getExtractTypeList().contains(DataType.SOURCE); - } - return result; - } - - protected boolean matchZoneList(LegacyResultRepository repository, - GetSpeciesListForExtractRawDataAndResultsRequest request) { - return request.getZoneList().contains(repository.getZone()); - } -} Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForCommunityIndicatorResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForCommunityIndicatorResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForCommunityIndicatorResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -23,9 +23,7 @@ */ import fr.ifremer.coser.bean.ZoneMap; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; +import fr.ifremer.coser.result.result.MapResult; import fr.ifremer.coser.result.request.GetZonesForCommunityIndicatorResultRequest; import java.util.List; @@ -37,26 +35,21 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetZonesForCommunityIndicatorResultCommand implements ResultRepositoryCommand<LegacyResultRepository, GetZonesForCommunityIndicatorResultRequest> { +public class GetZonesForCommunityIndicatorResultCommand extends AbstractLegacyCommand<GetZonesForCommunityIndicatorResultRequest> { @Override - public Class<GetZonesForCommunityIndicatorResultRequest> getRequestType() { - return GetZonesForCommunityIndicatorResultRequest.class; - } - - @Override - public boolean accept(LegacyResultRepository repository, GetZonesForCommunityIndicatorResultRequest request) { + public boolean accept(GetZonesForCommunityIndicatorResultRequest request) { return repository.isIndicatorsResult() && repository.matchFacade(request); } @Override - public MapResult execute(LegacyResultRepository repository, GetZonesForCommunityIndicatorResultRequest request) { + public MapResult execute(GetZonesForCommunityIndicatorResultRequest request) { - ZoneMap zonesMap = repository.getZonesMap(); + ZoneMap zonesMap = getZonesMap(); List<String> allowedZones = zonesMap.getZonesForFacade(request.getFacade()); Map<String, String> map = zonesMap.getSubZonesMap(repository.getZone(), allowedZones); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForExtractRawDataAndResultsCommand.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesListForExtractRawDataAndResultsCommand.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForExtractRawDataAndResultsCommand.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForExtractRawDataAndResultsCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,55 @@ +package fr.ifremer.coser.result.repository.legacy.command; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import fr.ifremer.coser.bean.ZoneMap; +import fr.ifremer.coser.result.result.MapResult; +import fr.ifremer.coser.result.request.GetZonesForExtractRawDataAndResultsRequest; + +import java.util.List; +import java.util.Map; + +/** + * Created on 3/11/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class GetZonesForExtractRawDataAndResultsCommand extends AbstractLegacyCommand<GetZonesForExtractRawDataAndResultsRequest> { + + @Override + public boolean accept(GetZonesForExtractRawDataAndResultsRequest request) { + return true; + } + + @Override + public MapResult execute(GetZonesForExtractRawDataAndResultsRequest request) { + ZoneMap zonesMap = getZonesMap(); + List<String> allowedZones = zonesMap.getZonesForFacade(null); + Map<String, String> map = zonesMap.getSubZonesMap(repository.getZone(), allowedZones); + + MapResult result = newMapResult(map); + return result; + } + +} Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForExtractRawDataCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForExtractRawDataCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForExtractRawDataCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -23,9 +23,7 @@ */ import fr.ifremer.coser.bean.ZoneMap; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; +import fr.ifremer.coser.result.result.MapResult; import fr.ifremer.coser.result.request.GetZonesForExtractRawDataRequest; import java.util.List; @@ -37,29 +35,22 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetZonesForExtractRawDataCommand implements ResultRepositoryCommand<LegacyResultRepository, GetZonesForExtractRawDataRequest> { +public class GetZonesForExtractRawDataCommand extends AbstractLegacyCommand<GetZonesForExtractRawDataRequest> { @Override - public Class<GetZonesForExtractRawDataRequest> getRequestType() { - return GetZonesForExtractRawDataRequest.class; - } - - @Override - public boolean accept(LegacyResultRepository repository, - GetZonesForExtractRawDataRequest request) { + public boolean accept(GetZonesForExtractRawDataRequest request) { return repository.isDataResult() && repository.matchFacade(request); } @Override - public MapResult execute(LegacyResultRepository repository, - GetZonesForExtractRawDataRequest request) { + public MapResult execute(GetZonesForExtractRawDataRequest request) { - ZoneMap zonesMap = repository.getZonesMap(); + ZoneMap zonesMap = getZonesMap(); List<String> allowedZones = zonesMap.getZonesForFacade(request.getFacade()); Map<String, String> map = zonesMap.getSubZonesMap(repository.getZone(), allowedZones); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForMapResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForMapResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForMapResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -23,9 +23,7 @@ */ import fr.ifremer.coser.bean.ZoneMap; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; +import fr.ifremer.coser.result.result.MapResult; import fr.ifremer.coser.result.request.GetZonesForMapResultRequest; import java.util.List; @@ -37,29 +35,22 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetZonesForMapResultCommand implements ResultRepositoryCommand<LegacyResultRepository, GetZonesForMapResultRequest> { +public class GetZonesForMapResultCommand extends AbstractLegacyCommand<GetZonesForMapResultRequest> { @Override - public Class<GetZonesForMapResultRequest> getRequestType() { - return GetZonesForMapResultRequest.class; - } - - @Override - public boolean accept(LegacyResultRepository repository, - GetZonesForMapResultRequest request) { + public boolean accept(GetZonesForMapResultRequest request) { return repository.isMapsResult() && repository.matchFacade(request); } @Override - public MapResult execute(LegacyResultRepository repository, - GetZonesForMapResultRequest request) { + public MapResult execute(GetZonesForMapResultRequest request) { - ZoneMap zonesMap = repository.getZonesMap(); + ZoneMap zonesMap = getZonesMap(); List<String> allowedZones = zonesMap.getZonesForFacade(request.getFacade()); Map<String, String> map = zonesMap.getSubZonesMap(repository.getZone(), allowedZones); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForPopulationIndicatorResultCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForPopulationIndicatorResultCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesForPopulationIndicatorResultCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -23,9 +23,7 @@ */ import fr.ifremer.coser.bean.ZoneMap; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; +import fr.ifremer.coser.result.result.MapResult; import fr.ifremer.coser.result.request.GetZonesForPopulationIndicatorResultRequest; import java.util.List; @@ -37,29 +35,22 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetZonesForPopulationIndicatorResultCommand implements ResultRepositoryCommand<LegacyResultRepository, GetZonesForPopulationIndicatorResultRequest> { +public class GetZonesForPopulationIndicatorResultCommand extends AbstractLegacyCommand<GetZonesForPopulationIndicatorResultRequest> { @Override - public Class<GetZonesForPopulationIndicatorResultRequest> getRequestType() { - return GetZonesForPopulationIndicatorResultRequest.class; - } - - @Override - public boolean accept(LegacyResultRepository repository, - GetZonesForPopulationIndicatorResultRequest request) { + public boolean accept(GetZonesForPopulationIndicatorResultRequest request) { return repository.isIndicatorsResult() && repository.matchFacade(request); } @Override - public MapResult execute(LegacyResultRepository repository, - GetZonesForPopulationIndicatorResultRequest request) { + public MapResult execute(GetZonesForPopulationIndicatorResultRequest request) { - ZoneMap zonesMap = repository.getZonesMap(); + ZoneMap zonesMap = getZonesMap(); List<String> allowedZones = zonesMap.getZonesForFacade(request.getFacade()); Map<String, String> map = zonesMap.getSubZonesMap(repository.getZone(), allowedZones); - MapResult result = new MapResult(repository.getId(), map); + MapResult result = newMapResult(map); return result; } Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesListForExtractRawDataAndResultsCommand.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesListForExtractRawDataAndResultsCommand.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/GetZonesListForExtractRawDataAndResultsCommand.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,63 +0,0 @@ -package fr.ifremer.coser.result.repository.legacy.command; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import fr.ifremer.coser.bean.ZoneMap; -import fr.ifremer.coser.result.MapResult; -import fr.ifremer.coser.result.repository.ResultRepositoryCommand; -import fr.ifremer.coser.result.repository.legacy.LegacyResultRepository; -import fr.ifremer.coser.result.request.GetZonesForExtractRawDataAndResultsRequest; - -import java.util.List; -import java.util.Map; - -/** - * Created on 3/11/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class GetZonesListForExtractRawDataAndResultsCommand implements ResultRepositoryCommand<LegacyResultRepository, GetZonesForExtractRawDataAndResultsRequest> { - - @Override - public Class<GetZonesForExtractRawDataAndResultsRequest> getRequestType() { - return GetZonesForExtractRawDataAndResultsRequest.class; - } - - @Override - public boolean accept(LegacyResultRepository repository, - GetZonesForExtractRawDataAndResultsRequest request) { - return true; - } - - @Override - public MapResult execute(LegacyResultRepository repository, - GetZonesForExtractRawDataAndResultsRequest request) { - ZoneMap zonesMap = repository.getZonesMap(); - List<String> allowedZones = zonesMap.getZonesForFacade(null); - Map<String, String> map = zonesMap.getSubZonesMap(repository.getZone(), allowedZones); - MapResult result = new MapResult(repository.getId(), map); - return result; - } - -} Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/package-info.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/package-info.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/package-info.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,28 @@ +/** + * Implementations of {@link fr.ifremer.coser.result.CoserCommand} for legacy result repository. + * + * @since 1.5 + */ +package fr.ifremer.coser.result.repository.legacy.command; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/command/package-info.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/package-info.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/package-info.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/repository/legacy/package-info.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,5 +1,5 @@ /** - * Implementation for legacy results. + * Implementation for legacy result repository. * * @since 1.5 */ Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/AbstractGetIndicatorResultRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/AbstractGetIndicatorResultRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/AbstractGetIndicatorResultRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -25,8 +25,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.coser.result.CoserRequest; -import java.util.Locale; - /** * Request to obtain indicator results. * <p/> @@ -39,41 +37,19 @@ private static final long serialVersionUID = 1L; - /** - * Type of result. - */ - public enum IndicatorResultType { - DATA, - GRAPH - } - - protected Locale locale; - protected String facade; protected String zone; protected String indicator; - protected IndicatorResultType indicatorResultType; + protected String species; @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(Locale locale) { - Preconditions.checkNotNull(locale); - this.locale = locale; - } - - @Override public boolean isFilled() { - return !(locale == null || - facade == null || + return !(facade == null || zone == null || - indicatorResultType == null || + species == null || indicator == null); } @@ -99,15 +75,6 @@ this.zone = zone; } - public IndicatorResultType getIndicatorResultType() { - return indicatorResultType; - } - - public void setIndicatorResultType(IndicatorResultType indicatorResultType) { - Preconditions.checkNotNull(indicatorResultType); - this.indicatorResultType = indicatorResultType; - } - @Override public String getIndicator() { return indicator; @@ -119,4 +86,15 @@ this.indicator = indicator; } + @Override + public String getSpecies() { + return species; + } + + @Override + public void setSpecies(String species) { + Preconditions.checkNotNull(species); + this.species = species; + } + } Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestBuilder.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestBuilder.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestBuilder.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,221 +0,0 @@ -package fr.ifremer.coser.result.request; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; -import fr.ifremer.coser.CoserTechnicalException; -import fr.ifremer.coser.result.CoserRequest; -import fr.ifremer.coser.result.ResultType; -import fr.ifremer.coser.util.DataType; -import org.apache.commons.collections4.CollectionUtils; - -import java.util.List; -import java.util.Locale; - -/** - * To build requests. - * <p/> - * Created on 3/7/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class CoserRequestBuilder<R extends CoserRequest> { - - protected final Locale locale; - - protected String facade; - - protected String zone; - - protected String species; - - protected String indicator; - - protected AbstractGetIndicatorResultRequest.IndicatorResultType indicatorResultType; - - protected List<DataType> extractTypeList; - - protected List<String> zoneList; - - protected List<String> speciesList; - - protected List<String> populationIndicatorList; - - protected List<String> communityIndicatorList; - - protected String resultRepositoryType; - - protected ResultType resultType; - - protected final Class<R> requestType; - - public CoserRequestBuilder(Locale locale, Class<R> requestType) { - Preconditions.checkNotNull(locale); - Preconditions.checkNotNull(requestType); - this.locale = locale; - this.requestType = requestType; - } - - public CoserRequestBuilder<R> addFacade(String facade) { - this.facade = facade; - return this; - } - - public CoserRequestBuilder<R> addZone(String zone) { - this.zone = zone; - return this; - } - - public CoserRequestBuilder<R> addSpecies(String species) { - this.species = species; - return this; - } - - public CoserRequestBuilder<R> addIndicator(String indicator) { - this.indicator = indicator; - return this; - } - - public CoserRequestBuilder<R> addIndicatorResultType(AbstractGetIndicatorResultRequest.IndicatorResultType indicatorResultType) { - this.indicatorResultType = indicatorResultType; - return this; - } - - public CoserRequestBuilder<R> addExtractTypeList(List<DataType> extractTypeSet) { - this.extractTypeList = extractTypeSet; - return this; - } - - public CoserRequestBuilder<R> addZoneList(List<String> zoneList) { - this.zoneList = zoneList; - return this; - } - - public CoserRequestBuilder<R> addSpeciesList(List<String> speciesList) { - this.speciesList = speciesList; - return this; - } - - public CoserRequestBuilder<R> addPopulationIndicatorList(List<String> populationIndicatorList) { - this.populationIndicatorList = populationIndicatorList; - return this; - } - - public CoserRequestBuilder<R> addCommunityIndicatorList(List<String> communityIndicatorList) { - this.communityIndicatorList = communityIndicatorList; - return this; - } - - public CoserRequestBuilder<R> addResultRepositoryType(String resultRepositoryType) { - this.resultRepositoryType = resultRepositoryType; - return this; - } - - public CoserRequestBuilder<R> addResultType(ResultType resultType) { - this.resultType = resultType; - return this; - } - - public R toRequest() { - try { - R request = requestType.newInstance(); - flush(request); - return request; - } catch (InstantiationException e) { - throw new CoserTechnicalException(e); - } catch (IllegalAccessException e) { - throw new CoserTechnicalException(e); - } - } - - protected void flush(R request) { - request.setLocale(locale); - if (request instanceof CoserRequestFacadeAware) { - if (facade != null) { - ((CoserRequestFacadeAware) request).setFacade(facade); - } - } - if (request instanceof CoserRequestZoneAware) { - if (zone != null) { - ((CoserRequestZoneAware) request).setZone(zone); - } - } - if (request instanceof CoserRequestSpeciesAware) { - if (species != null) { - ((CoserRequestSpeciesAware) request).setSpecies(species); - } - } - if (request instanceof CoserRequestZoneListAware) { - if (CollectionUtils.isNotEmpty(zoneList)) { - ((CoserRequestZoneListAware) request).setZoneList(zoneList); - } - } - if (request instanceof CoserRequestIndicatorAware) { - if (indicator != null) { - ((CoserRequestIndicatorAware) request).setIndicator(indicator); - } - } - - if (request instanceof AbstractGetIndicatorResultRequest) { - if (indicatorResultType != null) { - ((AbstractGetIndicatorResultRequest) request).setIndicatorResultType(indicatorResultType); - } - } - - if (request instanceof ExtractRawDataAndResultsRequest) { - if (CollectionUtils.isNotEmpty(extractTypeList)) { - ((ExtractRawDataAndResultsRequest) request).setExtractTypeList(extractTypeList); - } - if (CollectionUtils.isNotEmpty(populationIndicatorList)) { - ((ExtractRawDataAndResultsRequest) request).setPopulationIndicatorList(populationIndicatorList); - } - if (CollectionUtils.isNotEmpty(communityIndicatorList)) { - ((ExtractRawDataAndResultsRequest) request).setCommunityIndicatorList(communityIndicatorList); - } - if (CollectionUtils.isNotEmpty(speciesList)) { - ((ExtractRawDataAndResultsRequest) request).setSpeciesList(speciesList); - } - - } - - if (request instanceof DeleteResultsRequest) { - if (resultRepositoryType != null) { - ((DeleteResultsRequest) request).setResultRepositoryType(resultRepositoryType); - } - if (resultType != null) { - ((DeleteResultsRequest) request).setResultType(resultType); - } - } - - if (request instanceof GetAllResultsRequest) { - if (resultRepositoryType != null) { - ((GetAllResultsRequest) request).setResultRepositoryType(resultRepositoryType); - } - if (resultType != null) { - ((GetAllResultsRequest) request).setResultType(resultType); - } - } - } - -} Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestExtractTypeListAware.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestExtractTypeListAware.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestExtractTypeListAware.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,41 @@ +package fr.ifremer.coser.result.request; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import fr.ifremer.coser.result.CoserRequest; +import fr.ifremer.coser.util.DataType; + +import java.util.List; + +/** + * Created on 3/13/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public interface CoserRequestExtractTypeListAware extends CoserRequest { + + List<DataType> getExtractTypeList(); + + void setExtractTypeList(List<DataType> extractTypeSet); +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestExtractTypeListAware.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestRepositoryResultTypeAware.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestRepositoryResultTypeAware.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestRepositoryResultTypeAware.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,39 @@ +package fr.ifremer.coser.result.request; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import fr.ifremer.coser.result.CoserRequest; +import fr.ifremer.coser.result.ResultType; + +/** + * Created on 3/13/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public interface CoserRequestRepositoryResultTypeAware extends CoserRequest { + + ResultType getResultType(); + + void setResultType(ResultType resultType); +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestRepositoryResultTypeAware.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestRepositoryTypeAware.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestRepositoryTypeAware.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestRepositoryTypeAware.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,38 @@ +package fr.ifremer.coser.result.request; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import fr.ifremer.coser.result.CoserRequest; + +/** + * Created on 3/13/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public interface CoserRequestRepositoryTypeAware extends CoserRequest { + + String getRepositoryType(); + + void setRepositoryType(String resultRepositoryType); +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/CoserRequestRepositoryTypeAware.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/DeleteResultsRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/DeleteResultsRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/DeleteResultsRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -29,7 +29,6 @@ import org.apache.commons.collections4.CollectionUtils; import java.util.List; -import java.util.Locale; /** * To delete some results. @@ -38,11 +37,10 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class DeleteResultsRequest implements CoserRequest, CoserRequestZoneListAware { +public class DeleteResultsRequest implements CoserRequest, CoserRequestZoneListAware, CoserRequestRepositoryTypeAware, CoserRequestRepositoryResultTypeAware { private static final long serialVersionUID = 1L; - protected Locale locale; /** * Id of matching result repository type. @@ -62,36 +60,29 @@ protected List<String> zoneList; @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(Locale locale) { - this.locale = locale; - } - - @Override public boolean isFilled() { - return !(locale == null || - resultRepositoryType == null || - resultType == null || - CollectionUtils.isEmpty(zoneList)); + return !(resultRepositoryType == null || + resultType == null || + CollectionUtils.isEmpty(zoneList)); } - public String getResultRepositoryType() { + @Override + public String getRepositoryType() { return resultRepositoryType; } - public void setResultRepositoryType(String resultRepositoryType) { + @Override + public void setRepositoryType(String resultRepositoryType) { Preconditions.checkNotNull(resultRepositoryType); this.resultRepositoryType = resultRepositoryType; } + @Override public ResultType getResultType() { return resultType; } + @Override public void setResultType(ResultType resultType) { Preconditions.checkNotNull(resultType); this.resultType = resultType; Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/ExtractRawDataAndResultsRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/ExtractRawDataAndResultsRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/ExtractRawDataAndResultsRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -27,8 +27,8 @@ import fr.ifremer.coser.util.DataType; import org.apache.commons.collections4.CollectionUtils; +import java.io.File; import java.util.List; -import java.util.Locale; /** * Request to extract data. @@ -38,12 +38,10 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class ExtractRawDataAndResultsRequest implements CoserRequest, CoserRequestZoneListAware { +public class ExtractRawDataAndResultsRequest implements CoserRequest, CoserRequestZoneListAware, CoserRequestExtractTypeListAware { private static final long serialVersionUID = 1L; - protected Locale locale; - protected List<String> zoneList; protected List<String> populationIndicatorList; @@ -54,31 +52,27 @@ protected List<DataType> extractTypeList; - @Override - public Locale getLocale() { - return locale; - } + /** + * Where to extract all data and graphs. + */ + protected File extractDirectory; @Override - public void setLocale(Locale locale) { - Preconditions.checkNotNull(locale); - this.locale = locale; + public boolean isFilled() { + return !( + CollectionUtils.isEmpty(extractTypeList) || + CollectionUtils.isEmpty(zoneList) || + CollectionUtils.isEmpty(populationIndicatorList) || + CollectionUtils.isEmpty(communityIndicatorList) || + CollectionUtils.isEmpty(speciesList)); } @Override - public boolean isFilled() { - return !(locale == null || - CollectionUtils.isEmpty(extractTypeList) || - CollectionUtils.isEmpty(zoneList) || - CollectionUtils.isEmpty(populationIndicatorList) || - CollectionUtils.isEmpty(communityIndicatorList) || - CollectionUtils.isEmpty(speciesList)); - } - public List<DataType> getExtractTypeList() { return extractTypeList; } + @Override public void setExtractTypeList(List<DataType> extractTypeSet) { Preconditions.checkArgument(CollectionUtils.isNotEmpty(extractTypeSet)); this.extractTypeList = extractTypeSet; @@ -121,4 +115,12 @@ Preconditions.checkArgument(CollectionUtils.isNotEmpty(speciesList)); this.speciesList = speciesList; } + + public void setExtractDirectory(File extractDirectory) { + this.extractDirectory = extractDirectory; + } + + public File getExtractDirectory() { + return extractDirectory; + } } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/ExtractRawDataRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/ExtractRawDataRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/ExtractRawDataRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -25,8 +25,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.coser.result.CoserRequest; -import java.util.Locale; - /** * Request to obtain raw data results. * <p/> @@ -39,26 +37,13 @@ private static final long serialVersionUID = 1L; - protected Locale locale; - protected String facade; protected String zone; @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(Locale locale) { - Preconditions.checkNotNull(locale); - this.locale = locale; - } - - @Override public boolean isFilled() { - return !(locale == null || facade == null || zone == null); + return !(facade == null || zone == null); } @Override Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetAllResultsRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetAllResultsRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetAllResultsRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -27,20 +27,16 @@ import fr.ifremer.coser.result.ResultType; import fr.ifremer.coser.result.repository.ResultRepositoryType; -import java.util.Locale; - /** * Created on 3/11/14. * * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetAllResultsRequest implements CoserRequest { +public class GetAllResultsRequest implements CoserRequest, CoserRequestRepositoryTypeAware, CoserRequestRepositoryResultTypeAware { private static final long serialVersionUID = 1L; - protected Locale locale; - /** * Id of matching result repository type. * @@ -55,33 +51,26 @@ @Override public boolean isFilled() { - return !(locale == null || resultRepositoryType == null || resultType == null); + return !(resultRepositoryType == null || resultType == null); } @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(Locale locale) { - Preconditions.checkNotNull(locale); - this.locale = locale; - } - - public String getResultRepositoryType() { + public String getRepositoryType() { return resultRepositoryType; } - public void setResultRepositoryType(String resultRepositoryType) { + @Override + public void setRepositoryType(String resultRepositoryType) { Preconditions.checkNotNull(resultRepositoryType); this.resultRepositoryType = resultRepositoryType; } + @Override public ResultType getResultType() { return resultType; } + @Override public void setResultType(ResultType resultType) { Preconditions.checkNotNull(resultType); this.resultType = resultType; Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetCommunityIndicatorResultDataRequest.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetCommunityIndicatorResultRequest.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetCommunityIndicatorResultDataRequest.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetCommunityIndicatorResultDataRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,37 @@ +package fr.ifremer.coser.result.request; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +/** + * Request to obtain community indicator results data. + * <p/> + * Created on 3/4/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class GetCommunityIndicatorResultDataRequest extends AbstractGetIndicatorResultRequest { + + private static final long serialVersionUID = 1L; + +} Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetCommunityIndicatorResultGraphRequest.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetCommunityIndicatorResultRequest.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetCommunityIndicatorResultGraphRequest.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetCommunityIndicatorResultGraphRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,37 @@ +package fr.ifremer.coser.result.request; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +/** + * Request to obtain community indicator results graph. + * <p/> + * Created on 3/4/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class GetCommunityIndicatorResultGraphRequest extends AbstractGetIndicatorResultRequest { + + private static final long serialVersionUID = 1L; + +} Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetCommunityIndicatorResultRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetCommunityIndicatorResultRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetCommunityIndicatorResultRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,56 +0,0 @@ -package fr.ifremer.coser.result.request; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; - -/** - * Request to obtain community indicator results. - * <p/> - * Created on 3/4/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class GetCommunityIndicatorResultRequest extends AbstractGetIndicatorResultRequest { - - private static final long serialVersionUID = 1L; - - protected String species; - - @Override - public String getSpecies() { - return species; - } - - @Override - public void setSpecies(String species) { - Preconditions.checkNotNull(facade); - this.species = species; - } - - @Override - public boolean isFilled() { - return super.isFilled() && species != null; - } -} Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetIndicatorsForCommunityIndicatorResultRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetIndicatorsForCommunityIndicatorResultRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetIndicatorsForCommunityIndicatorResultRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -25,8 +25,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.coser.result.CoserRequest; -import java.util.Locale; - /** * Request to obtain community indicator results. * <p/> @@ -39,28 +37,13 @@ private static final long serialVersionUID = 1L; - protected Locale locale; - protected String facade; protected String zone; @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(Locale locale) { - Preconditions.checkNotNull(locale); - this.locale = locale; - } - - @Override public boolean isFilled() { - return !(locale == null || - facade == null || - zone == null); + return !(facade == null || zone == null); } @Override Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetIndicatorsForExtractRawDataAndResultsRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetIndicatorsForExtractRawDataAndResultsRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetIndicatorsForExtractRawDataAndResultsRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -28,7 +28,6 @@ import org.apache.commons.collections4.CollectionUtils; import java.util.List; -import java.util.Locale; /** * Request to extract data. @@ -38,12 +37,10 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetIndicatorsForExtractRawDataAndResultsRequest implements CoserRequest { +public class GetIndicatorsForExtractRawDataAndResultsRequest implements CoserRequest, CoserRequestZoneListAware, CoserRequestExtractTypeListAware { private static final long serialVersionUID = 1L; - protected Locale locale; - protected List<String> zoneList; protected List<String> populationIndicatorList; @@ -53,38 +50,31 @@ protected List<DataType> extractTypeList; @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(Locale locale) { - Preconditions.checkNotNull(locale); - this.locale = locale; - } - - @Override public boolean isFilled() { - return !(locale == null || - CollectionUtils.isEmpty(extractTypeList) || - CollectionUtils.isEmpty(zoneList) || - CollectionUtils.isEmpty(populationIndicatorList) || - CollectionUtils.isEmpty(communityIndicatorList)); + return !( + CollectionUtils.isEmpty(extractTypeList) || + CollectionUtils.isEmpty(zoneList) || + CollectionUtils.isEmpty(populationIndicatorList) || + CollectionUtils.isEmpty(communityIndicatorList)); } + @Override public List<DataType> getExtractTypeList() { return extractTypeList; } + @Override public void setExtractTypeList(List<DataType> extractTypeSet) { Preconditions.checkArgument(CollectionUtils.isNotEmpty(extractTypeSet)); this.extractTypeList = extractTypeSet; } + @Override public List<String> getZoneList() { return zoneList; } + @Override public void setZoneList(List<String> zoneList) { Preconditions.checkArgument(CollectionUtils.isNotEmpty(zoneList)); this.zoneList = zoneList; Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetIndicatorsForPopulationIndicatorResultRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetIndicatorsForPopulationIndicatorResultRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetIndicatorsForPopulationIndicatorResultRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -25,8 +25,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.coser.result.CoserRequest; -import java.util.Locale; - /** * Request to obtain community indicator results. * <p/> @@ -35,34 +33,21 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetIndicatorsForPopulationIndicatorResultRequest implements CoserRequest, CoserRequestFacadeAware, CoserRequestZoneAware , CoserRequestSpeciesAware{ +public class GetIndicatorsForPopulationIndicatorResultRequest implements CoserRequest, CoserRequestFacadeAware, CoserRequestZoneAware, CoserRequestSpeciesAware { private static final long serialVersionUID = 1L; - protected Locale locale; - protected String facade; protected String zone; + protected String species; @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(Locale locale) { - Preconditions.checkNotNull(locale); - this.locale = locale; - } - - @Override public boolean isFilled() { - return !(locale == null || - facade == null || - zone == null || - species==null); + return !(facade == null || + zone == null || + species == null); } @Override Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetMapResultRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetMapResultRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetMapResultRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -25,8 +25,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.coser.result.CoserRequest; -import java.util.Locale; - /** * Request to obtain map results. * <p/> @@ -45,8 +43,6 @@ */ public static final String NULL_SPECIES = "Repartition-stations"; - protected Locale locale; - protected String facade; protected String zone; @@ -55,21 +51,10 @@ @Override public boolean isFilled() { - return !(locale == null || facade == null || zone == null && species == null); + return !(facade == null || zone == null && species == null); } @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(Locale locale) { - Preconditions.checkNotNull(locale); - this.locale = locale; - } - - @Override public String getFacade() { return facade; } Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetPopulationIndicatorResultDataRequest.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetPopulationIndicatorResultRequest.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetPopulationIndicatorResultDataRequest.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetPopulationIndicatorResultDataRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,37 @@ +package fr.ifremer.coser.result.request; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +/** + * Request to obtain population indicator results data. + * <p/> + * Created on 3/4/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class GetPopulationIndicatorResultDataRequest extends AbstractGetIndicatorResultRequest { + + private static final long serialVersionUID = 1L; + +} Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetPopulationIndicatorResultGraphRequest.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetPopulationIndicatorResultRequest.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetPopulationIndicatorResultGraphRequest.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetPopulationIndicatorResultGraphRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,37 @@ +package fr.ifremer.coser.result.request; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +/** + * Request to obtain population indicator result as a graph. + * <p/> + * Created on 3/4/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class GetPopulationIndicatorResultGraphRequest extends AbstractGetIndicatorResultRequest { + + private static final long serialVersionUID = 1L; + +} Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetPopulationIndicatorResultRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetPopulationIndicatorResultRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetPopulationIndicatorResultRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,56 +0,0 @@ -package fr.ifremer.coser.result.request; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; - -/** - * Request to obtain population indicator results. - * <p/> - * Created on 3/4/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class GetPopulationIndicatorResultRequest extends AbstractGetIndicatorResultRequest { - - private static final long serialVersionUID = 1L; - - protected String species; - - @Override - public String getSpecies() { - return species; - } - - @Override - public void setSpecies(String species) { - Preconditions.checkNotNull(species); - this.species = species; - } - - @Override - public boolean isFilled() { - return super.isFilled() && species != null; - } -} Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesForExtractRawDataAndResultsRequest.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesListForExtractRawDataAndResultsRequest.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesForExtractRawDataAndResultsRequest.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesForExtractRawDataAndResultsRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,76 @@ +package fr.ifremer.coser.result.request; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Preconditions; +import fr.ifremer.coser.result.CoserRequest; +import fr.ifremer.coser.util.DataType; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.List; + +/** + * Request to extract data. + * <p/> + * Created on 3/9/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class GetSpeciesForExtractRawDataAndResultsRequest implements CoserRequest, CoserRequestZoneListAware, CoserRequestExtractTypeListAware { + + private static final long serialVersionUID = 1L; + + protected List<String> zoneList; + + protected List<DataType> extractTypeList; + + @Override + public boolean isFilled() { + return !( + CollectionUtils.isEmpty(extractTypeList) || + CollectionUtils.isEmpty(zoneList)); + } + + @Override + public List<DataType> getExtractTypeList() { + return extractTypeList; + } + + @Override + public void setExtractTypeList(List<DataType> extractTypeSet) { + Preconditions.checkArgument(CollectionUtils.isNotEmpty(extractTypeSet)); + this.extractTypeList = extractTypeSet; + } + + @Override + public List<String> getZoneList() { + return zoneList; + } + + @Override + public void setZoneList(List<String> zoneList) { + Preconditions.checkArgument(CollectionUtils.isNotEmpty(zoneList)); + this.zoneList = zoneList; + } +} Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesForMapResultRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesForMapResultRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesForMapResultRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -25,8 +25,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.coser.result.CoserRequest; -import java.util.Locale; - /** * Request to obtain available species for map results. * <p/> @@ -39,29 +37,16 @@ private static final long serialVersionUID = 1L; - protected Locale locale; - protected String facade; protected String zone; @Override public boolean isFilled() { - return !(locale == null || facade == null || zone == null); + return !(facade == null || zone == null); } @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(Locale locale) { - Preconditions.checkNotNull(locale); - this.locale = locale; - } - - @Override public String getFacade() { return facade; } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesForPopulationIndicatorResultRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesForPopulationIndicatorResultRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesForPopulationIndicatorResultRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -25,8 +25,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.coser.result.CoserRequest; -import java.util.Locale; - /** * Request to obtain community indicator results. * <p/> @@ -39,28 +37,15 @@ private static final long serialVersionUID = 1L; - protected Locale locale; - protected String facade; protected String zone; @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(Locale locale) { - Preconditions.checkNotNull(locale); - this.locale = locale; - } - - @Override public boolean isFilled() { - return !(locale == null || - facade == null || - zone == null); + return !( + facade == null || + zone == null); } @Override Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesListForCommunityIndicatorResultRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesListForCommunityIndicatorResultRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesListForCommunityIndicatorResultRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -25,8 +25,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.coser.result.CoserRequest; -import java.util.Locale; - /** * Request to obtain community indicator results. * <p/> @@ -39,8 +37,6 @@ private static final long serialVersionUID = 1L; - protected Locale locale; - protected String facade; protected String zone; @@ -48,22 +44,11 @@ protected String indicator; @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(Locale locale) { - Preconditions.checkNotNull(locale); - this.locale = locale; - } - - @Override public boolean isFilled() { - return !(locale == null || - facade == null || - zone == null || - indicator == null); + return !( + facade == null || + zone == null || + indicator == null); } @Override Deleted: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesListForExtractRawDataAndResultsRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesListForExtractRawDataAndResultsRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetSpeciesListForExtractRawDataAndResultsRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,86 +0,0 @@ -package fr.ifremer.coser.result.request; - -/* - * #%L - * Coser :: Business - * %% - * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; -import fr.ifremer.coser.result.CoserRequest; -import fr.ifremer.coser.util.DataType; -import org.apache.commons.collections4.CollectionUtils; - -import java.util.List; -import java.util.Locale; - -/** - * Request to extract data. - * <p/> - * Created on 3/9/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class GetSpeciesListForExtractRawDataAndResultsRequest implements CoserRequest { - - private static final long serialVersionUID = 1L; - - protected Locale locale; - - protected List<String> zoneList; - - protected List<DataType> extractTypeList; - - @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(Locale locale) { - Preconditions.checkNotNull(locale); - this.locale = locale; - } - - @Override - public boolean isFilled() { - return !(locale == null || - CollectionUtils.isEmpty(extractTypeList) || - CollectionUtils.isEmpty(zoneList)); - } - - public List<DataType> getExtractTypeList() { - return extractTypeList; - } - - public void setExtractTypeList(List<DataType> extractTypeSet) { - Preconditions.checkArgument(CollectionUtils.isNotEmpty(extractTypeSet)); - this.extractTypeList = extractTypeSet; - } - - public List<String> getZoneList() { - return zoneList; - } - - public void setZoneList(List<String> zoneList) { - Preconditions.checkArgument(CollectionUtils.isNotEmpty(zoneList)); - this.zoneList = zoneList; - } -} Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForCommunityIndicatorResultRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForCommunityIndicatorResultRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForCommunityIndicatorResultRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -25,8 +25,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.coser.result.CoserRequest; -import java.util.Locale; - /** * Request to obtain available zones for community indicator results. * <p/> @@ -39,27 +37,14 @@ private static final long serialVersionUID = 1L; - protected Locale locale; - protected String facade; @Override public boolean isFilled() { - return !(locale == null || facade == null); + return !(facade == null); } @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(Locale locale) { - Preconditions.checkNotNull(locale); - this.locale = locale; - } - - @Override public String getFacade() { return facade; } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForExtractRawDataAndResultsRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForExtractRawDataAndResultsRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForExtractRawDataAndResultsRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -27,7 +27,6 @@ import org.apache.commons.collections4.CollectionUtils; import java.util.List; -import java.util.Locale; /** * Request to extract data. @@ -37,34 +36,23 @@ * @author Tony Chemit <chemit@codelutin.com> * @since 1.5 */ -public class GetZonesForExtractRawDataAndResultsRequest implements CoserRequest { +public class GetZonesForExtractRawDataAndResultsRequest implements CoserRequest, CoserRequestZoneListAware { private static final long serialVersionUID = 1L; - protected Locale locale; - protected List<String> zoneList; @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(Locale locale) { - Preconditions.checkNotNull(locale); - this.locale = locale; - } - - @Override public boolean isFilled() { - return !(locale == null || CollectionUtils.isEmpty(zoneList)); + return !(CollectionUtils.isEmpty(zoneList)); } + @Override public List<String> getZoneList() { return zoneList; } + @Override public void setZoneList(List<String> zoneList) { Preconditions.checkArgument(CollectionUtils.isNotEmpty(zoneList)); this.zoneList = zoneList; Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForExtractRawDataRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForExtractRawDataRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForExtractRawDataRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -25,8 +25,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.coser.result.CoserRequest; -import java.util.Locale; - /** * Request to obtain raw data results. * <p/> @@ -39,24 +37,11 @@ private static final long serialVersionUID = 1L; - protected Locale locale; - protected String facade; @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(Locale locale) { - Preconditions.checkNotNull(locale); - this.locale = locale; - } - - @Override public boolean isFilled() { - return !(locale == null || facade == null); + return !(facade == null); } @Override Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForMapResultRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForMapResultRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForMapResultRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -25,8 +25,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.coser.result.CoserRequest; -import java.util.Locale; - /** * Request to obtain available zones for map results. * <p/> @@ -39,27 +37,14 @@ private static final long serialVersionUID = 1L; - protected Locale locale; - protected String facade; @Override public boolean isFilled() { - return !(locale == null || facade == null); + return !(facade == null); } @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(Locale locale) { - Preconditions.checkNotNull(locale); - this.locale = locale; - } - - @Override public String getFacade() { return facade; } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForPopulationIndicatorResultRequest.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForPopulationIndicatorResultRequest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/GetZonesForPopulationIndicatorResultRequest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -25,8 +25,6 @@ import com.google.common.base.Preconditions; import fr.ifremer.coser.result.CoserRequest; -import java.util.Locale; - /** * Request to obtain available zones for community indicator results. * <p/> @@ -39,27 +37,14 @@ private static final long serialVersionUID = 1L; - protected Locale locale; - protected String facade; @Override public boolean isFilled() { - return !(locale == null || facade == null); + return !(facade == null); } @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(Locale locale) { - Preconditions.checkNotNull(locale); - this.locale = locale; - } - - @Override public String getFacade() { return facade; } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/package-info.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/package-info.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/request/package-info.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,5 +1,5 @@ /** - * Differents implementations of {@link fr.ifremer.coser.result.CoserRequest}. + * Implementations of {@link fr.ifremer.coser.result.CoserRequest}. * * @since 1.5 */ Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/ExtractRawDataAndResultsResult.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/ExtractRawDataAndResultsResult.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/ExtractRawDataAndResultsResult.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,65 @@ +package fr.ifremer.coser.result.result; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import fr.ifremer.coser.result.CoserResult; +import org.apache.commons.collections4.map.MultiKeyMap; +import org.apache.commons.lang3.tuple.Pair; + +import java.io.File; +import java.util.Map; + +/** + * Created on 3/15/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class ExtractRawDataAndResultsResult implements CoserResult { + + private static final long serialVersionUID = 1L; + + protected final String source; + + protected final MultiKeyMap<String, File> pdfMaps; + + protected final Map<String, Pair<File, String>> pdfCharts; + + public ExtractRawDataAndResultsResult(String source, + MultiKeyMap<String, File> pdfMaps, + Map<String, Pair<File, String>> pdfCharts) { + this.source = source; + this.pdfMaps = pdfMaps; + this.pdfCharts = pdfCharts; + } + + @Override + public String getSource() { + return source; + } + + @Override + public Pair<MultiKeyMap<String, File>, Map<String, Pair<File, String>>> getResult() { + return Pair.of(pdfMaps, pdfCharts); + } +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/ExtractRawDataAndResultsResult.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/FileResult.java (from rev 1134, trunk/coser-business/src/main/java/fr/ifremer/coser/result/FileResult.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/FileResult.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/FileResult.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,75 @@ +package fr.ifremer.coser.result.result; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import fr.ifremer.coser.CoserTechnicalException; +import fr.ifremer.coser.result.CoserResult; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; + +/** + * A result with only one file. + * <p/> + * A useful method is offered to obtain directly a {@link InputStream} from the result file ({@link #getInputStream()}). + * <p/> + * Created on 3/4/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class FileResult implements CoserResult { + + private static final long serialVersionUID = 1L; + + protected final String source; + + protected final File file; + + public FileResult(String source, File file) { + this.file = file; + this.source = source; + } + + @Override + public String getSource() { + return source; + } + + @Override + public File getResult() { + return file; + } + + public InputStream getInputStream() { + try { + InputStream inputStream = new FileInputStream(file); + return inputStream; + } catch (FileNotFoundException e) { + // should never happen ? + throw new CoserTechnicalException("Could not find file: " + file, e); + } + } +} Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/MapResult.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/MapResult.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/MapResult.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/MapResult.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,58 @@ +package fr.ifremer.coser.result.result; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import fr.ifremer.coser.result.CoserResult; + +import java.util.Map; + +/** + * Created on 3/12/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class MapResult implements CoserResult { + + private static final long serialVersionUID = 1L; + + protected final String source; + + protected final Map<String, String> map; + + public MapResult(String source, Map<String, String> map) { + this.map = map; + this.source = source; + } + + @Override + public String getSource() { + return source; + } + + @Override + public Map<String, String> getResult() { + return map; + } + +} \ No newline at end of file Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/VoidResult.java (from rev 1145, trunk/coser-business/src/main/java/fr/ifremer/coser/result/VoidResult.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/VoidResult.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/VoidResult.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,52 @@ +package fr.ifremer.coser.result.result; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import fr.ifremer.coser.result.CoserResult; + +/** + * Created on 3/12/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class VoidResult implements CoserResult { + + private static final long serialVersionUID = 1L; + + protected final String source; + + public VoidResult(String source) { + this.source = source; + } + + @Override + public String getSource() { + return source; + } + + @Override + public Void getResult() { + return null; + } +} Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/package-info.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/package-info.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/package-info.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,28 @@ +/** + * Implementations of {@link fr.ifremer.coser.result.CoserResult}. + * + * @since 1.5 + */ +package fr.ifremer.coser.result.result; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/result/package-info.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/Charts.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/Charts.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/Charts.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,275 @@ +package fr.ifremer.coser.result.util; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Preconditions; +import fr.ifremer.coser.CoserTechnicalException; +import fr.ifremer.coser.bean.IndicatorMap; +import fr.ifremer.coser.storage.DataStorageWalker; +import org.apache.commons.lang3.StringUtils; +import org.jfree.chart.ChartUtilities; +import org.jfree.chart.JFreeChart; +import org.jfree.chart.axis.CategoryAxis; +import org.jfree.chart.axis.CategoryLabelPositions; +import org.jfree.chart.axis.NumberAxis; +import org.jfree.chart.axis.ValueAxis; +import org.jfree.chart.plot.CategoryPlot; +import org.jfree.chart.plot.PlotOrientation; +import org.jfree.chart.renderer.category.CategoryItemRenderer; +import org.jfree.chart.renderer.category.StatisticalLineAndShapeRenderer; +import org.jfree.data.statistics.DefaultStatisticalCategoryDataset; +import org.nuiton.i18n.I18n; + +import java.awt.Color; +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +/** + * Useful methods to generate charts. + * <p/> + * Created on 3/15/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class Charts { + + public File generateChartFile(String prefix, + JFreeChart chart, + int width, + int height) { + try { + File file = File.createTempFile(prefix, ".png"); + file.deleteOnExit(); + ChartUtilities.saveChartAsPNG(file, chart, width, height); + return file; + } catch (IOException ex) { + throw new CoserTechnicalException("Can't save chart", ex); + } + } + + public String getYearChartTitle(Locale locale) { + Preconditions.checkNotNull(locale); + String yearAxis = I18n.l(locale, "coser.business.year"); +// String yearAxis = "Year"; +// if ("fr".equals(locale.getLanguage())) { +// yearAxis = "Ann\u00E9e"; +// } else if ("es".equals(locale.getLanguage())) { +// yearAxis = "A\u00F1o"; +// } + return yearAxis; + } + + public JFreeChart generateCommunityChart(Locale locale, + ExtractGraphDataWalker walker, + IndicatorMap indicatorMap, + String indicator, + String chartTitle) { + + String indicatorName = indicatorMap.getIndicatorValue(locale, indicator); + + int multiplicator = walker.getMultiplicator(); + int minYear = walker.getMinYear(); + int maxYear = walker.getMaxYear(); + Map<Integer, Double[]> graphData = walker.getGraphData(); + + // generate dataset with sorted data + DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset(); + for (int indexYear = minYear; indexYear <= maxYear; ++indexYear) { + Double[] entry = graphData.get(indexYear); + if (entry != null) { + Double estimation = entry[0] / multiplicator; + Double ecart = entry[1] / multiplicator; + statisticalDataset.add(estimation, ecart, "Serie1", (Comparable) indexYear); + } else { + statisticalDataset.add(null, null, "Serie1", indexYear); + } + } + + // configure chart + String yearAxis = getYearChartTitle(locale); + CategoryAxis categoryAxis = new CategoryAxis(yearAxis); + categoryAxis.setCategoryMargin(0); + categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90); + + String unit = indicatorMap.getIndicatorUnit(indicator); + // label horizontaux + String legendY = indicatorName; + if (multiplicator != 1) { + // affiche par exemple : cm * 1000 + legendY += " (" + unit + "*" + multiplicator + ")"; + } else if (StringUtils.isNotEmpty(unit)) { + legendY += " (" + unit + ")"; + } + ValueAxis valueAxis = new NumberAxis(legendY); + valueAxis.setUpperMargin(0.1); + + CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true); + + CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer); + plot.setOrientation(PlotOrientation.VERTICAL); + JFreeChart chart = new JFreeChart(chartTitle, JFreeChart.DEFAULT_TITLE_FONT, plot, true); + + // remove series legend + chart.removeLegend(); + // white background + chart.setBackgroundPaint(Color.WHITE); + + return chart; + } + + public JFreeChart generatePopulationChart(Locale locale, + ExtractGraphDataWalker walker, + IndicatorMap indicatorMap, + String indicator, + String title) { + + if (!walker.isIndicatorFound()) { + // indicator not found + return null; + } + + int multiplicator = walker.getMultiplicator(); + int minYear = walker.getMinYear(); + int maxYear = walker.getMaxYear(); + Map<Integer, Double[]> graphData = walker.getGraphData(); + + String indicatorName = indicatorMap.getIndicatorValue(locale, indicator); + + // generate dataset with sorted data + DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset(); + for (int indexYear = minYear; indexYear <= maxYear; ++indexYear) { + Double[] entry = graphData.get(indexYear); + if (entry != null) { + Double estimation = entry[0] / multiplicator; + Double ecart = entry[1] / multiplicator; + statisticalDataset.add(estimation, ecart, "Serie1", (Comparable) indexYear); + } else { + statisticalDataset.add(null, null, "Serie1", indexYear); + } + } + + // configure chart + String yearAxis = getYearChartTitle(locale); + CategoryAxis categoryAxis = new CategoryAxis(yearAxis); + categoryAxis.setCategoryMargin(0); + categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90); + + // label horizontaux + String unit = indicatorMap.getIndicatorUnit(indicator); + String legendY = indicatorName; + if (multiplicator != 1) { + // affiche par exemple : cm * 1000 + legendY += " (" + unit + "*" + multiplicator + ")"; + } else if (StringUtils.isNotEmpty(unit)) { + legendY += " (" + unit + ")"; + } + ValueAxis valueAxis = new NumberAxis(legendY); + valueAxis.setUpperMargin(0.1); + + CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true); + + CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer); + plot.setOrientation(PlotOrientation.VERTICAL); + JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, true); + + // remove series legend + chart.removeLegend(); + // white background + chart.setBackgroundPaint(Color.WHITE); + + return chart; + } + + /** + * To extract graph data from a indicator data storage. + */ + public static abstract class ExtractGraphDataWalker implements DataStorageWalker { + + int multiplicator = 1; + + int minYear = Integer.MAX_VALUE; + + int maxYear = Integer.MIN_VALUE; + + boolean indicatorFound = false; + + Map<Integer, Double[]> graphData = new HashMap<Integer, Double[]>(); + + protected abstract String getEstimationData(String... tuple); + + protected abstract String getEcartData(String... tuple); + + protected abstract String getYearData(String... tuple); + + @Override + public void onRow(String... tuple) { + + indicatorFound = true; + + Double estimation = Double.parseDouble(getEstimationData(tuple)); + Double ecart = Double.parseDouble(getEcartData(tuple)); + int year = Integer.parseInt(getYearData(tuple)); + + if (year < minYear) { + minYear = year; + } + if (year > maxYear) { + maxYear = year; + } + graphData.put(year, new Double[]{estimation, ecart}); + + // si les données sont énormes, on affiche les données + // / multiplicator et on le mentionne dans la légende + if (estimation > 1e9) { + multiplicator = 1000000; + } + if (estimation > 1e6 && multiplicator < 1000000) { + multiplicator = 1000; + } + } + + public int getMultiplicator() { + return multiplicator; + } + + public int getMinYear() { + return minYear; + } + + public int getMaxYear() { + return maxYear; + } + + public boolean isIndicatorFound() { + return indicatorFound; + } + + public Map<Integer, Double[]> getGraphData() { + return graphData; + } + } +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/Charts.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/Extracts.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/Extracts.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/Extracts.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,122 @@ +package fr.ifremer.coser.result.util; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.Maps; +import fr.ifremer.coser.CoserTechnicalException; +import fr.ifremer.coser.result.CoserRequestContext; +import fr.ifremer.coser.result.result.ExtractRawDataAndResultsResult; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.collections4.map.MultiKeyMap; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.tuple.Pair; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ZipUtil; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +/** + * Useful methods for extract commands. + * Created on 3/15/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class Extracts { + + /** Logger. */ + private static final Log log = LogFactory.getLog(Extracts.class); + + public File assemblyExtractResult(CoserRequestContext context, + File extractDirectory, + List<String> zoneList, + List<ExtractRawDataAndResultsResult> results) { + + Locale locale = context.getLocale(); + + // merge all results + MultiKeyMap<String, File> pdfMaps = new MultiKeyMap<String, File>(); + Map<String, Pair<File, String>> pdfCharts = Maps.newHashMap(); + + for (ExtractRawDataAndResultsResult result : results) { + Pair<MultiKeyMap<String, File>, Map<String, Pair<File, String>>> repositoryResult = result.getResult(); + MultiKeyMap<String, File> pdfMap = repositoryResult.getLeft(); + Map<String, Pair<File, String>> pdfChart = repositoryResult.getRight(); + if (MapUtils.isNotEmpty(pdfMap)) { + pdfMaps.putAll(pdfMap); + } + if (MapUtils.isNotEmpty(pdfChart)) { + pdfCharts.putAll(pdfChart); + } + + } + + Reports reports = context.getReports(); + + // generate pdf if necessary + if (MapUtils.isNotEmpty(pdfMaps) || MapUtils.isNotEmpty(pdfCharts)) { + if (log.isDebugEnabled()) { + log.debug("Generated Extract PDF"); + } + reports.generateExtractPDF(extractDirectory, + zoneList, + pdfMaps, + pdfCharts, + context.getZoneMap(), + locale); + } + + // fichier de décharge en pdf + if (log.isDebugEnabled()) { + log.debug("Generated decharge PDF"); + } + String filename = Reports.getDechargeFilename(locale); + File dechargePDF = new File(extractDirectory, filename); + reports.generateDechargePDF(dechargePDF, locale, null, null); + + // make zip + if (log.isDebugEnabled()) { + log.debug("Make final archive"); + } + + try { + File resultZip = File.createTempFile("coser-extract-", ".zip"); + resultZip.deleteOnExit(); + ZipUtil.compress(resultZip, extractDirectory); + + // clean directory + FileUtils.deleteDirectory(extractDirectory.getParentFile()); + return resultZip; + } catch (IOException ex) { + throw new CoserTechnicalException("Can't create zip file", ex); + } finally { + // clean directory + FileUtils.deleteQuietly(extractDirectory.getParentFile()); + } + } +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/Extracts.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Copied: trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/Reports.java (from rev 1141, trunk/coser-business/src/main/java/fr/ifremer/coser/result/Reports.java) =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/Reports.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/Reports.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,451 @@ +package fr.ifremer.coser.result.util; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Preconditions; +import com.itextpdf.text.DocumentException; +import fr.ifremer.coser.CoserConstants; +import fr.ifremer.coser.CoserTechnicalException; +import fr.ifremer.coser.CoserUtils; +import fr.ifremer.coser.bean.IndicatorMap; +import fr.ifremer.coser.bean.Project; +import fr.ifremer.coser.bean.RSufiResult; +import fr.ifremer.coser.bean.RSufiResultPath; +import fr.ifremer.coser.bean.Selection; +import fr.ifremer.coser.bean.ZoneMap; +import fr.ifremer.coser.storage.DataStorage; +import fr.ifremer.coser.storage.DataStorages; +import freemarker.cache.ClassTemplateLoader; +import freemarker.ext.beans.BeansWrapper; +import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateException; +import org.apache.commons.collections4.keyvalue.MultiKey; +import org.apache.commons.collections4.map.MultiKeyMap; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringEscapeUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.Pair; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.i18n.I18n; +import org.w3c.dom.Document; +import org.xhtmlrenderer.pdf.ITextRenderer; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.StringWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.SortedSet; +import java.util.TreeSet; + +import static org.nuiton.i18n.I18n.l; + +/** + * For reports generation. + * <p/> + * Created on 3/7/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class Reports { + + /** Logger. */ + private static final Log log = LogFactory.getLog(Reports.class); + + /** Freemarker. */ + protected Configuration freemarkerConfiguration; + + public Reports() { + + freemarkerConfiguration = new Configuration(); + + // needed to overwrite "Defaults to default system encoding." + // fix encoding issue on some systems + freemarkerConfiguration.setEncoding(Locale.getDefault(), "UTF-8"); + + // specific template loader to get template from jars (classpath) + ClassTemplateLoader templateLoader = new ClassTemplateLoader(Reports.class, "/ftl"); + freemarkerConfiguration.setTemplateLoader(templateLoader); + + // pour les maps dans les template (entre autre) + freemarkerConfiguration.setObjectWrapper(new BeansWrapper()); + } + + public static String getDechargeFilename(Locale locale) { + Preconditions.checkNotNull(locale); + String filename = I18n.l(locale, "coser.business.dataDisclaimer.filename"); +// if (locale != null && "fr".equals(locale.getLanguage())) { +// filename = "DechargeDonnees.pdf"; +// } else if (locale != null && "es".equals(locale.getLanguage())) { +// filename = "DatosDeExencionDeResponsabilidad.pdf"; +// } else { +// filename = "DataDisclaimer.pdf"; +// } + return filename; + } + + /** + * Genere le fichier PDF d'information sur les espèces incluses dans les + * calculs des indicateurs de communautés, à jointe à chaque téléchargement. + * + * @param path path to result + * @param resultDirectory result directory + * @param locale locale + * @param indicatorLocalizedMap localized indicator map + * @return generated pdf file + */ + public File generateMetaFilePDF(RSufiResultPath path, + File resultDirectory, + Locale locale, + IndicatorMap indicatorLocalizedMap) { + + Project project = path.getProject(); + Selection selection = path.getSelection(); + RSufiResult rsufiResult = path.getRsufiResult(); + + File result = null; + + // chargement du reftax et des code types especes pour connaitre + // le type des especes de poissons + // parcourt du fichier des types de données + Map<String, Integer> refTaxSpeciesNumSys = new HashMap<String, Integer>(); + Map<String, String> refTaxSpeciesName = new HashMap<String, String>(); + Iterator<String[]> itReftax = project.getRefTaxSpecies().iterator(true); + while (itReftax.hasNext()) { + String[] tuple = itReftax.next(); + // "C_Perm","NumSys","NivSys","C_VALIDE","L_VALIDE","AA_VALIDE","C_TxP\u00E8re","Taxa" + String speciesCode = tuple[3]; + Integer iNumSys = Integer.valueOf(tuple[1]); + refTaxSpeciesNumSys.put(speciesCode, iNumSys); + + // fix html entities bug + String speciesSciName = StringEscapeUtils.escapeXml(tuple[4]); + String speciesAuthor = StringEscapeUtils.escapeXml(tuple[5]); + + // TODO little hack for italic species + refTaxSpeciesName.put(speciesCode, "<span style='font-style:italic'>" + speciesSciName + "</span> " + speciesAuthor); + } + + // code type / especes + Map<String, Integer[]> specyTypes = new HashMap<String, Integer[]>(); + Iterator<String[]> itTypeSpecies = project.getTypeEspeces().iterator(true); + while (itTypeSpecies.hasNext()) { + // "Types";"Commentaire";"NumSys min";"NumSys max","Code" + String[] tuple = itTypeSpecies.next(); + String specyTypeCode = tuple[4]; + + Integer iMinNumSys = Integer.valueOf(tuple[2]); + Integer iMaxNumSys = Integer.valueOf(tuple[3]); + specyTypes.put(specyTypeCode, new Integer[]{iMinNumSys, iMaxNumSys}); + } + + // le fichier estpopind + File estComIndFile = new File(resultDirectory, rsufiResult.getEstComIndName()); + + // donnees intermediare (map liste id > liste des indicateurs) + Map<String, SortedSet<String>> indicatorMap = new HashMap<String, SortedSet<String>>(); + + // le resutat sera une map complexe + // map liste id > liste des especes (nom complet) + Map<String, SortedSet<String>> speciesMap = new HashMap<String, SortedSet<String>>(); + + // Campagne Indicateur Liste Strate Annee Estimation EcartType CV + DataStorage dataStorage = DataStorages.load(estComIndFile, CoserConstants.CSV_RESULT_SEPARATOR_CHAR); + Iterator<String[]> estComIndIterator = dataStorage.iterator(true); + while (estComIndIterator.hasNext()) { + String[] tuple = estComIndIterator.next(); + + String indicatorCode = tuple[1]; + String listIdCode = tuple[2]; // c1, p2, T3 ... + + String listNumber = listIdCode.substring(1); // 1, 2, 3 + + // get indicator list + SortedSet<String> indicatorList = indicatorMap.get(listNumber); + if (indicatorList == null) { + indicatorList = new TreeSet<String>(); + indicatorMap.put(listNumber, indicatorList); + } + + // get indicator full name + String indicatorName = indicatorLocalizedMap.getIndicatorValue(locale, indicatorCode); + // peut arriver pour les indicateurs inconnu par coser + if (indicatorName != null) { + indicatorList.add(indicatorName); + } + } + + // seconde pass, remplit la map speciesMap avec les listes configurées + // dans la selection + for (String listNumber : indicatorMap.keySet()) { + List<String> selectionSpeciesList = null; + if ("1".equals(listNumber)) { + selectionSpeciesList = selection.getSelectedSpecies(); + } else if ("2".equals(listNumber)) { + selectionSpeciesList = selection.getSelectedSpeciesOccDens(); + } else if ("3".equals(listNumber)) { + selectionSpeciesList = selection.getSelectedSpeciesSizeAllYear(); + } else if ("4".equals(listNumber)) { + selectionSpeciesList = selection.getSelectedSpeciesMaturity(); + } + + if (selectionSpeciesList != null) { + SortedSet<String> speciesList = new TreeSet<String>(); + + for (String speciesCode : selectionSpeciesList) { + // get species full name + String speciesName = refTaxSpeciesName.get(speciesCode); + + // recupere le code type de l'espece, "m", "c", "p" ... + Integer speciesNumSys = refTaxSpeciesNumSys.get(speciesCode); + for (Map.Entry<String, Integer[]> speciesTypeEntry : specyTypes.entrySet()) { + String speciesTypeCode = speciesTypeEntry.getKey(); + Integer[] bound = speciesTypeEntry.getValue(); + + if (speciesNumSys >= bound[0] && speciesNumSys <= bound[1]) { + speciesName = "(" + speciesTypeCode + ") " + speciesName; + break; + } + } + // end code type espece + + speciesList.add(speciesName); + } + speciesMap.put(listNumber, speciesList); + } else { + if (log.isWarnEnabled()) { + log.warn("Can't get species list for list id " + listNumber); + } + } + } + + OutputStream os = null; + try { + // render freemarker template + Template mapTemplate = freemarkerConfiguration.getTemplate("metainfo.ftl", locale); + + Map<String, Object> root = new HashMap<String, Object>(); + root.put("indicatorsMap", indicatorMap); + root.put("speciesMap", speciesMap); + + Writer out = new StringWriter(); + mapTemplate.process(root, out); + out.flush(); + + // get content as w3c document + Document document = CoserUtils.parseDocument(out.toString()); + + // render template output as pdf + result = File.createTempFile("coser-metainfo-", ".pdf"); + result.deleteOnExit(); + os = new FileOutputStream(result); + + ITextRenderer renderer = new ITextRenderer(); + renderer.setDocument(document, null); + renderer.layout(); + renderer.createPDF(os); + + os.close(); + } catch (IOException ex) { + throw new CoserTechnicalException("Can't generate meta info file", ex); + } catch (TemplateException ex) { + throw new CoserTechnicalException("Can't generate meta info file", ex); + } catch (DocumentException ex) { + throw new CoserTechnicalException("Can't generate meta info file", ex); + } finally { + IOUtils.closeQuietly(os); + } + + return result; + } + + /** + * Genere le PDF dynamique de decharge à partir du template freemarker. + * + * @param disclamerPdf pdf file to generate + * @param locale generated pdf locale + */ + public void generateDechargePDF(File disclamerPdf, Locale locale, Date updateDate, String surveyName) { + + OutputStream os = null; + + try { + // get some info to put into pdf +// Date updateDate = getLastDataUpdateDate(); + +// // il se peut que pour l'extraction un fichier de décharge ne soit +// // pas généré pour une campagne en particulier +// // on passe un nom vide a freemarker +// String surveyName = ""; +// if (resultDirectory != null && rSufiResult != null) { +// surveyName = projectService.getProjectSurveyName(resultDirectory, rSufiResult); +// } + + // render freemarker template + Template mapTemplate = freemarkerConfiguration.getTemplate("decharge.ftl", locale); + + Map<String, Object> root = new HashMap<String, Object>(); + root.put("updateDate", updateDate); + root.put("surveyName", surveyName); + + Writer out = new StringWriter(); + mapTemplate.process(root, out); + out.flush(); + + // get content as w3c document + Document document = CoserUtils.parseDocument(out.toString()); + + // render template output as pdf + os = new FileOutputStream(disclamerPdf); + + ITextRenderer renderer = new ITextRenderer(); + renderer.setDocument(document, null); + renderer.layout(); + renderer.createPDF(os); + + os.close(); + } catch (IOException ex) { + throw new CoserTechnicalException("Can't generate decharge file", ex); + } catch (TemplateException ex) { + throw new CoserTechnicalException("Can't generate decharge file", ex); + } catch (DocumentException ex) { + throw new CoserTechnicalException("Can't generate decharge file", ex); + } finally { + IOUtils.closeQuietly(os); + } + } + + /** + * Generate pdf file filled with maps and charts. + * + * @param directory directory to generate pdf to + * @param zones zones ids + * @param pdfMaps pdf maps (can be {@code null}) + * @param pdfCharts pdf charts (can be {@code null}) + * @param zoneMap zoneMap (to get zone fullnames) + * @param locale locale to use for translations + */ + public void generateExtractPDF(File directory, + List<String> zones, + MultiKeyMap<String, File> pdfMaps, + Map<String, Pair<File, String>> pdfCharts, + ZoneMap zoneMap, + Locale locale) { + + for (String zone : zones) { + Collection<File> toDelete = new ArrayList<File>(); + OutputStream os = null; + + try { + StringBuilder htmlContent = new StringBuilder(); + htmlContent.append("<html><head>"); + htmlContent.append("<title>").append(l(locale, "coser.business.extract.extracttitle")).append("</title>"); + htmlContent.append("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />"); + htmlContent.append("</head><body>"); + + if (pdfMaps != null) { + for (Map.Entry<MultiKey<? extends String>, File> mapEntry : pdfMaps.entrySet()) { + String zoneId = mapEntry.getKey().getKey(0); + if (zoneId.equals(zone)) { + String speciesName = mapEntry.getKey().getKey(1); + File file = mapEntry.getValue(); + + String zoneName = zoneMap.getZoneFullName(zoneId); + htmlContent.append("<div style='page-break-after: always'>"); + htmlContent.append("<p>").append(zoneName).append(" - ").append(speciesName).append("</p>"); + htmlContent.append("<img src='file://").append(file.getAbsolutePath()).append("' />"); + htmlContent.append("</div>"); + } + } + } + + if (pdfCharts != null) { + for (Map.Entry<String, Pair<File, String>> chartFileAndData : pdfCharts.entrySet()) { + String zoneId = chartFileAndData.getKey(); + if (zoneId.equals(zone)) { + File chartFile = chartFileAndData.getValue().getLeft(); + String content = chartFileAndData.getValue().getRight(); + + htmlContent.append("<div style='page-break-after: always'>"); + htmlContent.append("<img src='file://"); + htmlContent.append(chartFile.getAbsolutePath()); + htmlContent.append("' />"); + htmlContent.append("<br />"); + htmlContent.append(l(locale, "coser.business.extract.extractdata")).append(" :"); + htmlContent.append("<pre>").append(content).append("</pre>"); + htmlContent.append("</div>"); + + // les graphiques ont été générés, a supprimer donc + // a ne surtout pas faire avec les cartes !!! + toDelete.add(chartFile); + } + } + } + + htmlContent.append("</body></html>"); + + // get content as w3c document + Document document = CoserUtils.parseDocument(htmlContent.toString()); + + // render template output as pdf + // remove accents and strange characters from zone display name + String zoneDisplay = zoneMap.getZoneFullName(zone); + zoneDisplay = StringUtils.stripAccents(zoneDisplay); + zoneDisplay = zoneDisplay.replaceAll("[^\\w- ]", "_"); + File pdfFile = new File(directory, zoneDisplay + ".pdf"); + os = new FileOutputStream(pdfFile); + + ITextRenderer renderer = new ITextRenderer(); + renderer.setDocument(document, null); + renderer.layout(); + renderer.createPDF(os); + + os.close(); + } catch (IOException ex) { + throw new CoserTechnicalException("Can't generate log pdf", ex); + } catch (DocumentException ex) { + throw new CoserTechnicalException("Can't generate log pdf", ex); + } finally { + IOUtils.closeQuietly(os); + + // delete file collection + for (File file : toDelete) { + FileUtils.deleteQuietly(file); + } + } + } + } +} Added: trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/package-info.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/package-info.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/package-info.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,28 @@ +/** + * Useful tools used by commands. + * + * @since 1.5 + */ +package fr.ifremer.coser.result.util; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/result/util/package-info.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/coser-business/src/main/java/fr/ifremer/coser/storage/DataStorageWalker.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/storage/DataStorageWalker.java (rev 0) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/storage/DataStorageWalker.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,41 @@ +package fr.ifremer.coser.storage; + +/* + * #%L + * Coser :: Business + * %% + * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +/** + * To walk throw a data storage. + * <p/> + * Created on 3/13/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public interface DataStorageWalker { + + /** + * Invoked for each row of the data storage. + * + * @param row the current row + */ + void onRow(String... row); +} Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/storage/DataStorageWalker.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/storage/DataStorages.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/storage/DataStorages.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/storage/DataStorages.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -23,6 +23,8 @@ */ import au.com.bytecode.opencsv.CSVReader; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; import fr.ifremer.coser.CoserConstants; import fr.ifremer.coser.CoserTechnicalException; import fr.ifremer.coser.services.CommonService; @@ -38,7 +40,9 @@ import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.Reader; +import java.io.StringWriter; import java.io.Writer; +import java.util.Iterator; import static org.nuiton.i18n.I18n.t; @@ -142,6 +146,24 @@ return file; } + public static String toString(DataStorage storage) { + String rawDataText; + StringWriter writer = null; + try { + writer = new StringWriter(); + DataStorages.save(storage, writer); + rawDataText = writer.toString(); + try { + writer.close(); + } catch (IOException e) { + throw new CoserTechnicalException("Could not close writer", e); + } + } finally { + IOUtils.closeQuietly(writer); + } + return rawDataText; + } + /** * Save a datastorage to a writer. * @@ -177,4 +199,98 @@ IOUtils.closeQuietly(writer); } } + + /** + * //TODO Use a walker + * + * @param storage the storage to test + * @param predicate predicate to match at least on one row + * @param skipHeader to skip the header of storage + * @param <P> type of predicate + * @return {@code true} if a row matchs the predicate + * @since 1.5 + */ + public static <P extends Predicate<String[]>> boolean match(DataStorage storage, + P predicate, + boolean skipHeader) { + Preconditions.checkNotNull(storage); + Preconditions.checkNotNull(predicate); + + Iterator<String[]> iterator = storage.iterator(skipHeader); + + boolean result = false; + + while (iterator.hasNext()) { + String[] tuple = iterator.next(); + if (predicate.apply(tuple)) { + result = true; + break; + } + } + return result; + } + + /** + * Gets a sub storage of all matching rows for the given predicate on the given storage. + * <p/> + * The result header is the given one in parameter {@code header}. + * + * @param storage storage to read + * @param predicate predicate to match rows to include in sub storage + * @param header new header to use + * @param <P> type of predicate + * @return the sub storage + */ + public static <P extends Predicate<String[]>> DataStorage sub(DataStorage storage, + P predicate, + String... header) { + + Preconditions.checkNotNull(storage); + Preconditions.checkNotNull(predicate); + Preconditions.checkNotNull(header); + + final DataStorage result = new MemoryDataStorage(); + result.add(header); + + walk(storage, predicate, new DataStorageWalker() { + @Override + public void onRow(String... row) { + result.add(row); + } + }); + return result; + } + + public static <W extends DataStorageWalker> void walk(DataStorage storage, + W walker) { + + Preconditions.checkNotNull(storage); + Preconditions.checkNotNull(walker); + + Iterator<String[]> iterator = storage.iterator(true); + + while (iterator.hasNext()) { + String[] tuple = iterator.next(); + walker.onRow(tuple); + } + } + + public static <P extends Predicate<String[]>, W extends DataStorageWalker> void walk(DataStorage storage, + P predicate, + W walker) { + + Preconditions.checkNotNull(storage); + Preconditions.checkNotNull(predicate); + Preconditions.checkNotNull(walker); + + Iterator<String[]> iterator = storage.iterator(true); + + while (iterator.hasNext()) { + String[] tuple = iterator.next(); + if (predicate.apply(tuple)) { + walker.onRow(tuple); + } + } + } + } Modified: trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties =================================================================== --- trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2014-03-15 15:11:29 UTC (rev 1146) @@ -106,6 +106,8 @@ coser.business.data.type.population=Population indices by species by area coser.business.data.type.source=Raw data by sampling unit (generally by haul) coser.business.dataDisclaimer.filename=DataDisclaimer.pdf +coser.business.echobase.community.header=Survey,Index,Species,Stratum,Year,Estimate,StandardDeviation,CV +coser.business.echobase.population.header=Survey,Index,List,Species,Stratum,Year,Estimate,StandardDeviation,CV coser.business.extract.creationdate=Creation date \: coser.business.extract.extractdata=Data coser.business.extract.extracttitle=Extract @@ -147,6 +149,8 @@ coser.business.result.repository.type.legacy=RSufi results coser.business.result.rsufiResultAlreadyExists=Result %s already exists \! coser.business.resultupload.duplicatedresult=Result %s/%s/%s duplicate another result for zone %s \! +coser.business.rsufi.community.header=Survey,Index,Species,Stratum,Year,Estimate,StandardDeviation,CV +coser.business.rsufi.population.header=Survey,Index,List,Species,Stratum,Year,Estimate,StandardDeviation,CV coser.business.selection.notValidatedControl=Not validated control \! coser.business.specesList.name=%s List %s coser.business.specesList.nameForAll=All List %s Modified: trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties =================================================================== --- trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2014-03-15 15:11:29 UTC (rev 1146) @@ -106,6 +106,8 @@ coser.business.data.type.population=Des indices biologiques par espèce et par zone coser.business.data.type.source=Des données par opération d'échantillonnage (en général par trait de chalut) coser.business.dataDisclaimer.filename=DechargeDonnees.pdf +coser.business.echobase.community.header=Campagne,Indice,Espèce,Strate,Annee,Estimation,EcartType,CV +coser.business.echobase.population.header=Campagne,Indice,Liste,Espèce,Strate,Annee,Estimation,EcartType,CV coser.business.extract.creationdate=Date de création \: coser.business.extract.extractdata=Données du graphique coser.business.extract.extracttitle=Extraction @@ -147,6 +149,8 @@ coser.business.result.repository.type.legacy=Résultats RSufi coser.business.result.rsufiResultAlreadyExists=Le résultat %s existe déjà \! coser.business.resultupload.duplicatedresult=Le résultat %s/%s/%s duplique un autre résultat pour la zone %s \! +coser.business.rsufi.community.header=Campagne,Liste,Espèce,Strate,Annee,Estimation,EcartType,CV +coser.business.rsufi.population.header=Campagne,Indice,Liste,Espèce,Strate,Annee,Estimation,EcartType,CV coser.business.selection.notValidatedControl=Contrôle non validé \! coser.business.specesList.name=%s Liste %s coser.business.specesList.nameForAll=Tous Liste %s Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/bean/IndicatorMapTest.java =================================================================== --- trunk/coser-business/src/test/java/fr/ifremer/coser/bean/IndicatorMapTest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/test/java/fr/ifremer/coser/bean/IndicatorMapTest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -47,7 +47,7 @@ @Test public void getIndicators() { IndicatorMap indicatorMap = new IndicatorMap(config.getWebIndicatorsFile()); - MultiKeyMap<String, String> map = indicatorMap.getMap(); + MultiKeyMap<String, String> map = indicatorMap.map; Assert.assertNotNull(map); Assert.assertEquals(200, map.size()); } Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryProviderTest.java =================================================================== --- trunk/coser-business/src/test/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryProviderTest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/test/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryProviderTest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -50,7 +50,7 @@ EchoBaseResultRepositoryProvider provider = new EchoBaseResultRepositoryProvider(basedir); - Set<EchoBaseResultRepository> resultRepositories = provider.loadRepositories(serviceContext); + Set<EchoBaseResultRepository> resultRepositories = provider.loadRepositories(); Assert.assertNotNull(resultRepositories); Assert.assertEquals(2, resultRepositories.size()); } Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryTest.java =================================================================== --- trunk/coser-business/src/test/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryTest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/test/java/fr/ifremer/coser/result/repository/echobase/EchoBaseResultRepositoryTest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,7 +22,9 @@ * #L% */ -import fr.ifremer.coser.result.repository.ResultRepositoryCommandEngine; +import fr.ifremer.coser.result.CoserCommand; +import fr.ifremer.coser.result.CoserCommandFactory; +import fr.ifremer.coser.result.DefaultCoserRequestContext; import fr.ifremer.coser.result.request.GetZonesForCommunityIndicatorResultRequest; import fr.ifremer.coser.result.request.GetZonesForMapResultRequest; import fr.ifremer.coser.result.request.GetZonesForPopulationIndicatorResultRequest; @@ -45,9 +47,9 @@ */ public class EchoBaseResultRepositoryTest extends CoserTestAbstract { - protected ResultRepositoryCommandEngine repository1; + protected EchoBaseResultRepository repository1; - protected ResultRepositoryCommandEngine repository2; + protected EchoBaseResultRepository repository2; @Override public void initProjectDatabase() throws IOException { @@ -56,14 +58,14 @@ EchoBaseResultRepositoryProvider repositoryProvider = new EchoBaseResultRepositoryProvider(projectsDirectory); - Set<EchoBaseResultRepository> repositories = repositoryProvider.loadRepositories(serviceContext); + Set<EchoBaseResultRepository> repositories = repositoryProvider.loadRepositories(); for (EchoBaseResultRepository repository : repositories) { String projectName = repository.project.getName(); if ("project1".equals(projectName)) { - repository1 = repositoryProvider.newEngine(repository); + repository1 = repository; } else if ("project2".equals(projectName)) { - repository2 = repositoryProvider.newEngine(repository); + repository2 = repository; } } Assume.assumeTrue("Could not find repository named *project1*", repository1 != null); @@ -73,16 +75,24 @@ @Test public void getAvailableZones() throws Exception { + CoserCommandFactory commandFactory = serviceContext.getCommandFactory(); + DefaultCoserRequestContext requestContext = + new DefaultCoserRequestContext(serviceContext, Locale.FRANCE); + + CoserCommand command; + // Map request GetZonesForMapResultRequest mapRequest = new GetZonesForMapResultRequest(); - mapRequest.setLocale(Locale.FRANCE); mapRequest.setFacade("atlantique"); Map<String, String> availableZones; - Assert.assertTrue(repository1.acceptRequest(mapRequest)); - availableZones = (Map<String, String>) repository1.executeRequest(mapRequest).getResult(); + + command = commandFactory.newCommand(requestContext, repository1, mapRequest); + + Assert.assertTrue(command.accept(mapRequest)); + availableZones = (Map<String, String>) command.execute(mapRequest).getResult(); Assert.assertNotNull(availableZones); Assert.assertEquals(1, availableZones.size()); Assert.assertTrue(availableZones.containsKey("gdgciem8")); @@ -90,24 +100,25 @@ // pas de zones pour la facade mapRequest.setFacade("mediteranee"); - Assert.assertFalse(repository1.acceptRequest(mapRequest)); -// availableZones = (Map<String, String>) repository1.executeRequest(mapRequest).getResult(); + Assert.assertFalse(command.accept(mapRequest)); +// availableZones = (Map<String, String>) command.execute(repository1, mapRequest).getResult(); // Assert.assertNull(availableZones); // facade inconnue mapRequest.setFacade("mediteranee2"); - Assert.assertFalse(repository1.acceptRequest(mapRequest)); -// availableZones = (Map<String, String>) repository1.executeRequest(mapRequest).getResult(); + Assert.assertFalse(command.accept(mapRequest)); +// availableZones = (Map<String, String>) command.execute(repository1, mapRequest).getResult(); // Assert.assertNull(availableZones); // Population request GetZonesForPopulationIndicatorResultRequest popRequest = new GetZonesForPopulationIndicatorResultRequest(); - popRequest.setLocale(Locale.FRANCE); + command = commandFactory.newCommand(requestContext, repository1, popRequest); + popRequest.setFacade("atlantique"); - Assert.assertTrue(repository1.acceptRequest(popRequest)); - availableZones = (Map<String, String>) repository1.executeRequest(popRequest).getResult(); + Assert.assertTrue(command.accept(popRequest)); + availableZones = (Map<String, String>) command.execute(popRequest).getResult(); Assert.assertNotNull(availableZones); Assert.assertEquals(1, availableZones.size()); Assert.assertTrue(availableZones.containsKey("gdgciem8")); @@ -115,24 +126,25 @@ // pas de zones pour la facade popRequest.setFacade("mediteranee"); - Assert.assertFalse(repository1.acceptRequest(popRequest)); -// availableZones = (Map<String, String>) repository1.executeRequest(popRequest).getResult(); + Assert.assertFalse(command.accept(popRequest)); +// availableZones = (Map<String, String>) command.execute(repository1, popRequest).getResult(); // Assert.assertNull(availableZones); // facade inconnue popRequest.setFacade("mediteranee2"); - Assert.assertFalse(repository1.acceptRequest(popRequest)); -// availableZones = (Map<String, String>) repository1.executeRequest(popRequest).getResult(); + Assert.assertFalse(command.accept(popRequest)); +// availableZones = (Map<String, String>) command.execute(repository1, popRequest).getResult(); // Assert.assertNull(availableZones); // Community request GetZonesForCommunityIndicatorResultRequest comRequest = new GetZonesForCommunityIndicatorResultRequest(); - comRequest.setLocale(Locale.FRANCE); + + command = commandFactory.newCommand(requestContext, repository1, comRequest); comRequest.setFacade("atlantique"); - Assert.assertTrue(repository1.acceptRequest(comRequest)); - availableZones = (Map<String, String>) repository1.executeRequest(comRequest).getResult(); + Assert.assertTrue(command.accept(comRequest)); + availableZones = (Map<String, String>) command.execute(comRequest).getResult(); Assert.assertNotNull(availableZones); Assert.assertEquals(1, availableZones.size()); Assert.assertTrue(availableZones.containsKey("gdgciem8")); @@ -140,14 +152,14 @@ // pas de zones pour la facade comRequest.setFacade("mediteranee"); - Assert.assertFalse(repository1.acceptRequest(comRequest)); -// availableZones = (Map<String, String>) repository1.executeRequest(comRequest).getResult(); + Assert.assertFalse(command.accept(comRequest)); +// availableZones = (Map<String, String>) command.execute(repository1, comRequest).getResult(); // Assert.assertNull(availableZones); // facade inconnue comRequest.setFacade("mediteranee2"); - Assert.assertFalse(repository1.acceptRequest(comRequest)); -// availableZones = (Map<String, String>) repository1.executeRequest(comRequest).getResult(); + Assert.assertFalse(command.accept(comRequest)); +// availableZones = (Map<String, String>) command.execute(repository1, comRequest).getResult(); // Assert.assertNull(availableZones); } Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepositoryProviderTest.java =================================================================== --- trunk/coser-business/src/test/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepositoryProviderTest.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/test/java/fr/ifremer/coser/result/repository/legacy/LegacyResultRepositoryProviderTest.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -49,9 +49,9 @@ File basedir = config.getWebIndicatorsProjectsDirectory(); - LegacyResultRepositoryProvider provider = new LegacyResultRepositoryProvider(basedir); + LegacyResultRepositoryProvider provider = new LegacyResultRepositoryProvider(config, basedir); - Set<LegacyResultRepository> resultRepositories = provider.loadRepositories(serviceContext); + Set<LegacyResultRepository> resultRepositories = provider.loadRepositories(); Assert.assertNotNull(resultRepositories); Assert.assertEquals(2, resultRepositories.size()); } Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java =================================================================== --- trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/CoserTestAbstract.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -30,8 +30,8 @@ import java.util.Locale; import java.util.Map; -import fr.ifremer.coser.CoserServiceContext; -import fr.ifremer.coser.DefaultCoserServiceContext; +import fr.ifremer.coser.CoserApplicationContext; +import fr.ifremer.coser.DefaultCoserApplicationContext; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -61,7 +61,7 @@ private static final Log log = LogFactory.getLog(CoserTestAbstract.class); protected static CoserBusinessConfig config; - protected static CoserServiceContext serviceContext; + protected static CoserApplicationContext serviceContext; protected static File testDirectory; @@ -86,7 +86,7 @@ config.setWebIndicatorsFile(CoserTestAbstract.class.getResource("/webindicators.csv").getFile()); config.setWebZonesFile(CoserTestAbstract.class.getResource("/webzones.csv").getFile()); - serviceContext = new DefaultCoserServiceContext(config); + serviceContext = new DefaultCoserApplicationContext(config); } @AfterClass Deleted: trunk/coser-web/src/main/java/fr/ifremer/coser/web/CoserApplicationContext.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/CoserApplicationContext.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/CoserApplicationContext.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -1,117 +0,0 @@ -package fr.ifremer.coser.web; - -/* - * #%L - * Coser :: Web - * %% - * Copyright (C) 2010 - 2014 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% - */ - -import com.google.common.base.Preconditions; -import fr.ifremer.coser.CoserServiceContext; -import fr.ifremer.coser.DefaultCoserServiceContext; -import fr.ifremer.coser.bean.IndicatorMap; -import fr.ifremer.coser.bean.ZoneMap; -import fr.ifremer.coser.result.CoserResultEngine; -import fr.ifremer.coser.services.WebService; -import org.nuiton.config.ArgumentsParserException; -import org.nuiton.i18n.I18n; -import org.nuiton.i18n.init.DefaultI18nInitializer; - -/** - * Created on 3/11/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 1.5 - */ -public class CoserApplicationContext { - - /** - * Shared application context. - */ - protected static CoserApplicationContext context; - - public static CoserApplicationContext get() { - Preconditions.checkState(context != null, "Application was not initialized!"); - return context; - } - - public static void init() { - context = new CoserApplicationContext(); - } - - public static void close() { - context = null; - } - - /** - * Business layer context. - */ - protected CoserServiceContext serviceContext; - - /** - * Web config. - */ - protected CoserWebConfig config; - - //TODO Remove this soon - protected WebService webService; - - protected CoserResultEngine resultService; - - public CoserApplicationContext() { - - DefaultI18nInitializer i18nInitializer = new DefaultI18nInitializer("coser-i18n"); - // To see on screen none translated sentences - i18nInitializer.setMissingKeyReturnNull(true); - I18n.init(i18nInitializer, null); - - config = new CoserWebConfig(); - - try { - config.parse(); - } catch (ArgumentsParserException ex) { - throw new CoserWebException("Can't read configuration", ex); - } - - serviceContext = new DefaultCoserServiceContext(config); - - webService = new WebService(config); - resultService = new CoserResultEngine(serviceContext); - } - - public WebService getWebService() { - return webService; - } - - public CoserResultEngine getResultService() { - return resultService; - } - - public CoserWebConfig getConfig() { - return config; - } - - public IndicatorMap getIndicatorsMap() { - return serviceContext.getIndicatorsMap(); - } - - public ZoneMap getZonesMap() { - return serviceContext.getZonesMap(); - } - -} Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/CoserApplicationListener.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/CoserApplicationListener.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/CoserApplicationListener.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -31,9 +31,9 @@ /** * To listen start and end of the application. * <p/> - * On start we will init the application context ({@link CoserApplicationContext#init()}). + * On start we will init the application context ({@link CoserWebApplicationContext#init()}). * <p/> - * On stop, just release close the application context ({@link CoserApplicationContext#close()}). + * On stop, just release close the application context ({@link CoserWebApplicationContext#close()}). * * @author tchemit <chemit@codelutin.com> * @since 1.5 @@ -50,7 +50,7 @@ if (log.isInfoEnabled()) { log.info("Application starting at " + new Date() + "..."); } - CoserApplicationContext.init(); + CoserWebApplicationContext.init(); } @Override @@ -58,6 +58,6 @@ if (log.isInfoEnabled()) { log.info("Application is ending at " + new Date() + "..."); } - CoserApplicationContext.close(); + CoserWebApplicationContext.close(); } } Copied: trunk/coser-web/src/main/java/fr/ifremer/coser/web/CoserWebApplicationContext.java (from rev 1145, trunk/coser-web/src/main/java/fr/ifremer/coser/web/CoserApplicationContext.java) =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/CoserWebApplicationContext.java (rev 0) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/CoserWebApplicationContext.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -0,0 +1,81 @@ +package fr.ifremer.coser.web; + +/* + * #%L + * Coser :: Web + * %% + * Copyright (C) 2010 - 2014 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% + */ + +import com.google.common.base.Preconditions; +import fr.ifremer.coser.DefaultCoserApplicationContext; +import fr.ifremer.coser.result.CoserRequestExecutor; +import fr.ifremer.coser.services.WebService; +import org.nuiton.i18n.I18n; +import org.nuiton.i18n.init.DefaultI18nInitializer; + +/** + * Created on 3/11/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 1.5 + */ +public class CoserWebApplicationContext extends DefaultCoserApplicationContext { + + /** + * Shared application context. + */ + protected static CoserWebApplicationContext context; + + public static CoserWebApplicationContext get() { + Preconditions.checkState(context != null, "Application was not initialized!"); + return context; + } + + public static void init() { + + DefaultI18nInitializer i18nInitializer = new DefaultI18nInitializer("coser-i18n"); + // To see on screen none translated sentences + i18nInitializer.setMissingKeyReturnNull(true); + I18n.init(i18nInitializer, null); + + context = new CoserWebApplicationContext(); + } + + public static void close() { + context = null; + } + + public CoserWebApplicationContext() { + super(new CoserWebConfig()); + } + + @Override + public CoserWebConfig getConfig() { + return (CoserWebConfig) config; + } + + public WebService getWebService() { + return new WebService(config); + } + + public CoserRequestExecutor getRequestExecutor() { + CoserRequestExecutor service = new CoserRequestExecutor(this); + return service; + } + +} Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/ServiceHelper.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/ServiceHelper.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/ServiceHelper.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -25,15 +25,15 @@ import com.google.common.collect.Maps; import fr.ifremer.coser.CoserBusinessException; import fr.ifremer.coser.result.CoserRequest; +import fr.ifremer.coser.result.CoserRequestContext; +import fr.ifremer.coser.result.CoserRequestExecutor; import fr.ifremer.coser.result.CoserResult; -import fr.ifremer.coser.result.CoserResultEngine; -import fr.ifremer.coser.result.FileResult; -import fr.ifremer.coser.result.MapResult; +import fr.ifremer.coser.result.DefaultCoserRequestContext; import fr.ifremer.coser.result.repository.ResultRepositoryType; -import fr.ifremer.coser.result.request.AbstractGetIndicatorResultRequest; -import fr.ifremer.coser.result.request.CoserRequestSpeciesAware; -import fr.ifremer.coser.result.request.CoserRequestZoneAware; import fr.ifremer.coser.result.request.DeleteResultsRequest; +import fr.ifremer.coser.result.request.ExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.result.FileResult; +import fr.ifremer.coser.result.result.MapResult; import fr.ifremer.coser.services.WebService; import fr.ifremer.coser.web.actions.common.CoserAction; @@ -57,33 +57,24 @@ protected final CoserAction action; - protected final WebService webService; + protected WebService webService; - protected final CoserResultEngine resultService; + protected CoserRequestExecutor resultService; - protected final CoserWebConfig config; + protected final CoserWebApplicationContext applicationContext; - protected final CoserApplicationContext applicationContext; - public ServiceHelper(CoserAction action) { Preconditions.checkNotNull(action); - this.applicationContext = CoserApplicationContext.get(); + this.applicationContext = CoserWebApplicationContext.get(); this.action = action; - this.webService = applicationContext.getWebService(); - this.resultService = applicationContext.getResultService(); - this.config = applicationContext.getConfig(); } - public Map<String, ResultRepositoryType> getRepositoryTypes() { - return resultService.getRepositoryTypes(); - } - // --------------------------------------------------------------------- // // --- Facade methods -------------------------------------------------- // // --------------------------------------------------------------------- // public Map<String, String> getFacades() { - return applicationContext.getZonesMap().getFacades(); + return applicationContext.getZoneMap().getFacades(); } public String getFacadeDisplayName(String facade) { @@ -96,37 +87,24 @@ // --------------------------------------------------------------------- // public Map<String, List<String>> getZoneByFacade() { - return applicationContext.getZonesMap().getZoneByFacade(); + return applicationContext.getZoneMap().getZoneByFacade(); } public Map<String, String> getZonePictures() { - return applicationContext.getZonesMap().getZonePictures(); + return applicationContext.getZoneMap().getZonePictures(); } public Map<String, String> getZoneMetaInfo(Locale locale) { - return applicationContext.getZonesMap().getZoneMetaInfo(locale); + return applicationContext.getZoneMap().getZoneMetaInfo(locale); } - //FIXME Remove this - public Map<String, String> getAvailableZones(CoserRequest request) { - return getMultipleResultAsMap(request); - } - -// public Map<String, String> getZoneForFacade() { -// try { -// return webService.getZoneForFacade(null, false, false); -// } catch (CoserBusinessException e) { -// throw new CoserWebException("Could not obtain zone for facades", e); -// } -// } - public String getZoneFullName(String zoneId) { - return applicationContext.getZonesMap().getZoneFullName(zoneId); + return applicationContext.getZoneMap().getZoneFullName(zoneId); } - public String getZoneDisplayName(CoserRequestZoneAware request) { - Map<String, String> availableZones = getAvailableZones(request); - String displayName = availableZones.get(request.getZone()); + public String getZoneDisplayName(CoserRequest request, String zone) { + Map<String, String> availableZones = getMultipleResultAsMap(request); + String displayName = availableZones.get(zone); return displayName; } @@ -134,14 +112,9 @@ // --- Species methods ------------------------------------------------- // // --------------------------------------------------------------------- // - //FIXME Remove this - public Map<String, String> getAvailableSpecies(CoserRequest request) { - return resultService.getAvailableSpecies(request); - } - - public String getSpeciesDisplayName(CoserRequestSpeciesAware request) { - Map<String, String> availableSpecies = getAvailableSpecies(request); - String displayName = availableSpecies.get(request.getSpecies()); + public String getSpeciesDisplayName(CoserRequest request, String species) { + Map<String, String> availableSpecies = getMultipleResultAsMap(request); + String displayName = availableSpecies.get(species); return displayName; } @@ -149,30 +122,9 @@ // --- Indicator methods ----------------------------------------------- // // --------------------------------------------------------------------- // - //FIXME Remove this - public Map<String, String> getAvailableIndicators(CoserRequest request) { - return resultService.getAvailableIndicators(request); - } - -// public Map<String, String> getIndicators(List<String> selectZones, DataType dataType) { -// try { -// return webService.getIndicators(selectZones, dataType, action.getLocale()); -// } catch (CoserBusinessException e) { -// throw new CoserWebException("Could not obtain indicators", e); -// } -// } - -// public Map<String, String> getSpecies(List<String> selectZones) { -// try { -// return webService.getSpecies(selectZones, false); -// } catch (CoserBusinessException e) { -// throw new CoserWebException("Could not obtain species", e); -// } -// } - - public String getIndicatorDisplayName(AbstractGetIndicatorResultRequest request) { - Map<String, String> availableIndicators = getAvailableIndicators(request); - String displayName = availableIndicators.get(request.getIndicator()); + public String getIndicatorDisplayName(CoserRequest request, String indicator) { + Map<String, String> availableIndicators = getMultipleResultAsMap(request); + String displayName = availableIndicators.get(indicator); return displayName; } @@ -180,26 +132,12 @@ // --- Result methods -------------------------------------------------- // // --------------------------------------------------------------------- // -// public Map<String, String> getIndicatorsResultsPerZone() { -// try { -// return webService.getIndicatorsResultsPerZone(); -// } catch (CoserBusinessException e) { -// throw new CoserWebException("Could not get indicators results per zone", e); -// } -// } - -// public Map<String, String> getMapsResultsPerZone() { -// try { -// return webService.getMapsResultsPerZone(); -// } catch (CoserBusinessException e) { -// throw new CoserWebException("Could not get map results per zone", e); -// } -// } - public FileResult getFileResult(CoserRequest request) { - CoserResult result = resultService.getUniqueResult(request); + CoserRequestContext context = newRequestContext(); + CoserResult result = getRequestExecutor().executeUnique(context, request); + if (!(result instanceof FileResult)) { throw new CoserWebException( "Result should a FileResult, but was: " + result); @@ -210,8 +148,10 @@ public MapResult getMapResult(CoserRequest request) { - CoserResult result = resultService.getUniqueResult(request); + CoserRequestContext context = newRequestContext(); + CoserResult result = getRequestExecutor().executeUnique(context, request); + if (!(result instanceof MapResult)) { throw new CoserWebException( "Result should a MapResult, but was: " + result); @@ -222,8 +162,10 @@ public Map<String, String> getMultipleResultAsMap(CoserRequest request) { - List<CoserResult> result = resultService.getMultipleResult(request); + CoserRequestContext context = newRequestContext(); + List<CoserResult> result = getRequestExecutor().executeAll(context, request); + Map<String, String> resultAsMap = Maps.newHashMap(); for (CoserResult coserResult : result) { if (!(coserResult instanceof MapResult)) { @@ -236,37 +178,40 @@ return resultAsMap; } + /** + * Extract raw data and results. + * + * @param request extract request + */ + public FileResult extractResults(ExtractRawDataAndResultsRequest request) { + + CoserRequestContext context = newRequestContext(); + + // Get all extracted data + FileResult result = getRequestExecutor().executeUnique(context, request); + return result; + } + public void deleteResults(DeleteResultsRequest request) { + CoserRequestContext context = newRequestContext(); + // do delete results (don't care about result) - resultService.getMultipleResult(request); + getRequestExecutor().executeAll(context, request); // reload projects - resultService.resetRepositories(); + applicationContext.getRepositoryProvider().resetRepositories(); } -// public void deleteIndicatorsResult(List<String> indicatorsZonesId) { -// try { -// webService.deleteIndicatorsResult(indicatorsZonesId); -// } catch (CoserBusinessException e) { -// throw new CoserWebException("Could not delete indicator results", e); -// } -// } -// -// public void deleteMapsResult(List<String> mapsZonesId) { -// try { -// webService.deleteMapsResult(mapsZonesId); -// } catch (CoserBusinessException e) { -// throw new CoserWebException("Could not delete map results", e); -// } -// } - public void registerNewUploadedResults(String login, File resultFile) { try { - webService.registerNewUploadedResults(login, resultFile); + getWebService().registerNewUploadedResults(login, resultFile); } catch (CoserBusinessException ex) { throw new CoserWebException("Can't register new result file", ex); } + + // reload projects + applicationContext.getRepositoryProvider().resetRepositories(); } // --------------------------------------------------------------------- // @@ -274,10 +219,37 @@ // --------------------------------------------------------------------- // public CoserWebConfig getConfig() { - return config; + return applicationContext.getConfig(); } public void reloadProjects() { - resultService.resetRepositories(); + applicationContext.getRepositoryProvider().resetRepositories(); } + + public Map<String, ResultRepositoryType> getRepositoryTypes() { + Map<String, ResultRepositoryType> result = Maps.newHashMap(); + for (ResultRepositoryType resultRepositoryType : applicationContext.getRepositoryTypes()) { + result.put(resultRepositoryType.getId(), resultRepositoryType); + } + return result; + } + + protected WebService getWebService() { + if (webService == null) { + webService = new WebService(getConfig()); + } + return webService; + } + + protected CoserRequestExecutor getRequestExecutor() { + if (resultService == null) { + resultService = new CoserRequestExecutor(applicationContext); + } + return resultService; + } + + protected CoserRequestContext newRequestContext() { + return new DefaultCoserRequestContext(applicationContext, + action.getLocale()); + } } Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/admin/DeleteProjectsAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/admin/DeleteProjectsAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/admin/DeleteProjectsAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -92,11 +92,11 @@ zonesId)); } - DeleteResultsRequest request = requestBuilder(). - addResultRepositoryType(repositoryType). + DeleteResultsRequest request = requestBuilder(DeleteResultsRequest.class). + addRepositoryType(repositoryType). addResultType(resultType). addZoneList(zonesId). - toDeleteResultsRequest(); + toRequest(); getService().deleteResults(request); Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/admin/ListProjectsAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/admin/ListProjectsAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/admin/ListProjectsAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -118,9 +118,9 @@ facades = getService().getFacades(); zonesByFacades = getService().getZoneByFacade(); - GetAllResultsRequest request = requestBuilder(). - addResultRepositoryType(getSelectedRepositoryType()). - toGetAllResultsRequest(); + GetAllResultsRequest request = requestBuilder(GetAllResultsRequest.class). + addRepositoryType(getSelectedRepositoryType()). + toRequest(); results = Maps.newEnumMap(ResultType.class); if (selectedRepositoryType != null) { Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,8 +21,9 @@ package fr.ifremer.coser.web.actions.com; -import fr.ifremer.coser.result.request.AbstractGetIndicatorResultRequest; -import fr.ifremer.coser.result.request.GetCommunityIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetIndicatorsForCommunityIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetSpeciesListForCommunityIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetZonesForCommunityIndicatorResultRequest; import fr.ifremer.coser.web.actions.common.CoserAction; import java.util.Map; @@ -55,8 +56,6 @@ /** La liste actuellement selectionnée (cas null géré). */ protected String list; - protected AbstractGetIndicatorResultRequest request; - public String getFacade() { return facade; } @@ -98,23 +97,31 @@ } public String getZoneDisplayName() { - return getService().getZoneDisplayName(request); + GetZonesForCommunityIndicatorResultRequest request = + requestBuilder(GetZonesForCommunityIndicatorResultRequest.class). + addFacade(facade). + toRequest(); + return getService().getZoneDisplayName(request, zone); } public String getIndicatorDisplayName() { - return getService().getIndicatorDisplayName(request); + GetIndicatorsForCommunityIndicatorResultRequest request = + requestBuilder(GetIndicatorsForCommunityIndicatorResultRequest.class). + addFacade(facade). + addZone(zone). + toRequest(); + return getService().getIndicatorDisplayName(request, indicator); } @Override public String execute() { - - request = requestBuilder(GetCommunityIndicatorResultRequest.class). - addFacade(facade). - addZone(zone). - addIndicator(indicator). - addSpecies(list). - toRequest(); - lists = getService().getAvailableSpecies(request); + GetSpeciesListForCommunityIndicatorResultRequest request = + requestBuilder(GetSpeciesListForCommunityIndicatorResultRequest.class). + addFacade(facade). + addZone(zone). + addIndicator(indicator). + toRequest(); + lists = getService().getMultipleResultAsMap(request); return SUCCESS; } Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDataAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDataAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDataAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,9 +21,12 @@ package fr.ifremer.coser.web.actions.com; -import fr.ifremer.coser.result.FileResult; -import fr.ifremer.coser.result.request.AbstractGetIndicatorResultRequest; +import fr.ifremer.coser.result.result.FileResult; +import fr.ifremer.coser.result.request.GetCommunityIndicatorResultGraphRequest; +import fr.ifremer.coser.result.request.GetSpeciesListForCommunityIndicatorResultRequest; import fr.ifremer.coser.web.actions.common.CoserAction; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; @@ -89,24 +92,29 @@ return result.getSource(); } - // @Action(results = {@Result(type = "stream", params = {"contentType", "image/png", "inputName", "inputStream"})}) @Action(results = {@Result(type = "stream", params = {"contentType", "image/png"})}) public String execute() { - AbstractGetIndicatorResultRequest request = requestBuilder(). - addFacade(facade). - addZone(zone). - addIndicator(indicator). - addIndicatorResultType(AbstractGetIndicatorResultRequest.IndicatorResultType.GRAPH). - addSpecies(list). - toGetCommunityIndicatorResultRequest(); - if (list == null) { + GetCommunityIndicatorResultGraphRequest request = + requestBuilder(GetCommunityIndicatorResultGraphRequest.class). + addFacade(facade). + addZone(zone). + addIndicator(indicator). + addSpecies(list). + toRequest(); - //TODO Improve this (add a getFirstAvailableSpecies method) - // on prend la première entrée dans le fichier - Map<String, String> lists = getService().getAvailableSpecies(request); - if (!lists.isEmpty()) { - request.setSpecies(lists.keySet().iterator().next()); + if (StringUtils.isEmpty(list)) { + + // Get the first species found in indicators file + GetSpeciesListForCommunityIndicatorResultRequest speciesRequest = + requestBuilder(GetSpeciesListForCommunityIndicatorResultRequest.class). + addFacade(facade). + addZone(zone). + addIndicator(indicator). + toRequest(); + Map<String, String> speciesMap = getService().getMultipleResultAsMap(speciesRequest); + if (MapUtils.isNotEmpty(speciesMap)) { + request.setSpecies(speciesMap.keySet().iterator().next()); } } result = getService().getFileResult(request); Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDownloadAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDownloadAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/GraphDownloadAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,9 +21,12 @@ package fr.ifremer.coser.web.actions.com; -import fr.ifremer.coser.result.FileResult; -import fr.ifremer.coser.result.request.AbstractGetIndicatorResultRequest; +import fr.ifremer.coser.result.result.FileResult; +import fr.ifremer.coser.result.request.GetCommunityIndicatorResultDataRequest; +import fr.ifremer.coser.result.request.GetSpeciesListForCommunityIndicatorResultRequest; import fr.ifremer.coser.web.actions.common.CoserAction; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; @@ -89,25 +92,29 @@ return result.getSource(); } - // @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() { - AbstractGetIndicatorResultRequest request = requestBuilder(). - addFacade(facade). - addZone(zone). - addIndicator(indicator). - addIndicatorResultType(AbstractGetIndicatorResultRequest.IndicatorResultType.DATA). - addSpecies(list). - toGetCommunityIndicatorResultRequest(); + GetCommunityIndicatorResultDataRequest request = + requestBuilder(GetCommunityIndicatorResultDataRequest.class). + addFacade(facade). + addZone(zone). + addIndicator(indicator). + addSpecies(list). + toRequest(); - if (list == null) { + if (StringUtils.isEmpty(list)) { - //TODO Improve this (add a getFirstAvailableSpecies method) - // on prend la première entrée dans le fichier - Map<String, String> lists = getService().getAvailableSpecies(request); - if (!lists.isEmpty()) { - request.setSpecies(lists.keySet().iterator().next()); + // Get the first species found in indicators file + GetSpeciesListForCommunityIndicatorResultRequest speciesRequest = + requestBuilder(GetSpeciesListForCommunityIndicatorResultRequest.class). + addFacade(facade). + addZone(zone). + addIndicator(indicator). + toRequest(); + Map<String, String> speciesMap = getService().getMultipleResultAsMap(speciesRequest); + if (MapUtils.isNotEmpty(speciesMap)) { + request.setSpecies(speciesMap.keySet().iterator().next()); } } Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/IndicatorAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/IndicatorAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/IndicatorAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,7 +21,8 @@ package fr.ifremer.coser.web.actions.com; -import fr.ifremer.coser.result.request.GetCommunityIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetIndicatorsForCommunityIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetZonesForCommunityIndicatorResultRequest; import fr.ifremer.coser.web.actions.common.CommonIndicator; /** @@ -39,10 +40,17 @@ private static final long serialVersionUID = 1663244944108703571L; @Override - protected GetCommunityIndicatorResultRequest createRequest() { - return requestBuilder(GetCommunityIndicatorResultRequest.class). + protected GetIndicatorsForCommunityIndicatorResultRequest createIndicatorsRequest() { + return requestBuilder(GetIndicatorsForCommunityIndicatorResultRequest.class). addFacade(facade). addZone(zone). toRequest(); } + + @Override + protected GetZonesForCommunityIndicatorResultRequest createZonesRequest() { + return requestBuilder(GetZonesForCommunityIndicatorResultRequest.class). + addFacade(facade). + toRequest(); + } } Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/ZoneAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/ZoneAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/ZoneAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,7 +21,7 @@ package fr.ifremer.coser.web.actions.com; -import fr.ifremer.coser.result.CoserRequest; +import fr.ifremer.coser.result.request.GetZonesForCommunityIndicatorResultRequest; import fr.ifremer.coser.web.actions.common.CommonZone; /** @@ -39,9 +39,9 @@ private static final long serialVersionUID = 3385467755357775199L; @Override - protected CoserRequest createRequest() { - return requestBuilder(). + protected GetZonesForCommunityIndicatorResultRequest createZonesRequest() { + return requestBuilder(GetZonesForCommunityIndicatorResultRequest.class). addFacade(facade). - toGetCommunityIndicatorResultRequest(); + toRequest(); } } Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonIndicator.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonIndicator.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonIndicator.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,9 +21,7 @@ package fr.ifremer.coser.web.actions.common; -import fr.ifremer.coser.result.request.AbstractGetIndicatorResultRequest; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import fr.ifremer.coser.result.CoserRequest; import java.util.Map; @@ -42,21 +40,23 @@ /** serialVersionUID. */ private static final long serialVersionUID = 1663244944108703571L; - private static final Log log = LogFactory.getLog(CommonIndicator.class); - protected String facade; protected String zone; - protected String species; - protected String zonePicture; protected Map<String, String> indicators; - protected AbstractGetIndicatorResultRequest request; + /** + * @return the request to get zones + */ + protected abstract CoserRequest createZonesRequest(); - protected abstract AbstractGetIndicatorResultRequest createRequest(); + /** + * @return the request to get indicators + */ + protected abstract CoserRequest createIndicatorsRequest(); public String getFacade() { return facade; @@ -74,14 +74,6 @@ this.zone = zone; } - public String getSpecies() { - return species; - } - - public void setSpecies(String species) { - this.species = species; - } - public Map<String, String> getIndicators() { return indicators; } @@ -95,23 +87,15 @@ } public String getZoneDisplayName() { - return getService().getZoneDisplayName(request); + CoserRequest zonesRequest = createZonesRequest(); + return getService().getZoneDisplayName(zonesRequest, zone); } - public String getSpeciesDisplayName() { - return getService().getSpeciesDisplayName(request); - } - @Override public String execute() { - if (log.isInfoEnabled()) { - log.info(String.format("Looking for indicator for zone %s and species %s", zone, species)); - } - - request = createRequest(); - - indicators = getService().getAvailableIndicators(request); + CoserRequest request = createIndicatorsRequest(); + indicators = getService().getMultipleResultAsMap(request); zonePicture = getService().getZonePictures().get(zone); return SUCCESS; Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonZone.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonZone.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonZone.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -48,7 +48,11 @@ protected Map<String, String> zonesMetaInfo; - protected abstract CoserRequest createRequest(); + /** + * + * @return the request to get zones + */ + protected abstract CoserRequest createZonesRequest(); public String getFacade() { return facade; @@ -77,8 +81,8 @@ @Override public String execute() { - CoserRequest request = createRequest(); - zones = getService().getAvailableZones(request); + CoserRequest request = createZonesRequest(); + zones = getService().getMultipleResultAsMap(request); zonesPictures = getService().getZonePictures(); zonesMetaInfo = getService().getZoneMetaInfo(getLocale()); Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CoserAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CoserAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CoserAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,7 +22,7 @@ package fr.ifremer.coser.web.actions.common; import fr.ifremer.coser.result.CoserRequest; -import fr.ifremer.coser.result.request.CoserRequestBuilder; +import fr.ifremer.coser.result.CoserRequestBuilder; import fr.ifremer.coser.web.CoserWebConfig; import fr.ifremer.coser.web.ServiceHelper; import org.nuiton.web.struts2.BaseAction; @@ -100,7 +100,7 @@ * @since 1.5 */ protected <R extends CoserRequest> CoserRequestBuilder<R> requestBuilder(Locale locale, Class<R> requestType) { - return new CoserRequestBuilder<R>(locale, requestType); + return CoserRequestBuilder.newBuilder(locale, requestType); } /** Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,7 +21,8 @@ package fr.ifremer.coser.web.actions.map; -import fr.ifremer.coser.result.request.GetMapResultRequest; +import fr.ifremer.coser.result.request.GetSpeciesForMapResultRequest; +import fr.ifremer.coser.result.request.GetZonesForMapResultRequest; import fr.ifremer.coser.web.actions.common.CoserAction; /** @@ -44,8 +45,6 @@ protected String species; - protected GetMapResultRequest request; - public void setFacade(String facade) { this.facade = facade; } @@ -75,25 +74,23 @@ } public String getZoneDisplayName() { - return getService().getZoneDisplayName(request); + GetZonesForMapResultRequest request = + requestBuilder(GetZonesForMapResultRequest.class). + addFacade(facade). + toRequest(); + return getService().getZoneDisplayName(request, zone); } public String getSpeciesDisplayName() { - return getService().getSpeciesDisplayName(request); + GetSpeciesForMapResultRequest request = + requestBuilder(GetSpeciesForMapResultRequest.class). + addFacade(facade). + addZone(zone). + toRequest(); + return getService().getSpeciesDisplayName(request, species); } - @Override - public String execute() throws Exception { - - request = requestBuilder(GetMapResultRequest.class). - addFacade(facade). - addZone(zone). - addSpecies(species). - toRequest(); - return SUCCESS; - } - - // public String getFacadeDisplayName() { +// public String getFacadeDisplayName() { // WebService webService = ServiceFactory.getWebService(); // String displayName = null; // try { Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapDataAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapDataAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapDataAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,7 +21,7 @@ package fr.ifremer.coser.web.actions.map; -import fr.ifremer.coser.result.FileResult; +import fr.ifremer.coser.result.result.FileResult; import fr.ifremer.coser.result.request.GetMapResultRequest; import fr.ifremer.coser.web.actions.common.CoserAction; import org.apache.commons.logging.Log; @@ -84,11 +84,11 @@ @Action(results = {@Result(type = "stream", params = {"contentType", "image/png"})}) public String execute() { // work with null species (get Repartition-stations map) - GetMapResultRequest request = requestBuilder(). + GetMapResultRequest request = requestBuilder(GetMapResultRequest.class). addFacade(facade). addZone(zone). addSpecies(species == null ? GetMapResultRequest.NULL_SPECIES : species). - toGetMapResultRequest(); + toRequest(); if (log.isInfoEnabled()) { log.info("Looking for map of species: " + request.getSpecies()); Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/SpeciesAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/SpeciesAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/SpeciesAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,7 +21,8 @@ package fr.ifremer.coser.web.actions.map; -import fr.ifremer.coser.result.request.GetMapResultRequest; +import fr.ifremer.coser.result.request.GetSpeciesForMapResultRequest; +import fr.ifremer.coser.result.request.GetZonesForMapResultRequest; import fr.ifremer.coser.web.actions.common.CoserAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -50,8 +51,6 @@ protected Map<String, String> species; - protected GetMapResultRequest request; - public String getFacade() { return facade; } @@ -77,22 +76,26 @@ } public String getZoneDisplayName() { - return getService().getZoneDisplayName(request); + GetZonesForMapResultRequest request = + requestBuilder(GetZonesForMapResultRequest.class). + addFacade(facade). + toRequest(); + return getService().getZoneDisplayName(request, zone); } @Override public String execute() { - request = requestBuilder(). - addFacade(facade). - addZone(zone). - toGetMapResultRequest(); - if (log.isInfoEnabled()) { log.info("Looking for species for zone " + zone); } - species = getService().getAvailableSpecies(request); + GetSpeciesForMapResultRequest request = + requestBuilder(GetSpeciesForMapResultRequest.class). + addFacade(facade). + addZone(zone). + toRequest(); + species = getService().getMultipleResultAsMap(request); if (log.isDebugEnabled()) { Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/ZoneAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/ZoneAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/ZoneAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,7 +21,7 @@ package fr.ifremer.coser.web.actions.map; -import fr.ifremer.coser.result.request.GetMapResultRequest; +import fr.ifremer.coser.result.request.GetZonesForMapResultRequest; import fr.ifremer.coser.web.actions.common.CommonZone; /** @@ -39,8 +39,12 @@ private static final long serialVersionUID = 3385467755357775199L; @Override - protected GetMapResultRequest createRequest() { - return requestBuilder().addFacade(facade).toGetMapResultRequest(); + protected GetZonesForMapResultRequest createZonesRequest() { + GetZonesForMapResultRequest request = + requestBuilder(GetZonesForMapResultRequest.class). + addFacade(facade). + toRequest(); + return request; } // @Override Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,7 +21,9 @@ package fr.ifremer.coser.web.actions.pop; -import fr.ifremer.coser.result.request.GetPopulationIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetIndicatorsForPopulationIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetSpeciesForPopulationIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetZonesForPopulationIndicatorResultRequest; import fr.ifremer.coser.web.actions.common.CoserAction; /** @@ -48,8 +50,6 @@ protected String indicator; - protected GetPopulationIndicatorResultRequest request; - public String getFacade() { return facade; } @@ -87,29 +87,32 @@ } public String getZoneDisplayName() { - return getService().getZoneDisplayName(request); + GetZonesForPopulationIndicatorResultRequest request = + requestBuilder(GetZonesForPopulationIndicatorResultRequest.class). + addFacade(facade). + toRequest(); + return getService().getZoneDisplayName(request, zone); } public String getSpeciesDisplayName() { - return getService().getSpeciesDisplayName(request); + GetSpeciesForPopulationIndicatorResultRequest request = + requestBuilder(GetSpeciesForPopulationIndicatorResultRequest.class). + addFacade(facade). + addZone(zone). + toRequest(); + return getService().getSpeciesDisplayName(request, species); } public String getIndicatorDisplayName() { - return getService().getIndicatorDisplayName(request); + GetIndicatorsForPopulationIndicatorResultRequest request = + requestBuilder(GetIndicatorsForPopulationIndicatorResultRequest.class). + addFacade(facade). + addZone(zone). + addSpecies(species). + toRequest(); + return getService().getIndicatorDisplayName(request, indicator); } - @Override - public String execute() { - - request = requestBuilder(). - addFacade(facade). - addZone(zone). - addSpecies(species). - addIndicator(indicator). - toGetPopulationIndicatorResultRequest(); - return SUCCESS; - } - // public String getFacadeDisplayName() { // WebService webService = ServiceFactory.getWebService(); // String displayName = null; Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphDataAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphDataAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphDataAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,9 +21,8 @@ package fr.ifremer.coser.web.actions.pop; -import fr.ifremer.coser.result.FileResult; -import fr.ifremer.coser.result.request.AbstractGetIndicatorResultRequest; -import fr.ifremer.coser.result.request.GetPopulationIndicatorResultRequest; +import fr.ifremer.coser.result.result.FileResult; +import fr.ifremer.coser.result.request.GetPopulationIndicatorResultGraphRequest; import fr.ifremer.coser.web.actions.common.CoserAction; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; @@ -90,16 +89,15 @@ return result.getSource(); } - // @Action(results = {@Result(type = "stream", params = {"contentType", "image/png", "inputName", "inputStream"})}) @Action(results = {@Result(type = "stream", params = {"contentType", "image/png"})}) public String execute() { - GetPopulationIndicatorResultRequest request = requestBuilder(). - addFacade(facade). - addZone(zone). - addSpecies(species). - addIndicator(indicator). - addIndicatorResultType(AbstractGetIndicatorResultRequest.IndicatorResultType.GRAPH). - toGetPopulationIndicatorResultRequest(); + GetPopulationIndicatorResultGraphRequest request = + requestBuilder(GetPopulationIndicatorResultGraphRequest.class). + addFacade(facade). + addZone(zone). + addSpecies(species). + addIndicator(indicator). + toRequest(); result = getService().getFileResult(request); return SUCCESS; } Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphDownloadAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphDownloadAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/GraphDownloadAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,9 +21,8 @@ package fr.ifremer.coser.web.actions.pop; -import fr.ifremer.coser.result.FileResult; -import fr.ifremer.coser.result.request.AbstractGetIndicatorResultRequest; -import fr.ifremer.coser.result.request.GetPopulationIndicatorResultRequest; +import fr.ifremer.coser.result.result.FileResult; +import fr.ifremer.coser.result.request.GetPopulationIndicatorResultDataRequest; import fr.ifremer.coser.web.actions.common.CoserAction; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; @@ -88,16 +87,15 @@ return result.getSource(); } - // @Action(results = {@Result(type = "stream", params = {"contentType", "text/csv", "inputName", "inputStream", "contentDisposition", "attachment; filename=\"${filename}\""})}) @Action(results = {@Result(type = "stream", params = {"contentType", "text/csv", "contentDisposition", "attachment; filename=\"${filename}\""})}) public String execute() { - GetPopulationIndicatorResultRequest request = requestBuilder(). - addFacade(facade). - addZone(zone). - addSpecies(species). - addIndicator(indicator). - addIndicatorResultType(AbstractGetIndicatorResultRequest.IndicatorResultType.DATA). - toGetPopulationIndicatorResultRequest(); + GetPopulationIndicatorResultDataRequest request = + requestBuilder(GetPopulationIndicatorResultDataRequest.class). + addFacade(facade). + addZone(zone). + addSpecies(species). + addIndicator(indicator). + toRequest(); result = getService().getFileResult(request); return SUCCESS; } Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/IndicatorAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/IndicatorAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/IndicatorAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,7 +21,10 @@ package fr.ifremer.coser.web.actions.pop; -import fr.ifremer.coser.result.request.GetPopulationIndicatorResultRequest; +import fr.ifremer.coser.result.CoserRequest; +import fr.ifremer.coser.result.request.GetIndicatorsForPopulationIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetSpeciesForPopulationIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetZonesForPopulationIndicatorResultRequest; import fr.ifremer.coser.web.actions.common.CommonIndicator; /** @@ -38,12 +41,42 @@ /** serialVersionUID. */ private static final long serialVersionUID = 1663244944108703571L; + protected String species; + + public String getSpecies() { + return species; + } + + public void setSpecies(String species) { + this.species = species; + } + @Override - protected GetPopulationIndicatorResultRequest createRequest() { - return requestBuilder(GetPopulationIndicatorResultRequest.class). - addFacade(facade). - addZone(zone). - addSpecies(species). - toRequest(); + protected CoserRequest createZonesRequest() { + GetZonesForPopulationIndicatorResultRequest request = + requestBuilder(GetZonesForPopulationIndicatorResultRequest.class). + addFacade(facade). + toRequest(); + return request; } + + @Override + protected GetIndicatorsForPopulationIndicatorResultRequest createIndicatorsRequest() { + GetIndicatorsForPopulationIndicatorResultRequest request = + requestBuilder(GetIndicatorsForPopulationIndicatorResultRequest.class). + addFacade(facade). + addZone(zone). + addSpecies(species). + toRequest(); + return request; + } + + public String getSpeciesDisplayName() { + GetSpeciesForPopulationIndicatorResultRequest request = + requestBuilder(GetSpeciesForPopulationIndicatorResultRequest.class). + addFacade(facade). + addZone(zone). + toRequest(); + return getService().getSpeciesDisplayName(request, species); + } } Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/SpeciesAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/SpeciesAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/SpeciesAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,7 +21,8 @@ package fr.ifremer.coser.web.actions.pop; -import fr.ifremer.coser.result.request.GetPopulationIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetSpeciesForPopulationIndicatorResultRequest; +import fr.ifremer.coser.result.request.GetZonesForPopulationIndicatorResultRequest; import fr.ifremer.coser.web.actions.common.CoserAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -52,8 +53,6 @@ protected String zonePicture; - protected GetPopulationIndicatorResultRequest request; - public String getFacade() { return facade; } @@ -83,7 +82,11 @@ } public String getZoneDisplayName() { - return getService().getZoneDisplayName(request); + GetZonesForPopulationIndicatorResultRequest request = + requestBuilder(GetZonesForPopulationIndicatorResultRequest.class). + addFacade(facade). + toRequest(); + return getService().getZoneDisplayName(request, zone); } @Override @@ -93,12 +96,13 @@ log.info("Looking for species for zone " + zone); } - request = requestBuilder(). - addFacade(facade). - addZone(zone). - toGetPopulationIndicatorResultRequest(); + GetSpeciesForPopulationIndicatorResultRequest request = + requestBuilder(GetSpeciesForPopulationIndicatorResultRequest.class). + addFacade(facade). + addZone(zone). + toRequest(); + species = getService().getMultipleResultAsMap(request); - species = getService().getAvailableSpecies(request); if (log.isDebugEnabled()) { log.debug("Species are : " + species); } Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/ZoneAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/ZoneAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/ZoneAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,7 +21,7 @@ package fr.ifremer.coser.web.actions.pop; -import fr.ifremer.coser.result.CoserRequest; +import fr.ifremer.coser.result.request.GetZonesForPopulationIndicatorResultRequest; import fr.ifremer.coser.web.actions.common.CommonZone; /** @@ -39,9 +39,11 @@ private static final long serialVersionUID = 3385467755357775199L; @Override - protected CoserRequest createRequest() { - return requestBuilder(). - addFacade(facade). - toGetPopulationIndicatorResultRequest(); + protected GetZonesForPopulationIndicatorResultRequest createZonesRequest() { + GetZonesForPopulationIndicatorResultRequest request = + requestBuilder(GetZonesForPopulationIndicatorResultRequest.class). + addFacade(facade). + toRequest(); + return request; } } Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/search/ExtractAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/search/ExtractAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/search/ExtractAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -22,8 +22,11 @@ package fr.ifremer.coser.web.actions.search; import com.google.common.collect.Lists; -import fr.ifremer.coser.result.FileResult; +import fr.ifremer.coser.result.result.FileResult; import fr.ifremer.coser.result.request.ExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.request.GetIndicatorsForExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.request.GetSpeciesForExtractRawDataAndResultsRequest; +import fr.ifremer.coser.result.request.GetZonesForExtractRawDataAndResultsRequest; import fr.ifremer.coser.util.DataType; import fr.ifremer.coser.web.actions.common.CoserAction; import org.apache.commons.collections4.CollectionUtils; @@ -86,7 +89,8 @@ protected boolean accepted; - protected transient HttpServletRequest request; + //FIXME Should only use the struts2 session ? + protected transient HttpServletRequest servletRequest; protected FileResult resultFile; @@ -168,8 +172,8 @@ * On met des choses dans la session pour pouvoir les récupérer. */ @Override - public void setServletRequest(HttpServletRequest request) { - this.request = request; + public void setServletRequest(HttpServletRequest servletrequest) { + this.servletRequest = servletrequest; } @Override @@ -184,27 +188,36 @@ types = DataType.getExtractTypes(getLocale()); - ExtractRawDataAndResultsRequest extractRawDataAndResultsRequest = requestBuilder().toExtractRawDataAndResultsRequest(); // renvoi la liste des id subzone-survey et leurs label associé - zones = getService().getAvailableZones(extractRawDataAndResultsRequest); + GetZonesForExtractRawDataAndResultsRequest zonesRequest = + requestBuilder(GetZonesForExtractRawDataAndResultsRequest.class). + toRequest(); + zones = getService().getMultipleResultAsMap(zonesRequest); if (CollectionUtils.isNotEmpty(selectZones)) { - extractRawDataAndResultsRequest.setZoneList(selectZones); + GetSpeciesForExtractRawDataAndResultsRequest speciesRequest = + requestBuilder(GetSpeciesForExtractRawDataAndResultsRequest.class). + addZoneList(selectZones). + toRequest(); + species = getService().getMultipleResultAsMap(speciesRequest); - species = getService().getAvailableSpecies(extractRawDataAndResultsRequest); - if (selectTypes != null) { + GetIndicatorsForExtractRawDataAndResultsRequest indicatorsRequest = + requestBuilder(GetIndicatorsForExtractRawDataAndResultsRequest.class). + addZoneList(selectZones). + toRequest(); + if (selectTypes.contains(DataType.COMMUNITY)) { - extractRawDataAndResultsRequest.setExtractTypeList(Lists.newArrayList(DataType.COMMUNITY)); - comIndicators = getService().getAvailableIndicators(extractRawDataAndResultsRequest); + indicatorsRequest.setExtractTypeList(Lists.newArrayList(DataType.COMMUNITY)); + comIndicators = getService().getMultipleResultAsMap(indicatorsRequest); } if (selectTypes.contains(DataType.POPULATION)) { - extractRawDataAndResultsRequest.setExtractTypeList(Lists.newArrayList(DataType.POPULATION)); - popIndicators = getService().getAvailableIndicators(extractRawDataAndResultsRequest); + indicatorsRequest.setExtractTypeList(Lists.newArrayList(DataType.POPULATION)); + popIndicators = getService().getMultipleResultAsMap(indicatorsRequest); } } } @@ -216,12 +229,11 @@ @Action(value = "extract-quality", results = { @Result(name = "input", location = "/WEB-INF/content/search/extract-success.jsp"), - @Result(name = DOWNLOAD, type = "redirect", params = { - "location", "${location}"})}) + @Result(name = DOWNLOAD, type = "redirect", params = {"location", "${location}"})}) public String quality() { // petit hack pour mettre la locale dans la session car // après, on n'a plus accès au context dans le executeAndWait - request.getSession().setAttribute(LOCALE_ATTRIBUTE, getLocale()); + servletRequest.getSession().setAttribute(LOCALE_ATTRIBUTE, getLocale()); return DOWNLOAD; } @@ -264,21 +276,21 @@ @Action(value = "extract-download", results = { @Result(name = "wait", location = "/WEB-INF/content/search/extract-wait.jsp"), -// @Result(type = "stream", params = {"contentType", "application/zip", "inputName", "inputStream", "contentDisposition", "attachment; filename=\"${filename}\""})}) @Result(type = "stream", params = {"contentType", "application/zip", "contentDisposition", "attachment; filename=\"${filename}\""})}) public String download() { - Locale locale = (Locale) request.getSession().getAttribute(LOCALE_ATTRIBUTE); + Locale locale = (Locale) servletRequest.getSession().getAttribute(LOCALE_ATTRIBUTE); - ExtractRawDataAndResultsRequest extractRawDataAndResultsRequest = requestBuilder(locale). - addZoneList(selectZones). - addExtractTypeList(selectTypes). - addSpeciesList(selectSpecies). - addCommunityIndicatorList(selectComIndicators). - addPopulationIndicatorList(selectPopIndicators). - toExtractRawDataAndResultsRequest(); + ExtractRawDataAndResultsRequest request = + requestBuilder(locale, ExtractRawDataAndResultsRequest.class). + addZoneList(selectZones). + addExtractTypeList(selectTypes). + addSpeciesList(selectSpecies). + addCommunityIndicatorList(selectComIndicators). + addPopulationIndicatorList(selectPopIndicators). + toRequest(); - resultFile = getService().getFileResult(extractRawDataAndResultsRequest); + resultFile = getService().getFileResult(request); return SUCCESS; } Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,7 +21,7 @@ package fr.ifremer.coser.web.actions.source; -import fr.ifremer.coser.result.request.ExtractRawDataRequest; +import fr.ifremer.coser.result.request.GetZonesForExtractRawDataRequest; import fr.ifremer.coser.web.actions.common.CoserAction; import java.util.Map; @@ -46,8 +46,6 @@ protected String zonePicture; - protected ExtractRawDataRequest request; - public String getFacade() { return facade; } @@ -73,7 +71,12 @@ } public String getZoneDisplayName() { - return getService().getZoneDisplayName(getRequest()); + GetZonesForExtractRawDataRequest zonesRequest = + requestBuilder(GetZonesForExtractRawDataRequest.class). + addFacade(facade). + addZone(zone). + toRequest(); + return getService().getZoneDisplayName(zonesRequest, zone); } @Override @@ -83,22 +86,12 @@ return SUCCESS; } - protected ExtractRawDataRequest getRequest() { - if (request == null) { - request = requestBuilder(). - addFacade(facade). - addZone(zone). - toExtractRawDataRequest(); - } - return request; - } - - // public String getFacadeDisplayName() { +// public String getFacadeDisplayName() { // WebService webService = ServiceFactory.getWebService(); // String displayName = null; // try { //// displayName = webService.getFacades().get(facade); -// displayName = webService.getZonesMap().getFacades().get(facade); +// displayName = webService.getZoneMap().getFacades().get(facade); // } catch (CoserBusinessException ex) { // throw new CoserWebException("Can't get facade display name", ex); // } @@ -123,7 +116,7 @@ // // try { //// zonePicture = webService.getZonePictures().get(zone); -// zonePicture = webService.getZonesMap().getZonePictures().get(zone); +// zonePicture = webService.getZoneMap().getZonePictures().get(zone); // } catch (CoserBusinessException ex) { // throw new CoserWebException("Can't get zone picture", ex); // } Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceDataAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceDataAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceDataAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,7 +21,8 @@ package fr.ifremer.coser.web.actions.source; -import fr.ifremer.coser.result.FileResult; +import fr.ifremer.coser.result.result.FileResult; +import fr.ifremer.coser.result.request.ExtractRawDataRequest; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; @@ -57,7 +58,12 @@ // @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() { - result = getService().getFileResult(getRequest()); + + ExtractRawDataRequest request = requestBuilder(ExtractRawDataRequest.class). + addFacade(facade). + addZone(zone). + toRequest(); + result = getService().getFileResult(request); return SUCCESS; } Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/ZoneAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/ZoneAction.java 2014-03-12 17:35:43 UTC (rev 1145) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/ZoneAction.java 2014-03-15 15:11:29 UTC (rev 1146) @@ -21,7 +21,7 @@ package fr.ifremer.coser.web.actions.source; -import fr.ifremer.coser.result.request.ExtractRawDataRequest; +import fr.ifremer.coser.result.request.GetZonesForExtractRawDataRequest; import fr.ifremer.coser.web.actions.common.CommonZone; /** @@ -39,10 +39,12 @@ private static final long serialVersionUID = 3385467755357775199L; @Override - protected ExtractRawDataRequest createRequest() { - return requestBuilder(). - addFacade(facade). - toExtractRawDataRequest(); + protected GetZonesForExtractRawDataRequest createZonesRequest() { + GetZonesForExtractRawDataRequest request = + requestBuilder(GetZonesForExtractRawDataRequest.class). + addFacade(facade). + toRequest(); + return request; } // @Override
participants (1)
-
tchemit@users.forge.codelutin.com