KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > core > config > DefaultItem


1 //The contents of this file are subject to the Mozilla Public License Version 1.1
2
//(the "License"); you may not use this file except in compliance with the
3
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
4
//
5
//Software distributed under the License is distributed on an "AS IS" basis,
6
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
7
//for the specific language governing rights and
8
//limitations under the License.
9
//
10
//The Original Code is "The Columba Project"
11
//
12
//The Initial Developers of the Original Code are Frederik Dietz and Timo Stich.
13
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
14
//
15
//All Rights Reserved.
16
package org.columba.core.config;
17
18 import java.util.StringTokenizer JavaDoc;
19
20 import org.columa.core.config.IDefaultItem;
21 import org.columba.core.xml.XmlElement;
22
23 /**
24  * Composition wrapper for <code>XmlElement</code>. Provides many convinience
25  * methods for easy access.
26  *
27  * @author fdietz
28  */

29 public class DefaultItem implements Cloneable JavaDoc, IDefaultItem {
30     XmlElement root;
31
32     public DefaultItem(final XmlElement theRoot) {
33         this.root = theRoot;
34     }
35
36     public XmlElement getRoot() {
37         return root;
38     }
39
40     /** ********************** composition pattern ********************* */
41     public XmlElement getElement(final String JavaDoc pathToElement) {
42
43         /*
44          * XmlElement child = getRoot().getElement(pathToElement);
45          *
46          * return child;
47          */

48         return getElement(pathToElement, true);
49     }
50
51     public XmlElement getElement(final String JavaDoc pathToElement,
52             final boolean create) {
53         XmlElement child = getRoot();
54
55         final StringTokenizer JavaDoc tok = new StringTokenizer JavaDoc(pathToElement, "/"); //$NON-NLS-1$
56
while (tok.hasMoreTokens()) {
57             final String JavaDoc token = tok.nextToken();
58             XmlElement e = child.getElement(token);
59             if ((e == null) && create) {
60                 e = child.addSubElement(token);
61
62             }
63             child = e;
64
65         }
66
67         return child;
68     }
69
70     public XmlElement getChildElement(final int index) {
71         return getRoot().getElement(index);
72     }
73
74     public int getChildCount() {
75         return getRoot().count();
76     }
77
78     public XmlElement getChildElement(final String JavaDoc pathToElement,
79             final int index) {
80         return getRoot().getElement(pathToElement).getElement(index);
81     }
82
83     public boolean contains(final String JavaDoc key) {
84         return getRoot().getAttributes().containsKey(key);
85     }
86
87     public String JavaDoc get(final String JavaDoc key) {
88         return getRoot().getAttribute(key);
89     }
90
91     public String JavaDoc getString(final String JavaDoc pathToElement, final String JavaDoc key) {
92         final XmlElement element = getElement(pathToElement);
93
94         if (element != null) {
95             if ((key == null) || (key.length() == 0)) {
96                 return element.getData();
97             }
98             return element.getAttribute(key);
99         }
100         return null;
101     }
102
103     public void setString(final String JavaDoc key, final String JavaDoc newValue) {
104         getRoot().addAttribute(key, newValue);
105     }
106
107     public void setString(final String JavaDoc pathToElement, final String JavaDoc key,
108             final String JavaDoc newValue) {
109         XmlElement element = getElement(pathToElement);
110         if (element == null) {
111             element = root.addSubElement(pathToElement);
112         }
113
114         if (key == null) {
115             element.setData(newValue);
116         } else {
117             element.addAttribute(key, newValue);
118         }
119
120     }
121
122     /** ************************** helper classes ************************** */
123     public int getInteger(final String JavaDoc key) {
124         final String JavaDoc value = get(key);
125
126         return Integer.parseInt(value);
127     }
128
129     public int getIntegerWithDefault(final String JavaDoc key, final int defaultValue) {
130         String JavaDoc value = get(key);
131
132         if (value == null) {
133             value = new Integer JavaDoc(defaultValue).toString();
134             setString(key, value);
135         }
136
137         try {
138             return Integer.parseInt(value);
139         } catch (final NumberFormatException JavaDoc e) {
140             return defaultValue;
141         }
142     }
143
144     public int getInteger(final String JavaDoc pathToElement, final String JavaDoc key) {
145         final String JavaDoc value = getString(pathToElement, key);
146
147         return Integer.parseInt(value);
148     }
149
150     public int getIntegerWithDefault(final String JavaDoc pathToElement,
151             final String JavaDoc key, final int defaultValue) {
152         String JavaDoc value = getString(pathToElement, key);
153
154         if (value == null) {
155             value = new Integer JavaDoc(defaultValue).toString();
156             setString(pathToElement, key, value);
157         }
158
159         int result = -1;
160         try {
161             result = Integer.parseInt(value);
162         } catch (final NumberFormatException JavaDoc e) {
163             // this is no integer value
164
return defaultValue;
165         }
166
167         return result;
168     }
169
170     public void setInteger(final String JavaDoc key, final int value) {
171         setString(key, Integer.toString(value));
172     }
173
174     public void setInteger(final String JavaDoc pathToElement, final String JavaDoc key,
175             final int value) {
176         setString(pathToElement, key, Integer.toString(value));
177     }
178
179     public boolean getBooleanWithDefault(final String JavaDoc key,
180             final boolean defaultValue) {
181         String JavaDoc value = get(key);
182
183         if (value == null) {
184             value = Boolean.toString(defaultValue);
185             setString(key, value);
186         }
187
188         return Boolean.valueOf(value).booleanValue();
189     }
190
191     public boolean getBoolean(final String JavaDoc key) {
192         final String JavaDoc value = get(key);
193
194         return Boolean.valueOf(value).booleanValue();
195     }
196
197     public boolean getBoolean(final String JavaDoc pathToElement, final String JavaDoc key) {
198         final String JavaDoc value = getString(pathToElement, key);
199
200         return Boolean.valueOf(value).booleanValue();
201     }
202
203     public boolean getBooleanWithDefault(final String JavaDoc pathToElement,
204             final String JavaDoc key, final boolean defaultValue) {
205         String JavaDoc value = getString(pathToElement, key);
206
207         if (value == null) {
208             value = Boolean.valueOf(defaultValue).toString();
209             setString(pathToElement, key, value);
210         }
211
212         return Boolean.valueOf(value).booleanValue();
213     }
214
215     public void setBoolean(final String JavaDoc key, final boolean value) {
216         setString(key, value ? Boolean.TRUE.toString() : Boolean.FALSE
217                 .toString());
218     }
219
220     public void setBoolean(final String JavaDoc pathToElement, final String JavaDoc key,
221             final boolean value) {
222         setString(pathToElement, key, value ? Boolean.TRUE.toString()
223                 : Boolean.FALSE.toString());
224     }
225
226     /** {@inheritDoc} */
227     @Override JavaDoc
228     public boolean equals(final Object JavaDoc obj) {
229         boolean equal = false;
230
231         if ((obj != null) && (obj instanceof IDefaultItem)) {
232             final DefaultItem other = (DefaultItem) obj;
233
234             if ((root == other.root)
235                     || ((root != null) && root.equals(other.root))) {
236                 equal = true;
237             }
238         }
239
240         return equal;
241     }
242
243     /** {@inheritDoc} */
244     @Override JavaDoc
245     public int hashCode() {
246         int hashCode = 43;
247
248         if (root != null) {
249             hashCode += (root.hashCode() * 97);
250         }
251
252         return hashCode;
253     }
254
255     /** {@inheritDoc} */
256     @Override JavaDoc
257     public Object JavaDoc clone() {
258         try {
259             final DefaultItem other = (DefaultItem) super.clone();
260             other.root = (XmlElement) root.clone(); // make a deep copy
261

262             return other;
263         } catch (final CloneNotSupportedException JavaDoc cnse) {
264             throw new InternalError JavaDoc("Could not clone DefaultItem: " + cnse); //$NON-NLS-1$
265
}
266     }
267
268     /**
269      * @param string
270      * @param string2
271      * @return
272      */

273     public String JavaDoc getStringWithDefault(final String JavaDoc key,
274             final String JavaDoc defaultValue) {
275         String JavaDoc result = getRoot().getAttribute(key);
276         if (result == null) {
277             result = defaultValue;
278         }
279         return result;
280     }
281
282     /**
283      * @see org.columa.core.config.IDefaultItem#getStringWithDefault(java.lang.String,
284      * java.lang.String, java.lang.String)
285      */

286     public String JavaDoc getStringWithDefault(final String JavaDoc pathToElement,
287             final String JavaDoc key, final String JavaDoc defaultValue) {
288         final String JavaDoc value = getString(pathToElement, key);
289
290         if (value == null) {
291             setString(pathToElement, key, value);
292             return defaultValue;
293         }
294
295         return value;
296     }
297
298     public void notifyObservers(final String JavaDoc path) {
299         final XmlElement e = getElement(path);
300         e.notifyObservers();
301     }
302 }
Popular Tags