/*
* $Id: Preferences.java,v 1.11 2002/09/16 08:05:06 jkl Exp $
*
* Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
*
* Use is subject to license terms, as defined in
* Anvil Sofware License, Version 1.1. See LICENSE
* file, or http://njet.org/license-1.1.txt
*/
package anvil.server;
import java.util.Enumeration;
import anvil.java.util.Hashlist;
/**
* class Preferences
*
* @author: Jani Lehtim�ki
*/
public abstract class Preferences implements Configurable
{
private Zone _parent;
private Hashlist _prefs = null;
public Preferences(Zone parent)
{
_parent = parent;
}
public String toString()
{
return CLASSES[getType()];
}
public Zone getParent()
{
return _parent;
}
public abstract int getType();
public boolean isEmpty()
{
return _prefs == null || _prefs.size() == 0;
}
public String[] getPreferences()
{
return new String[0];
}
public String[] getAdditionalPreferenceNames()
{
if (_prefs == null) {
return new String[0];
}
int n = _prefs.size();
int i = 0;
String[] s = new String[n];
Enumeration e = _prefs.keys();
while(e.hasMoreElements()) {
s[i++] = (String)e.nextElement();
}
return s;
}
public boolean deletePreference(String name)
{
if (_prefs == null) {
return false;
}
return _prefs.remove(name) != null;
}
public boolean setPreference(String name, String value)
{
if (_prefs == null) {
_prefs = new Hashlist();
}
if (value == null) {
return (_prefs.remove(name) != null);
} else {
_prefs.put(name, value);
return true;
}
}
public Object getPreference(String name)
{
if (_prefs != null) {
return _prefs.get(name);
} else {
return null;
}
}
public Object getPreference(String name, Object defaultvalue)
{
Object o = getPreference(name);
return (o != null) ? o : defaultvalue;
}
public boolean getBooleanPreference(String name)
{
return getBooleanPreference(name, false);
}
public boolean getBooleanPreference(String name, boolean defaultvalue)
{
if (_prefs != null) {
String v = (String)_prefs.get(name);
if (v != null) {
return v.equalsIgnoreCase("true");
}
}
return defaultvalue;
}
public int getIntPreference(String name)
{
return getIntPreference(name, 0);
}
public int getIntPreference(String name, int defaultvalue)
{
if (_prefs != null) {
String v = (String)_prefs.get(name);
if (v != null) {
try {
return Integer.parseInt(v);
} catch (NumberFormatException e) {
}
}
}
return defaultvalue;
}
public boolean configure(Configurable configurable)
{
return false;
}
public void deleteConfiguration(Configurable configurable)
{
}
public Configurable[] getConfigurations()
{
return new Configurable[0];
}
public static String[] parseValues(String values)
{
int n = values.length();
int i = 0;
int state = 0;
java.util.ArrayList list = new java.util.ArrayList();
StringBuffer buffer = new StringBuffer();
while(i<n) {
char ch = values.charAt(i++);
switch(state) {
case 0:
// expect value
switch(ch) {
case ',':
case ' ':
case '\t':
case '\r':
case '\n':
//ignore
break;
case '"':
// "value" started
state = 1;
break;
default:
// value started
state = 3;
buffer.append(ch);
break;
}
break;
case 2:
state = 1;
buffer.append(ch);
break;
case 1:
switch(ch) {
case '\\':
state = 2;
break;
case '"':
list.add(buffer.toString());
buffer.setLength(0);
state = 0;
break;
default:
buffer.append(ch);
break;
}
break;
case 4:
state = 3;
buffer.append(ch);
break;
case 3:
switch(ch) {
case '\\':
state = 4;
break;
case ' ':
case '\t':
case '\r':
case '\n':
list.add(buffer.toString());
buffer.setLength(0);
state = 0;
break;
case ',':
list.add(buffer.toString());
buffer.setLength(0);
state = 0;
break;
default:
buffer.append(ch);
break;
}
break;
}
}
if (state == 1 || state == 3) {
list.add(buffer.toString());
}
n = list.size();
return (String[])list.toArray(new String[n]);
}
}