View Javadoc

1   package com.sourceforge.jpatterns.patterns.bhv.chain;
2   
3   import java.io.Serializable;
4   
5   /**
6    * This interface is going to be used as the DTO between different actors of "chain of responsibility" patterns implemented here. It
7    * could be used at both "hierarchical" and "chainable" implementations of this patterns. todo: check this statement
8    * <br/>
9    * It identifies all the necessary methods for working with the chain of responsibility.
10   * <ul>
11   * <li>identifying the type of message</li>
12   * <li>allow to pass the input objects</li>
13   * <li>allows to check the output of chain</li>
14   * </ul>
15   * <p/>
16   * Also the important feature is it allows to identify the handlers/hierarchy items which added/extended/initialized the inputs
17   * and outputs. todo: check this statement
18   * <p/>
19   * todo: what about rmi/ejb/jta/jms communication? COuld this message used here??
20   * todo: why we need it cloneable???
21   * todo: which other interfaces it should extend
22   *
23   * todo: think over forwards/includes at the chain handlers etc.
24   * 
25   * $Author:: zmicer             $<br/>
26   */
27  public interface IChainMessage extends Serializable, Cloneable
28  {
29      /**
30       * @return the type of message. Can not be null (otherwise <code>IllegalArgumentException</code> would appear).
31       */
32      String getType();
33  
34      /**
35       * @return returns the constant allowing us to determine the status of message (if it is under construction or was proceed by the
36       *         certain handlers/items etc ) todo: check this statement, introduce constants + introduce configuration os the system
37       *         to do it
38       */
39      String getStatus();
40  
41      /**
42       * The type of message. Can not be null (otherwise <code>IllegalArgumentException</code> would appear).
43       * <br/>
44       * The method allowing us to setup the item of the message (in simply words to modify the state of object is intended just to be
45       * used at the initialization of the message). At the base class of this interface the status would be analyzed using the
46       * {@link IChainMessage#getStatus()} method to understand if we could change the status.
47       * <br/>
48       * So it would be allowed only if the message is mutatable (configuration of the system allows us to do it - e.g. some handler
49       * changing the type of the message during sending it to the another handler/item. todo: check this statement) or
50       * it is under construction (was not send and was not processed yet).
51       *
52       * @throws IllegalStateException in the case the message is not at the appropriate state to be set with the typ
53       */
54      void setType(String type) throws IllegalStateException;
55  
56      /**
57       * Get unout param by its name.
58       * todo: method allowing to determine inouts param by the id/items/handler could(shoul????) be added
59       * todo: should we allow to remove the input params?? system configuration???
60       * todo: where input params could be changed - at the handlers/items/inner runners etc??
61       * todo: permissions for reading/writing here???
62       * <p/>
63       * Note: the configuration system of implementation may restrict the usage of this method (it is unpermissed)
64       *
65       * @param name name of the input param. Can not be null (otherwise <code>IllegalArgumentException</code> would appear).
66       *
67       * @return Object, some informatino which was put as input param
68       *
69       * @throws UnsupportedOperationException in the case the message could not return the input params
70       *
71       * @java5 consider java5 here
72       */
73      Object getInputParam(String name) throws UnsupportedOperationException;
74  
75      /**
76       * Get the info which was put to that <code>IChainMessage</code> object.
77       * todo: all the todos of above mentioned method have power here.
78       * <p/>
79       * <p/>
80       * Note: the configuration system of implementation may restrict the usage of this method (it is unpermissed)
81       *
82       * @param param the name of param using which the object should be obtained. Can not be null (otherwise
83       *              <code>IllegalArgumentException</code> would appear).
84       *
85       * @return the Object, output result.
86       *
87       * @throws UnsupportedOperationException in the case the message could not return the input params
88       *
89       * @java5 consider java5 here
90       */
91      Object getOutputInfo(String param) throws UnsupportedOperationException;
92  }