root/trunk/cdmlib/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/agent/AgentBase.java

Revision 11934, 7.1 kB (checked in by k.luther, 13 months ago)

clone methods

  • Property svn:keywords set to Id
Line 
1/**
2* Copyright (C) 2007 EDIT
3* European Distributed Institute of Taxonomy
4* http://www.e-taxonomy.eu
5*
6* The contents of this file are subject to the Mozilla Public License Version 1.1
7* See LICENSE.TXT at the top of this package for the full license terms.
8*/
9
10package eu.etaxonomy.cdm.model.agent;
11
12import java.util.List;
13import java.util.Set;
14
15import javax.persistence.Embedded;
16import javax.persistence.Entity;
17import javax.persistence.Transient;
18import javax.validation.constraints.NotNull;
19import javax.xml.bind.annotation.XmlAccessType;
20import javax.xml.bind.annotation.XmlAccessorType;
21import javax.xml.bind.annotation.XmlElement;
22import javax.xml.bind.annotation.XmlType;
23
24import org.apache.log4j.Logger;
25import org.hibernate.annotations.Index;
26import org.hibernate.annotations.Table;
27import org.hibernate.envers.Audited;
28
29import eu.etaxonomy.cdm.model.location.Point;
30import eu.etaxonomy.cdm.model.location.WaterbodyOrCountry;
31import eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity;
32import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
33import eu.etaxonomy.cdm.strategy.match.IMatchable;
34import eu.etaxonomy.cdm.strategy.match.Match;
35import eu.etaxonomy.cdm.strategy.match.MatchMode;
36import eu.etaxonomy.cdm.strategy.merge.IMergable;
37import eu.etaxonomy.cdm.strategy.merge.Merge;
38import eu.etaxonomy.cdm.strategy.merge.MergeMode;
39
40/**
41 * The upmost (abstract) class for agents such as persons, teams or institutions.
42 * An agent is a conscious entity which can make decisions, act and create
43 * according to its own knowledge and goals and which may be approached.
44 * Agents can be authors for nomenclatural or bibliographical references as well
45 * as creators of pictures or field collectors or administrators of collections.
46 *
47 * @author m.doering
48 * @version 1.0
49 * @created 08-Nov-2007 13:06:57
50 */
51@XmlAccessorType(XmlAccessType.FIELD)
52@XmlType(name = "AgentBase", propOrder = {
53                "contact"
54})
55@Entity
56@Audited
57@Table(appliesTo="AgentBase", indexes = { @Index(name = "agentTitleCacheIndex", columnNames = { "titleCache" }) })
58public abstract class AgentBase<S extends IIdentifiableEntityCacheStrategy> extends IdentifiableMediaEntity<S> implements IMergable, IMatchable, Cloneable{
59        private static final long serialVersionUID = 7732768617469448829L;
60        @SuppressWarnings("unused")
61        private static final Logger logger = Logger.getLogger(AgentBase.class);
62       
63        @XmlElement(name = "Contact")
64    @Embedded
65    @Merge(MergeMode.MERGE)
66    @Match(MatchMode.IGNORE)
67    @NotNull
68    private Contact contact;
69       
70        /**
71         * Returns the {@link Contact contact} of <i>this</i> person.
72         * The contact contains several ways to approach <i>this</i> person.
73         *
74         * @see         Contact
75         */
76        public Contact getContact(){
77                if(contact == null) {
78                        this.contact = new Contact();
79                }
80                return this.contact;
81        }
82        /**
83         * @see  #getContact()
84         */
85        public void setContact(Contact contact){
86                this.contact = contact;
87        }
88       
89
90        /**
91         * Returns the existing contact, or if it does not exists a new contact.
92         * If <code>create</code> is true the new contact will be set as this agent's
93         * contact.
94         * @param create
95         * @return
96         */
97        @Transient
98        private Contact getNewOrExistingContact(boolean create){
99                if (contact != null){
100                        return contact;
101                }else{
102                        Contact newContact = Contact.NewInstance();
103                        if (create){
104                                contact = newContact;
105                        }
106                        return contact;
107                }
108        }
109       
110       
111        /**
112         * Adds a new address to this agent
113         * @param street
114         * @param postcode
115         * @param locality
116         * @param country
117         * @param pobox
118         * @param region
119         * @param location
120         * @see eu.etaxonomy.cdm.model.agent.Contact#addAddress(java.lang.String, java.lang.String, java.lang.String, eu.etaxonomy.cdm.model.location.WaterbodyOrCountry, java.lang.String, java.lang.String, eu.etaxonomy.cdm.model.location.Point)
121         */
122        public void addAddress(String street, String postcode, String locality,
123                        WaterbodyOrCountry country, String pobox, String region,
124                        Point location) {
125                getNewOrExistingContact(true).addAddress(street, postcode, locality, country, pobox, region,
126                                location);
127        }
128        /**
129         * @param address
130         * @see eu.etaxonomy.cdm.model.agent.Contact#addAddress(eu.etaxonomy.cdm.model.agent.Address)
131         */
132        public void addAddress(Address address) {
133                getNewOrExistingContact(true).addAddress(address);
134        }
135        /**
136         * @param emailAddress
137         * @see eu.etaxonomy.cdm.model.agent.Contact#addEmailAddress(java.lang.String)
138         */
139        public void addEmailAddress(String emailAddress) {
140                getNewOrExistingContact(true).addEmailAddress(emailAddress);
141        }
142        /**
143         * @param faxNumber
144         * @see eu.etaxonomy.cdm.model.agent.Contact#addFaxNumber(java.lang.String)
145         */
146        public void addFaxNumber(String faxNumber) {
147                getNewOrExistingContact(true).addFaxNumber(faxNumber);
148        }
149        /**
150         * @param phoneNumber
151         * @see eu.etaxonomy.cdm.model.agent.Contact#addPhoneNumber(java.lang.String)
152         */
153        public void addPhoneNumber(String phoneNumber) {
154                getNewOrExistingContact(true).addPhoneNumber(phoneNumber);
155        }
156        /**
157         * @param url
158         * @see eu.etaxonomy.cdm.model.agent.Contact#addUrl(java.lang.String)
159         */
160        public void addUrl(String url) {
161                getNewOrExistingContact(true).addUrl(url);
162        }
163        /**
164         * @return
165         * @see eu.etaxonomy.cdm.model.agent.Contact#getAddresses()
166         */
167        @Transient
168        public Set<Address> getAddresses() {
169                return getNewOrExistingContact(false).getAddresses();
170        }
171        /**
172         * @return
173         * @see eu.etaxonomy.cdm.model.agent.Contact#getEmailAddresses()
174         */
175        @Transient
176        public List<String> getEmailAddresses() {
177                return getNewOrExistingContact(false).getEmailAddresses();
178        }
179        /**
180         * @return
181         * @see eu.etaxonomy.cdm.model.agent.Contact#getFaxNumbers()
182         */
183        @Transient
184        public List<String> getFaxNumbers() {
185                return getNewOrExistingContact(false).getFaxNumbers();
186        }
187        /**
188         * @return
189         * @see eu.etaxonomy.cdm.model.agent.Contact#getPhoneNumbers()
190         */
191        @Transient
192        public List<String> getPhoneNumbers() {
193                return getNewOrExistingContact(false).getPhoneNumbers();
194        }
195        /**
196         * @return
197         * @see eu.etaxonomy.cdm.model.agent.Contact#getUrls()
198         */
199        @Transient
200        public List<String> getUrls() {
201                return getNewOrExistingContact(false).getUrls();
202        }
203        /**
204         * @param address
205         * @see eu.etaxonomy.cdm.model.agent.Contact#removeAddress(eu.etaxonomy.cdm.model.agent.Address)
206         */
207        public void removeAddress(Address address) {
208                getNewOrExistingContact(false).removeAddress(address);
209        }
210        /**
211         * @param emailAddress
212         * @see eu.etaxonomy.cdm.model.agent.Contact#removeEmailAddress(java.lang.String)
213         */
214        public void removeEmailAddress(String emailAddress) {
215                getNewOrExistingContact(false).removeEmailAddress(emailAddress);
216        }
217        /**
218         * @param faxNumber
219         * @see eu.etaxonomy.cdm.model.agent.Contact#removeFaxNumber(java.lang.String)
220         */
221        public void removeFaxNumber(String faxNumber) {
222                getNewOrExistingContact(false).removeFaxNumber(faxNumber);
223        }
224        /**
225         * @param phoneNumber
226         * @see eu.etaxonomy.cdm.model.agent.Contact#removePhoneNumber(java.lang.String)
227         */
228        public void removePhoneNumber(String phoneNumber) {
229                getNewOrExistingContact(false).removePhoneNumber(phoneNumber);
230        }
231        /**
232         * @param url
233         * @see eu.etaxonomy.cdm.model.agent.Contact#removeUrl(java.lang.String)
234         */
235        public void removeUrl(String url) {
236                getNewOrExistingContact(false).removeUrl(url);
237        }
238       
239       
240       
241       
242}
Note: See TracBrowser for help on using the browser.