cef83b0e382b3a376dabbe277f79b1e20c128388
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / hibernate / CdmPostCrudObservableListener.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
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.
9 */
10
11 package eu.etaxonomy.cdm.persistence.hibernate;
12
13 import java.util.HashSet;
14 import java.util.Set;
15
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;
25
26 import eu.etaxonomy.cdm.model.common.CdmBase;
27
28 /**
29 * ICdmPostCrudObserver implementors may register for this listener and their updatedAfterEvent will
30 * be called after any CRUD (Create, Retrieve, Update, Delete).
31 *
32 * Only events whose entities are of type CdmBase will be propagated
33 *
34 * @author n.hoffmann
35 * @created 24.03.2009
36 * @version 1.0
37 */
38 public class CdmPostCrudObservableListener implements PostDeleteEventListener, PostInsertEventListener, PostLoadEventListener, PostUpdateEventListener{
39
40 private static final long serialVersionUID = -8764348096490526927L;
41
42 private static final Logger logger = Logger
43 .getLogger(CdmPostCrudObservableListener.class);
44
45 /**
46 * Observing objects
47 */
48 private Set<ICdmPostCrudObserver> observers = new HashSet<ICdmPostCrudObserver>();
49
50 /**
51 * Singleton instance
52 */
53 private static CdmPostCrudObservableListener instance;
54
55 /**
56 * @return the singleton ConversationMediator
57 */
58 public static CdmPostCrudObservableListener getDefault(){
59 if(instance == null){
60 instance = new CdmPostCrudObservableListener();
61 }
62 return instance;
63 }
64
65 /**
66 * Register for updates
67 *
68 * @param observer
69 */
70 public static void register(ICdmPostCrudObserver observer){
71 getDefault().observers.add(observer);
72 }
73
74 /**
75 * Propagates the event to all registered objects.
76 *
77 * @param event
78 */
79 private void mediate(CdmCrudEvent event){
80 for( ICdmPostCrudObserver observer : observers){
81 // update the ICdmPostCrudObserver implementor
82 observer.update(event);
83 }
84 }
85
86 /* (non-Javadoc)
87 * @see org.hibernate.event.PostInsertEventListener#onPostInsert(org.hibernate.event.PostInsertEvent)
88 */
89 public void onPostInsert(PostInsertEvent event) {
90 logger.trace("post insert fired");
91 if(event.getEntity() instanceof CdmBase){
92 getDefault().mediate(CdmCrudEvent.NewInstance(event));
93 }
94 }
95
96 /* (non-Javadoc)
97 * @see org.hibernate.event.PostLoadEventListener#onPostLoad(org.hibernate.event.PostLoadEvent)
98 */
99 public void onPostLoad(PostLoadEvent event) {
100 logger.trace("post load fired");
101 if(event.getEntity() instanceof CdmBase){
102 getDefault().mediate(CdmCrudEvent.NewInstance(event));
103 }
104 }
105
106 /* (non-Javadoc)
107 * @see org.hibernate.event.PostUpdateEventListener#onPostUpdate(org.hibernate.event.PostUpdateEvent)
108 */
109 public void onPostUpdate(PostUpdateEvent event) {
110 logger.trace("post update fired");
111 if(event.getEntity() instanceof CdmBase){
112 getDefault().mediate(CdmCrudEvent.NewInstance(event));
113 }
114 }
115
116 /* (non-Javadoc)
117 * @see org.hibernate.event.PostDeleteEventListener#onPostDelete(org.hibernate.event.PostDeleteEvent)
118 */
119 public void onPostDelete(PostDeleteEvent event) {
120 logger.trace("post delete fired");
121 if(event.getEntity() instanceof CdmBase){
122 getDefault().mediate(CdmCrudEvent.NewInstance(event));
123 }
124 }
125
126 }