View Javadoc
1   package fr.ifremer.tutti.service;
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 com.google.common.collect.Lists;
28  import com.opensymphony.xwork2.util.ValueStack;
29  import fr.ifremer.tutti.persistence.entities.data.Cruise;
30  import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
31  import fr.ifremer.tutti.persistence.entities.data.Program;
32  import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol;
33  import fr.ifremer.tutti.type.WeightUnit;
34  import org.apache.commons.logging.Log;
35  import org.apache.commons.logging.LogFactory;
36  import org.nuiton.util.DateUtil;
37  import org.nuiton.validator.xwork2.XWork2ValidatorUtil;
38  
39  import java.util.ArrayList;
40  import java.util.Date;
41  import java.util.List;
42  
43  /**
44   * Data to shared by validators.
45   *
46   * <strong>Be ware some of this methods are used in validation files, so do NOT remove them, even if your IDE tells you they are not used, they are!</strong>
47   *
48   * @author Tony Chemit - chemit@codelutin.com
49   * @since 1.2
50   */
51  public abstract class TuttiValidationDataContextSupport {
52  
53      /** Logger. */
54      private static final Log log = LogFactory.getLog(TuttiValidationDataContextSupport.class);
55  
56      private List<Program> existingPrograms = Lists.newArrayList();
57  
58      private List<TuttiProtocol> existingProtocols = Lists.newArrayList();
59  
60      private List<FishingOperation> existingFishingOperations = Lists.newArrayList();
61  
62      public static TuttiValidationDataContextSupport setValidationContext(TuttiValidationDataContextSupport validationDataContext, boolean removePrevious) {
63  
64          ValueStack sharedValueStack = XWork2ValidatorUtil.getSharedValueStack();
65  
66          TuttiValidationDataContextSupport previousValidationContext = null;
67          if (removePrevious) {
68              List toRepush = new ArrayList();
69              do {
70  
71                  Object o = sharedValueStack.pop();
72  
73                  if (log.isDebugEnabled()) {
74                      log.debug("Pop object: " + o);
75                  }
76                  if (o instanceof TuttiValidationDataContextSupport) {
77                      previousValidationContext = (TuttiValidationDataContextSupport) o;
78                  } else {
79                      toRepush.add(0, o);
80                  }
81  
82              } while (previousValidationContext == null || sharedValueStack.size() > 0);
83  
84              for (Object o : toRepush) {
85  
86                  if (log.isDebugEnabled()) {
87                      log.debug("Push object: " + o);
88                  }
89                  sharedValueStack.push(o);
90              }
91  
92          }
93          sharedValueStack.push(validationDataContext);
94  
95          return previousValidationContext;
96      }
97  
98      protected abstract List<Program> loadExistingPrograms();
99  
100     protected abstract List<TuttiProtocol> loadExistingProtocols();
101 
102     protected abstract List<FishingOperation> loadExistingFishingOperations();
103 
104     protected abstract Program getProgram();
105 
106     protected abstract Cruise getCruise();
107 
108     protected abstract TuttiProtocol getProtocol();
109 
110     protected abstract FishingOperation getFishingOperation();
111 
112     public final List<Program> getExistingPrograms() {
113         if (existingPrograms == null) {
114 
115             existingPrograms = loadExistingPrograms();
116         }
117         return existingPrograms;
118     }
119 
120     public final List<TuttiProtocol> getExistingProtocols() {
121         if (existingProtocols == null) {
122             existingProtocols = loadExistingProtocols();
123         }
124         return existingProtocols;
125     }
126 
127     public final List<FishingOperation> getExistingFishingOperations() {
128         if (existingFishingOperations == null) {
129             existingFishingOperations = loadExistingFishingOperations();
130         }
131         return existingFishingOperations;
132     }
133 
134     public final boolean isDateInCruise(Date date) {
135         return DateUtil.between(date, getCruise().getBeginDate(), getCruise().getEndDate());
136     }
137 
138     public final boolean isNotWeightZeroValue(Float weight) {
139         return WeightUnit.KG.isNotNullNorZero(weight);
140     }
141 
142     public final boolean isMutiRegNumberValid(String numberAsString) {
143         boolean result = false;
144         if (numberAsString.matches("\\d+")) {
145             int mutlirigNumber = Integer.valueOf(numberAsString);
146             Integer cruiseMultirigNumber = getCruise().getMultirigNumber();
147             result = mutlirigNumber <= cruiseMultirigNumber;
148         }
149         return result;
150     }
151 
152     public final boolean isValidDuration(Date gearShootingStartDate, Date gearShootingEndDate) {
153         boolean result = gearShootingStartDate == null || gearShootingEndDate == null;
154         if (!result) {
155             int minutes = DateUtil.getDifferenceInMinutes(gearShootingStartDate, gearShootingEndDate);
156             result = minutes <= 45 && minutes >= 20;
157         }
158         return result;
159     }
160 
161     public void reset() {
162         resetExistingPrograms();
163         resetExistingProtocols();
164         resetExistingFishingOperations();
165     }
166 
167     public void resetExistingPrograms() {
168         existingPrograms = null;
169     }
170 
171     public void resetExistingProtocols() {
172         existingProtocols = null;
173     }
174 
175     public void resetExistingFishingOperations() {
176         existingFishingOperations = null;
177     }
178 }