View Javadoc
1   package fr.ifremer.dali.ui.swing.content.observation.operation.measurement.grouped;
2   
3   /*
4    * #%L
5    * Dali :: UI
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2014 - 2015 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU Affero General Public License as published by
13   * the Free Software Foundation, either version 3 of the License, or
14   * (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 Affero General Public License
22   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23   * #L%
24   */
25  
26  import com.google.common.collect.Lists;
27  import fr.ifremer.dali.dto.DaliBeans;
28  import fr.ifremer.dali.dto.ErrorAware;
29  import fr.ifremer.dali.dto.ErrorDTO;
30  import fr.ifremer.dali.dto.data.measurement.MeasurementAware;
31  import fr.ifremer.dali.dto.data.measurement.MeasurementDTO;
32  import fr.ifremer.dali.dto.data.sampling.SamplingOperationAware;
33  import fr.ifremer.dali.dto.data.sampling.SamplingOperationDTO;
34  import fr.ifremer.dali.dto.referential.DepartmentDTO;
35  import fr.ifremer.dali.dto.referential.TaxonDTO;
36  import fr.ifremer.dali.dto.referential.TaxonGroupDTO;
37  import fr.ifremer.dali.dto.referential.pmfm.PmfmDTO;
38  import fr.ifremer.dali.ui.swing.util.table.AbstractDaliRowUIModel;
39  import fr.ifremer.quadrige3.core.dao.technical.factorization.pmfm.AllowedQualitativeValuesMap;
40  import fr.ifremer.quadrige3.ui.core.dto.CommentAware;
41  import fr.ifremer.quadrige3.ui.core.dto.QuadrigeBean;
42  import fr.ifremer.quadrige3.ui.swing.table.ColumnIdentifier;
43  
44  import java.util.ArrayList;
45  import java.util.Collection;
46  import java.util.List;
47  
48  /**
49   * <p>OperationMeasurementsGroupedRowModel class.</p>
50   */
51  public class OperationMeasurementsGroupedRowModel extends AbstractDaliRowUIModel<QuadrigeBean, OperationMeasurementsGroupedRowModel>
52          implements MeasurementAware, CommentAware, ErrorAware, SamplingOperationAware {
53  
54      public static final String PROPERTY_INDIVIDUAL_ID = "individualId";
55      public static final String PROPERTY_TAXON = "taxon";
56      public static final String PROPERTY_INPUT_TAXON_ID = "inputTaxonId";
57      public static final String PROPERTY_INPUT_TAXON_NAME = "inputTaxonName";
58      public static final String PROPERTY_TAXON_GROUP = "taxonGroup";
59      public static final String PROPERTY_SAMPLING_OPERATION = "samplingOperation";
60      public static final String PROPERTY_COMMENT = "comment";
61      public static final String PROPERTY_ANALYST = "analyst";
62      public static final String PROPERTY_INDIVIDUAL_PMFMS = "individualPmfms";
63      public static final String PROPERTY_INDIVIDUAL_MEASUREMENTS = "individualMeasurements";
64  
65      private Integer individualId;
66      private TaxonDTO taxon;
67      private Integer inputTaxonId;
68      private String inputTaxonName;
69      private TaxonGroupDTO taxonGroup;
70      private SamplingOperationDTO samplingOperation;
71      private String comment;
72      private DepartmentDTO analyst;
73      private List<PmfmDTO> individualPmfms;
74      private List<MeasurementDTO> individualMeasurements;
75      private final List<ErrorDTO> errors;
76      private final boolean readOnly;
77  
78      // flag indicating if the row is really dirty or not. ie: an initialized row is not dirty
79      private boolean initialized;
80  
81      // map used to filter qualitative value combos
82      private final AllowedQualitativeValuesMap allowedQualitativeValuesMap;
83  
84      // used with multi edit model
85      private final List<ColumnIdentifier<OperationMeasurementsGroupedRowModel>> multipleValuesOnIdentifier;
86      private final List<Integer> multipleValuesOnPmfmIds;
87  
88      /**
89       * Constructor.
90       *
91       * @param readOnly a boolean.
92       */
93      public OperationMeasurementsGroupedRowModel(boolean readOnly) {
94          super(null, null);
95          this.individualMeasurements = Lists.newArrayList();
96          this.errors = Lists.newArrayList();
97          this.allowedQualitativeValuesMap = new AllowedQualitativeValuesMap();
98          this.multipleValuesOnIdentifier = new ArrayList<>();
99          this.multipleValuesOnPmfmIds = new ArrayList<>();
100         this.readOnly = readOnly;
101     }
102 
103     /**
104      * {@inheritDoc}
105      */
106     @Override
107     public boolean isEditable() {
108         return !readOnly && super.isEditable();
109     }
110 
111     /**
112      * {@inheritDoc}
113      */
114     @Override
115     protected QuadrigeBean newBean() {
116         return null;
117     }
118 
119     /**
120      * <p>Getter for the field <code>individualId</code>.</p>
121      *
122      * @return the individualId
123      */
124     public Integer getIndividualId() {
125         return individualId;
126     }
127 
128     /**
129      * <p>Setter for the field <code>individualId</code>.</p>
130      *
131      * @param individualId the individualId to set
132      */
133     public void setIndividualId(Integer individualId) {
134         this.individualId = individualId;
135     }
136 
137     /**
138      * <p>Getter for the field <code>taxonGroup</code>.</p>
139      *
140      * @return the groupTaxon
141      */
142     public TaxonGroupDTO getTaxonGroup() {
143         return taxonGroup;
144     }
145 
146     /**
147      * <p>Setter for the field <code>taxonGroup</code>.</p>
148      *
149      * @param taxonGroup the taxonGroup to set
150      */
151     public void setTaxonGroup(TaxonGroupDTO taxonGroup) {
152         TaxonGroupDTO oldValue = this.taxonGroup;
153         this.taxonGroup = taxonGroup;
154         firePropertyChange(PROPERTY_TAXON_GROUP, oldValue, taxonGroup);
155     }
156 
157     /**
158      * <p>Getter for the field <code>taxon</code>.</p>
159      *
160      * @return a {@link fr.ifremer.dali.dto.referential.TaxonDTO} object.
161      */
162     public TaxonDTO getTaxon() {
163         return taxon;
164     }
165 
166     /**
167      * <p>Setter for the field <code>taxon</code>.</p>
168      *
169      * @param taxon a {@link fr.ifremer.dali.dto.referential.TaxonDTO} object.
170      */
171     public void setTaxon(TaxonDTO taxon) {
172         TaxonDTO oldValue = this.taxon;
173         this.taxon = taxon;
174         firePropertyChange(PROPERTY_TAXON, oldValue, taxon);
175     }
176 
177     public Integer getInputTaxonId() {
178         return inputTaxonId;
179     }
180 
181     public void setInputTaxonId(Integer inputTaxonId) {
182         Integer oldValue = this.inputTaxonId;
183         this.inputTaxonId = inputTaxonId;
184         firePropertyChange(PROPERTY_INPUT_TAXON_ID, oldValue, inputTaxonId);
185     }
186 
187     public String getInputTaxonName() {
188         return inputTaxonName;
189     }
190 
191     public void setInputTaxonName(String inputTaxonName) {
192         String oldValue = this.inputTaxonName;
193         this.inputTaxonName = inputTaxonName;
194         firePropertyChange(PROPERTY_INPUT_TAXON_NAME, oldValue, inputTaxonName);
195     }
196 
197     /**
198      * {@inheritDoc}
199      */
200     @Override
201     public SamplingOperationDTO getSamplingOperation() {
202         return samplingOperation;
203     }
204 
205     /**
206      * <p>Setter for the field <code>samplingOperation</code>.</p>
207      *
208      * @param samplingOperation a {@link fr.ifremer.dali.dto.data.sampling.SamplingOperationDTO} object.
209      */
210     public void setSamplingOperation(SamplingOperationDTO samplingOperation) {
211         SamplingOperationDTO oldValue = this.samplingOperation;
212         this.samplingOperation = samplingOperation;
213         firePropertyChange(PROPERTY_SAMPLING_OPERATION, oldValue, samplingOperation);
214     }
215 
216     /**
217      * {@inheritDoc}
218      */
219     @Override
220     public String getComment() {
221         return comment;
222     }
223 
224     /**
225      * {@inheritDoc}
226      */
227     @Override
228     public void setComment(String comment) {
229         String oldValue = this.comment;
230         this.comment = comment;
231         firePropertyChange(PROPERTY_COMMENT, oldValue, comment);
232     }
233 
234     /**
235      * <p>Getter for the field <code>analyst</code>.</p>
236      *
237      * @return the analyst
238      */
239     public DepartmentDTO getAnalyst() {
240         return analyst;
241     }
242 
243     /**
244      * <p>Setter for the field <code>analyst</code>.</p>
245      *
246      * @param analyst the analyst to set
247      */
248     public void setAnalyst(DepartmentDTO analyst) {
249         DepartmentDTO oldValue = this.analyst;
250         this.analyst = analyst;
251         firePropertyChange(PROPERTY_ANALYST, oldValue, analyst);
252     }
253 
254     /**
255      * {@inheritDoc}
256      */
257     @Override
258     public List<PmfmDTO> getPmfms() {
259         return getIndividualPmfms();
260     }
261 
262     /**
263      * {@inheritDoc}
264      */
265     @Override
266     public List<MeasurementDTO> getMeasurements() {
267         return getIndividualMeasurements();
268     }
269 
270     /**
271      * {@inheritDoc}
272      */
273     @Override
274     public List<PmfmDTO> getIndividualPmfms() {
275         return individualPmfms;
276     }
277 
278     /**
279      * <p>Setter for the field <code>individualPmfms</code>.</p>
280      *
281      * @param individualPmfms a {@link java.util.List} object.
282      */
283     public void setIndividualPmfms(List<PmfmDTO> individualPmfms) {
284         List<PmfmDTO> oldValue = this.individualPmfms;
285         this.individualPmfms = individualPmfms;
286         firePropertyChange(PROPERTY_INDIVIDUAL_PMFMS, oldValue, individualPmfms);
287     }
288 
289     /**
290      * {@inheritDoc}
291      */
292     @Override
293     public List<MeasurementDTO> getIndividualMeasurements() {
294         return individualMeasurements;
295     }
296 
297     public boolean isInitialized() {
298         return initialized;
299     }
300 
301     public void setInitialized(boolean initialized) {
302         this.initialized = initialized;
303     }
304 
305     /**
306      * <p>Setter for the field <code>individualMeasurements</code>.</p>
307      *
308      * @param individualMeasurements a {@link java.util.List} object.
309      */
310     public void setIndividualMeasurements(List<MeasurementDTO> individualMeasurements) {
311         List<MeasurementDTO> oldValue = this.individualMeasurements;
312         this.individualMeasurements = individualMeasurements;
313         firePropertyChange(PROPERTY_INDIVIDUAL_MEASUREMENTS, oldValue, individualMeasurements);
314     }
315 
316     public AllowedQualitativeValuesMap getAllowedQualitativeValuesMap() {
317         return allowedQualitativeValuesMap;
318     }
319 
320     /**
321      * {@inheritDoc}
322      */
323     @Override
324     public Collection<ErrorDTO> getErrors() {
325         return errors;
326     }
327 
328     public boolean hasTaxonInformation() {
329         return getTaxonGroup() != null || getTaxon() != null;
330     }
331 
332     public boolean hasNonEmptyMeasurements() {
333         return getIndividualMeasurements().stream().anyMatch(measurement -> !DaliBeans.isMeasurementEmpty(measurement));
334     }
335 
336 
337     public List<ColumnIdentifier<OperationMeasurementsGroupedRowModel>> getMultipleValuesOnIdentifier() {
338         return multipleValuesOnIdentifier;
339     }
340 
341     public void addMultipleValuesOnIdentifier(ColumnIdentifier<OperationMeasurementsGroupedRowModel> identifier) {
342         multipleValuesOnIdentifier.add(identifier);
343     }
344 
345     public List<Integer> getMultipleValuesOnPmfmIds() {
346         return multipleValuesOnPmfmIds;
347     }
348 
349     public void addMultipleValuesOnPmfmId(Integer pmfmId) {
350         multipleValuesOnPmfmIds.add(pmfmId);
351     }
352 
353 
354 }