annotate org.eclipse.core.databinding/src/org/eclipse/core/databinding/UpdateListStrategy.d @ 78:0a55d2d5a946

Added file for databinding
author Frank Benoit <benoit@tionex.de>
date Tue, 14 Apr 2009 11:35:29 +0200
parents
children 383ce7bd736b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
78
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2007, 2008 IBM Corporation and others.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Tom Schindl<tom.schindl@bestsolution.at> - bugfix for 217940
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 *******************************************************************************/
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module org.eclipse.core.databinding.UpdateListStrategy;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import java.lang.all;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import org.eclipse.core.databinding.conversion.IConverter;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import org.eclipse.core.databinding.observable.list.IObservableList;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import org.eclipse.core.databinding.validation.ValidationStatus;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import org.eclipse.core.internal.databinding.BindingMessages;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import org.eclipse.core.runtime.IStatus;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import org.eclipse.core.runtime.Status;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 * Customizes a {@link Binding} between two
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 * {@link IObservableList observable lists}. The following behaviors can be
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 * customized via the strategy:
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 * <ul>
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 * <li>Conversion</li>
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 * <li>Automatic processing</li>
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 * </ul>
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 * <p>
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 * Conversion:<br/> When elements are added they can be
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 * {@link #convertcast(Object) converted} to the destination element type.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 * </p>
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 * <p>
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 * Automatic processing:<br/> The processing to perform when the source
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 * observable changes. This behavior is configured via policies provided on
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 * construction of the strategy (e.g. {@link #POLICY_NEVER},
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 * {@link #POLICY_ON_REQUEST}, {@link #POLICY_UPDATE}).
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 * </p>
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 *
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 *
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 * @see DataBindingContext#bindList(IObservableList, IObservableList,
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 * UpdateListStrategy, UpdateListStrategy)
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 * @see IConverter
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * @since 1.0
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 public class UpdateListStrategy : UpdateStrategy {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 * Policy constant denoting that the source observable's state should not be
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * tracked and that the destination observable's state should never be
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 * updated.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 public static int POLICY_NEVER = notInlined(1);
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 * Policy constant denoting that the source observable's state should not be
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 * tracked, but that conversion and updating the destination observable's
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 * state should be performed when explicitly requested.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 public static int POLICY_ON_REQUEST = notInlined(2);
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 * Policy constant denoting that the source observable's state should be
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 * tracked, and that conversion and updating the destination observable's
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 * state should be performed automatically on every change of the source
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 * observable state.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 public static int POLICY_UPDATE = notInlined(8);
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 * Helper method allowing API evolution of the above constant values. The
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 * compiler will not inline constant values into client code if values are
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 * "computed" using this helper.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 *
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 * @param i
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 * an integer
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 * @return the same integer
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 private static int notInlined(int i) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 return i;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 protected IConverter converter;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 private int updatePolicy;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 protected bool provideDefaults;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 * Creates a new update list strategy for automatically updating the
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 * destination observable list whenever the source observable list changes.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 * A default converter will be provided. The defaults can be changed by
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 * calling one of the setter methods.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 public this() {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 this(true, POLICY_UPDATE);
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 * Creates a new update list strategy with a configurable update policy. A
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 * default converter will be provided. The defaults can be changed by
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 * calling one of the setter methods.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 *
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 * @param updatePolicy
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 * one of {@link #POLICY_NEVER}, {@link #POLICY_ON_REQUEST}, or
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 * {@link #POLICY_UPDATE}
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 public this(int updatePolicy) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 this(true, updatePolicy);
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 * Creates a new update list strategy with a configurable update policy. A
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 * default converter will be provided if <code>provideDefaults</code> is
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 * <code>true</code>. The defaults can be changed by calling one of the
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 * setter methods.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 *
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 * @param provideDefaults
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 * if <code>true</code>, default validators and a default
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 * converter will be provided based on the observable list's
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 * type.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 * @param updatePolicy
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 * one of {@link #POLICY_NEVER}, {@link #POLICY_ON_REQUEST}, or
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 * {@link #POLICY_UPDATE}
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 public this(bool provideDefaults, int updatePolicy) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 this.provideDefaults = provideDefaults;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 this.updatePolicy = updatePolicy;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 * When an element is added to the destination converts the element from the
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 * source element type to the destination element type.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 * <p>
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 * Default implementation will use the
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 * {@link #setConvertercast(IConverter) converter} if one exists. If no
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 * converter exists no conversion occurs.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 * </p>
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 *
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 * @param element
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 * @return the converted element
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 public Object convert(Object element) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 return converter is null ? element : converter.convert(element);
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 *
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 * @param source
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 * @param destination
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 protected void fillDefaults(IObservableList source,
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 IObservableList destination) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 Object sourceType = source.getElementType();
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 Object destinationType = destination.getElementType();
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 if (provideDefaults && sourceType !is null && destinationType !is null) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 if (converter is null) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 setConverter(createConverter(sourceType, destinationType));
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 if (converter !is null) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 if (sourceType !is null) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 checkAssignable(converter.getFromType(), sourceType,
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 "converter does not convert from type " + sourceType); //$NON-NLS-1$
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 if (destinationType !is null) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 checkAssignable(converter.getToType(), destinationType,
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 "converter does not convert to type " + destinationType); //$NON-NLS-1$
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 * @return the update policy
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 public int getUpdatePolicy() {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 return updatePolicy;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 * Sets the converter to be invoked when converting added elements from the
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 * source element type to the destination element type.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 *
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 * @param converter
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 * @return the receiver, to enable method call chaining
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 public UpdateListStrategy setConverter(IConverter converter) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 this.converter = converter;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 return this;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 * Adds the given element at the given index to the given observable list.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 * Clients may extend but must call the super implementation.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 *
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 * @param observableList
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 * @param element
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 * @param index
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 * @return a status
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 protected IStatus doAdd(IObservableList observableList, Object element,
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 int index) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 try {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 observableList.add(index, element);
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 } catch (Exception ex) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 return ValidationStatus.error(BindingMessages
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 .getStringcast(BindingMessages.VALUEBINDING_ERROR_WHILE_SETTING_VALUE),
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 ex);
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 return Status.OK_STATUS;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 /**
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 * Removes the element at the given index from the given observable list.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 * Clients may extend but must call the super implementation.
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 *
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 * @param observableList
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 * @param index
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 * @return a status
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 */
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 protected IStatus doRemove(IObservableList observableList, int index) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 try {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 observableList.remove(index);
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 } catch (Exception ex) {
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 return ValidationStatus.error(BindingMessages
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 .getStringcast(BindingMessages.VALUEBINDING_ERROR_WHILE_SETTING_VALUE),
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 ex);
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 return Status.OK_STATUS;
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 }
0a55d2d5a946 Added file for databinding
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 }