0a6bb1560f31e3948221eaa81497e1f657d73e35
[cdmlib.git] / cdmlibrary / src / main / java / eu / etaxonomy / cdm / model / common / CdmBase.java
1 package eu.etaxonomy.cdm.model.common;
2
3 import java.beans.PropertyChangeListener;
4 import java.beans.PropertyChangeSupport;
5 import java.beans.PropertyChangeEvent;
6 import java.io.Serializable;
7 import java.util.Calendar;
8 import java.util.UUID;
9
10 import javax.persistence.Basic;
11 import javax.persistence.Entity;
12 import javax.persistence.FetchType;
13 import javax.persistence.GeneratedValue;
14 import javax.persistence.Id;
15 import javax.persistence.Inheritance;
16 import javax.persistence.InheritanceType;
17 import javax.persistence.ManyToOne;
18 import javax.persistence.MappedSuperclass;
19 import javax.persistence.Table;
20 import javax.persistence.Temporal;
21 import javax.persistence.TemporalType;
22 import javax.persistence.Transient;
23
24 import org.hibernate.annotations.Cascade;
25 import org.hibernate.annotations.CascadeType;
26
27 import eu.etaxonomy.cdm.model.agent.Person;
28
29
30 @MappedSuperclass
31 public abstract class CdmBase implements Serializable{
32 private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
33 private int id;
34 private UUID uuid;
35 private Calendar created;
36 private Person createdBy;
37
38 public CdmBase() {
39 this.uuid = UUID.randomUUID();
40 this.created = Calendar.getInstance();
41 }
42
43
44 public void addPropertyChangeListener(PropertyChangeListener listener) {
45 propertyChangeSupport.addPropertyChangeListener(listener);
46 }
47
48 public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
49 propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
50 }
51
52 public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
53 propertyChangeSupport.removePropertyChangeListener(propertyName, listener);
54 }
55
56 public void removePropertyChangeListener(PropertyChangeListener listener) {
57 propertyChangeSupport.removePropertyChangeListener(listener);
58 }
59
60 @Transient
61 public void hasListeners(String propertyName) {
62 propertyChangeSupport.hasListeners(propertyName);
63 }
64
65 public void firePropertyChange(String property, String oldval, String newval) {
66 propertyChangeSupport.firePropertyChange(property, oldval, newval);
67 }
68 public void firePropertyChange(String property, int oldval, int newval) {
69 propertyChangeSupport.firePropertyChange(property, oldval, newval);
70 }
71 public void firePropertyChange(String property, float oldval, float newval) {
72 propertyChangeSupport.firePropertyChange(property, oldval, newval);
73 }
74 public void firePropertyChange(String property, boolean oldval, boolean newval) {
75 propertyChangeSupport.firePropertyChange(property, oldval, newval);
76 }
77 public void firePropertyChange(String property, Object oldval, Object newval) {
78 propertyChangeSupport.firePropertyChange(property, oldval, newval);
79 }
80 public void firePropertyChange(PropertyChangeEvent evt) {
81 propertyChangeSupport.firePropertyChange(evt);
82 }
83
84 @Id
85 @GeneratedValue(generator = "system-increment")
86 public int getId() {
87 return this.id;
88 }
89 public void setId(int id) {
90 this.id = id;
91 }
92
93
94 public UUID getUuid() {
95 return this.uuid;
96 }
97 public void setUuid(UUID uuid) {
98 this.uuid = uuid;
99 }
100
101
102 @Temporal(TemporalType.TIMESTAMP)
103 @Basic(fetch = FetchType.LAZY)
104 public Calendar getCreated() {
105 return this.created;
106 }
107 public void setCreated(Calendar created) {
108 this.created = created;
109 }
110
111
112 @ManyToOne(fetch=FetchType.LAZY)
113 @Cascade( { CascadeType.SAVE_UPDATE })
114 public Person getCreatedBy() {
115 return this.createdBy;
116 }
117 public void setCreatedBy(Person createdBy) {
118 this.createdBy = createdBy;
119 }
120
121
122 @Override
123 // equals if UUID and created timestamp are the same!
124 public boolean equals(Object obj) {
125 if (CdmBase.class.isAssignableFrom(obj.getClass())){
126 CdmBase cdmObj = (CdmBase)obj;
127 if (cdmObj.getUuid().equals(this.getUuid()) && cdmObj.getCreated().equals(this.getCreated())){
128 return true;
129 }
130 }
131 return false;
132 }
133
134 @Override
135 public String toString() {
136 return this.getClass().getSimpleName()+"<"+this.getUuid()+">";
137 }
138
139 }