78
|
1 /*******************************************************************************
|
|
2 * Copyright (c) 2007, 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 * Boris Bokowski, IBM Corporation - initial API and implementation
|
|
10 * Matthew Hall - bug 212468
|
|
11 *******************************************************************************/
|
|
12 module org.eclipse.core.internal.databinding.observable.StalenessObservableValue;
|
|
13
|
|
14 import java.lang.all;
|
|
15
|
|
16 import org.eclipse.core.databinding.observable.ChangeEvent;
|
|
17 import org.eclipse.core.databinding.observable.Diffs;
|
|
18 import org.eclipse.core.databinding.observable.IChangeListener;
|
|
19 import org.eclipse.core.databinding.observable.IObservable;
|
|
20 import org.eclipse.core.databinding.observable.IStaleListener;
|
|
21 import org.eclipse.core.databinding.observable.StaleEvent;
|
|
22 import org.eclipse.core.databinding.observable.value.AbstractObservableValue;
|
|
23
|
|
24 /**
|
|
25 * An observable value that tracks the staleness of an {@link IObservable}.
|
|
26 *
|
|
27 * @since 1.1
|
|
28 */
|
|
29 public class StalenessObservableValue : AbstractObservableValue {
|
|
30
|
|
31 private class MyListener : IChangeListener, IStaleListener {
|
|
32 public void handleChange(ChangeEvent event) {
|
|
33 if (stale && !event.getObservable().isStale()) {
|
|
34 stale = false;
|
|
35 fireValueChange(Diffs.createValueDiff(Boolean.TRUE,
|
|
36 Boolean.FALSE));
|
|
37 }
|
|
38 }
|
|
39
|
|
40 public void handleStale(StaleEvent staleEvent) {
|
|
41 if (!stale) {
|
|
42 stale = true;
|
|
43 fireValueChange(Diffs.createValueDiff(Boolean.FALSE,
|
|
44 Boolean.TRUE));
|
|
45 }
|
|
46 }
|
|
47 }
|
|
48
|
|
49 private IObservable tracked;
|
|
50 private bool stale;
|
|
51 private MyListener listener = new MyListener();
|
|
52
|
|
53 /**
|
|
54 * Constructs a StalenessObservableValue that tracks the staleness of the
|
|
55 * given {@link IObservable}.
|
|
56 *
|
|
57 * @param observable
|
|
58 * the observable to track
|
|
59 */
|
|
60 public this(IObservable observable) {
|
|
61 super(observable.getRealm());
|
|
62 this.tracked = observable;
|
|
63 this.stale = observable.isStale();
|
|
64 tracked.addChangeListener(listener);
|
|
65 tracked.addStaleListener(listener);
|
|
66 }
|
|
67
|
|
68 protected Object doGetValue() {
|
|
69 return tracked.isStale() ? Boolean.TRUE : Boolean.FALSE;
|
|
70 }
|
|
71
|
|
72 public Object getValueType() {
|
|
73 return Boolean.TYPE;
|
|
74 }
|
|
75
|
|
76 public synchronized void dispose() {
|
|
77 if (tracked !is null) {
|
|
78 tracked.removeChangeListener(listener);
|
|
79 tracked.removeStaleListener(listener);
|
|
80 tracked = null;
|
|
81 listener = null;
|
|
82 }
|
|
83 super.dispose();
|
|
84 }
|
|
85
|
|
86 }
|