1 package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency;
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 fr.ifremer.tutti.service.sampling.IndividualObservationSamplingCacheRequest;
28
29 import java.util.Objects;
30
31
32
33
34
35
36
37
38 public class IndividualObservationToSamplingCacheEngine {
39
40 private final SpeciesFrequencyUIModel speciesFrequencyUIModel;
41 private final IndividualObservationUICache individualObservationUICache;
42 private final SamplingCodeUICache samplingCodeUICache;
43
44 public IndividualObservationToSamplingCacheEngine(SpeciesFrequencyUIModel speciesFrequencyUIModel) {
45
46 this.speciesFrequencyUIModel = speciesFrequencyUIModel;
47 this.individualObservationUICache = speciesFrequencyUIModel.getIndividualObservationUICache();
48 this.samplingCodeUICache = speciesFrequencyUIModel.getSamplingCodeUICache();
49
50 }
51
52 public boolean computeSamplingCacheUpdate(IndividualObservationBatchRowState oldState, IndividualObservationBatchRowState newState) {
53
54 IndividualObservationSamplingCacheRequest addIndividualObservation = null;
55 IndividualObservationSamplingCacheRequest removeIndividualObservation = null;
56 IndividualObservationSamplingCacheRequest addSamplingAction = null;
57 IndividualObservationSamplingCacheRequest removeSamplingAction = null;
58 IndividualObservationSamplingCacheRequest addSamplingCodeAction = null;
59 IndividualObservationSamplingCacheRequest removeSamplingCodeAction = null;
60
61 boolean sizeChanged = !Objects.equals(oldState.getSize(), newState.getSize());
62 boolean maturityChanged = !Objects.equals(oldState.getMaturity(), newState.getMaturity());
63 boolean genderChanged = !Objects.equals(oldState.getGender(), newState.getGender());
64 boolean samplingCodeChanged = !Objects.equals(oldState.getSamplingCode(), newState.getSamplingCode());
65 boolean withOldSamplingCode = oldState.withSamplingCode();
66 boolean withNewSamplingCode = newState.withSamplingCode();
67
68 if (sizeChanged || maturityChanged || genderChanged) {
69
70 removeIndividualObservation = toRequest(oldState);
71 addIndividualObservation = toRequest(newState);
72
73 } else if (samplingCodeChanged) {
74
75 boolean removeSampling = withOldSamplingCode && !withNewSamplingCode;
76 boolean addSampling = withNewSamplingCode && !withOldSamplingCode;
77
78 if (removeSampling) {
79
80 removeSamplingAction = toRequest(oldState);
81
82 } else if (addSampling) {
83
84 addSamplingAction = toRequest(newState);
85
86 } else {
87
88 removeSamplingCodeAction = toRequest(oldState);
89 addSamplingCodeAction = toRequest(newState);
90
91 }
92
93 }
94
95 boolean actionDone = false;
96 if (removeIndividualObservation != null) {
97 individualObservationUICache.removeIndividualObservation(removeIndividualObservation);
98 actionDone=true;
99 }
100 if (addIndividualObservation != null) {
101 individualObservationUICache.addIndividualObservation(addIndividualObservation);
102 actionDone=true;
103 }
104 if (removeSamplingAction != null) {
105 individualObservationUICache.removeSampling(removeSamplingAction);
106 samplingCodeUICache.removeSampling(removeSamplingAction);
107 actionDone=true;
108 }
109 if (addSamplingAction != null) {
110 individualObservationUICache.addSampling(addSamplingAction);
111 samplingCodeUICache.addSampling(addSamplingAction);
112 actionDone=true;
113 }
114 if (removeSamplingCodeAction != null) {
115 samplingCodeUICache.removeSampling(removeSamplingCodeAction);
116 actionDone=true;
117 }
118 if (addSamplingCodeAction != null) {
119 samplingCodeUICache.addSampling(addSamplingCodeAction);
120 actionDone=true;
121 }
122
123 return actionDone;
124
125 }
126
127 private IndividualObservationSamplingCacheRequest toRequest(IndividualObservationBatchRowState state) {
128
129 return new IndividualObservationSamplingCacheRequest(speciesFrequencyUIModel.getFishingOperation(),
130 speciesFrequencyUIModel.getBatch().getSpecies(),
131 speciesFrequencyUIModel.getLengthStepInMm(state.getSize()),
132 state.getMaturity(),
133 state.getGender(),
134 state.getSamplingCode());
135 }
136
137 }