View Javadoc
1   package fr.ifremer.coser.web;
2   
3   /*
4    * #%L
5    * Coser :: Web
6    * %%
7    * Copyright (C) 2010 - 2014 Ifremer, Codelutin, Chemit Tony
8    * %%
9    * This program is free software: you can redistribute it and/or modify
10   * it under the terms of the GNU Affero General Public License as published by
11   * the Free Software Foundation, either version 3 of the License, or
12   * (at your option) any later version.
13   * 
14   * This program is distributed in the hope that it will be useful,
15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   * GNU General Public License for more details.
18   * 
19   * You should have received a copy of the GNU Affero General Public License
20   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21   * #L%
22   */
23  
24  import com.google.common.base.Preconditions;
25  import com.google.common.collect.Maps;
26  import com.opensymphony.xwork2.ActionSupport;
27  import fr.ifremer.coser.bean.ZoneMap;
28  import fr.ifremer.coser.result.CoserRequest;
29  import fr.ifremer.coser.result.CoserRequestContext;
30  import fr.ifremer.coser.result.CoserRequestExecutor;
31  import fr.ifremer.coser.result.repository.ResultRepository;
32  import fr.ifremer.coser.result.repository.ResultRepositoryType;
33  import fr.ifremer.coser.result.request.DeleteResultsRequest;
34  import fr.ifremer.coser.result.request.ExtractRawDataAndResultsRequest;
35  import fr.ifremer.coser.result.result.FileResult;
36  import fr.ifremer.coser.result.result.MapResult;
37  import fr.ifremer.coser.services.WebResultService;
38  
39  import java.io.File;
40  import java.util.List;
41  import java.util.Locale;
42  import java.util.Map;
43  import java.util.Set;
44  
45  /**
46   * Wrap any call to business layer.
47   * <p/>
48   * Created on 3/6/14.
49   *
50   * @author Tony Chemit <chemit@codelutin.com>
51   * @since 1.5
52   */
53  //TODO Inject this in action
54  public class ServiceHelper {
55  
56      protected final ActionSupport action;
57  
58      protected final CoserWebApplicationContext applicationContext;
59  
60      protected final WebResultService webResultService;
61  
62      public ServiceHelper(ActionSupport action) {
63          Preconditions.checkNotNull(action);
64          this.applicationContext = CoserWebApplicationContext.get();
65          this.action = action;
66          this.webResultService = new WebResultService(applicationContext);
67      }
68  
69      // --------------------------------------------------------------------- //
70      // --- Facade methods -------------------------------------------------- //
71      // --------------------------------------------------------------------- //
72  
73      public Map<String, String> getFacades() {
74          return applicationContext.getZoneMap().getFacades();
75      }
76  
77      public String getFacadeDisplayName(String facade) {
78          Map<String, String> facades = getFacades();
79          return facades.get(facade);
80      }
81  
82      // --------------------------------------------------------------------- //
83      // --- Zone methods ---------------------------------------------------- //
84      // --------------------------------------------------------------------- //
85  
86      public Map<String, List<String>> getZoneByFacade() {
87          return applicationContext.getZoneMap().getZoneByFacade();
88      }
89  
90      public Map<String, String> getZonesForFacade(String facade) {
91          ZoneMap zoneMap = applicationContext.getZoneMap();
92          List<String> zoneIds = zoneMap.getZonesForFacade(facade);
93          Map<String, String> map = Maps.newHashMap();
94          for (String zoneId : zoneIds) {
95              String zoneName = zoneMap.getZoneFullNameWithNoFacade(zoneId);
96              map.put(zoneId, zoneName);
97          }
98          return map;
99      }
100 
101     public Map<String, String> getZonePictures() {
102         return applicationContext.getZoneMap().getZonePictures();
103     }
104 
105     public Map<String, String> getZoneMetaInfo(Locale locale) {
106         return applicationContext.getZoneMap().getZoneMetaInfo(locale);
107     }
108 
109     public String getZoneFullName(String zoneId) {
110         return applicationContext.getZoneMap().getZoneFullName(zoneId);
111     }
112 
113     public String getZoneDisplayName(CoserRequest request, String zone) {
114         Map<String, String> availableZones = toMap(request);
115         String displayName = availableZones.get(zone);
116         return displayName;
117     }
118 
119     // --------------------------------------------------------------------- //
120     // --- Species methods ------------------------------------------------- //
121     // --------------------------------------------------------------------- //
122 
123     public String getSpeciesDisplayName(CoserRequest request, String species) {
124         Map<String, String> availableSpecies = toMap(request);
125         String displayName = availableSpecies.get(species);
126         return displayName;
127     }
128 
129     // --------------------------------------------------------------------- //
130     // --- Indicator methods ----------------------------------------------- //
131     // --------------------------------------------------------------------- //
132 
133     public Set<String> getIndicatorIds() {
134         return applicationContext.getIndicatorMap().getIds();
135     }
136 
137     public String getIndicatorDisplayName(CoserRequest request, String indicator) {
138         Map<String, String> availableIndicators = toMap(request);
139         String displayName = availableIndicators.get(indicator);
140         return displayName;
141     }
142 
143     // --------------------------------------------------------------------- //
144     // --- Result methods -------------------------------------------------- //
145     // --------------------------------------------------------------------- //
146 
147     public FileResult extractRawDataAndResults(Locale locale,
148                                                ExtractRawDataAndResultsRequest request) {
149         CoserRequestContext context = newRequestContext(locale);
150         FileResult result = webResultService.extractRawDataAndResults(context, request);
151         return result;
152     }
153 
154     public void deleteResults(DeleteResultsRequest request) {
155         CoserRequestContext context = newRequestContext();
156         webResultService.deleteResults(context, request);
157     }
158 
159     public void registerNewUploadedResults(String login, File resultFile) {
160         CoserRequestContext context = newRequestContext();
161         webResultService.registerNewUploadedResults(context, login, resultFile);
162     }
163 
164     public FileResult toFileResult(CoserRequest request) {
165         CoserRequestContext context = newRequestContext();
166         FileResult result = webResultService.executeUnique(context, request).toFileResult();
167         return result;
168     }
169 
170     public MapResult toMapResult(CoserRequest request) {
171         CoserRequestContext context = newRequestContext();
172         MapResult result = webResultService.executeUnique(context, request).toMapResult();
173         return result;
174     }
175 
176     public Map<String, String> toMap(CoserRequest request) {
177         CoserRequestContext context = newRequestContext();
178         Map<String, String> result = webResultService.executeAll(context, request).toMap();
179         return result;
180     }
181 
182     // --------------------------------------------------------------------- //
183     // --- Misc methods ---------------------------------------------------- //
184     // --------------------------------------------------------------------- //
185 
186     public CoserWebConfig getConfig() {
187         return applicationContext.getConfig();
188     }
189 
190     public void reloadProjects() {
191         webResultService.resetRepositories();
192     }
193 
194     public Map<String, ResultRepositoryType> getRepositoryTypes() {
195         Map<String, ResultRepositoryType> result = webResultService.getRepositoryTypes();
196         return result;
197     }
198 
199     public ResultRepositoryType getMatchingRepositoryType(CoserRequest request) {
200         CoserRequestContext context = newRequestContext();
201         CoserRequestExecutor coserRequestExecutor = webResultService.executeAll(context, request);
202         //FIXME We tak the first repository...
203         ResultRepository matchingRepository = coserRequestExecutor.getUniqueMatchingRepository();
204         return matchingRepository.getResultRepositoryType();
205     }
206 
207     // --------------------------------------------------------------------- //
208     // --- Internal methods ------------------------------------------------ //
209     // --------------------------------------------------------------------- //
210 
211     protected CoserRequestContext newRequestContext() {
212         return newRequestContext(action.getLocale());
213     }
214 
215     protected CoserRequestContext newRequestContext(Locale locale) {
216         return webResultService.newRequestContext(locale);
217     }
218 
219 }