001: /*
002: * $Id: Preferences.java,v 1.11 2002/09/16 08:05:06 jkl Exp $
003: *
004: * Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
005: *
006: * Use is subject to license terms, as defined in
007: * Anvil Sofware License, Version 1.1. See LICENSE
008: * file, or http://njet.org/license-1.1.txt
009: */
010: package anvil.server;
011:
012: import java.util.Enumeration;
013: import anvil.java.util.Hashlist;
014:
015: /**
016: * class Preferences
017: *
018: * @author: Jani Lehtimäki
019: */
020: public abstract class Preferences implements Configurable {
021:
022: private Zone _parent;
023: private Hashlist _prefs = null;
024:
025: public Preferences(Zone parent) {
026: _parent = parent;
027: }
028:
029: public String toString() {
030: return CLASSES[getType()];
031: }
032:
033: public Zone getParent() {
034: return _parent;
035: }
036:
037: public abstract int getType();
038:
039: public boolean isEmpty() {
040: return _prefs == null || _prefs.size() == 0;
041: }
042:
043: public String[] getPreferences() {
044: return new String[0];
045: }
046:
047: public String[] getAdditionalPreferenceNames() {
048: if (_prefs == null) {
049: return new String[0];
050: }
051: int n = _prefs.size();
052: int i = 0;
053: String[] s = new String[n];
054: Enumeration e = _prefs.keys();
055: while (e.hasMoreElements()) {
056: s[i++] = (String) e.nextElement();
057: }
058: return s;
059: }
060:
061: public boolean deletePreference(String name) {
062: if (_prefs == null) {
063: return false;
064: }
065: return _prefs.remove(name) != null;
066: }
067:
068: public boolean setPreference(String name, String value) {
069: if (_prefs == null) {
070: _prefs = new Hashlist();
071: }
072: if (value == null) {
073: return (_prefs.remove(name) != null);
074: } else {
075: _prefs.put(name, value);
076: return true;
077: }
078: }
079:
080: public Object getPreference(String name) {
081: if (_prefs != null) {
082: return _prefs.get(name);
083: } else {
084: return null;
085: }
086: }
087:
088: public Object getPreference(String name, Object defaultvalue) {
089: Object o = getPreference(name);
090: return (o != null) ? o : defaultvalue;
091: }
092:
093: public boolean getBooleanPreference(String name) {
094: return getBooleanPreference(name, false);
095: }
096:
097: public boolean getBooleanPreference(String name,
098: boolean defaultvalue) {
099: if (_prefs != null) {
100: String v = (String) _prefs.get(name);
101: if (v != null) {
102: return v.equalsIgnoreCase("true");
103: }
104: }
105: return defaultvalue;
106: }
107:
108: public int getIntPreference(String name) {
109: return getIntPreference(name, 0);
110: }
111:
112: public int getIntPreference(String name, int defaultvalue) {
113: if (_prefs != null) {
114: String v = (String) _prefs.get(name);
115: if (v != null) {
116: try {
117: return Integer.parseInt(v);
118: } catch (NumberFormatException e) {
119: }
120: }
121: }
122: return defaultvalue;
123: }
124:
125: public boolean configure(Configurable configurable) {
126: return false;
127: }
128:
129: public void deleteConfiguration(Configurable configurable) {
130: }
131:
132: public Configurable[] getConfigurations() {
133: return new Configurable[0];
134: }
135:
136: public static String[] parseValues(String values) {
137: int n = values.length();
138: int i = 0;
139: int state = 0;
140: java.util.ArrayList list = new java.util.ArrayList();
141: StringBuffer buffer = new StringBuffer();
142: while (i < n) {
143: char ch = values.charAt(i++);
144: switch (state) {
145: case 0:
146: // expect value
147: switch (ch) {
148: case ',':
149: case ' ':
150: case '\t':
151: case '\r':
152: case '\n':
153: //ignore
154: break;
155: case '"':
156: // "value" started
157: state = 1;
158: break;
159: default:
160: // value started
161: state = 3;
162: buffer.append(ch);
163: break;
164: }
165: break;
166:
167: case 2:
168: state = 1;
169: buffer.append(ch);
170: break;
171:
172: case 1:
173: switch (ch) {
174: case '\\':
175: state = 2;
176: break;
177: case '"':
178: list.add(buffer.toString());
179: buffer.setLength(0);
180: state = 0;
181: break;
182: default:
183: buffer.append(ch);
184: break;
185: }
186: break;
187:
188: case 4:
189: state = 3;
190: buffer.append(ch);
191: break;
192:
193: case 3:
194: switch (ch) {
195: case '\\':
196: state = 4;
197: break;
198: case ' ':
199: case '\t':
200: case '\r':
201: case '\n':
202: list.add(buffer.toString());
203: buffer.setLength(0);
204: state = 0;
205: break;
206: case ',':
207: list.add(buffer.toString());
208: buffer.setLength(0);
209: state = 0;
210: break;
211: default:
212: buffer.append(ch);
213: break;
214: }
215: break;
216:
217: }
218: }
219: if (state == 1 || state == 3) {
220: list.add(buffer.toString());
221: }
222: n = list.size();
223: return (String[]) list.toArray(new String[n]);
224: }
225:
226: }
|