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
;
14 import org
.apache
.log4j
.Logger
;
15 import org
.hibernate
.event
.AbstractEvent
;
16 import org
.hibernate
.event
.EventSource
;
17 import org
.hibernate
.event
.PostDeleteEvent
;
18 import org
.hibernate
.event
.PostInsertEvent
;
19 import org
.hibernate
.event
.PostLoadEvent
;
20 import org
.hibernate
.event
.PostUpdateEvent
;
21 import org
.hibernate
.persister
.entity
.EntityPersister
;
23 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
27 * The CrudEvent unifies all CRUD events into one interface.
28 * 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
= Logger
.getLogger(CdmDataChangeEvent
.class);
40 * The event types currently implemented
46 public enum EventType
{
47 INSERT
, LOAD
, UPDATE
, DELETE
50 private CdmBase entity
;
51 private EntityPersister persister
;
52 private Object
[] state
;
54 private Object
[] oldState
;
55 private Serializable id
;
56 private EventType eventType
;
61 private CdmDataChangeEvent(
66 EntityPersister persister
,
74 this.oldState
= oldState
;
75 this.persister
= persister
;
76 this.eventType
= eventType
;
79 public CdmBase
getEntity() {
82 public Serializable
getId() {
85 public EntityPersister
getPersister() {
88 public Object
[] getState() {
91 public Object
[] getOldState() {
98 public EventType
getEventType(){
102 public boolean isInsert(){
103 return eventType
== EventType
.INSERT
;
106 public boolean isLoad(){
107 return eventType
== EventType
.LOAD
;
110 public boolean isUpdate(){
111 return eventType
== EventType
.UPDATE
;
114 public boolean isDelete(){
115 return eventType
== EventType
.DELETE
;
122 public static CdmDataChangeEvent
NewInstance(AbstractEvent event
) {
124 CdmDataChangeEvent mediationEvent
= null;
126 if(event
instanceof PostInsertEvent
){
127 PostInsertEvent postEvent
= (PostInsertEvent
) event
;
128 mediationEvent
= new CdmDataChangeEvent(
129 (CdmBase
)postEvent
.getEntity(),
131 postEvent
.getState(),
133 postEvent
.getPersister(),
134 postEvent
.getSession(),
138 if(event
instanceof PostLoadEvent
){
139 PostLoadEvent updateEvent
= (PostLoadEvent
) event
;
140 mediationEvent
= new CdmDataChangeEvent(
141 (CdmBase
)updateEvent
.getEntity(),
145 updateEvent
.getPersister(),
146 updateEvent
.getSession(),
150 if(event
instanceof PostUpdateEvent
){
151 PostUpdateEvent updateEvent
= (PostUpdateEvent
) event
;
152 mediationEvent
= new CdmDataChangeEvent(
153 (CdmBase
)updateEvent
.getEntity(),
155 updateEvent
.getState(),
156 updateEvent
.getOldState(),
157 updateEvent
.getPersister(),
158 updateEvent
.getSession(),
162 if(event
instanceof PostDeleteEvent
){
163 PostDeleteEvent deleteEvent
= (PostDeleteEvent
) event
;
164 mediationEvent
= new CdmDataChangeEvent(
165 (CdmBase
)deleteEvent
.getEntity(),
167 deleteEvent
.getDeletedState(),
169 deleteEvent
.getPersister(),
170 deleteEvent
.getSession(),
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");
179 return mediationEvent
;