Class PropertiesList

  • All Implemented Interfaces:
    java.io.Serializable, java.lang.Cloneable, java.util.Map<java.lang.Object,​java.lang.Object>

    public class PropertiesList
    extends java.util.Properties
    A PropertiesList instance is intended to be an element of a doubly linked list consisting of other PropertiesList instances. Each PropertiesList instance "wraps" a Dictionary object. A PropertiesList is a subclass of Properties and therefore provides the same API, including the methods and fields of Dictionary and Hashtable. The PropertiesList class overrides all methods of the Properties API and delegates the method evaluation to the wrapped Properties object.

    The linked list of PropertiesList objects is constructed by Request for each incoming request. That is, there is a unique PropertiesList linked list for each request. The head of the initial list constructed by request is Request.props and the tail of the two element list is Request.serverProps. The former wraps an empty Properties object, while the latter wraps Server.props. Other PropertiesList objects can be added, and removed, from this initial list as required.

    Given a reference to a PropertiesList object on the linked list (e.g. request.props), one typically "looks up" the value associated with a name using the getProperty method, which delegates to the wrapped Properties.getProperty method. If the result is null, meaning the name/value pair is not stored in the wrapped Properties object, the request is "forwarded" to the next object on the linked list, and so on until either the name/value pair is found (and the value is returned) or the end of the list is reached (and null is returned).

    It may be desirable for the name/value lookup to be delayed until after the lookup request has been passed on to subsequent objects on the list. This can be done by using the two parameter constructor and setting the second, boolean, parameter to true. Then the getProperty request is forwarded to the next object in the list rather than delegated to the wrapped Properties object. If the result of the forwarded request is null, the request is then passed to the wrapped Properties object and it's result is returned.

    Version:
    2.8
    Author:
    Steve Drach <drach@sun.com>
    See Also:
    Dictionary, Hashtable, Properties, Serialized Form
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static boolean debug
      Set true to turn on debug output.
      • Fields inherited from class java.util.Properties

        defaults
    • Constructor Summary

      Constructors 
      Constructor Description
      PropertiesList()
      Constructs a new PropertiesList object that wraps an empty new Properties object.
      PropertiesList​(java.util.Dictionary dict)
      Constructs a new PropertiesList object that wraps the input Dictionary.
      PropertiesList​(java.util.Dictionary dict, boolean searchNextFirst)
      Constructs a new PropertiesList object that wraps the input Dictionary.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addAfter​(PropertiesList cursor)
      Adds this PropertiesList object into a linked list following the object referenced by the cursor parameter.
      void addBefore​(PropertiesList cursor)
      Adds this PropertiesList object into a linked list preceding the object referenced by the cursor parameter.
      void clear()
      Invokes the same method on the wrapped Hashtable object.
      java.lang.Object clone()
      Invokes the same method on the wrapped Hashtable object.
      boolean contains​(java.lang.Object value)
      Invokes the same method on the wrapped Hashtable object.
      boolean containsKey​(java.lang.Object key)
      Invokes the same method on the wrapped Hashtable object.
      void dump​(boolean full, java.lang.String msg)
      Starting with this object, print the contents of this and succeeding objects that are on the same list as this object is.
      java.util.Enumeration elements()
      Invokes the same method on the wrapped Dictionary object.
      java.util.Set entrySet()
      Invokes the same method on the wrapped Hashtable object.
      boolean equals​(java.lang.Object o)
      Invokes the same method on the wrapped Hashtable object.
      java.lang.Object get​(java.lang.Object key)
      Invokes the same method on the wrapped Dictionary object.
      PropertiesList getHead()
      Returns the PropertiesList object that is the first object on the list of which this object is a member.
      PropertiesList getNext()
      Returns the PropertiesList object that succedes this object on the list of which this object is a member.
      PropertiesList getPrior()
      Returns the PropertiesList object that precedes this object on the list of which this object is a member.
      java.lang.String getProperty​(java.lang.String key)
      Looks up key in the wrapped object.
      java.lang.String getProperty​(java.lang.String key, java.lang.String defaultValue)
      Uses getProperty(String) to look up the value associated with the key.
      java.util.Dictionary getWrapped()
      Returns the Dictionary object wrapped by this PropertiesList.
      int hashCode()
      Invokes the same method on the wrapped Hashtable object.
      boolean isEmpty()
      Invokes the same method on the wrapped Dictionary object.
      boolean isTransient()
      Sub-classes of PropertiesList can override this to mark themselves "transient", in which case addAfter will skip this list.
      java.util.Enumeration keys()
      Invokes the same method on the wrapped Dictionary object.
      java.util.Set keySet()
      Invokes the same method on the wrapped Hashtable object.
      void list​(java.io.PrintStream out)
      Invokes the same method on the wrapped Properties object.
      void list​(java.io.PrintWriter out)
      Invokes the same method on the wrapped Properties object.
      void load​(java.io.InputStream in)
      Invokes the same method on the wrapped Properties object.
      java.util.Enumeration propertyNames()
      Invokes the same method on the wrapped Properties object.
      java.util.Enumeration propertyNames​(java.lang.String pattern)
      Returns an Enumeration of property names that match a glob pattern.
      java.lang.Object put​(java.lang.Object key, java.lang.Object value)
      Invokes the same method on the wrapped Dictionary object.
      void putAll​(java.util.Map t)
      Invokes the same method on the wrapped Hashtable object.
      boolean remove()
      Remove this object from the list in which it's a member.
      java.lang.Object remove​(java.lang.Object key)
      Invokes the same method on the wrapped Dictionary object.
      boolean removeProperty​(java.lang.String key)
      Remove the key and its associated value from the first properties object in the chain that contains this key.
      boolean removeProperty​(java.lang.String key, boolean all)
      Remove a property from a a chain of properties lists.
      void save​(java.io.OutputStream out, java.lang.String header)
      Invokes the same method on the wrapped Properties object.
      java.lang.Object setProperty​(java.lang.String key, java.lang.String value)
      Invokes the same method on the wrapped Properties object if it exists.
      int size()
      Invokes the same method on the wrapped Dictionary object.
      void store​(java.io.OutputStream out, java.lang.String header)
      Invokes the same method on the wrapped Properties object.
      java.lang.String toString()
      Returns a String containing the System.identityHashCodes of this object, the wrapped object, and the preceding and succeding objects on the list of which this object is a member.
      java.util.Collection values()
      Invokes the same method on the wrapped Hashtable object.
      PropertiesList wraps​(java.util.Dictionary d)
      Find the first PropertiesList object on the list of which this object is a member that wraps the Dictionary parameter.
      • Methods inherited from class java.util.Properties

        compute, computeIfAbsent, computeIfPresent, containsValue, forEach, getOrDefault, load, loadFromXML, merge, putIfAbsent, rehash, remove, replace, replace, replaceAll, store, storeToXML, storeToXML, storeToXML, stringPropertyNames
      • Methods inherited from class java.lang.Object

        finalize, getClass, notify, notifyAll, wait, wait, wait
    • Field Detail

      • debug

        public static boolean debug
        Set true to turn on debug output. It's alot of output and probably of use only to the author. Note, if server.props contains the name debugProps this variable will be set true by Server.
    • Constructor Detail

      • PropertiesList

        public PropertiesList()
        Constructs a new PropertiesList object that wraps an empty new Properties object.
      • PropertiesList

        public PropertiesList​(java.util.Dictionary dict)
        Constructs a new PropertiesList object that wraps the input Dictionary.
        Parameters:
        dict - The Dictionary object wrapped by this PropertiesList.
      • PropertiesList

        public PropertiesList​(java.util.Dictionary dict,
                              boolean searchNextFirst)
        Constructs a new PropertiesList object that wraps the input Dictionary. If the boolean parameter is set true, the wrapped Dictionary is searched after subsequent PropertiesList objects in the linked list are searched, and only if the result of that search was null.
        Parameters:
        dict - The Dictionary object wrapped by this PropertiesList.
        searchNextFirst - If true all the following objects in the list are searched before this one.
    • Method Detail

      • getWrapped

        public java.util.Dictionary getWrapped()
        Returns the Dictionary object wrapped by this PropertiesList.
      • addAfter

        public void addAfter​(PropertiesList cursor)
        Adds this PropertiesList object into a linked list following the object referenced by the cursor parameter. The result is a list that could look like: request.props -> cursor -> this -> serverProps

        Any transient properties lists's are skipped over before this one is inserted into the list

        Parameters:
        cursor - The list object that will precede this object.
      • addBefore

        public void addBefore​(PropertiesList cursor)
        Adds this PropertiesList object into a linked list preceding the object referenced by the cursor parameter. The result is a list that could look like: request.props -> this -> cursor -> serverProps
        Parameters:
        cursor - The list object that will succede this object.
      • remove

        public boolean remove()
        Remove this object from the list in which it's a member.
        Returns:
        true.
      • getNext

        public PropertiesList getNext()
        Returns the PropertiesList object that succedes this object on the list of which this object is a member.
        Returns:
        A PropertiesList object or null.
      • getPrior

        public PropertiesList getPrior()
        Returns the PropertiesList object that precedes this object on the list of which this object is a member.
        Returns:
        A PropertiesList object or null.
      • getHead

        public PropertiesList getHead()
        Returns the PropertiesList object that is the first object on the list of which this object is a member. Note that the first object may be this object.
        Returns:
        A PropertiesList object.
      • wraps

        public PropertiesList wraps​(java.util.Dictionary d)
        Find the first PropertiesList object on the list of which this object is a member that wraps the Dictionary parameter.
        Parameters:
        d - The Dictionary that is compared with the wrapped Dictionary's for a match.
        Returns:
        PropertiesList object that wraps the input parameter, otherwise null.
      • dump

        public void dump​(boolean full,
                         java.lang.String msg)
        Starting with this object, print the contents of this and succeeding objects that are on the same list as this object is.
        Parameters:
        full - If true also print the contents of the wrapped Dictionary object.
        msg - If not null, add this message to the header line.
      • elements

        public java.util.Enumeration elements()
        Invokes the same method on the wrapped Dictionary object.
        Overrides:
        elements in class java.util.Properties
      • get

        public java.lang.Object get​(java.lang.Object key)
        Invokes the same method on the wrapped Dictionary object.
        Specified by:
        get in interface java.util.Map<java.lang.Object,​java.lang.Object>
        Overrides:
        get in class java.util.Properties
      • isEmpty

        public boolean isEmpty()
        Invokes the same method on the wrapped Dictionary object.
        Specified by:
        isEmpty in interface java.util.Map<java.lang.Object,​java.lang.Object>
        Overrides:
        isEmpty in class java.util.Properties
      • keys

        public java.util.Enumeration keys()
        Invokes the same method on the wrapped Dictionary object.
        Overrides:
        keys in class java.util.Properties
      • put

        public java.lang.Object put​(java.lang.Object key,
                                    java.lang.Object value)
        Invokes the same method on the wrapped Dictionary object.
        Specified by:
        put in interface java.util.Map<java.lang.Object,​java.lang.Object>
        Overrides:
        put in class java.util.Properties
      • remove

        public java.lang.Object remove​(java.lang.Object key)
        Invokes the same method on the wrapped Dictionary object.
        Specified by:
        remove in interface java.util.Map<java.lang.Object,​java.lang.Object>
        Overrides:
        remove in class java.util.Properties
      • size

        public int size()
        Invokes the same method on the wrapped Dictionary object.
        Specified by:
        size in interface java.util.Map<java.lang.Object,​java.lang.Object>
        Overrides:
        size in class java.util.Properties
      • clear

        public void clear()
        Invokes the same method on the wrapped Hashtable object.
        Specified by:
        clear in interface java.util.Map<java.lang.Object,​java.lang.Object>
        Overrides:
        clear in class java.util.Properties
      • clone

        public java.lang.Object clone()
        Invokes the same method on the wrapped Hashtable object.
        Overrides:
        clone in class java.util.Properties
      • contains

        public boolean contains​(java.lang.Object value)
        Invokes the same method on the wrapped Hashtable object.
        Overrides:
        contains in class java.util.Properties
      • containsKey

        public boolean containsKey​(java.lang.Object key)
        Invokes the same method on the wrapped Hashtable object.
        Specified by:
        containsKey in interface java.util.Map<java.lang.Object,​java.lang.Object>
        Overrides:
        containsKey in class java.util.Properties
      • entrySet

        public java.util.Set entrySet()
        Invokes the same method on the wrapped Hashtable object.
        Specified by:
        entrySet in interface java.util.Map<java.lang.Object,​java.lang.Object>
        Overrides:
        entrySet in class java.util.Properties
      • equals

        public boolean equals​(java.lang.Object o)
        Invokes the same method on the wrapped Hashtable object.
        Specified by:
        equals in interface java.util.Map<java.lang.Object,​java.lang.Object>
        Overrides:
        equals in class java.util.Properties
      • hashCode

        public int hashCode()
        Invokes the same method on the wrapped Hashtable object.
        Specified by:
        hashCode in interface java.util.Map<java.lang.Object,​java.lang.Object>
        Overrides:
        hashCode in class java.util.Properties
      • keySet

        public java.util.Set keySet()
        Invokes the same method on the wrapped Hashtable object.
        Specified by:
        keySet in interface java.util.Map<java.lang.Object,​java.lang.Object>
        Overrides:
        keySet in class java.util.Properties
      • putAll

        public void putAll​(java.util.Map t)
        Invokes the same method on the wrapped Hashtable object.
        Specified by:
        putAll in interface java.util.Map<java.lang.Object,​java.lang.Object>
        Overrides:
        putAll in class java.util.Properties
      • values

        public java.util.Collection values()
        Invokes the same method on the wrapped Hashtable object.
        Specified by:
        values in interface java.util.Map<java.lang.Object,​java.lang.Object>
        Overrides:
        values in class java.util.Properties
      • toString

        public java.lang.String toString()
        Returns a String containing the System.identityHashCodes of this object, the wrapped object, and the preceding and succeding objects on the list of which this object is a member. Additionally, if debug is true, the result of invoking toString on the wrapped Dictionary is appended.
        Overrides:
        toString in class java.util.Properties
        Returns:
        String representation of this object.
      • getProperty

        public java.lang.String getProperty​(java.lang.String key)
        Looks up key in the wrapped object. If the result is null the request is forwarded to the succeeding object in the list of which this object is a member. If the search order was changed by constructing this object with the two parameter constructor, the request is first forwarded and then, if the result of the forwarded request is null, the key is looked up in the wrapped Properties object.
        Overrides:
        getProperty in class java.util.Properties
        Parameters:
        key - The key whose value is sought.
        Returns:
        The value or null.
      • getProperty

        public java.lang.String getProperty​(java.lang.String key,
                                            java.lang.String defaultValue)
        Uses getProperty(String) to look up the value associated with the key. If the result is null, returns the default value.
        Overrides:
        getProperty in class java.util.Properties
        Parameters:
        key - The key whose value is sought.
        defaultValue - The default value.
        Returns:
        The value or null.
      • removeProperty

        public boolean removeProperty​(java.lang.String key,
                                      boolean all)
        Remove a property from a a chain of properties lists. if "all" is specified, then remove all the keys and values from all property lists in the chain instead of just the first one found.
        Parameters:
        key - The key whose value is to be removed
        all - remove all matching keys.
        Returns:
        true, if at least one key/value pair was removed.
      • removeProperty

        public boolean removeProperty​(java.lang.String key)
        Remove the key and its associated value from the first properties object in the chain that contains this key.
        Returns:
        true, if the key was removed.
      • list

        public void list​(java.io.PrintStream out)
        Invokes the same method on the wrapped Properties object.
        Overrides:
        list in class java.util.Properties
      • list

        public void list​(java.io.PrintWriter out)
        Invokes the same method on the wrapped Properties object.
        Overrides:
        list in class java.util.Properties
      • load

        public void load​(java.io.InputStream in)
                  throws java.io.IOException
        Invokes the same method on the wrapped Properties object.
        Overrides:
        load in class java.util.Properties
        Throws:
        java.io.IOException
      • propertyNames

        public java.util.Enumeration propertyNames()
        Invokes the same method on the wrapped Properties object.
        Overrides:
        propertyNames in class java.util.Properties
      • save

        public void save​(java.io.OutputStream out,
                         java.lang.String header)
        Invokes the same method on the wrapped Properties object.
        Overrides:
        save in class java.util.Properties
      • setProperty

        public java.lang.Object setProperty​(java.lang.String key,
                                            java.lang.String value)
        Invokes the same method on the wrapped Properties object if it exists. Otherwise invokes put on the wrapped Dictionary object.
        Overrides:
        setProperty in class java.util.Properties
      • store

        public void store​(java.io.OutputStream out,
                          java.lang.String header)
                   throws java.io.IOException
        Invokes the same method on the wrapped Properties object.
        Overrides:
        store in class java.util.Properties
        Throws:
        java.io.IOException
      • propertyNames

        public java.util.Enumeration propertyNames​(java.lang.String pattern)
        Returns an Enumeration of property names that match a glob pattern.
        Parameters:
        pattern - The glob pattern to match.
        Returns:
        An Enumeration containing matching property names, if any.
      • isTransient

        public boolean isTransient()
        Sub-classes of PropertiesList can override this to mark themselves "transient", in which case addAfter will skip this list.