1 package fr.ifremer.tutti.service.sampling;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 import com.google.common.base.MoreObjects;
28 import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinition;
29
30 import java.util.Objects;
31
32
33
34
35
36
37
38
39
40
41 public class IndividualObservationSamplingStatus {
42
43
44
45
46 private final IndividualObservationSamplingContext individualObservationSamplingContext;
47
48
49
50
51 private int individualObservationCountInCruise;
52
53
54
55
56 private int samplingCountInCruise;
57
58
59
60
61 private int individualObservationCountInFishingOperation;
62
63
64
65
66 private int samplingCountInFishingOperation;
67
68
69
70
71 private int individualObservationCountInZone;
72
73
74
75
76 private int samplingCountInZone;
77
78 private final boolean computeSampling;
79
80 public IndividualObservationSamplingStatus(IndividualObservationSamplingContext individualObservationSamplingContext,
81 boolean computeSampling,
82 CruiseSamplingInternalCache.SamplingData cruiseSamplingData,
83 CruiseSamplingInternalCache.SamplingData zoneSamplingData,
84 CruiseSamplingInternalCache.SamplingData fishingOperationSamplingData) {
85 Objects.requireNonNull(individualObservationSamplingContext);
86 Objects.requireNonNull(cruiseSamplingData);
87 Objects.requireNonNull(zoneSamplingData);
88 Objects.requireNonNull(fishingOperationSamplingData);
89 this.individualObservationSamplingContext = individualObservationSamplingContext;
90 this.samplingCountInCruise = cruiseSamplingData.getSamplingCount();
91 this.individualObservationCountInCruise = cruiseSamplingData.getIndividualObservationCount();
92 this.samplingCountInZone = zoneSamplingData.getSamplingCount();
93 this.individualObservationCountInZone = zoneSamplingData.getIndividualObservationCount();
94 this.samplingCountInFishingOperation = fishingOperationSamplingData.getSamplingCount();
95 this.individualObservationCountInFishingOperation = fishingOperationSamplingData.getIndividualObservationCount();
96
97 this.computeSampling = computeSampling;
98 }
99
100
101
102
103
104
105
106 public void add(IndividualObservationSamplingStatus i) {
107 individualObservationCountInCruise += i.individualObservationCountInCruise;
108 samplingCountInCruise += i.samplingCountInCruise;
109 individualObservationCountInFishingOperation += i.individualObservationCountInFishingOperation;
110 samplingCountInFishingOperation += i.samplingCountInFishingOperation;
111 individualObservationCountInZone += i.individualObservationCountInZone;
112 samplingCountInZone += i.samplingCountInZone;
113 }
114
115 public IndividualObservationSamplingContext getIndividualObservationSamplingContext() {
116 return individualObservationSamplingContext;
117 }
118
119 public boolean isNeedSampling() {
120
121
122 boolean result;
123
124
125 if (computeSampling && !isNotUsingSampling() && !isOneTotalCountIsAttained()) {
126
127 int samplingInterval = individualObservationSamplingContext
128 .getCalcifiedPiecesSamplingDefinition().getSamplingInterval();
129 result = individualObservationCountInCruise == 1
130 || samplingInterval == 1
131 || individualObservationCountInCruise % samplingInterval == 1;
132
133 } else {
134
135 result = false;
136
137 }
138
139 return result;
140 }
141
142 public CalcifiedPiecesSamplingDefinition getCalcifiedPiecesSamplingDefinition() {
143 return individualObservationSamplingContext.getCalcifiedPiecesSamplingDefinition();
144 }
145
146 public int getSamplingCountInCruise() {
147 return samplingCountInCruise;
148 }
149
150 public int getSamplingCountInFishingOperation() {
151 return samplingCountInFishingOperation;
152 }
153
154 public int getSamplingCountInZone() {
155 return samplingCountInZone;
156 }
157
158 public int getIndividualObservationCountInCruise() {
159 return individualObservationCountInCruise;
160 }
161
162 public int getIndividualObservationCountInFishingOperation() {
163 return individualObservationCountInFishingOperation;
164 }
165
166 public int getIndividualObservationCountInZone() {
167 return individualObservationCountInZone;
168 }
169
170 public Integer getTotalSamplingRequiredInCruise() {
171 return getCalcifiedPiecesSamplingDefinition().getMaxByLenghtStep();
172 }
173
174 public Integer getTotalSamplingRequiredInFishingOperation() {
175 return getCalcifiedPiecesSamplingDefinition().getOperationLimitation();
176 }
177
178 public Integer getTotalSamplingRequiredInZone() {
179 return getCalcifiedPiecesSamplingDefinition().getZoneLimitation();
180 }
181
182 public boolean isTotalInCruiseAttained() {
183 Integer totalSamplingRequiredInCruise = getTotalSamplingRequiredInCruise();
184 return totalSamplingRequiredInCruise != null && totalSamplingRequiredInCruise > 0 && getSamplingCountInCruise() >= totalSamplingRequiredInCruise;
185 }
186
187 public boolean isTotalInFishingOperationAttained() {
188 Integer totalSamplingRequiredInFishingOperation = getTotalSamplingRequiredInFishingOperation();
189 return totalSamplingRequiredInFishingOperation != null && (totalSamplingRequiredInFishingOperation > 0 && getSamplingCountInFishingOperation() >= totalSamplingRequiredInFishingOperation);
190 }
191
192 public boolean isTotalInZoneAttained() {
193 Integer totalSamplingRequiredInZone = getTotalSamplingRequiredInZone();
194 return totalSamplingRequiredInZone != null && (totalSamplingRequiredInZone > 0 && getSamplingCountInZone() >= totalSamplingRequiredInZone);
195 }
196
197 public boolean isOneTotalCountIsAttained() {
198 return isTotalInCruiseAttained() || isTotalInZoneAttained() || isTotalInFishingOperationAttained();
199 }
200
201 public boolean isTotalInCruiseNotUsed() {
202 Integer totalSamplingRequiredInCruise = getTotalSamplingRequiredInCruise();
203 return totalSamplingRequiredInCruise != null && totalSamplingRequiredInCruise == 0;
204 }
205
206 public boolean isTotalInFishingOperationNotUsed() {
207 Integer totalSamplingRequiredInFishingOperation = getTotalSamplingRequiredInFishingOperation();
208 return totalSamplingRequiredInFishingOperation != null && totalSamplingRequiredInFishingOperation == 0;
209 }
210
211 public boolean isTotalInZoneNotUsed() {
212 Integer totalSamplingRequiredInZone = getTotalSamplingRequiredInZone();
213 return totalSamplingRequiredInZone != null && totalSamplingRequiredInZone == 0;
214 }
215
216 public boolean isNotUsingSampling() {
217 return isTotalInCruiseNotUsed() && isTotalInFishingOperationNotUsed() && isTotalInZoneNotUsed();
218 }
219
220 @Override
221 public String toString() {
222 return MoreObjects.toStringHelper(this)
223 .add("individualObservationSamplingContext", individualObservationSamplingContext)
224 .add("individualObservationCountInCruise", getIndividualObservationCountInCruise())
225 .add("samplingCountInCruise", samplingCountInCruise)
226 .add("individualObservationCountInFishingOperation", getIndividualObservationCountInFishingOperation())
227 .add("samplingCountInFishingOperation", samplingCountInFishingOperation)
228 .add("individualObservationCountInZone", getIndividualObservationCountInZone())
229 .add("samplingCountInZone", samplingCountInZone)
230 .add("needSampling", isNeedSampling())
231 .toString();
232 }
233 }