View Javadoc
1   // license-header java merge-point
2   //
3   // Attention: Generated code! Do not modify by hand!
4   // Generated by: hibernate/HibernateEntity.vsl in andromda-hibernate-cartridge.
5   //
6   package fr.ifremer.quadrige3.core.dao.administration.strategy;
7   
8   /*-
9    * #%L
10   * Quadrige3 Core :: Client API
11   * %%
12   * Copyright (C) 2017 - 2024 Ifremer
13   * %%
14   * This program is free software: you can redistribute it and/or modify
15   * it under the terms of the GNU Affero General Public License as published by
16   * the Free Software Foundation, either version 3 of the License, or
17   * (at your option) any later version.
18   * 
19   * This program is distributed in the hope that it will be useful,
20   * but WITHOUT ANY WARRANTY; without even the implied warranty of
21   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22   * GNU General Public License for more details.
23   * 
24   * You should have received a copy of the GNU Affero General Public License
25   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
26   * #L%
27   */
28  import fr.ifremer.quadrige3.core.dao.administration.user.Department;
29  import fr.ifremer.quadrige3.core.dao.referential.Frequency;
30  import fr.ifremer.quadrige3.core.dao.referential.monitoringLocation.MonitoringLocation;
31  import fr.ifremer.quadrige3.core.dao.referential.taxon.ReferenceTaxon;
32  import fr.ifremer.quadrige3.core.dao.referential.taxon.TaxonGroup;
33  import java.io.Serializable;
34  import java.sql.Timestamp;
35  import java.util.Collection;
36  import java.util.HashSet;
37  
38  /**
39   * Identifie les conditions d'application locale de la stratégie pour une période donnée.
40   */
41  // HibernateEntity.vsl annotations merge-point
42  public abstract class AppliedStrategy
43      implements Serializable, Comparable<AppliedStrategy>
44  {
45      /**
46       * The serial version UID of this class. Needed for serialization.
47       */
48      private static final long serialVersionUID = 5163852483680502024L;
49  
50      // Generate 2 attributes
51      private Integer appliedStratId;
52  
53      /**
54       * 
55       * @return this.appliedStratId Integer
56       */
57      public Integer getAppliedStratId()
58      {
59          return this.appliedStratId;
60      }
61  
62      /**
63       * 
64       * @param appliedStratIdIn Integer
65       */
66      public void setAppliedStratId(Integer appliedStratIdIn)
67      {
68          this.appliedStratId = appliedStratIdIn;
69      }
70  
71      private Timestamp updateDt;
72  
73      /**
74       * Date de modification de l'objet, mise à jour par le système
75       * @return this.updateDt Timestamp
76       */
77      public Timestamp getUpdateDt()
78      {
79          return this.updateDt;
80      }
81  
82      /**
83       * Date de modification de l'objet, mise à jour par le système
84       * @param updateDtIn Timestamp
85       */
86      public void setUpdateDt(Timestamp updateDtIn)
87      {
88          this.updateDt = updateDtIn;
89      }
90  
91      // Generate 8 associations
92      private TaxonGroup taxonGroup;
93  
94      /**
95       * Liste l'ensemble de taxons ayant les mêmes caractéristiques pour le critère pris en compte.
96       * @return this.taxonGroup TaxonGroup
97       */
98      public TaxonGroup getTaxonGroup()
99      {
100         return this.taxonGroup;
101     }
102 
103     /**
104      * Liste l'ensemble de taxons ayant les mêmes caractéristiques pour le critère pris en compte.
105      * @param taxonGroupIn TaxonGroup
106      */
107     public void setTaxonGroup(TaxonGroup taxonGroupIn)
108     {
109         this.taxonGroup = taxonGroupIn;
110     }
111 
112     private ReferenceTaxon referenceTaxon;
113 
114     /**
115      * Liste des taxons qui sont la référence.
116      * l'ID référent est indépendant des ID taxon car les taxons peuvent être référents à un moment
117      * et ne
118      * plus l'être par la suite.
119      * Toutes les données du système doivent donc être reliées au référent et non au taxon qui sont
120      * référents à un moment mais ne peuvent plus l'être par la suite.
121      * Le fonctionnement dans la table TAXON_NAME est le suivant :
122      * - REF_TAXON_ID est toujours renseigné
123      * - si TAXON_NAME_IS_REFER est à vrai, il s'agit d'un taxon référent (toujours le cas s'il
124      * s'agit d'un
125      * taxon virtuel)
126      * - sinon c'est un synonyme
127      * Un taxon référent qui devient synonyme voit donc son statut TAXON_NAME_IS_REFER changer et le
128      * nouveau taxon référent qui le remplace récupère l'information REF_TAXON_ID
129      * NB : c'était le comportement initialement prévu.
130      * En réalité, lorsqu'un taxon référent T1-R1 devient synonyme d'un nouveau taxon référent T2,
131      * le taxon
132      * T2 prend un nouveau code référent R2 et donc le taxon T1 est lié à R2 (et tous les synonymes
133      * et les
134      * résultats qu'il pouvait avoir).
135      * Ce mécanisme a été adopté car il fallait distinguer 2 cas :
136      * 1- cas d'un taxon référent T1-R1 qui devient synonyme d'un référent qu'on crée T2 : on aurait
137      * alors
138      * pu utiliser le même REF_TAXON_ID R1 au lieu d'en créer un et ne pas mettre à jour les autres
139      * synonymes, résultats...
140      * 2- cas d'un taxon référent T1-R1 qui devient synonyme d'un référent qui existe déjà T2-R2 (et
141      * qui
142      * aurait déjà d'autres synonymes, résultats...), dans ce cas le remplacement de la référence R1
143      * pour
144      * R2 est nécessaire
145      * La modélisation pourrait être revue car la table REFENCE_TAXON ne se justifie alors plus, on
146      * pourrait directement utiliser une référence à la colonne TAXON_NAME_ID pour désigner les
147      * référents
148      * @return this.referenceTaxon ReferenceTaxon
149      */
150     public ReferenceTaxon getReferenceTaxon()
151     {
152         return this.referenceTaxon;
153     }
154 
155     /**
156      * Liste des taxons qui sont la référence.
157      * l'ID référent est indépendant des ID taxon car les taxons peuvent être référents à un moment
158      * et ne
159      * plus l'être par la suite.
160      * Toutes les données du système doivent donc être reliées au référent et non au taxon qui sont
161      * référents à un moment mais ne peuvent plus l'être par la suite.
162      * Le fonctionnement dans la table TAXON_NAME est le suivant :
163      * - REF_TAXON_ID est toujours renseigné
164      * - si TAXON_NAME_IS_REFER est à vrai, il s'agit d'un taxon référent (toujours le cas s'il
165      * s'agit d'un
166      * taxon virtuel)
167      * - sinon c'est un synonyme
168      * Un taxon référent qui devient synonyme voit donc son statut TAXON_NAME_IS_REFER changer et le
169      * nouveau taxon référent qui le remplace récupère l'information REF_TAXON_ID
170      * NB : c'était le comportement initialement prévu.
171      * En réalité, lorsqu'un taxon référent T1-R1 devient synonyme d'un nouveau taxon référent T2,
172      * le taxon
173      * T2 prend un nouveau code référent R2 et donc le taxon T1 est lié à R2 (et tous les synonymes
174      * et les
175      * résultats qu'il pouvait avoir).
176      * Ce mécanisme a été adopté car il fallait distinguer 2 cas :
177      * 1- cas d'un taxon référent T1-R1 qui devient synonyme d'un référent qu'on crée T2 : on aurait
178      * alors
179      * pu utiliser le même REF_TAXON_ID R1 au lieu d'en créer un et ne pas mettre à jour les autres
180      * synonymes, résultats...
181      * 2- cas d'un taxon référent T1-R1 qui devient synonyme d'un référent qui existe déjà T2-R2 (et
182      * qui
183      * aurait déjà d'autres synonymes, résultats...), dans ce cas le remplacement de la référence R1
184      * pour
185      * R2 est nécessaire
186      * La modélisation pourrait être revue car la table REFENCE_TAXON ne se justifie alors plus, on
187      * pourrait directement utiliser une référence à la colonne TAXON_NAME_ID pour désigner les
188      * référents
189      * @param referenceTaxonIn ReferenceTaxon
190      */
191     public void setReferenceTaxon(ReferenceTaxon referenceTaxonIn)
192     {
193         this.referenceTaxon = referenceTaxonIn;
194     }
195 
196     private Collection<AppliedPeriod> appliedPeriods = new HashSet<AppliedPeriod>();
197 
198     /**
199      * Liste des périodes durant lesquels une stratégie est appliquée en un lieu.
200      * @return this.appliedPeriods Collection<AppliedPeriod>
201      */
202     public Collection<AppliedPeriod> getAppliedPeriods()
203     {
204         return this.appliedPeriods;
205     }
206 
207     /**
208      * Liste des périodes durant lesquels une stratégie est appliquée en un lieu.
209      * @param appliedPeriodsIn Collection<AppliedPeriod>
210      */
211     public void setAppliedPeriods(Collection<AppliedPeriod> appliedPeriodsIn)
212     {
213         this.appliedPeriods = appliedPeriodsIn;
214     }
215 
216     /**
217      * Liste des périodes durant lesquels une stratégie est appliquée en un lieu.
218      * @param elementToAdd AppliedPeriod
219      * @return <tt>true</tt> if this collection changed as a result of the
220      *         call
221      */
222     public boolean addAppliedPeriods(AppliedPeriod elementToAdd)
223     {
224         return this.appliedPeriods.add(elementToAdd);
225     }
226 
227     /**
228      * Liste des périodes durant lesquels une stratégie est appliquée en un lieu.
229      * @param elementToRemove AppliedPeriod
230      * @return <tt>true</tt> if this collection changed as a result of the
231      *         call
232      */
233     public boolean removeAppliedPeriods(AppliedPeriod elementToRemove)
234     {
235         return this.appliedPeriods.remove(elementToRemove);
236     }
237 
238     private MonitoringLocation monitoringLocation;
239 
240     /**
241      * Liste les lieux associés aux programmes de surveillance.
242      * @return this.monitoringLocation MonitoringLocation
243      */
244     public MonitoringLocation getMonitoringLocation()
245     {
246         return this.monitoringLocation;
247     }
248 
249     /**
250      * Liste les lieux associés aux programmes de surveillance.
251      * @param monitoringLocationIn MonitoringLocation
252      */
253     public void setMonitoringLocation(MonitoringLocation monitoringLocationIn)
254     {
255         this.monitoringLocation = monitoringLocationIn;
256     }
257 
258     private Strategy strategy;
259 
260     /**
261      * Définie les paramètres à mesurer dans un programme particulier.
262      * @return this.strategy Strategy
263      */
264     public Strategy getStrategy()
265     {
266         return this.strategy;
267     }
268 
269     /**
270      * Définie les paramètres à mesurer dans un programme particulier.
271      * @param strategyIn Strategy
272      */
273     public void setStrategy(Strategy strategyIn)
274     {
275         this.strategy = strategyIn;
276     }
277 
278     private Frequency frequency;
279 
280     /**
281      * Liste des fréquences d'application des stratégies.
282      * @return this.frequency Frequency
283      */
284     public Frequency getFrequency()
285     {
286         return this.frequency;
287     }
288 
289     /**
290      * Liste des fréquences d'application des stratégies.
291      * @param frequencyIn Frequency
292      */
293     public void setFrequency(Frequency frequencyIn)
294     {
295         this.frequency = frequencyIn;
296     }
297 
298     private Department department;
299 
300     /**
301      * Liste les départements ou services auxquels sont rattachés les agents
302      * @return this.department Department
303      */
304     public Department getDepartment()
305     {
306         return this.department;
307     }
308 
309     /**
310      * Liste les départements ou services auxquels sont rattachés les agents
311      * @param departmentIn Department
312      */
313     public void setDepartment(Department departmentIn)
314     {
315         this.department = departmentIn;
316     }
317 
318     private Collection<PmfmAppliedStrategy> pmfmAppliedStrategies = new HashSet<PmfmAppliedStrategy>();
319 
320     /**
321      * PMSF associés à une stratégie pour un lieu données.
322      * @return this.pmfmAppliedStrategies Collection<PmfmAppliedStrategy>
323      */
324     public Collection<PmfmAppliedStrategy> getPmfmAppliedStrategies()
325     {
326         return this.pmfmAppliedStrategies;
327     }
328 
329     /**
330      * PMSF associés à une stratégie pour un lieu données.
331      * @param pmfmAppliedStrategiesIn Collection<PmfmAppliedStrategy>
332      */
333     public void setPmfmAppliedStrategies(Collection<PmfmAppliedStrategy> pmfmAppliedStrategiesIn)
334     {
335         this.pmfmAppliedStrategies = pmfmAppliedStrategiesIn;
336     }
337 
338     /**
339      * PMSF associés à une stratégie pour un lieu données.
340      * @param elementToAdd PmfmAppliedStrategy
341      * @return <tt>true</tt> if this collection changed as a result of the
342      *         call
343      */
344     public boolean addPmfmAppliedStrategies(PmfmAppliedStrategy elementToAdd)
345     {
346         return this.pmfmAppliedStrategies.add(elementToAdd);
347     }
348 
349     /**
350      * PMSF associés à une stratégie pour un lieu données.
351      * @param elementToRemove PmfmAppliedStrategy
352      * @return <tt>true</tt> if this collection changed as a result of the
353      *         call
354      */
355     public boolean removePmfmAppliedStrategies(PmfmAppliedStrategy elementToRemove)
356     {
357         return this.pmfmAppliedStrategies.remove(elementToRemove);
358     }
359 
360     /**
361      * Returns <code>true</code> if the argument is an AppliedStrategy instance and all identifiers for this entity
362      * equal the identifiers of the argument entity. Returns <code>false</code> otherwise.
363      */
364     @Override
365     public boolean equals(Object object)
366     {
367         if (this == object)
368         {
369             return true;
370         }
371         if (!(object instanceof AppliedStrategy))
372         {
373             return false;
374         }
375         final AppliedStrategy that = (AppliedStrategy)object;
376         if (this.appliedStratId == null || that.getAppliedStratId() == null || !this.appliedStratId.equals(that.getAppliedStratId()))
377         {
378             return false;
379         }
380         return true;
381     }
382 
383     /**
384      * Returns a hash code based on this entity's identifiers.
385      */
386     @Override
387     public int hashCode()
388     {
389         int hashCode = 0;
390         hashCode = 29 * hashCode + (this.appliedStratId == null ? 0 : this.appliedStratId.hashCode());
391 
392         return hashCode;
393     }
394 
395     /**
396      * Constructs new instances of {@link AppliedStrategy}.
397      */
398     public static final class Factory
399     {
400         /**
401          * Constructs a new instance of {@link AppliedStrategy}.
402          * @return new AppliedStrategyImpl()
403          */
404         public static AppliedStrategy newInstance()
405         {
406             return new AppliedStrategyImpl();
407         }
408 
409         /**
410          * Constructs a new instance of {@link AppliedStrategy}, taking all required and/or
411          * read-only properties as arguments, except for identifiers.
412          * @param monitoringLocation MonitoringLocation
413          * @param strategy Strategy
414          * @return newInstance
415          */
416         public static AppliedStrategy newInstance(MonitoringLocation monitoringLocation, Strategy strategy)
417         {
418             final AppliedStrategy entity = new AppliedStrategyImpl();
419             entity.setMonitoringLocation(monitoringLocation);
420             entity.setStrategy(strategy);
421             return entity;
422         }
423 
424         /**
425          * Constructs a new instance of {@link AppliedStrategy}, taking all possible properties
426          * (except the identifier(s))as arguments.
427          * @param updateDt Timestamp
428          * @param taxonGroup TaxonGroup
429          * @param referenceTaxon ReferenceTaxon
430          * @param appliedPeriods Collection<AppliedPeriod>
431          * @param monitoringLocation MonitoringLocation
432          * @param strategy Strategy
433          * @param frequency Frequency
434          * @param department Department
435          * @param pmfmAppliedStrategies Collection<PmfmAppliedStrategy>
436          * @return newInstance AppliedStrategy
437          */
438         public static AppliedStrategy newInstance(Timestamp updateDt, TaxonGroup taxonGroup, ReferenceTaxon referenceTaxon, Collection<AppliedPeriod> appliedPeriods, MonitoringLocation monitoringLocation, Strategy strategy, Frequency frequency, Department department, Collection<PmfmAppliedStrategy> pmfmAppliedStrategies)
439         {
440             final AppliedStrategy entity = new AppliedStrategyImpl();
441             entity.setUpdateDt(updateDt);
442             entity.setTaxonGroup(taxonGroup);
443             entity.setReferenceTaxon(referenceTaxon);
444             entity.setAppliedPeriods(appliedPeriods);
445             entity.setMonitoringLocation(monitoringLocation);
446             entity.setStrategy(strategy);
447             entity.setFrequency(frequency);
448             entity.setDepartment(department);
449             entity.setPmfmAppliedStrategies(pmfmAppliedStrategies);
450             return entity;
451         }
452     }
453 
454     /**
455      * @see Comparable#compareTo
456      */
457     public int compareTo(AppliedStrategy o)
458     {
459         int cmp = 0;
460         if (this.getAppliedStratId() != null)
461         {
462             cmp = this.getAppliedStratId().compareTo(o.getAppliedStratId());
463         }
464         else
465         {
466             if (this.getUpdateDt() != null)
467             {
468                 cmp = (cmp != 0 ? cmp : this.getUpdateDt().compareTo(o.getUpdateDt()));
469             }
470         }
471         return cmp;
472     }
473 // HibernateEntity.vsl merge-point
474 // AppliedStrategy.java merge-point
475 }