Mercurial > projects > dwt2
annotate org.eclipse.core.databinding/src/org/eclipse/core/databinding/observable/map/AbstractObservableMap.d @ 98:48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Wed, 22 Apr 2009 07:30:21 +0200 |
parents | 1d37a7813832 |
children |
rev | line source |
---|---|
78 | 1 /******************************************************************************* |
2 * Copyright (c) 2006, 2008 IBM Corporation and others. | |
3 * All rights reserved. This program and the accompanying materials | |
4 * are made available under the terms of the Eclipse Public License v1.0 | |
5 * which accompanies this distribution, and is available at | |
6 * http://www.eclipse.org/legal/epl-v10.html | |
7 * | |
8 * Contributors: | |
9 * IBM Corporation - initial API and implementation | |
10 * Brad Reynolds - bug 164653 | |
11 * Matthew Hall - bug 118516 | |
12 *******************************************************************************/ | |
13 | |
14 module org.eclipse.core.databinding.observable.map.AbstractObservableMap; | |
81 | 15 import org.eclipse.core.databinding.observable.map.MapDiff; |
16 import org.eclipse.core.databinding.observable.map.MapChangeEvent; | |
17 import org.eclipse.core.databinding.observable.map.IMapChangeListener; | |
18 import org.eclipse.core.databinding.observable.map.IObservableMap; | |
78 | 19 |
20 import java.lang.all; | |
21 | |
22 import java.util.AbstractMap; | |
85 | 23 import java.util.Set; |
94
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
24 import java.util.Map; |
78 | 25 |
26 import org.eclipse.core.databinding.observable.ChangeEvent; | |
27 import org.eclipse.core.databinding.observable.ChangeSupport; | |
28 import org.eclipse.core.databinding.observable.IChangeListener; | |
29 import org.eclipse.core.databinding.observable.IStaleListener; | |
30 import org.eclipse.core.databinding.observable.Realm; | |
31 import org.eclipse.core.databinding.observable.StaleEvent; | |
32 import org.eclipse.core.runtime.Assert; | |
33 import org.eclipse.core.runtime.AssertionFailedException; | |
34 | |
35 /** | |
36 * | |
37 * <p> | |
38 * This class is thread safe. All state accessing methods must be invoked from | |
39 * the {@link Realm#isCurrent() current realm}. Methods for adding and removing | |
40 * listeners may be invoked from any thread. | |
41 * </p> | |
42 * @since 1.0 | |
43 */ | |
44 public abstract class AbstractObservableMap : AbstractMap , | |
45 IObservableMap { | |
46 | |
85 | 47 // DWT start reimplement |
48 public override int size(){ | |
49 return super.size(); | |
50 } | |
51 public override bool isEmpty(){ | |
52 return super.isEmpty(); | |
53 } | |
98
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
94
diff
changeset
|
54 public override bool containsKey(String o){ |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
94
diff
changeset
|
55 return super.containsKey(o); |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
94
diff
changeset
|
56 } |
85 | 57 public override bool containsKey(Object o){ |
58 return super.containsKey(o); | |
59 } | |
60 public override bool containsValue(Object o){ | |
61 return super.containsValue(o); | |
62 } | |
63 public override Object get(Object o){ | |
64 return super.get(o); | |
65 } | |
98
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
94
diff
changeset
|
66 public override Object put(String key, String value){ |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
94
diff
changeset
|
67 return super.put(key, value); |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
94
diff
changeset
|
68 } |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
94
diff
changeset
|
69 public override Object put(Object key, String value){ |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
94
diff
changeset
|
70 return super.put(key, value); |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
94
diff
changeset
|
71 } |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
94
diff
changeset
|
72 public override Object put(String key, Object value){ |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
94
diff
changeset
|
73 return super.put(key, value); |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
94
diff
changeset
|
74 } |
85 | 75 public override Object put(Object key, Object value){ |
76 return super.put(key, value); | |
77 } | |
78 public override equals_t opEquals(Object o){ | |
79 return super.opEquals(o); | |
80 } | |
81 public override hash_t toHash(){ | |
82 return super.toHash(); | |
83 } | |
98
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
94
diff
changeset
|
84 public override Object remove(String o){ |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
94
diff
changeset
|
85 return super.remove(o); |
48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
Frank Benoit <benoit@tionex.de>
parents:
94
diff
changeset
|
86 } |
85 | 87 public override Object remove(Object o){ |
88 return super.remove(o); | |
89 } | |
90 public override Set keySet(){ | |
91 return super.keySet(); | |
92 } | |
93 public override Set values(){ | |
94 return super.values(); | |
95 } | |
94
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
96 public int opApply (int delegate(ref Object value) dg){ |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
97 foreach( entry; entrySet() ){ |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
98 auto me = cast(Map.Entry)entry; |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
99 auto v = me.getValue(); |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
100 int res = dg( v ); |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
101 if( res ) return res; |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
102 } |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
103 return 0; |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
104 } |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
105 public int opApply (int delegate(ref Object key, ref Object value) dg){ |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
106 foreach( entry; entrySet() ){ |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
107 auto me = cast(Map.Entry)entry; |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
108 auto k = me.getKey(); |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
109 auto v = me.getValue(); |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
110 int res = dg( k, v ); |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
111 if( res ) return res; |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
112 } |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
113 return 0; |
1d37a7813832
First Databinding Snippet (004) builds
Frank Benoit <benoit@tionex.de>
parents:
85
diff
changeset
|
114 } |
85 | 115 // DWT end reimplement |
78 | 116 private ChangeSupport changeSupport; |
117 | |
118 private bool stale; | |
119 | |
120 /** | |
121 */ | |
122 public this() { | |
123 this(Realm.getDefault()); | |
124 } | |
125 | |
126 /** | |
127 * | |
128 */ | |
129 protected void lastListenerRemoved() { | |
130 } | |
131 | |
132 /** | |
133 * | |
134 */ | |
135 protected void firstListenerAdded() { | |
136 } | |
137 | |
138 /** | |
139 * @param realm | |
140 */ | |
141 public this(Realm realm) { | |
142 Assert.isNotNull(realm, "Realm cannot be null"); //$NON-NLS-1$ | |
143 changeSupport = new class(realm) ChangeSupport { | |
85 | 144 this(Realm r){ super(r);} |
78 | 145 protected void firstListenerAdded() { |
146 this.outer.firstListenerAdded(); | |
147 } | |
148 protected void lastListenerRemoved() { | |
149 this.outer.lastListenerRemoved(); | |
150 } | |
151 }; | |
152 } | |
153 | |
154 public synchronized void addMapChangeListener(IMapChangeListener listener) { | |
155 changeSupport.addListener(MapChangeEvent.TYPE, listener); | |
156 } | |
157 | |
158 public synchronized void removeMapChangeListener(IMapChangeListener listener) { | |
159 changeSupport.removeListener(MapChangeEvent.TYPE, listener); | |
160 } | |
161 | |
162 public synchronized void addChangeListener(IChangeListener listener) { | |
163 changeSupport.addChangeListener(listener); | |
164 } | |
165 | |
166 public synchronized void addStaleListener(IStaleListener listener) { | |
167 changeSupport.addStaleListener(listener); | |
168 } | |
169 | |
170 public synchronized void dispose() { | |
171 changeSupport.dispose(); | |
172 changeSupport = null; | |
173 } | |
174 | |
175 public Realm getRealm() { | |
176 return changeSupport.getRealm(); | |
177 } | |
178 | |
179 public bool isStale() { | |
180 checkRealm(); | |
181 return stale; | |
182 } | |
183 | |
184 public synchronized void removeChangeListener(IChangeListener listener) { | |
185 changeSupport.removeChangeListener(listener); | |
186 } | |
187 | |
188 public synchronized void removeStaleListener(IStaleListener listener) { | |
189 changeSupport.removeStaleListener(listener); | |
190 } | |
191 | |
192 /** | |
193 * Sets the stale state. Must be invoked from the current realm. | |
194 * | |
195 * @param stale | |
196 */ | |
197 public void setStale(bool stale) { | |
198 checkRealm(); | |
199 this.stale = stale; | |
200 if (stale) { | |
201 fireStale(); | |
202 } | |
203 } | |
204 | |
205 /** | |
206 * Fires stale events. Must be invoked from current realm. | |
207 */ | |
208 protected void fireStale() { | |
209 checkRealm(); | |
210 changeSupport.fireEvent(new StaleEvent(this)); | |
211 } | |
212 | |
213 /** | |
214 * Fires change events. Must be invoked from current realm. | |
215 */ | |
216 protected void fireChange() { | |
217 checkRealm(); | |
218 changeSupport.fireEvent(new ChangeEvent(this)); | |
219 } | |
220 | |
221 /** | |
222 * Fires map change events. Must be invoked from current realm. | |
223 * | |
224 * @param diff | |
225 */ | |
226 protected void fireMapChange(MapDiff diff) { | |
227 checkRealm(); | |
228 changeSupport.fireEvent(new MapChangeEvent(this, diff)); | |
229 } | |
230 | |
231 /** | |
232 * Asserts that the realm is the current realm. | |
233 * | |
234 * @see Realm#isCurrent() | |
235 * @throws AssertionFailedException | |
236 * if the realm is not the current realm | |
237 */ | |
238 protected void checkRealm() { | |
239 Assert.isTrue(getRealm().isCurrent(), | |
240 "This operation must be run within the observable's realm"); //$NON-NLS-1$ | |
241 } | |
242 } |