Revision 933e5ac3
Added by Cherian Mathew about 9 years ago
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/hibernate/CdmDataChangeEvent.java | ||
---|---|---|
1 | 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 |
*/ |
|
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 | 9 |
|
10 | 10 |
package eu.etaxonomy.cdm.persistence.hibernate; |
11 | 11 |
|
12 | 12 |
import java.io.Serializable; |
13 |
import java.util.Set; |
|
13 | 14 |
|
14 | 15 |
import org.apache.log4j.Logger; |
15 | 16 |
import org.hibernate.event.spi.AbstractEvent; |
... | ... | |
33 | 34 |
* @version 1.0 |
34 | 35 |
*/ |
35 | 36 |
public class CdmDataChangeEvent extends AbstractEvent{ |
36 |
private static final long serialVersionUID = 9113025682352080372L; |
|
37 |
private static final Logger logger = Logger.getLogger(CdmDataChangeEvent.class); |
|
38 |
|
|
39 |
/** |
|
40 |
* The event types currently implemented |
|
41 |
* |
|
42 |
* @author n.hoffmann |
|
43 |
* @created 25.03.2009 |
|
44 |
* @version 1.0 |
|
45 |
*/ |
|
46 |
public enum EventType { |
|
47 |
INSERT, LOAD, UPDATE, DELETE |
|
48 |
} |
|
49 |
|
|
50 |
private final CdmBase entity; |
|
51 |
private final EntityPersister persister; |
|
52 |
private final Object[] state; |
|
53 |
// for update only |
|
54 |
private Object[] oldState; |
|
55 |
private final Serializable id; |
|
56 |
protected final EventType eventType; |
|
57 |
|
|
58 |
/** |
|
59 |
* @param source |
|
60 |
*/ |
|
61 |
private CdmDataChangeEvent( |
|
62 |
CdmBase entity, |
|
63 |
Serializable id, |
|
64 |
Object[] state, |
|
65 |
Object[] oldState, |
|
66 |
EntityPersister persister, |
|
67 |
EventSource source, |
|
68 |
EventType eventType |
|
69 |
) { |
|
70 |
super(source); |
|
71 |
this.entity = entity; |
|
72 |
this.id = id; |
|
73 |
this.state = state; |
|
74 |
this.oldState = oldState; |
|
75 |
this.persister = persister; |
|
76 |
this.eventType = eventType; |
|
77 |
} |
|
78 |
|
|
79 |
public CdmBase getEntity() { |
|
80 |
return entity; |
|
81 |
} |
|
82 |
public Serializable getId() { |
|
83 |
return id; |
|
84 |
} |
|
85 |
public EntityPersister getPersister() { |
|
86 |
return persister; |
|
87 |
} |
|
88 |
public Object[] getState() { |
|
89 |
return state; |
|
90 |
} |
|
91 |
public Object[] getOldState() { |
|
92 |
if(oldState == null){ |
|
93 |
oldState = state; |
|
94 |
} |
|
95 |
return oldState; |
|
96 |
} |
|
97 |
|
|
98 |
public EventType getEventType(){ |
|
99 |
return eventType; |
|
100 |
} |
|
101 |
|
|
102 |
public boolean isInsert(){ |
|
103 |
return eventType == EventType.INSERT; |
|
104 |
} |
|
105 |
|
|
106 |
public boolean isLoad(){ |
|
107 |
return eventType == EventType.LOAD; |
|
108 |
} |
|
109 |
|
|
110 |
public boolean isUpdate(){ |
|
111 |
return eventType == EventType.UPDATE; |
|
112 |
} |
|
113 |
|
|
114 |
public boolean isDelete(){ |
|
115 |
return eventType == EventType.DELETE; |
|
116 |
} |
|
117 |
|
|
118 |
/** |
|
119 |
* @param event |
|
120 |
* @return |
|
121 |
*/ |
|
122 |
public static CdmDataChangeEvent NewInstance(AbstractEvent event) { |
|
123 |
|
|
124 |
CdmDataChangeEvent mediationEvent = null; |
|
125 |
try{ |
|
126 |
if(event instanceof PostInsertEvent){ |
|
127 |
PostInsertEvent postEvent = (PostInsertEvent) event; |
|
128 |
mediationEvent = new CdmDataChangeEvent( |
|
129 |
(CdmBase)postEvent.getEntity(), |
|
130 |
postEvent.getId(), |
|
131 |
postEvent.getState(), |
|
132 |
null, |
|
133 |
postEvent.getPersister(), |
|
134 |
postEvent.getSession(), |
|
135 |
EventType.INSERT |
|
136 |
); |
|
137 |
} |
|
138 |
if(event instanceof PostLoadEvent){ |
|
139 |
PostLoadEvent updateEvent = (PostLoadEvent) event; |
|
140 |
mediationEvent = new CdmDataChangeEvent( |
|
141 |
(CdmBase)updateEvent.getEntity(), |
|
142 |
updateEvent.getId(), |
|
143 |
null, |
|
144 |
null, |
|
145 |
updateEvent.getPersister(), |
|
146 |
updateEvent.getSession(), |
|
147 |
EventType.LOAD |
|
148 |
); |
|
149 |
} |
|
150 |
if(event instanceof PostUpdateEvent){ |
|
151 |
PostUpdateEvent updateEvent = (PostUpdateEvent) event; |
|
152 |
mediationEvent = new CdmDataChangeEvent( |
|
153 |
(CdmBase)updateEvent.getEntity(), |
|
154 |
updateEvent.getId(), |
|
155 |
updateEvent.getState(), |
|
156 |
updateEvent.getOldState(), |
|
157 |
updateEvent.getPersister(), |
|
158 |
updateEvent.getSession(), |
|
159 |
EventType.UPDATE |
|
160 |
); |
|
161 |
} |
|
162 |
if(event instanceof PostDeleteEvent){ |
|
163 |
PostDeleteEvent deleteEvent = (PostDeleteEvent) event; |
|
164 |
mediationEvent = new CdmDataChangeEvent( |
|
165 |
(CdmBase)deleteEvent.getEntity(), |
|
166 |
deleteEvent.getId(), |
|
167 |
deleteEvent.getDeletedState(), |
|
168 |
null, |
|
169 |
deleteEvent.getPersister(), |
|
170 |
deleteEvent.getSession(), |
|
171 |
EventType.DELETE |
|
172 |
); |
|
173 |
} |
|
174 |
}catch(ClassCastException e){ |
|
175 |
// we are only interested in CdmBase entities, we have the try/catch block in case another entity slips through |
|
176 |
logger.warn("tried to instantiate event for non CdmBase entity"); |
|
177 |
} |
|
178 |
|
|
179 |
return mediationEvent; |
|
180 |
} |
|
181 |
|
|
182 |
public static CdmDataChangeEvent NewInstance(CdmBase entity, EventType eventType) { |
|
183 |
return new CdmDataChangeEvent(entity, |
|
184 |
null, |
|
185 |
null, |
|
186 |
null, |
|
187 |
null, |
|
188 |
null, |
|
189 |
eventType); |
|
190 |
} |
|
37 |
private static final long serialVersionUID = 9113025682352080372L; |
|
38 |
private static final Logger logger = Logger.getLogger(CdmDataChangeEvent.class); |
|
39 |
|
|
40 |
/** |
|
41 |
* The event types currently implemented |
|
42 |
* |
|
43 |
* @author n.hoffmann |
|
44 |
* @created 25.03.2009 |
|
45 |
* @version 1.0 |
|
46 |
*/ |
|
47 |
public enum EventType { |
|
48 |
INSERT, LOAD, UPDATE, DELETE |
|
49 |
} |
|
50 |
|
|
51 |
private final CdmBase entity; |
|
52 |
private final EntityPersister persister; |
|
53 |
private final Set<CdmBase> affectedObjects; |
|
54 |
|
|
55 |
|
|
56 |
private final Object[] state; |
|
57 |
// for update only |
|
58 |
private Object[] oldState; |
|
59 |
private final Serializable id; |
|
60 |
protected final EventType eventType; |
|
61 |
|
|
62 |
/** |
|
63 |
* @param source |
|
64 |
*/ |
|
65 |
private CdmDataChangeEvent( |
|
66 |
CdmBase entity, |
|
67 |
Serializable id, |
|
68 |
Object[] state, |
|
69 |
Object[] oldState, |
|
70 |
EntityPersister persister, |
|
71 |
EventSource source, |
|
72 |
EventType eventType |
|
73 |
) { |
|
74 |
super(source); |
|
75 |
this.entity = entity; |
|
76 |
this.id = id; |
|
77 |
this.state = state; |
|
78 |
this.oldState = oldState; |
|
79 |
this.persister = persister; |
|
80 |
this.eventType = eventType; |
|
81 |
this.affectedObjects = null; |
|
82 |
} |
|
83 |
/** |
|
84 |
* @param source |
|
85 |
*/ |
|
86 |
private CdmDataChangeEvent( |
|
87 |
CdmBase entity, |
|
88 |
Set<CdmBase> affectedObjects, |
|
89 |
EventType eventType |
|
90 |
) { |
|
91 |
super(null); |
|
92 |
this.entity = entity; |
|
93 |
this.persister = null; |
|
94 |
this.affectedObjects = affectedObjects; |
|
95 |
this.state = null; |
|
96 |
this.oldState = null; |
|
97 |
this.id = null; |
|
98 |
this.eventType = eventType; |
|
99 |
} |
|
100 |
|
|
101 |
public CdmBase getEntity() { |
|
102 |
return entity; |
|
103 |
} |
|
104 |
public Serializable getId() { |
|
105 |
return id; |
|
106 |
} |
|
107 |
public EntityPersister getPersister() { |
|
108 |
return persister; |
|
109 |
} |
|
110 |
public Object[] getState() { |
|
111 |
return state; |
|
112 |
} |
|
113 |
public Object[] getOldState() { |
|
114 |
if(oldState == null){ |
|
115 |
oldState = state; |
|
116 |
} |
|
117 |
return oldState; |
|
118 |
} |
|
119 |
|
|
120 |
public Set<CdmBase> getAffectedObjects() { |
|
121 |
return affectedObjects; |
|
122 |
} |
|
123 |
|
|
124 |
public EventType getEventType(){ |
|
125 |
return eventType; |
|
126 |
} |
|
127 |
|
|
128 |
public boolean isInsert(){ |
|
129 |
return eventType == EventType.INSERT; |
|
130 |
} |
|
131 |
|
|
132 |
public boolean isLoad(){ |
|
133 |
return eventType == EventType.LOAD; |
|
134 |
} |
|
135 |
|
|
136 |
public boolean isUpdate(){ |
|
137 |
return eventType == EventType.UPDATE; |
|
138 |
} |
|
139 |
|
|
140 |
public boolean isDelete(){ |
|
141 |
return eventType == EventType.DELETE; |
|
142 |
} |
|
143 |
|
|
144 |
/** |
|
145 |
* @param event |
|
146 |
* @return |
|
147 |
*/ |
|
148 |
public static CdmDataChangeEvent NewInstance(AbstractEvent event) { |
|
149 |
|
|
150 |
CdmDataChangeEvent mediationEvent = null; |
|
151 |
try{ |
|
152 |
if(event instanceof PostInsertEvent){ |
|
153 |
PostInsertEvent postEvent = (PostInsertEvent) event; |
|
154 |
mediationEvent = new CdmDataChangeEvent( |
|
155 |
(CdmBase)postEvent.getEntity(), |
|
156 |
postEvent.getId(), |
|
157 |
postEvent.getState(), |
|
158 |
null, |
|
159 |
postEvent.getPersister(), |
|
160 |
postEvent.getSession(), |
|
161 |
EventType.INSERT |
|
162 |
); |
|
163 |
} |
|
164 |
if(event instanceof PostLoadEvent){ |
|
165 |
PostLoadEvent updateEvent = (PostLoadEvent) event; |
|
166 |
mediationEvent = new CdmDataChangeEvent( |
|
167 |
(CdmBase)updateEvent.getEntity(), |
|
168 |
updateEvent.getId(), |
|
169 |
null, |
|
170 |
null, |
|
171 |
updateEvent.getPersister(), |
|
172 |
updateEvent.getSession(), |
|
173 |
EventType.LOAD |
|
174 |
); |
|
175 |
} |
|
176 |
if(event instanceof PostUpdateEvent){ |
|
177 |
PostUpdateEvent updateEvent = (PostUpdateEvent) event; |
|
178 |
mediationEvent = new CdmDataChangeEvent( |
|
179 |
(CdmBase)updateEvent.getEntity(), |
|
180 |
updateEvent.getId(), |
|
181 |
updateEvent.getState(), |
|
182 |
updateEvent.getOldState(), |
|
183 |
updateEvent.getPersister(), |
|
184 |
updateEvent.getSession(), |
|
185 |
EventType.UPDATE |
|
186 |
); |
|
187 |
} |
|
188 |
if(event instanceof PostDeleteEvent){ |
|
189 |
PostDeleteEvent deleteEvent = (PostDeleteEvent) event; |
|
190 |
mediationEvent = new CdmDataChangeEvent( |
|
191 |
(CdmBase)deleteEvent.getEntity(), |
|
192 |
deleteEvent.getId(), |
|
193 |
deleteEvent.getDeletedState(), |
|
194 |
null, |
|
195 |
deleteEvent.getPersister(), |
|
196 |
deleteEvent.getSession(), |
|
197 |
EventType.DELETE |
|
198 |
); |
|
199 |
} |
|
200 |
}catch(ClassCastException e){ |
|
201 |
// we are only interested in CdmBase entities, we have the try/catch block in case another entity slips through |
|
202 |
logger.warn("tried to instantiate event for non CdmBase entity"); |
|
203 |
} |
|
204 |
|
|
205 |
return mediationEvent; |
|
206 |
} |
|
207 |
|
|
208 |
public static CdmDataChangeEvent NewInstance(CdmBase entity, Set<CdmBase> affectedObjects, EventType eventType) { |
|
209 |
|
|
210 |
return new CdmDataChangeEvent(entity, affectedObjects, eventType); |
|
211 |
} |
|
191 | 212 |
|
192 | 213 |
} |
Also available in: Unified diff
ICdmCacher, ICdmUuidCacher, CdmCacher, CdmTermCacher : refactored and added load method
Language, NameRelationshipType, Rank : now uses cacher only if termap is null or empty and only when class matches the specific term type
MockCdmCacher: not required anymore
DefaultTermInitializer : removed acall to mock cacher
MatchStrategyConfigurator : moved from editor to cdmlib
CdmDataChangeEvent : added constructor
CommonServiceImpl, ICommonService : added call to findMatchingStrategy with enum instead of object
DescriptionServiceImpl, IDescriptionService, PolytomousKeyNodeServiceImpl, IPolytomousKeyNodeService, TaxonNodeServiceImpl, ITaxonNodeService, TaxonServiceImpl: added uuid methods