2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.cdm
.persistence
.hibernate
;
12 import java
.io
.Serializable
;
15 import org
.apache
.logging
.log4j
.LogManager
;
16 import org
.apache
.logging
.log4j
.Logger
;
17 import org
.hibernate
.event
.spi
.AbstractEvent
;
18 import org
.hibernate
.event
.spi
.EventSource
;
19 import org
.hibernate
.event
.spi
.PostDeleteEvent
;
20 import org
.hibernate
.event
.spi
.PostInsertEvent
;
21 import org
.hibernate
.event
.spi
.PostLoadEvent
;
22 import org
.hibernate
.event
.spi
.PostUpdateEvent
;
23 import org
.hibernate
.persister
.entity
.EntityPersister
;
25 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
28 * The CrudEvent unifies all CRUD events into one interface.
29 * Crud as in Create, Retrieve, Update, Delete. This event will only hold CdmBase objects.
35 public class CdmDataChangeEvent
extends AbstractEvent
{
36 private static final long serialVersionUID
= 9113025682352080372L;
37 private static final Logger logger
= LogManager
.getLogger();
40 * The event types currently implemented
46 public enum EventType
{
47 INSERT
, LOAD
, UPDATE
, DELETE
50 private final CdmBase entity
;
51 private final EntityPersister persister
;
52 private final Set
<CdmBase
> affectedObjects
;
55 private final Object
[] state
;
57 private Object
[] oldState
;
58 private final Serializable id
;
59 protected final EventType eventType
;
62 private CdmDataChangeEvent(
67 EntityPersister persister
,
75 this.oldState
= oldState
;
76 this.persister
= persister
;
77 this.eventType
= eventType
;
78 this.affectedObjects
= null;
83 private CdmDataChangeEvent(
85 Set
<CdmBase
> affectedObjects
,
90 this.persister
= null;
91 this.affectedObjects
= affectedObjects
;
95 this.eventType
= eventType
;
98 public CdmBase
getEntity() {
101 public Serializable
getId() {
104 public EntityPersister
getPersister() {
107 public Object
[] getState() {
110 public Object
[] getOldState() {
111 if(oldState
== null){
117 public Set
<CdmBase
> getAffectedObjects() {
118 return affectedObjects
;
121 public EventType
getEventType(){
125 public boolean isInsert(){
126 return eventType
== EventType
.INSERT
;
129 public boolean isLoad(){
130 return eventType
== EventType
.LOAD
;
133 public boolean isUpdate(){
134 return eventType
== EventType
.UPDATE
;
137 public boolean isDelete(){
138 return eventType
== EventType
.DELETE
;
145 public static CdmDataChangeEvent
NewInstance(AbstractEvent event
) {
147 CdmDataChangeEvent mediationEvent
= null;
149 if(event
instanceof PostInsertEvent
){
150 PostInsertEvent postEvent
= (PostInsertEvent
) event
;
151 mediationEvent
= new CdmDataChangeEvent(
152 (CdmBase
)postEvent
.getEntity(),
154 postEvent
.getState(),
156 postEvent
.getPersister(),
157 postEvent
.getSession(),
161 if(event
instanceof PostLoadEvent
){
162 PostLoadEvent updateEvent
= (PostLoadEvent
) event
;
163 mediationEvent
= new CdmDataChangeEvent(
164 (CdmBase
)updateEvent
.getEntity(),
168 updateEvent
.getPersister(),
169 updateEvent
.getSession(),
173 if(event
instanceof PostUpdateEvent
){
174 PostUpdateEvent updateEvent
= (PostUpdateEvent
) event
;
175 mediationEvent
= new CdmDataChangeEvent(
176 (CdmBase
)updateEvent
.getEntity(),
178 updateEvent
.getState(),
179 updateEvent
.getOldState(),
180 updateEvent
.getPersister(),
181 updateEvent
.getSession(),
185 if(event
instanceof PostDeleteEvent
){
186 PostDeleteEvent deleteEvent
= (PostDeleteEvent
) event
;
187 mediationEvent
= new CdmDataChangeEvent(
188 (CdmBase
)deleteEvent
.getEntity(),
190 deleteEvent
.getDeletedState(),
192 deleteEvent
.getPersister(),
193 deleteEvent
.getSession(),
197 }catch(ClassCastException e
){
198 // we are only interested in CdmBase entities, we have the try/catch block in case another entity slips through
199 logger
.warn("tried to instantiate event for non CdmBase entity");
202 return mediationEvent
;
205 public static CdmDataChangeEvent
NewInstance(CdmBase entity
, Set
<CdmBase
> affectedObjects
, EventType eventType
) {
207 return new CdmDataChangeEvent(entity
, affectedObjects
, eventType
);