annotate dwtx/jface/preference/PreferenceManager.d @ 34:b3c8e32d406f

preference
author Frank Benoit <benoit@tionex.de>
date Sat, 05 Apr 2008 01:45:47 +0200
parents
children 46a6e0e6ccd4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
34
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2000, 2006 IBM Corporation and others.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwtx.jface.preference.PreferenceManager;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import dwtx.jface.preference.PreferenceNode;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwtx.jface.preference.IPreferenceNode;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import tango.util.collection.ArraySeq;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import tango.util.collection.model.Seq;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 // import java.util.List;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 // import java.util.StringTokenizer;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwtx.core.runtime.Assert;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.dwthelper.utils;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import tango.text.Util;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 * A preference manager maintains a hierarchy of preference nodes and
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 * associated preference pages.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 public class PreferenceManager {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 * Pre-order traversal means visit the root first,
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 * then the children.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 public static const int PRE_ORDER = 0;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 * Post-order means visit the children, and then the root.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 public static const int POST_ORDER = 1;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 * The root node.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 * Note that the root node is a special internal node
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * that is used to collect together all the nodes that
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 * have no parent; it is not given out to clients.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 PreferenceNode root;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * The path separator character.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 String separator;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 * Creates a new preference manager.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 public this() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 this('.');
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 * Creates a new preference manager with the given
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 * the path separator.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 * @param separatorChar the separator character
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 public this(char separatorChar) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 root = new PreferenceNode("");//$NON-NLS-1$
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 separator = [ separatorChar ];
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 * Adds the given preference node as a subnode of the
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 * node at the given path.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 * @param path the path
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 * @param node the node to add
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 * @return <code>true</code> if the add was successful,
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 * and <code>false</code> if there is no contribution at
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 * the given path
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 public bool addTo(String path, IPreferenceNode node) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 IPreferenceNode target = find(path);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 if (target is null) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 return false;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 target.add(node);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 return true;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 * Adds the given preference node as a subnode of the
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 * root.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 * @param node the node to add, which must implement
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 * <code>IPreferenceNode</code>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 public void addToRoot(IPreferenceNode node) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 Assert.isNotNull(cast(Object)node);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 root.add(node);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 * Recursively enumerates all nodes at or below the given node
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 * and adds them to the given list in the given order.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 * @param node the starting node
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 * @param sequence a read-write list of preference nodes
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 * (element type: <code>IPreferenceNode</code>)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 * in the given order
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 * @param order the traversal order, one of
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 * <code>PRE_ORDER</code> and <code>POST_ORDER</code>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 protected void buildSequence(IPreferenceNode node, Seq!(Object) sequence, int order) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 if (order is PRE_ORDER) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 sequence.append(cast(Object)node);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 IPreferenceNode[] subnodes = node.getSubNodes();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 for (int i = 0; i < subnodes.length; i++) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 buildSequence(subnodes[i], sequence, order);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 if (order is POST_ORDER) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 sequence.append(cast(Object)node);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 * Finds and returns the contribution node at the given path.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 * @param path the path
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 * @return the node, or <code>null</code> if none
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 public IPreferenceNode find(String path) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 return find(path,root);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 * Finds and returns the preference node directly
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 * below the top at the given path.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 * @param path the path
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 * @param top top at the given path
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 * @return the node, or <code>null</code> if none
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 * @since 3.1
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 protected IPreferenceNode find(String path,IPreferenceNode top){
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 Assert.isNotNull(path);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 auto tokens = tango.text.Util.delimit( path, separator );
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 IPreferenceNode node = top;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 foreach( id; tokens ){
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 node = node.findSubNode(id);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 if (node is null) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 return null;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 if (node is top) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 return null;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 return node;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 * Returns all preference nodes managed by this
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 * manager.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 * @param order the traversal order, one of
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 * <code>PRE_ORDER</code> and <code>POST_ORDER</code>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 * @return a list of preference nodes
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 * (element type: <code>IPreferenceNode</code>)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 * in the given order
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 public Seq!(Object) getElements(int order) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 Assert.isTrue(order is PRE_ORDER || order is POST_ORDER,
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 "invalid traversal order");//$NON-NLS-1$
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 auto sequence = new ArraySeq!(Object);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 IPreferenceNode[] subnodes = getRoot().getSubNodes();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 for (int i = 0; i < subnodes.length; i++) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 buildSequence(subnodes[i], sequence, order);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 return sequence;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 * Returns the root node.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 * Note that the root node is a special internal node
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 * that is used to collect together all the nodes that
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 * have no parent; it is not given out to clients.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 * @return the root node
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 protected IPreferenceNode getRoot() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 return root;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 package IPreferenceNode getRoot_package() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 return getRoot();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 * Returns the root level nodes of this preference manager.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 * @return an array containing the root nodes
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 * @since 3.2
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 public final IPreferenceNode[] getRootSubNodes() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 return getRoot().getSubNodes();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 * Removes the preference node at the given path.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 * @param path
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 * the path
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 * @return the node that was removed, or <code>null</code> if there was no
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 * node at the given path
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 public IPreferenceNode remove(String path) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 Assert.isNotNull(path);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 int index = path.lastIndexOf(separator);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 if (index is -1) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 return root.remove(path);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 // Make sure that the last character in the string isn't the "."
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 Assert.isTrue(index < path.length - 1, "Path can not end with a dot");//$NON-NLS-1$
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 String parentPath = path.substring(0, index);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 String id = path.substring(index + 1);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 IPreferenceNode parentNode = find(parentPath);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 if (parentNode is null) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 return null;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 return parentNode.remove(id);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 * Removes the given prefreence node if it is managed by
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 * this contribution manager.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 * @param node the node to remove
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 * @return <code>true</code> if the node was removed,
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 * and <code>false</code> otherwise
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 public bool remove(IPreferenceNode node) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 Assert.isNotNull(cast(Object)node);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 return root.remove(node);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 * Removes all contribution nodes known to this manager.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 public void removeAll() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 root = new PreferenceNode("");//$NON-NLS-1$
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 }