1 package org.columba.core.config; 17 18 import java.util.StringTokenizer ; 19 20 import org.columa.core.config.IDefaultItem; 21 import org.columba.core.xml.XmlElement; 22 23 29 public class DefaultItem implements Cloneable , 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 41 public XmlElement getElement(final String pathToElement) { 42 43 48 return getElement(pathToElement, true); 49 } 50 51 public XmlElement getElement(final String pathToElement, 52 final boolean create) { 53 XmlElement child = getRoot(); 54 55 final StringTokenizer tok = new StringTokenizer (pathToElement, "/"); while (tok.hasMoreTokens()) { 57 final String 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 pathToElement, 79 final int index) { 80 return getRoot().getElement(pathToElement).getElement(index); 81 } 82 83 public boolean contains(final String key) { 84 return getRoot().getAttributes().containsKey(key); 85 } 86 87 public String get(final String key) { 88 return getRoot().getAttribute(key); 89 } 90 91 public String getString(final String pathToElement, final String 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 key, final String newValue) { 104 getRoot().addAttribute(key, newValue); 105 } 106 107 public void setString(final String pathToElement, final String key, 108 final String 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 123 public int getInteger(final String key) { 124 final String value = get(key); 125 126 return Integer.parseInt(value); 127 } 128 129 public int getIntegerWithDefault(final String key, final int defaultValue) { 130 String value = get(key); 131 132 if (value == null) { 133 value = new Integer (defaultValue).toString(); 134 setString(key, value); 135 } 136 137 try { 138 return Integer.parseInt(value); 139 } catch (final NumberFormatException e) { 140 return defaultValue; 141 } 142 } 143 144 public int getInteger(final String pathToElement, final String key) { 145 final String value = getString(pathToElement, key); 146 147 return Integer.parseInt(value); 148 } 149 150 public int getIntegerWithDefault(final String pathToElement, 151 final String key, final int defaultValue) { 152 String value = getString(pathToElement, key); 153 154 if (value == null) { 155 value = new Integer (defaultValue).toString(); 156 setString(pathToElement, key, value); 157 } 158 159 int result = -1; 160 try { 161 result = Integer.parseInt(value); 162 } catch (final NumberFormatException e) { 163 return defaultValue; 165 } 166 167 return result; 168 } 169 170 public void setInteger(final String key, final int value) { 171 setString(key, Integer.toString(value)); 172 } 173 174 public void setInteger(final String pathToElement, final String key, 175 final int value) { 176 setString(pathToElement, key, Integer.toString(value)); 177 } 178 179 public boolean getBooleanWithDefault(final String key, 180 final boolean defaultValue) { 181 String 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 key) { 192 final String value = get(key); 193 194 return Boolean.valueOf(value).booleanValue(); 195 } 196 197 public boolean getBoolean(final String pathToElement, final String key) { 198 final String value = getString(pathToElement, key); 199 200 return Boolean.valueOf(value).booleanValue(); 201 } 202 203 public boolean getBooleanWithDefault(final String pathToElement, 204 final String key, final boolean defaultValue) { 205 String 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 key, final boolean value) { 216 setString(key, value ? Boolean.TRUE.toString() : Boolean.FALSE 217 .toString()); 218 } 219 220 public void setBoolean(final String pathToElement, final String key, 221 final boolean value) { 222 setString(pathToElement, key, value ? Boolean.TRUE.toString() 223 : Boolean.FALSE.toString()); 224 } 225 226 227 @Override 228 public boolean equals(final Object 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 244 @Override 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 256 @Override 257 public Object clone() { 258 try { 259 final DefaultItem other = (DefaultItem) super.clone(); 260 other.root = (XmlElement) root.clone(); 262 return other; 263 } catch (final CloneNotSupportedException cnse) { 264 throw new InternalError ("Could not clone DefaultItem: " + cnse); } 266 } 267 268 273 public String getStringWithDefault(final String key, 274 final String defaultValue) { 275 String result = getRoot().getAttribute(key); 276 if (result == null) { 277 result = defaultValue; 278 } 279 return result; 280 } 281 282 286 public String getStringWithDefault(final String pathToElement, 287 final String key, final String defaultValue) { 288 final String 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 path) { 299 final XmlElement e = getElement(path); 300 e.notifyObservers(); 301 } 302 } | Popular Tags |