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.referential.taxon;
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 java.io.Serializable;
29  import java.sql.Timestamp;
30  import java.util.Collection;
31  import java.util.HashSet;
32  
33  /**
34   * Liste des taxons qui sont la référence.
35   * l'ID référent est indépendant des ID taxon car les taxons peuvent être référents à un moment et
36   * ne plus l'être par la suite.
37   * Toutes les données du système doivent donc être reliées au référent et non au taxon qui sont
38   * référents à un moment mais ne peuvent plus l'être par la suite.
39   * Le fonctionnement dans la table TAXON_NAME est le suivant :
40   * - REF_TAXON_ID est toujours renseigné
41   * - si TAXON_NAME_IS_REFER est à vrai, il s'agit d'un taxon référent (toujours le cas s'il s'agit
42   * d'un taxon virtuel)
43   * - sinon c'est un synonyme
44   * Un taxon référent qui devient synonyme voit donc son statut TAXON_NAME_IS_REFER changer et le
45   * nouveau taxon référent qui le remplace récupère l'information REF_TAXON_ID
46   * NB : c'était le comportement initialement prévu.
47   * En réalité, lorsqu'un taxon référent T1-R1 devient synonyme d'un nouveau taxon référent T2, le
48   * taxon T2 prend un nouveau code référent R2 et donc le taxon T1 est lié à R2 (et tous les
49   * synonymes et les résultats qu'il pouvait avoir).
50   * Ce mécanisme a été adopté car il fallait distinguer 2 cas :
51   * 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
52   * alors pu utiliser le même REF_TAXON_ID R1 au lieu d'en créer un et ne pas mettre à jour les
53   * autres synonymes, résultats...
54   * 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 qui
55   * aurait déjà d'autres synonymes, résultats...), dans ce cas le remplacement de la référence R1
56   * pour R2 est nécessaire
57   * La modélisation pourrait être revue car la table REFENCE_TAXON ne se justifie alors plus, on
58   * pourrait directement utiliser une référence à la colonne TAXON_NAME_ID pour désigner les
59   * référents
60   */
61  // HibernateEntity.vsl annotations merge-point
62  public abstract class ReferenceTaxon
63      implements Serializable, Comparable<ReferenceTaxon>
64  {
65      /**
66       * The serial version UID of this class. Needed for serialization.
67       */
68      private static final long serialVersionUID = 9178266362854772000L;
69  
70      // Generate 2 attributes
71      private Integer refTaxonId;
72  
73      /**
74       * Identifiant interne du taxon référent.
75       * @return this.refTaxonId Integer
76       */
77      public Integer getRefTaxonId()
78      {
79          return this.refTaxonId;
80      }
81  
82      /**
83       * Identifiant interne du taxon référent.
84       * @param refTaxonIdIn Integer
85       */
86      public void setRefTaxonId(Integer refTaxonIdIn)
87      {
88          this.refTaxonId = refTaxonIdIn;
89      }
90  
91      private Timestamp updateDt;
92  
93      /**
94       * Date de modification de l'objet, mise à jour par le système
95       * @return this.updateDt Timestamp
96       */
97      public Timestamp getUpdateDt()
98      {
99          return this.updateDt;
100     }
101 
102     /**
103      * Date de modification de l'objet, mise à jour par le système
104      * @param updateDtIn Timestamp
105      */
106     public void setUpdateDt(Timestamp updateDtIn)
107     {
108         this.updateDt = updateDtIn;
109     }
110 
111     // Generate 8 associations
112     private Collection<VirtualComponent> virtualComponents = new HashSet<VirtualComponent>();
113 
114     /**
115      * 
116      * @return this.virtualComponents Collection<VirtualComponent>
117      */
118     public Collection<VirtualComponent> getVirtualComponents()
119     {
120         return this.virtualComponents;
121     }
122 
123     /**
124      * 
125      * @param virtualComponentsIn Collection<VirtualComponent>
126      */
127     public void setVirtualComponents(Collection<VirtualComponent> virtualComponentsIn)
128     {
129         this.virtualComponents = virtualComponentsIn;
130     }
131 
132     /**
133      * 
134      * @param elementToAdd VirtualComponent
135      * @return <tt>true</tt> if this collection changed as a result of the
136      *         call
137      */
138     public boolean addVirtualComponents(VirtualComponent elementToAdd)
139     {
140         return this.virtualComponents.add(elementToAdd);
141     }
142 
143     /**
144      * 
145      * @param elementToRemove VirtualComponent
146      * @return <tt>true</tt> if this collection changed as a result of the
147      *         call
148      */
149     public boolean removeVirtualComponents(VirtualComponent elementToRemove)
150     {
151         return this.virtualComponents.remove(elementToRemove);
152     }
153 
154     /**
155      * Returns <code>true</code> if the argument is an ReferenceTaxon instance and all identifiers for this entity
156      * equal the identifiers of the argument entity. Returns <code>false</code> otherwise.
157      */
158     @Override
159     public boolean equals(Object object)
160     {
161         if (this == object)
162         {
163             return true;
164         }
165         if (!(object instanceof ReferenceTaxon))
166         {
167             return false;
168         }
169         final ReferenceTaxon that = (ReferenceTaxon)object;
170         if (this.refTaxonId == null || that.getRefTaxonId() == null || !this.refTaxonId.equals(that.getRefTaxonId()))
171         {
172             return false;
173         }
174         return true;
175     }
176 
177     /**
178      * Returns a hash code based on this entity's identifiers.
179      */
180     @Override
181     public int hashCode()
182     {
183         int hashCode = 0;
184         hashCode = 29 * hashCode + (this.refTaxonId == null ? 0 : this.refTaxonId.hashCode());
185 
186         return hashCode;
187     }
188 
189     /**
190      * Constructs new instances of {@link ReferenceTaxon}.
191      */
192     public static final class Factory
193     {
194         /**
195          * Constructs a new instance of {@link ReferenceTaxon}.
196          * @return new ReferenceTaxonImpl()
197          */
198         public static ReferenceTaxon newInstance()
199         {
200             return new ReferenceTaxonImpl();
201         }
202 
203 
204         /**
205          * Constructs a new instance of {@link ReferenceTaxon}, taking all possible properties
206          * (except the identifier(s))as arguments.
207          * @param updateDt Timestamp
208          * @param virtualComponents Collection<VirtualComponent>
209          * @return newInstance ReferenceTaxon
210          */
211         public static ReferenceTaxon newInstance(Timestamp updateDt, Collection<VirtualComponent> virtualComponents)
212         {
213             final ReferenceTaxon entity = new ReferenceTaxonImpl();
214             entity.setUpdateDt(updateDt);
215             entity.setVirtualComponents(virtualComponents);
216             return entity;
217         }
218     }
219 
220     /**
221      * @see Comparable#compareTo
222      */
223     public int compareTo(ReferenceTaxon o)
224     {
225         int cmp = 0;
226         if (this.getRefTaxonId() != null)
227         {
228             cmp = this.getRefTaxonId().compareTo(o.getRefTaxonId());
229         }
230         else
231         {
232             if (this.getUpdateDt() != null)
233             {
234                 cmp = (cmp != 0 ? cmp : this.getUpdateDt().compareTo(o.getUpdateDt()));
235             }
236         }
237         return cmp;
238     }
239 // HibernateEntity.vsl merge-point
240 // ReferenceTaxon.java merge-point
241 }