Class ContextBase
- java.lang.Object
-
- java.util.AbstractMap<K,V>
-
- java.util.HashMap
-
- org.apache.commons.chain.impl.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
Contextimplementations.In addition to the minimal functionality required by the
Contextinterface, 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 theMap, with the key being the name of the property itself.IMPLEMENTATION NOTE - Because
emptyis a read-only property defined by theMapinterface, 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 classContextBase.EntrySetImplPrivate implementation ofSetthat implements the semantics required for the value returned byentrySet().private classContextBase.EntrySetIteratorPrivate implementation ofIteratorfor theSetreturned byentrySet().private classContextBase.MapEntryImplPrivate implementation ofMap.Entryfor each item inEntrySetImpl.private classContextBase.ValuesImplPrivate implementation ofCollectionthat implements the semantics required for the value returned byvalues().private classContextBase.ValuesIteratorPrivate implementation ofIteratorfor theCollectionreturned byvalues().
-
Field Summary
Fields Modifier and Type Field Description private java.util.MapdescriptorsThePropertyDescriptors for all JavaBeans properties of thisContextimplementation class, keyed by property name.private java.beans.PropertyDescriptor[]pdThe samePropertyDescriptors as an array.private static java.lang.ObjectsingletonDistinguished singleton value that is stored in the map for each key that is actually a property.private static java.lang.Object[]zeroParamsZero-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 thisContextby copying the values from the specifiedMap.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclear()Override the defaultMapbehavior to clear all keys and values except those corresponding to JavaBeans properties.booleancontainsValue(java.lang.Object value)Override the defaultMapbehavior to returntrueif the specified value is present in either the underlyingMapor one of the local property values.private java.util.IteratorentriesIterator()Return anIteratorover the set ofMap.Entryobjects representing our key-value pairs.private java.util.Map.Entryentry(java.lang.Object key)Return aMap.Entryfor the specified key value, if it is present; otherwise, returnnull.java.util.SetentrySet()Override the defaultMapbehavior to return aSetthat meets the specified default behavior except for attempts to remove the key for a property of theContextimplementation class, which will throwUnsupportedOperationException.java.lang.Objectget(java.lang.Object key)Override the defaultMapbehavior to return the value of a local property if the specified key matches a local property name.private voidinitialize()Customize the contents of our underlyingMapso that it contains keys corresponding to all of the JavaBeans properties of theContextimplementation class.booleanisEmpty()Override the defaultMapbehavior to returntrueif the underlyingMaponly contains key-value pairs for local properties (if any).java.util.SetkeySet()Override the defaultMapbehavior to return aSetthat meets the specified default behavior except for attempts to remove the key for a property of theContextimplementation class, which will throwUnsupportedOperationException.java.lang.Objectput(java.lang.Object key, java.lang.Object value)Override the defaultMapbehavior to set the value of a local property if the specified key matches a local property name.voidputAll(java.util.Map map)Override the defaultMapbehavior to call theput()method individually for each key-value pair in the specifiedMap.private java.lang.ObjectreadProperty(java.beans.PropertyDescriptor descriptor)Get and return the value for the specified property.java.lang.Objectremove(java.lang.Object key)Override the defaultMapbehavior to throwUnsupportedOperationExceptionon any attempt to remove a key that is the name of a local property.private booleanremove(java.util.Map.Entry entry)Remove the specified key-value pair, if it exists, and returntrue.java.util.Collectionvalues()Override the defaultMapbehavior to return aCollectionthat meets the specified default behavior except for attempts to remove the key for a property of theContextimplementation class, which will throwUnsupportedOperationException.private java.util.IteratorvaluesIterator()Return anIteratorover the set of values in thisMap.private voidwriteProperty(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
-
-
-
-
Field Detail
-
descriptors
private transient java.util.Map descriptors
The
PropertyDescriptors for all JavaBeans properties of thisContextimplementation 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
Contextby copying the values from the specifiedMap. Any keys inmapthat 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 valuejava.lang.UnsupportedOperationException- if a local property does not have a write method.
-
-
Method Detail
-
clear
public void clear()
Override the default
Mapbehavior to clear all keys and values except those corresponding to JavaBeans properties.- Specified by:
clearin interfacejava.util.Map- Overrides:
clearin classjava.util.HashMap
-
containsValue
public boolean containsValue(java.lang.Object value)
Override the default
Mapbehavior to returntrueif the specified value is present in either the underlyingMapor one of the local property values.- Specified by:
containsValuein interfacejava.util.Map- Overrides:
containsValuein classjava.util.HashMap- Parameters:
value- the value look for in the context.- Returns:
trueif found in this context otherwisefalse.- Throws:
java.lang.IllegalArgumentException- if a property getter throws an exception
-
entrySet
public java.util.Set entrySet()
Override the default
Mapbehavior to return aSetthat meets the specified default behavior except for attempts to remove the key for a property of theContextimplementation class, which will throwUnsupportedOperationException.- Specified by:
entrySetin interfacejava.util.Map- Overrides:
entrySetin classjava.util.HashMap- Returns:
- Set of entries in the Context.
-
get
public java.lang.Object get(java.lang.Object key)
Override the default
Mapbehavior to return the value of a local property if the specified key matches a local property name.IMPLEMENTATION NOTE - If the specified
keyidentifies a write-only property,nullwill arbitrarily be returned, in order to avoid difficulties implementing the contracts of theMapinterface.- Specified by:
getin interfacejava.util.Map- Overrides:
getin classjava.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 valuejava.lang.UnsupportedOperationException- if this local property does not have a read method.
-
isEmpty
public boolean isEmpty()
Override the default
Mapbehavior to returntrueif the underlyingMaponly contains key-value pairs for local properties (if any).- Specified by:
isEmptyin interfacejava.util.Map- Overrides:
isEmptyin classjava.util.HashMap- Returns:
trueif this Context is empty, otherwisefalse.
-
keySet
public java.util.Set keySet()
Override the default
Mapbehavior to return aSetthat meets the specified default behavior except for attempts to remove the key for a property of theContextimplementation class, which will throwUnsupportedOperationException.- Specified by:
keySetin interfacejava.util.Map- Overrides:
keySetin classjava.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
Mapbehavior to set the value of a local property if the specified key matches a local property name.- Specified by:
putin interfacejava.util.Map- Overrides:
putin classjava.util.HashMap- Parameters:
key- Key of the value to be stored or replacedvalue- 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 valuejava.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
Mapbehavior to call theput()method individually for each key-value pair in the specifiedMap.- Specified by:
putAllin interfacejava.util.Map- Overrides:
putAllin classjava.util.HashMap- Parameters:
map-Mapcontaining key-value pairs to store (or replace)- Throws:
java.lang.IllegalArgumentException- if an exception is thrown reading or wrting a local property valuejava.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
Mapbehavior to throwUnsupportedOperationExceptionon any attempt to remove a key that is the name of a local property.- Specified by:
removein interfacejava.util.Map- Overrides:
removein classjava.util.HashMap- Parameters:
key- Key to be removed- Returns:
- The value removed from the Context.
- Throws:
java.lang.UnsupportedOperationException- if the specifiedkeymatches the name of a local property
-
values
public java.util.Collection values()
Override the default
Mapbehavior to return aCollectionthat meets the specified default behavior except for attempts to remove the key for a property of theContextimplementation class, which will throwUnsupportedOperationException.- Specified by:
valuesin interfacejava.util.Map- Overrides:
valuesin classjava.util.HashMap- Returns:
- The collection of values in this Context.
-
entriesIterator
private java.util.Iterator entriesIterator()
Return an
Iteratorover the set ofMap.Entryobjects representing our key-value pairs.
-
entry
private java.util.Map.Entry entry(java.lang.Object key)
Return a
Map.Entryfor the specified key value, if it is present; otherwise, returnnull.- Parameters:
key- Attribute key or property name
-
initialize
private void initialize()
Customize the contents of our underlying
Mapso that it contains keys corresponding to all of the JavaBeans properties of theContextimplementation class.- Throws:
java.lang.IllegalArgumentException- if an exception is thrown writing this local property valuejava.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-PropertyDescriptorfor the specified property- Throws:
java.lang.IllegalArgumentException- if an exception is thrown reading this local property valuejava.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, returnfalse.- 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
Iteratorover the set of values in thisMap.
-
writeProperty
private void writeProperty(java.beans.PropertyDescriptor descriptor, java.lang.Object value)Set the value for the specified property.
- Parameters:
descriptor-PropertyDescriptorfor the specified propertyvalue- 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 valuejava.lang.UnsupportedOperationException- if this local property does not have a write method.
-
-