com.codemonster.surinam.controller
Class BindImplementationAction

java.lang.Object
  extended by com.codemonster.surinam.controller.BindImplementationAction
All Implemented Interfaces:
Action

public class BindImplementationAction
extends Object
implements Action

This is an Implementation Action object which registers an implementation and binds it to one or more Contracts.

See Also:
Contract

Constructor Summary
BindImplementationAction()
           
 
Method Summary
 void apply(ServiceBlock serviceBlock)
          This is the primary execution point for all ServiceBlock actions.
 String getName()
          We want to be able to discern which operation is being performed by subclasses of this object.
 Iterator<ServiceToFieldInjectionPair> getRequiredServices()
          Get a list of fully qualified Contracts that this action requires.
 void injectServices(ServiceBlock serviceBlock)
          This callback method is used to inject the ServiceBlock that the action will have access to in order to perform its work.
 void setBinding(String binding)
           
 void setImplementationBlueprint(ImplementationBlueprint implementationBlueprint)
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

BindImplementationAction

public BindImplementationAction()
Method Detail

getName

public String getName()
We want to be able to discern which operation is being performed by subclasses of this object.

Specified by:
getName in interface Action
Returns:
Returns the name of the action being performed.

getRequiredServices

public Iterator<ServiceToFieldInjectionPair> getRequiredServices()
Get a list of fully qualified Contracts that this action requires. Contract actions will normally be empty but implementations could have a quite a few.

Specified by:
getRequiredServices in interface Action
Returns:
Returns a list of services, upon which, this service depends.

apply

public void apply(ServiceBlock serviceBlock)
           throws MalformedURLException,
                  ClassNotFoundException,
                  IllegalAccessException,
                  MissingAnnotationException,
                  UnknownServiceException,
                  MissingInterfaceException,
                  DependencyInjectionException,
                  InstantiationException,
                  BindingDeclarationError
This is the primary execution point for all ServiceBlock actions. Not all operations will throw all of these exceptions but we wanted a unified interface for these actions to allow the code to handle a broad ranged of actions and still be able to respond in a fine-grained manner.

Note that if you aren't interested in fine-grained exceptions, all Surinam exceptions extend SurinamException, so you could just trap that along with the Java exceptions separately. Or catching Exception should do the trick.

Specified by:
apply in interface Action
Parameters:
serviceBlock - The ServiceBlock that the actions will be given access to.
Throws:
MalformedURLException - Thrown if one of the classpath segments are malformed.
ClassNotFoundException - Thrown if the FQ class cannot be found on the classpath.
IllegalAccessException - If you do not have access or permission to execute this method.
MissingAnnotationException - The class is missing a required annotation.
UnknownServiceException - The Service Contract is unknown to the system.
MissingInterfaceException - A required interface has not been extended.
DependencyInjectionException - Attempts to inject resources as requested has failed.
InstantiationException - The Service Block is not able to instantiate an instance of this class.
BindingDeclarationError - Thrown if there is a binding failure.

injectServices

public void injectServices(ServiceBlock serviceBlock)
                    throws ClassNotFoundException,
                           DependencyInjectionException,
                           IllegalAccessException
This callback method is used to inject the ServiceBlock that the action will have access to in order to perform its work. Needless to say, Actions can be supremely powerful and therefore need to be trusted entities. This callback will probably be a NOP for all actions except implementations.

Specified by:
injectServices in interface Action
Parameters:
serviceBlock - The ServiceBlock that the actions will be given access to.
Throws:
ClassNotFoundException - Thrown if the class cannot be found; usually a classpath or packaging issue.
DependencyInjectionException - Thrown if injection fails.
IllegalAccessException - Thrown if there is a loader or hierarchy failure.

setImplementationBlueprint

public void setImplementationBlueprint(ImplementationBlueprint implementationBlueprint)

setBinding

public void setBinding(String binding)


Copyright © 2010. All Rights Reserved.