FileDocCategorySizeDatePackage
Properties.javaAPI DocphoneME MR2 API (J2ME)11406Wed May 02 18:00:10 BST 2007com.sun.midp.util

Properties

public class Properties extends Object
The Properties class represents a persistent set of properties. Each key and its corresponding value in the property list is a string.

Fields Summary
private static int
INITIAL_SIZE
An appropriate initial size for storage vectors (10).
private String[]
initProps
The initial properties as series of key-value pairs. This array will be used until a property is added, set, or removed.

The Java installer adds properties, also when a system MIDlet is run with arguments, the arguments are added to properties. 99.99% of the time, when running a downloaded MIDlet properties are not added the is no need to load the vectors.

private Vector
keys
A vector of property keys.
private Vector
vals
A vector of property values.
Constructors Summary
public Properties()
Constructor - creates an empty property list.

    
                
      
        keys = new Vector(INITIAL_SIZE);
        vals = new Vector(INITIAL_SIZE);
    
public Properties(String[] propertyStrings)
Constructor - creates an populated property list.

param
propertyStrings an array of Strings 2 per property, will be filled in with a pair pattern of key and value, this exact array will be used for property lookup (the array will not be changed). No other allocation will be done until the array is changed and at that time the initial property array will be released.

        initProps = propertyStrings;
    
Methods Summary
public synchronized voidaddProperty(java.lang.String key, java.lang.String value)
Store multiple key:value pair. Provided for parallelism with the getProperty method. Enforces use of strings for property keys and values.

param
key the key to be placed into this property list.
param
value the value corresponding to key.
see
#getProperty

        if (keys == null) {
            convertInitPropsToVectors();
        }

    	keys.addElement(key);
        vals.addElement(value);

        return;
    
private voidconvertInitPropsToVectors()
Convert the init property String array to vectors for changing properties.

        int numberOfProps;

        numberOfProps = initProps.length / 2;

        keys = new Vector(numberOfProps + INITIAL_SIZE);
        vals = new Vector(numberOfProps + INITIAL_SIZE);

        for (int i = 0; i < initProps.length; i += 2) {
            keys.addElement(initProps[i]);
            vals.addElement(initProps[i + 1]);
        }

        // The initial properties are no longer needed.
        initProps = null;
    
public java.lang.StringgetKeyAt(int index)
Gets a property key by index. Used by the JadWriter as part of the JAD Tool.

param
index 0 based index of a property
return
the key of the property with the specified index.
exception
ArrayIndexOutOfBoundsException if an invalid index was given.

        if (keys == null) {
            return initProps[index * 2];
        }

        return (String)keys.elementAt(index);
    
public java.lang.StringgetProperty(java.lang.String key)
Searches for the property with the specified key in this property list. The method returns null if the property is not found.

param
key the property key.
return
the value in this property list with the specified key value.
exception
NullPointerException is thrown if key is null.
see
#setProperty
see
#removeProperty

        String rv = null;

        if (key == null) {
            throw new NullPointerException();
        }

        if (keys == null) {
            for (int i = 0; i < initProps.length; i += 2) {
                if (initProps[i].equals(key)) {
                    rv = initProps[i + 1];
                    break;
                }
            }
        } else {
            int idx = keys.indexOf(key);
            if (idx > -1) {
                rv = (String)vals.elementAt(idx);
            }
        }

    	return rv;
    
public java.lang.StringgetPropertyIgnoreCase(java.lang.String key)
This method is very similar to getproperty() except with a difference that the keys are searched in case-insensitive manner. This is needed in certain situations like HTTP header names.

