View Javadoc
1   package fr.ifremer.tutti.service.genericformat;
2   
3   /*
4    * #%L
5    * Tutti :: Service
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2012 - 2015 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU General Public License as
13   * published by the Free Software Foundation, either version 3 of the
14   * License, or (at your option) any later version.
15   * 
16   * This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU General Public License for more details.
20   * 
21   * You should have received a copy of the GNU General Public
22   * License along with this program.  If not, see
23   * <http://www.gnu.org/licenses/gpl-3.0.html>.
24   * #L%
25   */
26  
27  import fr.ifremer.tutti.persistence.entities.data.Cruise;
28  import fr.ifremer.tutti.service.PersistenceService;
29  import fr.ifremer.tutti.service.TuttiServiceContext;
30  import fr.ifremer.tutti.service.genericformat.exportactions.CheckDataAction;
31  import fr.ifremer.tutti.service.genericformat.exportactions.CreateAccidentalCatchRowsAction;
32  import fr.ifremer.tutti.service.genericformat.exportactions.CreateCatchBatchRowsAction;
33  import fr.ifremer.tutti.service.genericformat.exportactions.CreateIndividualObservationRowsAction;
34  import fr.ifremer.tutti.service.genericformat.exportactions.CreateMarineLitterRowsAction;
35  import fr.ifremer.tutti.service.genericformat.exportactions.CreateOperationRowsAction;
36  import fr.ifremer.tutti.service.genericformat.exportactions.CreateParameterRowsAction;
37  import fr.ifremer.tutti.service.genericformat.exportactions.ExportCruiseActionSupport;
38  import fr.ifremer.tutti.service.genericformat.exportactions.ExportFishingOperationActionSupport;
39  import fr.ifremer.tutti.service.genericformat.exportactions.ExportGearCaracteristicAction;
40  import fr.ifremer.tutti.service.genericformat.exportactions.ExportProtocolAction;
41  import fr.ifremer.tutti.service.genericformat.exportactions.ExportReferentialGearAction;
42  import fr.ifremer.tutti.service.genericformat.exportactions.ExportReferentialPersonAction;
43  import fr.ifremer.tutti.service.genericformat.exportactions.ExportReferentialSpeciesAction;
44  import fr.ifremer.tutti.service.genericformat.exportactions.ExportReferentialVesselAction;
45  import fr.ifremer.tutti.service.genericformat.exportactions.ExportSampleCategoryModelAction;
46  import fr.ifremer.tutti.service.genericformat.exportactions.ExportSpeciesUsedAction;
47  import fr.ifremer.tutti.service.genericformat.exportactions.ExportSurveyAction;
48  import fr.ifremer.tutti.service.genericformat.exportactions.ExportTechnicalActionSupport;
49  import fr.ifremer.tutti.service.genericformat.exportactions.FinalizeExportAction;
50  import fr.ifremer.tutti.service.genericformat.exportactions.FlushOperationAction;
51  import fr.ifremer.tutti.service.genericformat.exportactions.GenerateExportArchiveAction;
52  import fr.ifremer.tutti.service.genericformat.exportactions.LoadDataAction;
53  import fr.ifremer.tutti.service.protocol.ProtocolImportExportService;
54  import fr.ifremer.tutti.service.referential.ReferentialTemporaryGearService;
55  import fr.ifremer.tutti.service.referential.ReferentialTemporaryPersonService;
56  import fr.ifremer.tutti.service.referential.ReferentialTemporarySpeciesService;
57  import fr.ifremer.tutti.service.referential.ReferentialTemporaryVesselService;
58  import org.apache.commons.logging.Log;
59  import org.apache.commons.logging.LogFactory;
60  
61  import java.util.ArrayList;
62  import java.util.List;
63  
64  /**
65   * Created on 3/28/15.
66   *
67   * @author Tony Chemit - chemit@codelutin.com
68   * @since 3.14.3
69   */
70  public class GenericFormatExportActionEngine {
71  
72      /** Logger. */
73      private static final Log log = LogFactory.getLog(GenericFormatExportActionEngine.class);
74  
75      private final List<ExportCruiseActionSupport> cruiseActions;
76  
77      private final List<ExportFishingOperationActionSupport> fishingOperationsActions;
78  
79      private final List<ExportTechnicalActionSupport> loadActions;
80  
81      private final List<ExportTechnicalActionSupport> technicalActions;
82  
83      public GenericFormatExportActionEngine(TuttiServiceContext serviceContext) {
84  
85          this.loadActions = createLoadActions(serviceContext);
86          this.cruiseActions = createCruiseActions(serviceContext);
87          this.fishingOperationsActions = createFishingOperationActions(serviceContext);
88          this.technicalActions = createTechnicalActions(serviceContext);
89  
90      }
91  
92      public void executeLoadActions(GenericFormatExportContext exportContext) {
93  
94          for (ExportTechnicalActionSupport action : loadActions) {
95  
96              if (log.isInfoEnabled()) {
97                  log.info("Execute " + action.getClass().getSimpleName());
98              }
99  
100             action.execute(exportContext);
101 
102         }
103 
104     }
105 
106     public void executeCruiseActions(GenericFormatExportContext exportContext, Cruise cruise) {
107 
108         for (ExportCruiseActionSupport action : cruiseActions) {
109 
110             if (log.isInfoEnabled()) {
111                 log.info("Execute " + action.getClass().getSimpleName() + " on cruise " + cruise.getId());
112             }
113             action.execute(exportContext, cruise);
114 
115         }
116 
117     }
118 
119     public void executeOperationActions(GenericFormatExportContext exportContext, GenericFormatExportOperationContext operationContext) {
120 
121         for (ExportFishingOperationActionSupport action : fishingOperationsActions) {
122 
123             if (action.doExecute(exportContext, operationContext)) {
124 
125                 if (log.isInfoEnabled()) {
126                     log.info("Execute " + action.getClass().getSimpleName() + " on operation " + operationContext.getOperation().getId());
127                 }
128                 action.execute(exportContext, operationContext);
129 
130             } else {
131 
132                 if (log.isInfoEnabled()) {
133                     log.info("Skip    " + action.getClass().getSimpleName() + " on operation " + operationContext.getOperation().getId());
134                 }
135 
136             }
137 
138         }
139 
140     }
141 
142     public void executeTechnicalActions(GenericFormatExportContext exportContext) {
143 
144         for (ExportTechnicalActionSupport action : technicalActions) {
145 
146             if (log.isInfoEnabled()) {
147                 log.info("Execute " + action.getClass().getSimpleName());
148             }
149 
150             action.execute(exportContext);
151 
152         }
153 
154     }
155 
156     private List<ExportTechnicalActionSupport> createLoadActions(TuttiServiceContext serviceContext) {
157 
158         List<ExportTechnicalActionSupport> actions = new ArrayList<>();
159 
160         actions.add(new LoadDataAction(serviceContext.getService(PersistenceService.class)));
161         actions.add(new CheckDataAction(serviceContext.getService(GenericFormatCheckDataService.class)));
162 
163         return actions;
164 
165     }
166 
167 
168     private List<ExportCruiseActionSupport> createCruiseActions(TuttiServiceContext serviceContext) {
169 
170         PersistenceService persistenceService = serviceContext.getService(PersistenceService.class);
171         String countryId = serviceContext.getConfig().getExportCountryId();
172 
173         List<ExportCruiseActionSupport> actions = new ArrayList<>();
174 
175         actions.add(new ExportSurveyAction(persistenceService, countryId));
176         actions.add(new ExportGearCaracteristicAction(persistenceService));
177 
178         return actions;
179 
180     }
181 
182     private List<ExportFishingOperationActionSupport> createFishingOperationActions(TuttiServiceContext serviceContext) {
183 
184         PersistenceService persistenceService = serviceContext.getService(PersistenceService.class);
185 
186         List<ExportFishingOperationActionSupport> actions = new ArrayList<>();
187 
188         actions.add(new CreateOperationRowsAction(persistenceService));
189         actions.add(new CreateParameterRowsAction());
190         actions.add(new CreateCatchBatchRowsAction(persistenceService));
191         actions.add(new CreateMarineLitterRowsAction(persistenceService));
192         actions.add(new CreateIndividualObservationRowsAction(persistenceService));
193         actions.add(new CreateAccidentalCatchRowsAction(persistenceService));
194         actions.add(new FlushOperationAction());
195 
196         return actions;
197 
198     }
199 
200     private List<ExportTechnicalActionSupport> createTechnicalActions(TuttiServiceContext serviceContext) {
201 
202         List<ExportTechnicalActionSupport> actions = new ArrayList<>();
203 
204         actions.add(new ExportProtocolAction(serviceContext.getService(ProtocolImportExportService.class)));
205         actions.add(new ExportSampleCategoryModelAction());
206         actions.add(new ExportSpeciesUsedAction());
207         actions.add(new ExportReferentialGearAction(serviceContext.getService(ReferentialTemporaryGearService.class)));
208         actions.add(new ExportReferentialPersonAction(serviceContext.getService(ReferentialTemporaryPersonService.class)));
209         actions.add(new ExportReferentialSpeciesAction(serviceContext.getService(ReferentialTemporarySpeciesService.class)));
210         actions.add(new ExportReferentialVesselAction(serviceContext.getService(ReferentialTemporaryVesselService.class)));
211         actions.add(new FinalizeExportAction());
212         actions.add(new GenerateExportArchiveAction());
213 
214         return actions;
215 
216     }
217 
218 }