Class ContextBase

  • All Implemented Interfaces:
    java.io.Serializable, java.lang.Cloneable, java.util.Map, Context
    Direct Known Subclasses:
    WebContext

    public class ContextBase
    extends java.util.HashMap
    implements Context

    Convenience base class for Context implementations.

    In addition to the minimal functionality required by the Context interface, this class implements the recommended support for Attribute-Property Transparency. This is implemented by analyzing the available JavaBeans properties of this class (or its subclass), exposes them as key-value pairs in the Map, with the key being the name of the property itself.

    IMPLEMENTATION NOTE - Because empty is a read-only property defined by the Map interface, it may not be utilized as an attribute key or property name.

    Version:
    $Revision: 499247 $ $Date: 2007-01-24 04:09:44 +0000 (Wed, 24 Jan 2007) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private class  ContextBase.EntrySetImpl
      Private implementation of Set that implements the semantics required for the value returned by entrySet().
      private class  ContextBase.EntrySetIterator
      Private implementation of Iterator for the Set returned by entrySet().
      private class  ContextBase.MapEntryImpl
      Private implementation of Map.Entry for each item in EntrySetImpl.
      private class  ContextBase.ValuesImpl
      Private implementation of Collection that implements the semantics required for the value returned by values().
      private class  ContextBase.ValuesIterator
      Private implementation of Iterator for the Collection returned by values().
      • Nested classes/interfaces inherited from class java.util.AbstractMap

        java.util.AbstractMap.SimpleEntry<K extends java.lang.Object,​V extends java.lang.Object>, java.util.AbstractMap.SimpleImmutableEntry<K extends java.lang.Object,​V extends java.lang.Object>
      • Nested classes/interfaces inherited from interface java.util.Map

        java.util.Map.Entry<K extends java.lang.Object,​V extends java.lang.Object>
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.util.Map descriptors
      The PropertyDescriptors for all JavaBeans properties of this Context implementation class, keyed by property name.
      private java.beans.PropertyDescriptor[] pd
      The same PropertyDescriptors as an array.
      private static java.lang.Object singleton
      Distinguished singleton value that is stored in the map for each key that is actually a property.
      private static java.lang.Object[] zeroParams
      Zero-length array of parameter values for calling property getters.
    • Constructor Summary

      Constructors 
      Constructor Description
      ContextBase()
      Default, no argument constructor.
      ContextBase​(java.util.Map map)
      Initialize the contents of this Context by copying the values from the specified Map.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void clear()
      Override the default Map behavior to clear all keys and values except those corresponding to JavaBeans properties.
      boolean containsValue​(java.lang.Object value)
      Override the default Map behavior to return true if the specified value is present in either the underlying Map or one of the local property values.
      private java.util.Iterator entriesIterator()
      Return an Iterator over the set of Map.Entry objects representing our key-value pairs.
      private java.util.Map.Entry entry​(java.lang.Object key)
      Return a Map.Entry for the specified key value, if it is present; otherwise, return null.
      java.util.Set entrySet()
      Override the default Map behavior to return a Set that meets the specified default behavior except for attempts to remove the key for a property of the Context implementation class, which will throw UnsupportedOperationException.
      java.lang.Object get​(java.lang.Object key)
      Override the default Map behavior to return the value of a local property if the specified key matches a local property name.
      private void initialize()
      Customize the contents of our underlying Map so that it contains keys corresponding to all of the JavaBeans properties of the Context implementation class.
      boolean isEmpty()
      Override the default Map behavior to return true if the underlying Map only contains key-value pairs for local properties (if any).
      java.util.Set keySet()
      Override the default Map behavior to return a Set that meets the specified default behavior except for attempts to remove the key for a property of the Context implementation class, which will throw UnsupportedOperationException.
      java.lang.Object put​(java.lang.Object key, java.lang.Object value)
      Override the default Map behavior to set the value of a local property if the specified key matches a local property name.
      void putAll​(java.util.Map map)
      Override the default Map behavior to call the put() method individually for each key-value pair in the specified Map.
      private java.lang.Object readProperty​(java.beans.PropertyDescriptor descriptor)
      Get and return the value for the specified property.
      java.lang.Object remove​(java.lang.Object key)
      Override the default Map behavior to throw UnsupportedOperationException on any attempt to remove a key that is the name of a local property.
      private boolean remove​(java.util.Map.Entry entry)
      Remove the specified key-value pair, if it exists, and return true.
      java.util.Collection values()
      Override the default Map behavior to return a Collection that meets the specified default behavior except for attempts to remove the key for a property of the Context implementation class, which will throw UnsupportedOperationException.
      private java.util.Iterator valuesIterator()
      Return an Iterator over the set of values in this Map.
      private void writeProperty​(java.beans.PropertyDescriptor descriptor, java.lang.Object value)
      Set the value for the specified property.
      • Methods inherited from class java.util.HashMap

        clone, compute, computeIfAbsent, computeIfPresent, containsKey, forEach, getOrDefault, merge, putIfAbsent, remove, replace, replace, replaceAll, size
      • Methods inherited from class java.util.AbstractMap

        equals, hashCode, toString
      • Methods inherited from class java.lang.Object

        finalize, getClass, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface java.util.Map

        compute, computeIfAbsent, computeIfPresent, containsKey, equals, forEach, getOrDefault, hashCode, merge, putIfAbsent, remove, replace, replace, replaceAll, size
    • Field Detail

      • descriptors

        private transient java.util.Map descriptors

        The PropertyDescriptors for all JavaBeans properties of this Context implementation class, keyed by property name. This collection is allocated only if there are any JavaBeans properties.

      • pd

        private transient java.beans.PropertyDescriptor[] pd

        The same PropertyDescriptors as an array.

      • singleton

        private static java.lang.Object singleton

        Distinguished singleton value that is stored in the map for each key that is actually a property. This value is used to ensure that equals() comparisons will always fail.

      • zeroParams

        private static java.lang.Object[] zeroParams

        Zero-length array of parameter values for calling property getters.

    • Constructor Detail

      • ContextBase

        public ContextBase()
        Default, no argument constructor.
      • ContextBase

        public ContextBase​(java.util.Map map)

        Initialize the contents of this Context by copying the values from the specified Map. Any keys in map that correspond to local properties will cause the setter method for that property to be called.

        Parameters:
        map - Map whose key-value pairs are added
        Throws:
        java.lang.IllegalArgumentException - if an exception is thrown writing a local property value
        java.lang.UnsupportedOperationException - if a local property does not have a write method.
    • Method Detail

      • clear

        public void clear()

        Override the default Map behavior to clear all keys and values except those corresponding to JavaBeans properties.

        Specified by:
        clear in interface java.util.Map
        Overrides:
        clear in class java.util.HashMap
      • containsValue

        public boolean containsValue​(java.lang.Object value)

        Override the default Map behavior to return true if the specified value is present in either the underlying Map or one of the local property values.

        Specified by:
        containsValue in interface java.util.Map
        Overrides:
        containsValue in class java.util.HashMap
        Parameters:
        value - the value look for in the context.
        Returns:
        true if found in this context otherwise false.
        Throws:
        java.lang.IllegalArgumentException - if a property getter throws an exception
      • entrySet

        public java.util.Set entrySet()

        Override the default Map behavior to return a Set that meets the specified default behavior except for attempts to remove the key for a property of the Context implementation class, which will throw UnsupportedOperationException.

        Specified by:
        entrySet in interface java.util.Map
        Overrides:
        entrySet in class java.util.HashMap
        Returns:
        Set of entries in the Context.
      • get

        public java.lang.Object get​(java.lang.Object key)

        Override the default Map behavior to return the value of a local property if the specified key matches a local property name.

        IMPLEMENTATION NOTE - If the specified key identifies a write-only property, null will arbitrarily be returned, in order to avoid difficulties implementing the contracts of the Map interface.

        Specified by:
        get in interface java.util.Map
        Overrides:
        get in class java.util.HashMap
        Parameters:
        key - Key of the value to be returned
        Returns:
        The value for the specified key.
        Throws:
        java.lang.IllegalArgumentException - if an exception is thrown reading this local property value
        java.lang.UnsupportedOperationException - if this local property does not have a read method.
      • isEmpty

        public boolean isEmpty()

        Override the default Map behavior to return true if the underlying Map only contains key-value pairs for local properties (if any).

        Specified by:
        isEmpty in interface java.util.Map
        Overrides:
        isEmpty in class java.util.HashMap
        Returns:
        true if this Context is empty, otherwise false.
      • keySet

        public java.util.Set keySet()

        Override the default Map behavior to return a Set that meets the specified default behavior except for attempts to remove the key for a property of the Context implementation class, which will throw UnsupportedOperationException.

        Specified by:
        keySet in interface java.util.Map
        Overrides:
        keySet in class java.util.HashMap
        Returns:
        The set of keys for objects in this Context.
      • put

        public java.lang.Object put​(java.lang.Object key,
                                    java.lang.Object value)

        Override the default Map behavior to set the value of a local property if the specified key matches a local property name.

        Specified by:
        put in interface java.util.Map
        Overrides:
        put in class java.util.HashMap
        Parameters:
        key - Key of the value to be stored or replaced
        value - New value to be stored
        Returns:
        The value added to the Context.
        Throws:
        java.lang.IllegalArgumentException - if an exception is thrown reading or wrting this local property value
        java.lang.UnsupportedOperationException - if this local property does not have both a read method and a write method
      • putAll

        public void putAll​(java.util.Map map)

        Override the default Map behavior to call the put() method individually for each key-value pair in the specified Map.

        Specified by:
        putAll in interface java.util.Map
        Overrides:
        putAll in class java.util.HashMap
        Parameters:
        map - Map containing key-value pairs to store (or replace)
        Throws:
        java.lang.IllegalArgumentException - if an exception is thrown reading or wrting a local property value
        java.lang.UnsupportedOperationException - if a local property does not have both a read method and a write method
      • remove

        public java.lang.Object remove​(java.lang.Object key)

        Override the default Map behavior to throw UnsupportedOperationException on any attempt to remove a key that is the name of a local property.

        Specified by:
        remove in interface java.util.Map
        Overrides:
        remove in class java.util.HashMap
        Parameters:
        key - Key to be removed
        Returns:
        The value removed from the Context.
        Throws:
        java.lang.UnsupportedOperationException - if the specified key matches the name of a local property
      • values

        public java.util.Collection values()

        Override the default Map behavior to return a Collection that meets the specified default behavior except for attempts to remove the key for a property of the Context implementation class, which will throw UnsupportedOperationException.

        Specified by:
        values in interface java.util.Map
        Overrides:
        values in class java.util.HashMap
        Returns:
        The collection of values in this Context.
      • entriesIterator

        private java.util.Iterator entriesIterator()

        Return an Iterator over the set of Map.Entry objects representing our key-value pairs.

      • entry

        private java.util.Map.Entry entry​(java.lang.Object key)

        Return a Map.Entry for the specified key value, if it is present; otherwise, return null.

        Parameters:
        key - Attribute key or property name
      • initialize

        private void initialize()

        Customize the contents of our underlying Map so that it contains keys corresponding to all of the JavaBeans properties of the Context implementation class.

        Throws:
        java.lang.IllegalArgumentException - if an exception is thrown writing this local property value
        java.lang.UnsupportedOperationException - if this local property does not have a write method.
      • readProperty

        private java.lang.Object readProperty​(java.beans.PropertyDescriptor descriptor)

        Get and return the value for the specified property.

        Parameters:
        descriptor - PropertyDescriptor for the specified property
        Throws:
        java.lang.IllegalArgumentException - if an exception is thrown reading this local property value
        java.lang.UnsupportedOperationException - if this local property does not have a read method.
      • remove

        private boolean remove​(java.util.Map.Entry entry)

        Remove the specified key-value pair, if it exists, and return true. If this pair does not exist, return false.

        Parameters:
        entry - Key-value pair to be removed
        Throws:
        java.lang.UnsupportedOperationException - if the specified key identifies a property instead of an attribute
      • valuesIterator

        private java.util.Iterator valuesIterator()

        Return an Iterator over the set of values in this Map.

      • writeProperty

        private void writeProperty​(java.beans.PropertyDescriptor descriptor,
                                   java.lang.Object value)

        Set the value for the specified property.

        Parameters:
        descriptor - PropertyDescriptor for the specified property
        value - The new value for this property (must be of the correct type)
        Throws:
        java.lang.IllegalArgumentException - if an exception is thrown writing this local property value
        java.lang.UnsupportedOperationException - if this local property does not have a write method.