param
key the property key.
return
the value in this property list with the specified key value.
exception
NullPointerException is thrown if key is null.
see
#setProperty
see
#removeProperty

        String rv = null;

        if (key == null) {
            throw new NullPointerException();
        }

        if (keys == null) {
            for (int i = 0; i < initProps.length; i += 2) {
                if (initProps[i].equalsIgnoreCase(key)) {
                    rv = initProps[i + 1];
                    break;
                }
            }
        } else {
            int idx = -1;
            for (int count = 0; count < keys.size(); count++) {
                if (((String)keys.elementAt(count)).equalsIgnoreCase(key)) {
                    idx = count;
                }
            }
            if (idx > -1) {
                rv = (String)vals.elementAt(idx);
            }
        }

    	return rv;
    
public java.lang.StringgetValueAt(int index)
Gets a property value by index. Used by the JadWriter as part of the JAD Tool.

param
index 0 based index of a property
return
the value of the property with the specified index.
exception
ArrayIndexOutOfBoundsException if an invalid index was given.

        if (keys == null) {
            return initProps[(index * 2) + 1];
        }

        return (String)vals.elementAt(index);
    
public synchronized java.lang.StringremoveProperty(java.lang.String key)
Removes a property (key:value pair) from the property list based on the key string.

param
key the key to be removed from the property list.
return
the element associated with the key.
see
#setProperty
see
#getProperty

	int idx;
	String rv = null;

        if (keys == null) {
            convertInitPropsToVectors();
        }

	idx = keys.indexOf(key);
	if (idx > -1) {
	    rv = (String)vals.elementAt(idx);
	    keys.removeElementAt(idx);
	    vals.removeElementAt(idx);
	}

	return rv;
    
public synchronized java.lang.StringsetProperty(java.lang.String key, java.lang.String value)
Store a single key:value pair. Provided for parallelism with the getProperty method. Enforces use of strings for property keys and values. If a key already exists in storage, the value corresponding to that key will be replaced and returned.

param
key the key to be placed into this property list.
param
value the value corresponding to key.
return
if the new property value replaces an existing one, the old value is returned. otherwise, null is returned.
see
#getProperty
see
#removeProperty

        int idx;
        String rv = null;

        if (keys == null) {
            convertInitPropsToVectors();
        }

        idx = keys.indexOf(key);

        if (idx == -1) {    // If I don't have this, add it and return null
            keys.addElement(key);
            vals.addElement(value);    
        } else {	    // Else replace it and return the old one.
            rv = (String)vals.elementAt(idx);
            vals.setElementAt(value, idx);
        }

        return rv;
    
public synchronized java.lang.StringsetPropertyAt(int index, java.lang.String value)
Replace the value of the property at the given index.

param
index 0 based index of a property
param
value the new value for the property at index.
return
previous value
exception
IndexOutOfBoundsException if the index is out of bounds

        String rv;

        if (keys == null) {
            convertInitPropsToVectors();
        }

        rv = (String)vals.elementAt(index);

        vals.setElementAt(value, index);

        return rv;
    
public synchronized java.lang.StringsetPropertyIgnoreCase(java.lang.String key, java.lang.String value)
Store a single key:value pair. This method is very similar to setproperty() except with a difference that the keys are stored in case-insensitive manner. This is needed in certain situations like HTTP header names.

param
key the key to be placed into this property list.
param
value the value corresponding to key.
return
if the new property value replaces an existing one, the old value is returned. otherwise, null is returned.
see
#getProperty
see
#removeProperty

        int idx = -1;
        String rv = null;

        if (keys == null) {
            convertInitPropsToVectors();
        }

        for (int count = 0; count < keys.size(); count++) {
            if (((String)keys.elementAt(count)).equalsIgnoreCase(key)) {
                idx = count;
            }
        }

        if (idx == -1) {    // If I don't have this, add it and return null
            keys.addElement(key);
            vals.addElement(value);    
        } else {	    // Else replace it and return the old one.
            rv = (String)vals.elementAt(idx);
            vals.setElementAt(value, idx);
            /*
             * Also replace the key at idx in case there is change in case
             * for the key
             */
            keys.setElementAt(key, idx);
        }

        return rv;
    
public intsize()
Gets the number of properties.

return
number of properties

        if (keys == null) {
            return initProps.length / 2;
        }

        return keys.size();