org.dynalang.mop.impl
Class BottomMetaobjectProtocol

java.lang.Object
  extended by org.dynalang.mop.impl.MetaobjectProtocolBase
      extended by org.dynalang.mop.impl.BottomMetaobjectProtocol
All Implemented Interfaces:
BaseMetaobjectProtocol, CallProtocol, MetaobjectProtocol

public class BottomMetaobjectProtocol
extends MetaobjectProtocolBase

An implementation for "bottom" metaobject protocol, one that returns authoritative answer for all methods, and claims nonexistence (and non-callability) for everything. Useful as a last element in a composite metaobject protocol if the user of the composite metaobject protocol is not able or not willing to deal with non-authoritative answers.

Version:
$Id: $
Author:
Attila Szegedi

Nested Class Summary
 
Nested classes/interfaces inherited from interface org.dynalang.mop.BaseMetaobjectProtocol
BaseMetaobjectProtocol.Results
 
Constructor Summary
BottomMetaobjectProtocol()
           
 
Method Summary
 java.lang.Object call(java.lang.Object callable, CallProtocol callProtocol, java.util.Map args)
          Calls a callable object with named arguments.
 java.lang.Object call(java.lang.Object callable, CallProtocol callProtocol, java.lang.Object... args)
          Calls a callable object with positional arguments.
 BaseMetaobjectProtocol.Results delete(java.lang.Object target, java.lang.Object propertyId)
          Deletes an association of a value with a property in the target object.
 java.lang.Object get(java.lang.Object target, java.lang.Object propertyId)
          Retrieves the property value from the target object.
 java.lang.Boolean has(java.lang.Object target, java.lang.Object propertyId)
          Tells whether the target object has a particular property.
 java.util.Iterator<java.util.Map.Entry> properties(java.lang.Object target)
          Returns an iterator over the property ID-value pairs in the target object this MOP knows about (and chooses to expose - not all properties must be exposed; hidden properties are allowed).
 BaseMetaobjectProtocol.Results put(java.lang.Object target, java.lang.Object propertyId, java.lang.Object value, CallProtocol callProtocol)
          Associates a value with a property in the target object.
 java.lang.Object representAs(java.lang.Object object, java.lang.Class targetClass)
          Returns a representation of the specified target object as an object of the specified target class.
 
Methods inherited from class org.dynalang.mop.impl.MetaobjectProtocolBase
call, call, delete, get, has, propertyIds, put
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

BottomMetaobjectProtocol

public BottomMetaobjectProtocol()
Method Detail

call

public java.lang.Object call(java.lang.Object callable,
                             CallProtocol callProtocol,
                             java.util.Map args)
Description copied from interface: CallProtocol
Calls a callable object with named arguments.

Parameters:
callable - the callable object
callProtocol - a marshaller that should be used by this metaobject protocol to convert the arguments to conform to expected argument types for the call.
args - the named arguments for the callable object. null must be treated as empty map. Usually, the map keys are strings, but it is possible that some protocols support non-string keys.
Returns:
the return value of the call, or a special result. BaseMetaobjectProtocol.Results.notCallable is returned if the protocol can authoritatively decide that the target is not a callable, or is not callable with named arguments. BaseMetaobjectProtocol.Results.doesNotExist is returned if the callable does not exist at all. BaseMetaobjectProtocol.Results.noAuthority is returned if the protocol can not authoritatively decide whether the target is callable.

call

public java.lang.Object call(java.lang.Object callable,
                             CallProtocol callProtocol,
                             java.lang.Object... args)
Description copied from interface: CallProtocol
Calls a callable object with positional arguments.

Parameters:
callable - the callable object
callProtocol - a marshaller that should be used by this metaobject protocol to convert the arguments to conform to expected argument types for the call.
args - the positional arguments for the callable object. null must be treated as empty array.
Returns:
the return value of the call, or a special result. BaseMetaobjectProtocol.Results.notCallable is returned if the protocol can authoritatively decide that the target is not a callable, or is not callable with positional arguments. BaseMetaobjectProtocol.Results.doesNotExist is returned if the callable does not exist at all. BaseMetaobjectProtocol.Results.noAuthority is returned if the protocol can not authoritatively decide whether the target is callable.

delete

public BaseMetaobjectProtocol.Results delete(java.lang.Object target,
                                             java.lang.Object propertyId)
Description copied from interface: BaseMetaobjectProtocol
Deletes an association of a value with a property in the target object.

