3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
11 package eu
.etaxonomy
.cdm
.persistence
.hibernate
;
13 import java
.util
.HashSet
;
16 import org
.apache
.log4j
.Logger
;
17 import org
.hibernate
.event
.PostDeleteEvent
;
18 import org
.hibernate
.event
.PostDeleteEventListener
;
19 import org
.hibernate
.event
.PostInsertEvent
;
20 import org
.hibernate
.event
.PostInsertEventListener
;
21 import org
.hibernate
.event
.PostLoadEvent
;
22 import org
.hibernate
.event
.PostLoadEventListener
;
23 import org
.hibernate
.event
.PostUpdateEvent
;
24 import org
.hibernate
.event
.PostUpdateEventListener
;
26 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
29 * ICdmPostCrudObserver implementors may register for this listener and their updatedAfterEvent will
30 * be called after any CRUD (Create, Retrieve, Update, Delete).
32 * Only events whose entities are of type CdmBase will be propagated
38 public class CdmPostCrudObservableListener
implements PostDeleteEventListener
, PostInsertEventListener
, PostLoadEventListener
, PostUpdateEventListener
{
40 private static final long serialVersionUID
= -8764348096490526927L;
42 private static final Logger logger
= Logger
43 .getLogger(CdmPostCrudObservableListener
.class);
48 private Set
<ICdmPostCrudObserver
> observers
= new HashSet
<ICdmPostCrudObserver
>();
53 private static CdmPostCrudObservableListener instance
;
56 * @return the singleton ConversationMediator
58 public static CdmPostCrudObservableListener
getDefault(){
60 instance
= new CdmPostCrudObservableListener();
66 * Register for updates
70 public static void register(ICdmPostCrudObserver observer
){
71 getDefault().observers
.add(observer
);
75 * Propagates the event to all registered objects.
79 private void mediate(CdmCrudEvent event
){
80 for( ICdmPostCrudObserver observer
: observers
){
81 // update the ICdmPostCrudObserver implementor
82 observer
.update(event
);
87 * @see org.hibernate.event.PostInsertEventListener#onPostInsert(org.hibernate.event.PostInsertEvent)
89 public void onPostInsert(PostInsertEvent event
) {
90 logger
.trace("post insert fired");
91 if(event
.getEntity() instanceof CdmBase
){
92 getDefault().mediate(CdmCrudEvent
.NewInstance(event
));
97 * @see org.hibernate.event.PostLoadEventListener#onPostLoad(org.hibernate.event.PostLoadEvent)
99 public void onPostLoad(PostLoadEvent event
) {
100 logger
.trace("post load fired");
101 if(event
.getEntity() instanceof CdmBase
){
102 getDefault().mediate(CdmCrudEvent
.NewInstance(event
));
107 * @see org.hibernate.event.PostUpdateEventListener#onPostUpdate(org.hibernate.event.PostUpdateEvent)
109 public void onPostUpdate(PostUpdateEvent event
) {
110 logger
.trace("post update fired");
111 if(event
.getEntity() instanceof CdmBase
){
112 getDefault().mediate(CdmCrudEvent
.NewInstance(event
));
117 * @see org.hibernate.event.PostDeleteEventListener#onPostDelete(org.hibernate.event.PostDeleteEvent)
119 public void onPostDelete(PostDeleteEvent event
) {
120 logger
.trace("post delete fired");
121 if(event
.getEntity() instanceof CdmBase
){
122 getDefault().mediate(CdmCrudEvent
.NewInstance(event
));