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 CdmCrudEvent
extends AbstractEvent
{
37 private static final long serialVersionUID
= 9113025682352080372L;
39 private static final Logger logger
= Logger
40 .getLogger(CdmCrudEvent
.class);
43 * The event types currently implemented
49 public enum EventType
{
50 INSERT
, LOAD
, UPDATE
, DELETE
53 private CdmBase entity
;
54 private EntityPersister persister
;
55 private Object
[] state
;
57 private Object
[] oldState
;
58 private Serializable id
;
59 private EventType eventType
;
69 EntityPersister persister
,
77 this.oldState
= oldState
;
78 this.persister
= persister
;
79 this.eventType
= eventType
;
82 public CdmBase
getEntity() {
85 public Serializable
getId() {
88 public EntityPersister
getPersister() {
91 public Object
[] getState() {
94 public Object
[] getOldState() {
101 public EventType
getEventType(){
105 public boolean isInsert(){
106 return eventType
== EventType
.INSERT
;
109 public boolean isLoad(){
110 return eventType
== EventType
.LOAD
;
113 public boolean isUpdate(){
114 return eventType
== EventType
.UPDATE
;
117 public boolean isDelete(){
118 return eventType
== EventType
.DELETE
;
125 public static CdmCrudEvent
NewInstance(AbstractEvent event
) {
127 CdmCrudEvent mediationEvent
= null;
129 if(event
instanceof PostInsertEvent
){
130 PostInsertEvent postEvent
= (PostInsertEvent
) event
;
131 mediationEvent
= new CdmCrudEvent(
132 (CdmBase
)postEvent
.getEntity(),
134 postEvent
.getState(),
136 postEvent
.getPersister(),
137 postEvent
.getSession(),
141 if(event
instanceof PostLoadEvent
){
142 PostLoadEvent updateEvent
= (PostLoadEvent
) event
;
143 mediationEvent
= new CdmCrudEvent(
144 (CdmBase
)updateEvent
.getEntity(),
148 updateEvent
.getPersister(),
149 updateEvent
.getSession(),
153 if(event
instanceof PostUpdateEvent
){
154 PostUpdateEvent updateEvent
= (PostUpdateEvent
) event
;
155 mediationEvent
= new CdmCrudEvent(
156 (CdmBase
)updateEvent
.getEntity(),
158 updateEvent
.getState(),
159 updateEvent
.getOldState(),
160 updateEvent
.getPersister(),
161 updateEvent
.getSession(),
165 if(event
instanceof PostDeleteEvent
){
166 PostDeleteEvent deleteEvent
= (PostDeleteEvent
) event
;
167 mediationEvent
= new CdmCrudEvent(
168 (CdmBase
)deleteEvent
.getEntity(),
170 deleteEvent
.getDeletedState(),
172 deleteEvent
.getPersister(),
173 deleteEvent
.getSession(),
177 }catch(ClassCastException e
){
178 // we are only interested in CdmBase entities, we have the try/catch block in case another entity slips through
179 logger
.warn("tried to instantiate event for non CdmBase entity");
182 return mediationEvent
;