Parameters:
target - the target object
propertyId - the ID of the property. Usually a String or an Integer, but other property ID types can also be supported.
Returns:
the status of the operation. If the protocol decides that the property did not previously exist, it will return BaseMetaobjectProtocol.Results.doesNotExist. If the protocol authoritatively decides that the property can not be deleted, it will return BaseMetaobjectProtocol.Results.notDeleteable. If the protocol doesn't have the authority to delete the property, it will leave the object unchanged, and return BaseMetaobjectProtocol.Results.noAuthority. If the operation succeeds, BaseMetaobjectProtocol.Results.ok is returned.

get

public java.lang.Object get(java.lang.Object target,
                            java.lang.Object propertyId)
Description copied from interface: CallProtocol
Retrieves the property value from the target object.

Parameters:
target - the target object
propertyId - the ID of the property. Usually a String or an Integer, but other property ID types can also be supported.
Returns:
the property value for the target object. A null value means that the protocol authoritatively decided that the value of the property is null. If the protocol decides that the property does not exist, it will return BaseMetaobjectProtocol.Results.doesNotExist. If the protocol decides that the property exists, but is not readable, it will return BaseMetaobjectProtocol.Results.notReadable. If the protocol can not make an authoritative decision, it will return BaseMetaobjectProtocol.Results.noAuthority.

has

public java.lang.Boolean has(java.lang.Object target,
                             java.lang.Object propertyId)
Description copied from interface: BaseMetaobjectProtocol
Tells whether the target object has a particular property.

Parameters:
target - the target object
propertyId - the ID of the property. Usually a String or an Integer, but other property ID types can also be supported.
Returns:
Boolean.TRUE or Boolean.FALSE if the protocol can authoritatively decide whether the target has or has not the property, or null if it does not have the authority to decide.

properties

public java.util.Iterator<java.util.Map.Entry> properties(java.lang.Object target)
Description copied from interface: BaseMetaobjectProtocol
Returns an iterator over the property ID-value pairs in the target object this MOP knows about (and chooses to expose - not all properties must be exposed; hidden properties are allowed).

Parameters:
target - the target object
Returns:
an iterator over all the property ID-value pairs.

put

public BaseMetaobjectProtocol.Results put(java.lang.Object target,
                                          java.lang.Object propertyId,
                                          java.lang.Object value,
                                          CallProtocol callProtocol)
Description copied from interface: BaseMetaobjectProtocol
Associates a value with a property in the target object.

Parameters:
target - the target object
propertyId - the ID of the property. Usually a String or an Integer, but other property ID types can also be supported.
value - the new value for the property
callProtocol - a marshaller that is used to convert the value in case the property can only accept values of certain types, and the metaobject protocol allows automatic coercing to those types.
Returns:
a value indicating the outcome of the operation. If the protocol decides that the property does not exist, and can not be created, it will return BaseMetaobjectProtocol.Results.doesNotExist. If the protocol authoritatively decides that the property is read-only, it will return BaseMetaobjectProtocol.Results.notWritable. If the property has a limitation on types it can take as values, and the supplied marshaller is not able to provide a suitable representation, then the value of the property is not changed, and BaseMetaobjectProtocol.Results.noRepresentation is returned. Finally, if the protocol doesn't have the authority to put the new property value, it will leave the property value unchanged, and return BaseMetaobjectProtocol.Results.noAuthority. If the operation succeeds, BaseMetaobjectProtocol.Results.ok is returned.

representAs

public java.lang.Object representAs(java.lang.Object object,
                                    java.lang.Class targetClass)
Description copied from interface: CallProtocol
Returns a representation of the specified target object as an object of the specified target class. Typical supported target classes would be wrappers for Java primitive types that map to native types of the higher level languages. I.e. if an object is used as a boolean expression, then the language would ask the protocol to interpret it as boolean by calling representAs(Boolean.TYPE).

Parameters:
object - the object to represent
targetClass - the target class for representation.
Returns:
the representation that must be instance of the targetClass, or in case targetClass is primitive, of its adequate boxing class. It can also be a special value to indicate conversion failure: BaseMetaobjectProtocol.Results.noAuthority is returned if the marshaller can not authoritatively decide on a representation; BaseMetaobjectProtocol.Results.noRepresentation is returned if the marshaller can authoritatively decide that the requested representation is not possible. representation of null should be null, except when the target class is a primitive type in which case BaseMetaobjectProtocol.Results.noRepresentation should be returned.