Changed DataChangeEvent architecture
authorn.hoffmann <n.hoffmann@localhost>
Thu, 9 Apr 2009 15:14:54 +0000 (15:14 +0000)
committern.hoffmann <n.hoffmann@localhost>
Thu, 9 Apr 2009 15:14:54 +0000 (15:14 +0000)
.gitattributes
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/common/IDefinedTermDao.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/DefinedTermDaoImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/hibernate/CdmDataChangeMap.java [new file with mode: 0644]
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/hibernate/CdmPostDataChangeObservableListener.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/hibernate/ICdmPostDataChangeObserver.java

index e73cbf59c3f3c1d6671bc8120a2d9c7f3f1db3bb..ee11b7a39b406ad466d4720078a45e31089e41c5 100644 (file)
@@ -1312,6 +1312,7 @@ cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/taxon/ITaxonDa
 cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/fetch/CdmFetch.java -text
 cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/hibernate/CacheStrategyGenerator.java -text
 cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/hibernate/CdmDataChangeEvent.java -text
+cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/hibernate/CdmDataChangeMap.java -text
 cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/hibernate/CdmHibernateInterceptor.java -text
 cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/hibernate/CdmPostDataChangeObservableListener.java -text
 cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/hibernate/ICdmPostDataChangeObserver.java -text
index 671126ea7d3dbe8a5b3da7845851b5074e96dd61..a838a55a9512745fbc13af5ff9d478d27b6cb510 100644 (file)
@@ -16,6 +16,8 @@ import java.util.Set;
 
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.description.AbsenceTerm;
+import eu.etaxonomy.cdm.model.description.PresenceTerm;
 import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
 import eu.etaxonomy.cdm.model.location.NamedAreaType;
index 2937f27b71230fbd752f65790744ac26a16a7d15..02000f11bca424a7b976131ddda928372f1ed1a4 100644 (file)
@@ -29,6 +29,8 @@ import org.springframework.stereotype.Repository;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.description.AbsenceTerm;
+import eu.etaxonomy.cdm.model.description.PresenceTerm;
 import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
 import eu.etaxonomy.cdm.model.location.NamedAreaType;
@@ -36,7 +38,6 @@ import eu.etaxonomy.cdm.model.location.WaterbodyOrCountry;
 import eu.etaxonomy.cdm.model.media.Media;
 import eu.etaxonomy.cdm.model.view.AuditEvent;
 import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;
