only log lazy initialisation exception while remove null from collection
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / hibernate / CdmDataChangeMap.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
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.
8 */
9
10 package eu.etaxonomy.cdm.persistence.hibernate;
11
12 import java.util.Collection;
13 import java.util.HashMap;
14 import java.util.HashSet;
15 import java.util.Map;
16 import java.util.Set;
17 import java.util.Vector;
18
19 import org.apache.log4j.Logger;
20
21 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
22
23 /**
24 * @author n.hoffman
25 * @since 09.04.2009
26 * @version 1.0
27 */
28 public class CdmDataChangeMap implements Map<EventType, Vector<CdmDataChangeEvent>>{
29 private static final Logger logger = Logger
30 .getLogger(CdmDataChangeMap.class);
31
32 private Map<EventType, Vector<CdmDataChangeEvent>> dataChangeMap;
33
34 public CdmDataChangeMap(){
35 dataChangeMap = new HashMap<EventType, Vector<CdmDataChangeEvent>>();
36 }
37
38 /* (non-Javadoc)
39 * @see java.util.Map#clear()
40 */
41 @Override
42 public void clear() {
43 dataChangeMap.clear();
44 }
45
46 /* (non-Javadoc)
47 * @see java.util.Map#containsKey(java.lang.Object)
48 */
49 @Override
50 public boolean containsKey(Object key) {
51 return dataChangeMap.containsKey(key);
52 }
53
54 /* (non-Javadoc)
55 * @see java.util.Map#containsValue(java.lang.Object)
56 */
57 @Override
58 public boolean containsValue(Object value) {
59 return dataChangeMap.containsValue(value);
60 }
61
62 /* (non-Javadoc)
63 * @see java.util.Map#entrySet()
64 */
65 @Override
66 public Set entrySet() {
67 return dataChangeMap.entrySet();
68 }
69
70 /* (non-Javadoc)
71 * @see java.util.Map#get(java.lang.Object)
72 */
73 @Override
74 public Vector<CdmDataChangeEvent> get(Object key) {
75 return dataChangeMap.get(key);
76 }
77
78 /**
79 * Returns events by type
80 *
81 * @param type
82 * @return never null
83 */
84 public Vector<CdmDataChangeEvent> getEvents(EventType type){
85 Vector<CdmDataChangeEvent> vector = dataChangeMap.get(type);
86 if(vector == null){
87 vector = new Vector<>(0);
88 }
89 return vector;
90 }
91
92 /* (non-Javadoc)
93 * @see java.util.Map#isEmpty()
94 */
95 @Override
96 public boolean isEmpty() {
97 return dataChangeMap.isEmpty();
98 }
99
100 /* (non-Javadoc)
101 * @see java.util.Map#keySet()
102 */
103 @Override
104 public Set keySet() {
105 return dataChangeMap.keySet();
106 }
107
108 public void add(EventType type, CdmDataChangeEvent event){
109 Vector<CdmDataChangeEvent> vector = getEvents(type);
110
111 // lazy initialising the vectors
112 if(vector == null){
113 vector = new Vector<CdmDataChangeEvent>();
114 }
115
116 vector.add(event);
117
118 dataChangeMap.put(type, vector);
119 }
120
121
122 /* (non-Javadoc)
123 * @see java.util.Map#remove(java.lang.Object)
124 */
125 @Override
126 public Vector<CdmDataChangeEvent> remove(Object key) {
127 return dataChangeMap.remove(key);
128 }
129
130 /* (non-Javadoc)
131 * @see java.util.Map#size()
132 */
133 @Override
134 public int size() {
135 return dataChangeMap.size();
136 }
137
138 public int sizeByEventType(EventType type){
139 Vector<CdmDataChangeEvent> vector = getEvents(type);
140 return vector == null ? 0 : vector.size();
141 }
142
143 /* (non-Javadoc)
144 * @see java.util.Map#values()
145 */
146 @Override
147 public Collection<Vector<CdmDataChangeEvent>> values() {
148 return dataChangeMap.values();
149 }
150
151 /**
152 * Returns all change events stored in this change map
153 *
154 * @return
155 */
156 public Collection<CdmDataChangeEvent> getAllEvents(){
157 Collection<CdmDataChangeEvent> values = new HashSet<CdmDataChangeEvent>();
158 for (EventType type : EventType.values()){
159 if(dataChangeMap.get(type) != null){
160 for(CdmDataChangeEvent event : dataChangeMap.get(type)){
161 values.add(event);
162 }
163 }
164 }
165 return values;
166 }
167
168 /* (non-Javadoc)
169 * @see java.util.Map#put(java.lang.Object, java.lang.Object)
170 */
171 @Override
172 public Vector<CdmDataChangeEvent> put(EventType key,
173 Vector<CdmDataChangeEvent> value) {
174 return dataChangeMap.put(key, value);
175 }
176
177 /* (non-Javadoc)
178 * @see java.util.Map#putAll(java.util.Map)
179 */
180 @Override
181 public void putAll(
182 Map<? extends EventType, ? extends Vector<CdmDataChangeEvent>> t) {
183 dataChangeMap.putAll(t);
184 }
185 }