001// license-header java merge-point
002//
003// Attention: Generated code! Do not modify by hand!
004// Generated by: hibernate/HibernateEntity.vsl in andromda-hibernate-cartridge.
005//
006package fr.ifremer.adagio.core.dao.data.sale;
007
008/*
009 * #%L
010 * SIH-Adagio :: Core
011 * $Id:$
012 * $HeadURL:$
013 * %%
014 * Copyright (C) 2012 - 2014 Ifremer
015 * %%
016 * This program is free software: you can redistribute it and/or modify
017 * it under the terms of the GNU Affero General Public License as published by
018 * the Free Software Foundation, either version 3 of the License, or
019 * (at your option) any later version.
020 * 
021 * This program is distributed in the hope that it will be useful,
022 * but WITHOUT ANY WARRANTY; without even the implied warranty of
023 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
024 * GNU General Public License for more details.
025 * 
026 * You should have received a copy of the GNU Affero General Public License
027 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
028 * #L%
029 */
030
031import fr.ifremer.adagio.core.dao.data.measure.SaleMeasurement;
032import fr.ifremer.adagio.core.dao.data.produce.Produce;
033import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.ObservedFishingTrip;
034import fr.ifremer.adagio.core.dao.data.survey.landing.ObservedLanding;
035import fr.ifremer.adagio.core.dao.referential.SaleType;
036import fr.ifremer.adagio.core.dao.referential.location.Location;
037import java.io.Serializable;
038import java.util.Collection;
039import java.util.HashSet;
040
041/**
042 * Mode de vente escompté (d’une marée observée ou d'un débarquement observé).
043 */
044// HibernateEntity.vsl annotations merge-point
045public abstract class ExpectedSale
046    implements Serializable, Comparable<ExpectedSale>
047{
048    /**
049     * The serial version UID of this class. Needed for serialization.
050     */
051    private static final long serialVersionUID = -8147956668148626076L;
052
053    // Generate 1 attributes
054    private Integer id;
055
056    /**
057     * Idenfiant interne. Généré par le système.
058     * @return this.id Integer
059     */
060    public Integer getId()
061    {
062        return this.id;
063    }
064
065    /**
066     * Idenfiant interne. Généré par le système.
067     * @param idIn Integer
068     */
069    public void setId(Integer idIn)
070    {
071        this.id = idIn;
072    }
073
074    // Generate 6 associations
075    private Location saleLocation;
076
077    /**
078     * Lieu escompté de la vente.
079     * @return this.saleLocation Location
080     */
081    public Location getSaleLocation()
082    {
083        return this.saleLocation;
084    }
085
086    /**
087     * Lieu escompté de la vente.
088     * @param saleLocationIn Location
089     */
090    public void setSaleLocation(Location saleLocationIn)
091    {
092        this.saleLocation = saleLocationIn;
093    }
094
095    private SaleType saleType;
096
097    /**
098     * <html>
099     * <head>
100     * <style>
101     * p {padding:0px; margin:0px;}
102     * </style>
103     * </head>
104     * <body>
105     * <p>
106     * Type de vente.
107     * </p>
108     * <p>
109     * &#160;
110     * </p>
111     * <p>
112     * Attention, mélange plusieurs aspects (comme le type de transaction, etc.).
113     * </p>
114     * <p>
115     * Utiliser plutôt TakeOverType, puis détailler les autres composantes directement dans Produce
116     * ou
117     * ProduceSortingMeasurement
118     * </p>
119     * <p>
120     * &#160;
121     * </p>
122     * <p>
123     * @deprecated Use instead TakeOverType
124     * </p>
125     * </body>
126     * </html>
127     * @return this.saleType SaleType
128     */
129    public SaleType getSaleType()
130    {
131        return this.saleType;
132    }
133
134    /**
135     * <html>
136     * <head>
137     * <style>
138     * p {padding:0px; margin:0px;}
139     * </style>
140     * </head>
141     * <body>
142     * <p>
143     * Type de vente.
144     * </p>
145     * <p>
146     * &#160;
147     * </p>
148     * <p>
149     * Attention, mélange plusieurs aspects (comme le type de transaction, etc.).
150     * </p>
151     * <p>
152     * Utiliser plutôt TakeOverType, puis détailler les autres composantes directement dans Produce
153     * ou
154     * ProduceSortingMeasurement
155     * </p>
156     * <p>
157     * &#160;
158     * </p>
159     * <p>
160     * @deprecated Use instead TakeOverType
161     * </p>
162     * </body>
163     * </html>
164     * @param saleTypeIn SaleType
165     */
166    public void setSaleType(SaleType saleTypeIn)
167    {
168        this.saleType = saleTypeIn;
169    }
170
171    private Collection<SaleMeasurement> saleMeasurements = new HashSet<SaleMeasurement>();
172
173    /**
174     * Caractéristiques sur la vente (données economiques, ou caractéristiques de l'observation,
175     * etc.).
176     * @return this.saleMeasurements Collection<SaleMeasurement>
177     */
178    public Collection<SaleMeasurement> getSaleMeasurements()
179    {
180        return this.saleMeasurements;
181    }
182
183    /**
184     * Caractéristiques sur la vente (données economiques, ou caractéristiques de l'observation,
185     * etc.).
186     * @param saleMeasurementsIn Collection<SaleMeasurement>
187     */
188    public void setSaleMeasurements(Collection<SaleMeasurement> saleMeasurementsIn)
189    {
190        this.saleMeasurements = saleMeasurementsIn;
191    }
192
193    /**
194     * Caractéristiques sur la vente (données economiques, ou caractéristiques de l'observation,
195     * etc.).
196     * @param elementToAdd SaleMeasurement
197     * @return <tt>true</tt> if this collection changed as a result of the
198     *         call
199     */
200    public boolean addSaleMeasurements(SaleMeasurement elementToAdd)
201    {
202        return this.saleMeasurements.add(elementToAdd);
203    }
204
205    /**
206     * Caractéristiques sur la vente (données economiques, ou caractéristiques de l'observation,
207     * etc.).
208     * @param elementToRemove SaleMeasurement
209     * @return <tt>true</tt> if this collection changed as a result of the
210     *         call
211     */
212    public boolean removeSaleMeasurements(SaleMeasurement elementToRemove)
213    {
214        return this.saleMeasurements.remove(elementToRemove);
215    }
216
217    private Collection<Produce> produces = new HashSet<Produce>();
218
219    /**
220     * <html>
221     * <head>
222     * </head>
223     * <body>
224     * <p>
225     * Un produit est identifi&#233; par une esp&#232;ce commerciale, un &#233;tat, une
226     * qualit&#233;, pr&#233;sentation et cat&#233;gorie commerciale.
227     * </p>
228     * <p>
229     * </p>
230     * <p>
231     * <u>Si le produit est un &quot;produit vendu&quot; :</u>
232     * </p>
233     * <p>
234     * On pourra allors utiliser SortingMeasurement pour stocker des donn&#233;es
235     * &#233;conomiques, comme par exemple :
236     * </p>
237     * <p>
238     * - Le prix du produit. Il peut y avoir plusieurds prix (plusieurs PSFMs),
239     * par exemple : prix au kilo, et prix total en euros.
240     * </p>
241     * <p>
242     * - Valorisation de la commercialisation : Label rouge, Eco Label, marque
243     * collective control&#233;e par un organisme tier. (cf SACROIS)
244     * </p>
245     * <p>
246     * - Destination commerciale : consommation humaine, consommation animale,
247     * etc .
248     * </p>
249     * </body>
250     * </html>
251     * @return this.produces Collection<Produce>
252     */
253    public Collection<Produce> getProduces()
254    {
255        return this.produces;
256    }
257
258    /**
259     * <html>
260     * <head>
261     * </head>
262     * <body>
263     * <p>
264     * Un produit est identifi&#233; par une esp&#232;ce commerciale, un &#233;tat, une
265     * qualit&#233;, pr&#233;sentation et cat&#233;gorie commerciale.
266     * </p>
267     * <p>
268     * </p>
269     * <p>
270     * <u>Si le produit est un &quot;produit vendu&quot; :</u>
271     * </p>
272     * <p>
273     * On pourra allors utiliser SortingMeasurement pour stocker des donn&#233;es
274     * &#233;conomiques, comme par exemple :
275     * </p>
276     * <p>
277     * - Le prix du produit. Il peut y avoir plusieurds prix (plusieurs PSFMs),
278     * par exemple : prix au kilo, et prix total en euros.
279     * </p>
280     * <p>
281     * - Valorisation de la commercialisation : Label rouge, Eco Label, marque
282     * collective control&#233;e par un organisme tier. (cf SACROIS)
283     * </p>
284     * <p>
285     * - Destination commerciale : consommation humaine, consommation animale,
286     * etc .
287     * </p>
288     * </body>
289     * </html>
290     * @param producesIn Collection<Produce>
291     */
292    public void setProduces(Collection<Produce> producesIn)
293    {
294        this.produces = producesIn;
295    }
296
297    /**
298     * <html>
299     * <head>
300     * </head>
301     * <body>
302     * <p>
303     * Un produit est identifi&#233; par une esp&#232;ce commerciale, un &#233;tat, une
304     * qualit&#233;, pr&#233;sentation et cat&#233;gorie commerciale.
305     * </p>
306     * <p>
307     * </p>
308     * <p>
309     * <u>Si le produit est un &quot;produit vendu&quot; :</u>
310     * </p>
311     * <p>
312     * On pourra allors utiliser SortingMeasurement pour stocker des donn&#233;es
313     * &#233;conomiques, comme par exemple :
314     * </p>
315     * <p>
316     * - Le prix du produit. Il peut y avoir plusieurds prix (plusieurs PSFMs),
317     * par exemple : prix au kilo, et prix total en euros.
318     * </p>
319     * <p>
320     * - Valorisation de la commercialisation : Label rouge, Eco Label, marque
321     * collective control&#233;e par un organisme tier. (cf SACROIS)
322     * </p>
323     * <p>
324     * - Destination commerciale : consommation humaine, consommation animale,
325     * etc .
326     * </p>
327     * </body>
328     * </html>
329     * @param elementToAdd Produce
330     * @return <tt>true</tt> if this collection changed as a result of the
331     *         call
332     */
333    public boolean addProduces(Produce elementToAdd)
334    {
335        return this.produces.add(elementToAdd);
336    }
337
338    /**
339     * <html>
340     * <head>
341     * </head>
342     * <body>
343     * <p>
344     * Un produit est identifi&#233; par une esp&#232;ce commerciale, un &#233;tat, une
345     * qualit&#233;, pr&#233;sentation et cat&#233;gorie commerciale.
346     * </p>
347     * <p>
348     * </p>
349     * <p>
350     * <u>Si le produit est un &quot;produit vendu&quot; :</u>
351     * </p>
352     * <p>
353     * On pourra allors utiliser SortingMeasurement pour stocker des donn&#233;es
354     * &#233;conomiques, comme par exemple :
355     * </p>
356     * <p>
357     * - Le prix du produit. Il peut y avoir plusieurds prix (plusieurs PSFMs),
358     * par exemple : prix au kilo, et prix total en euros.
359     * </p>
360     * <p>
361     * - Valorisation de la commercialisation : Label rouge, Eco Label, marque
362     * collective control&#233;e par un organisme tier. (cf SACROIS)
363     * </p>
364     * <p>
365     * - Destination commerciale : consommation humaine, consommation animale,
366     * etc .
367     * </p>
368     * </body>
369     * </html>
370     * @param elementToRemove Produce
371     * @return <tt>true</tt> if this collection changed as a result of the
372     *         call
373     */
374    public boolean removeProduces(Produce elementToRemove)
375    {
376        return this.produces.remove(elementToRemove);
377    }
378
379    private ObservedLanding observedLanding;
380
381    /**
382     * 
383     * @return this.observedLanding ObservedLanding
384     */
385    public ObservedLanding getObservedLanding()
386    {
387        return this.observedLanding;
388    }
389
390    /**
391     * 
392     * @param observedLandingIn ObservedLanding
393     */
394    public void setObservedLanding(ObservedLanding observedLandingIn)
395    {
396        this.observedLanding = observedLandingIn;
397    }
398
399    private ObservedFishingTrip observedFishingTrip;
400
401    /**
402     * Marée observée au cours de laquelle ont été recueillies les données de ventes escomptées.
403     * @return this.observedFishingTrip ObservedFishingTrip
404     */
405    public ObservedFishingTrip getObservedFishingTrip()
406    {
407        return this.observedFishingTrip;
408    }
409
410    /**
411     * Marée observée au cours de laquelle ont été recueillies les données de ventes escomptées.
412     * @param observedFishingTripIn ObservedFishingTrip
413     */
414    public void setObservedFishingTrip(ObservedFishingTrip observedFishingTripIn)
415    {
416        this.observedFishingTrip = observedFishingTripIn;
417    }
418
419    /**
420     * Returns <code>true</code> if the argument is an ExpectedSale instance and all identifiers for this entity
421     * equal the identifiers of the argument entity. Returns <code>false</code> otherwise.
422     */
423    @Override
424    public boolean equals(Object object)
425    {
426        if (this == object)
427        {
428            return true;
429        }
430        if (!(object instanceof ExpectedSale))
431        {
432            return false;
433        }
434        final ExpectedSale that = (ExpectedSale)object;
435        if (this.id == null || that.getId() == null || !this.id.equals(that.getId()))
436        {
437            return false;
438        }
439        return true;
440    }
441
442    /**
443     * Returns a hash code based on this entity's identifiers.
444     */
445    @Override
446    public int hashCode()
447    {
448        int hashCode = 0;
449        hashCode = 29 * hashCode + (this.id == null ? 0 : this.id.hashCode());
450
451        return hashCode;
452    }
453
454    /**
455     * Constructs new instances of {@link ExpectedSale}.
456     */
457    public static final class Factory
458    {
459        /**
460         * Constructs a new instance of {@link ExpectedSale}.
461         * @return new ExpectedSaleImpl()
462         */
463        public static ExpectedSale newInstance()
464        {
465            return new ExpectedSaleImpl();
466        }
467
468        /**
469         * Constructs a new instance of {@link ExpectedSale}, taking all required and/or
470         * read-only properties as arguments, except for identifiers.
471         * @param saleLocation Location
472         * @param saleType SaleType
473         * @return newInstance
474         */
475        public static ExpectedSale newInstance(Location saleLocation, SaleType saleType)
476        {
477            final ExpectedSale entity = new ExpectedSaleImpl();
478            entity.setSaleLocation(saleLocation);
479            entity.setSaleType(saleType);
480            return entity;
481        }
482
483        /**
484         * Constructs a new instance of {@link ExpectedSale}, taking all possible properties
485         * (except the identifier(s))as arguments.
486         * @param saleLocation Location
487         * @param saleType SaleType
488         * @param saleMeasurements Collection<SaleMeasurement>
489         * @param produces Collection<Produce>
490         * @param observedLanding ObservedLanding
491         * @param observedFishingTrip ObservedFishingTrip
492         * @return newInstance ExpectedSale
493         */
494        public static ExpectedSale newInstance(Location saleLocation, SaleType saleType, Collection<SaleMeasurement> saleMeasurements, Collection<Produce> produces, ObservedLanding observedLanding, ObservedFishingTrip observedFishingTrip)
495        {
496            final ExpectedSale entity = new ExpectedSaleImpl();
497            entity.setSaleLocation(saleLocation);
498            entity.setSaleType(saleType);
499            entity.setSaleMeasurements(saleMeasurements);
500            entity.setProduces(produces);
501            entity.setObservedLanding(observedLanding);
502            entity.setObservedFishingTrip(observedFishingTrip);
503            return entity;
504        }
505    }
506
507    /**
508     * @see Comparable#compareTo
509     */
510    public int compareTo(ExpectedSale o)
511    {
512        int cmp = 0;
513        if (this.getId() != null)
514        {
515            cmp = this.getId().compareTo(o.getId());
516        }
517        
518        return cmp;
519    }
520// HibernateEntity.vsl merge-point
521// ExpectedSale.java merge-point
522}