org.dynalang.mop
Interface MetaobjectProtocol

All Superinterfaces:
BaseMetaobjectProtocol, CallProtocol
All Known Subinterfaces:
ClassBasedMetaobjectProtocol
All Known Implementing Classes:
BeansMetaobjectProtocol, BottomMetaobjectProtocol, CompositeClassBasedMetaobjectProtocol, CompositeMetaobjectProtocol, ListMetaobjectProtocol, MapMetaobjectProtocol, MetaobjectProtocolAdaptor, MetaobjectProtocolBase

public interface MetaobjectProtocol
extends BaseMetaobjectProtocol

An extension of BaseMetaobjectProtocol that can provide various convenience functionality that can implemented in terms of base functionality, but the specialized implementations can be optimized. To easily adapt an existing BaseMetaobjectProtocol into a full-fledged MetaobjectProtocol, you can use MetaobjectProtocolAdaptor. Alternatively, you can easily get a full-fledged MetaobjectProtocol if you subclass MetaobjectProtocolBase and only implement BaseMetaobjectProtocol methods on it.

Version:
$Id: $
Author:
Attila Szegedi

Nested Class Summary
 
Nested classes/interfaces inherited from interface org.dynalang.mop.BaseMetaobjectProtocol
BaseMetaobjectProtocol.Results
 
Method Summary
 java.lang.Object call(java.lang.Object target, java.lang.Object callableId, CallProtocol callProtocol, java.util.Map args)
          Calls a method on the target object with supplied named arguments.
 java.lang.Object call(java.lang.Object target, java.lang.Object callableId, CallProtocol callProtocol, java.lang.Object... args)
          Calls a method on the target object with supplied positional arguments.
 BaseMetaobjectProtocol.Results delete(java.lang.Object target, long propertyId)
          Behaves as BaseMetaobjectProtocol.delete(Object, Object) with an integer property ID.
 java.lang.Object get(java.lang.Object target, long propertyId)
          Behaves as CallProtocol.get(Object, Object) with an integer property ID.
 java.lang.Boolean has(java.lang.Object target, long propertyId)
          Behaves as BaseMetaobjectProtocol.has(Object, Object) with an integer property ID.
 java.util.Iterator<? extends java.lang.Object> propertyIds(java.lang.Object target)
          Returns an iterator over the property IDs 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, long propertyId, java.lang.Object value, CallProtocol callProtocol)
          Behaves as BaseMetaobjectProtocol.put(Object, Object, Object,CallProtocol) with an integer property ID.
 
Methods inherited from interface org.dynalang.mop.BaseMetaobjectProtocol
delete, has, properties, put
 
Methods inherited from interface org.dynalang.mop.CallProtocol
call, call, get, representAs
 

Method Detail

call

java.lang.Object call(java.lang.Object target,
                      java.lang.Object callableId,
                      CallProtocol callProtocol,
                      java.util.Map args)
Calls a method on the target object with supplied named arguments. Must behave identically to:
 Object callable = get(target, callableId);
 if(callable instanceof Results) {
     return callable;
 }
 return call(callable, args);
 

Parameters:
target - the target object
callableId - the ID of the method to call
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 arguments of the call
Returns:
the result of the invocation, or a special result. Can return any return value that CallProtocol.get(Object, Object) would return while looking up the callable. Can also return any return value that CallProtocol.call(Object, CallProtocol, Map) would return while calling.

call

java.lang.Object call(java.lang.Object target,
                      java.lang.Object callableId,
                      CallProtocol callProtocol,
                      java.lang.Object... args)
Calls a method on the target object with supplied positional arguments. Must behave identically to:
 Object callable = get(target, callableId);
 if(callable instanceof Results) {
     return callable;
 }
 return call(callable, args);
 

Parameters:
target - the target object
callableId - the ID of the method to call
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 arguments of the call
Returns:
the result of the invocation, or a special result. Can return any return value that CallProtocol.get(Object, Object) would return while looking up the callable. Can also return any return value that CallProtocol.call(Object, CallProtocol, Object[]) would return while calling.

delete

BaseMetaobjectProtocol.Results delete(java.lang.Object target,
                                      long propertyId)
Behaves as BaseMetaobjectProtocol.delete(Object, Object) with an integer property ID.

Parameters:
target - the target object
propertyId - the ID of the property.
Returns:
see BaseMetaobjectProtocol.delete(Object, Object).

get

java.lang.Object get(java.lang.Object target,
                     long propertyId)
Behaves as CallProtocol.get(Object, Object) with an integer property ID.

Parameters:
target - the target object
propertyId - the ID of the property.
Returns:
see CallProtocol.get(Object, Object).

has

java.lang.Boolean has(java.lang.Object target,
                      long propertyId)
Behaves as BaseMetaobjectProtocol.has(Object, Object) with an integer property ID.

Parameters:
target - the target object
propertyId - the ID of the property.
Returns:
see BaseMetaobjectProtocol.has(Object, Object).

propertyIds

java.util.Iterator<? extends java.lang.Object> propertyIds(java.lang.Object target)
Returns an iterator over the property IDs 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 the property IDs.

put

BaseMetaobjectProtocol.Results put(java.lang.Object target,
                                   long propertyId,
                                   java.lang.Object value,
                                   CallProtocol callProtocol)
Behaves as BaseMetaobjectProtocol.put(Object, Object, Object,CallProtocol) with an integer property ID. 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:
the previous value of the property, or a special value. A null value means that the protocol authoritatively decided that the previous value of the property is null. If the protocol decides that the property does not exist, and can not be created, it will return BaseMetaobjectProtocol.Results.doesNotExist. If the protocol can not set the new value, it will return BaseMetaobjectProtocol.Results.notWritable. If the protocol doesn't have the authority to put the new property value, it will leave the object unchanged, and return BaseMetaobjectProtocol.Results.noAuthority. If the operation succeeds, BaseMetaobjectProtocol.Results.ok is returned.