-import eu.etaxonomy.cdm.persistence.dao.common.ITitledDao;
 import eu.etaxonomy.cdm.persistence.query.MatchMode;
 
 /**
diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/hibernate/CdmDataChangeMap.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/hibernate/CdmDataChangeMap.java
new file mode 100644 (file)
index 0000000..1c85df8
--- /dev/null
@@ -0,0 +1,157 @@
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy 
+* http://www.e-taxonomy.eu
+* 
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.cdm.persistence.hibernate;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.Vector;
+
+import org.apache.log4j.Logger;
+
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
+
+/**
+ * @author n.hoffman
+ * @created 09.04.2009
+ * @version 1.0
+ */
+public class CdmDataChangeMap  implements Map<EventType, Vector<CdmDataChangeEvent>>{
+       private static final Logger logger = Logger
+                       .getLogger(CdmDataChangeMap.class);
+       
+       private Map<EventType, Vector<CdmDataChangeEvent>> dataChangeMap;
+
+       public CdmDataChangeMap(){
+               dataChangeMap = new HashMap<EventType, Vector<CdmDataChangeEvent>>();
+       }
+       
+       /* (non-Javadoc)
+        * @see java.util.Map#clear()
+        */
+       public void clear() {
+               dataChangeMap.clear();
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Map#containsKey(java.lang.Object)
+        */
+       public boolean containsKey(Object key) {
+               return dataChangeMap.containsKey(key);
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Map#containsValue(java.lang.Object)
+        */
+       public boolean containsValue(Object value) {
+               return dataChangeMap.containsValue(value);
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Map#entrySet()
+        */
+       public Set entrySet() {
+               return dataChangeMap.entrySet();
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Map#get(java.lang.Object)
+        */
+       public Vector<CdmDataChangeEvent> get(Object key) {
+               return dataChangeMap.get(key);
+       }
+       
+       public Vector<CdmDataChangeEvent> getEvents(EventType type){
+               return dataChangeMap.get(type);
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Map#isEmpty()
+        */
+       public boolean isEmpty() {
+               return dataChangeMap.isEmpty();
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Map#keySet()
+        */
+       public Set keySet() {
+               return dataChangeMap.keySet();
+       }
+       
+       public void add(EventType type, CdmDataChangeEvent event){
+               Vector<CdmDataChangeEvent> vector = getEvents(type);
+               
+               // lazy initialising the vectors
+               if(vector == null){
+                       vector = new Vector<CdmDataChangeEvent>();
+               }
+               
+               vector.add(event);
+               
+               dataChangeMap.put(type, vector);
+       }
+
+
+       /* (non-Javadoc)
+        * @see java.util.Map#remove(java.lang.Object)
+        */
+       public Vector<CdmDataChangeEvent> remove(Object key) {
+               return dataChangeMap.remove(key);
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Map#size()
+        */
+       public int size() {
+               return dataChangeMap.size();
+       }
+       
+       public int sizeByEventType(EventType type){
+               Vector<CdmDataChangeEvent> vector = getEvents(type);
+               return vector == null ? 0 : vector.size();
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Map#values()
+        */
+       public Collection<Vector<CdmDataChangeEvent>> values() {
+               return dataChangeMap.values();
+       }
+       
+       public Collection<CdmDataChangeEvent> getAllEvents(){
+               Collection<CdmDataChangeEvent> values = new HashSet<CdmDataChangeEvent>();
+               for (EventType type : EventType.values()){
+                       for(CdmDataChangeEvent event : dataChangeMap.get(type)){
+                               values.add(event);
+                       }
+               }
+               return values;
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Map#put(java.lang.Object, java.lang.Object)
+        */
+       public Vector<CdmDataChangeEvent> put(EventType key,
+                       Vector<CdmDataChangeEvent> value) {
+               return dataChangeMap.put(key, value);
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Map#putAll(java.util.Map)
+        */
+       public void putAll(
+                       Map<? extends EventType, ? extends Vector<CdmDataChangeEvent>> t) {
+               dataChangeMap.putAll(t);
+       }
+}
index 4c1aaa8c9a12636ac5ba5b3f5b78e09f97d41fd5..3d674f8406843233fa0d6ea8d9a7d015179a1f47 100644 (file)
@@ -10,8 +10,6 @@
 
 package eu.etaxonomy.cdm.persistence.hibernate;
 
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Vector;
 
 import org.apache.log4j.Logger;
@@ -68,7 +66,7 @@ public class CdmPostDataChangeObservableListener
        /**
         * DataChangeEvents get stored in this list for delayed propagation
         */
-       private List<CdmDataChangeEvent> changeEvents;
+       private CdmDataChangeMap changeEvents;
        
        /**
         * Observing objects 
@@ -122,12 +120,12 @@ public class CdmPostDataChangeObservableListener
                for( ICdmPostDataChangeObserver observer : observers){
                        if(delayed){
                                // store event for delayed propagation
-                               changeEvents.add(event);
+                               changeEvents.add(event.getEventType(), event);
                        }else{
                                // propagate event directly
-                               List<CdmDataChangeEvent> tmpList = new ArrayList<CdmDataChangeEvent>();
-                               tmpList.add(event);
-                               observer.update(tmpList);
+                               CdmDataChangeMap tmpMap = new CdmDataChangeMap();
+                               tmpMap.add(event.getEventType(), event);
+                               observer.update(tmpMap);
                        }
                }
        }
@@ -180,7 +178,7 @@ public class CdmPostDataChangeObservableListener
         */
        public void setDelayed(boolean delayed) {
                if(delayed && changeEvents == null){
-                       changeEvents = new ArrayList<CdmDataChangeEvent>();
+                       changeEvents = new CdmDataChangeMap();
                }
                this.delayed = delayed;
        }
index 0f6331f304e981da065aa5f269d8edcdb34c780b..9541d3e8c3b79748568f37dab5f5db108c61ef95 100644 (file)
@@ -27,5 +27,5 @@ public interface ICdmPostDataChangeObserver {
        /**
         * gets called when the observable objects notifies its observers
         */
-       public void update(List<CdmDataChangeEvent> changeEvents);
+       public void update(CdmDataChangeMap changeEvents);
 }