KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sapia > soto > state > cocoon > CocoonStateMachineComponentImpl


1 package org.sapia.soto.state.cocoon;
2
3 import org.apache.avalon.framework.activity.Initializable;
4 import org.apache.avalon.framework.activity.Startable;
5 import org.apache.avalon.framework.component.Component;
6 import org.apache.avalon.framework.component.ComponentException;
7 import org.apache.avalon.framework.component.ComponentManager;
8 import org.apache.avalon.framework.component.Composable;
9 import org.apache.avalon.framework.logger.LogEnabled;
10 import org.apache.avalon.framework.logger.Logger;
11 import org.apache.avalon.framework.parameters.ParameterException;
12 import org.apache.avalon.framework.parameters.Parameterizable;
13 import org.apache.avalon.framework.parameters.Parameters;
14 import org.apache.avalon.framework.thread.ThreadSafe;
15
16 import org.apache.excalibur.source.SourceResolver;
17
18 import org.sapia.soto.SotoContainer;
19 import org.sapia.soto.state.util.StateIdParser;
20 import org.sapia.soto.util.Resource;
21 import org.sapia.soto.util.ResourceHandler;
22 import org.sapia.soto.util.UrlResource;
23 import org.sapia.soto.util.Utils;
24
25 import org.xml.sax.ContentHandler JavaDoc;
26
27 import java.io.IOException JavaDoc;
28 import java.io.InputStream JavaDoc;
29
30 import java.net.URL JavaDoc;
31
32 import java.util.Map JavaDoc;
33
34
35 /**
36  * Implements the <code>CocoonStateComponent</code> interface on top of a Soto container. A
37  * <code>CocoonStateGenerator</code> delegates its call to an instance of this class.
38  *
39  * @see org.sapia.soto.state.cocoon.CocoonStateGenerator
40  * @see org.sapia.soto.state.cocoon.CocoonStateMachineService
41  *
42  * @author Yanick Duchesne
43  * <dl>
44  * <dt><b>Copyright:</b><dd>Copyright &#169; 2002-2003 <a HREF="http://www.sapia-oss.org">Sapia Open Source Software</a>. All Rights Reserved.</dd></dt>
45  * <dt><b>License:</b><dd>Read the license.txt file of the jar or visit the
46  * <a HREF="http://www.sapia-oss.org/license.html">license page</a> at the Sapia OSS web site</dd></dt>
47  * </dl>
48  */

49 public class CocoonStateMachineComponentImpl
50   implements CocoonStateMachineComponent, LogEnabled, Initializable, Startable,
51     Composable, ThreadSafe, Parameterizable, Component {
52   public static final String JavaDoc SOTO_CONFIG = "soto-config";
53   public static final String JavaDoc STATE_SERVICE_ID = "state-service-id";
54   protected Logger _log;
55   protected ComponentManager _manager;
56   private String JavaDoc _sotoConfigResource;
57   private String JavaDoc _stateMachineId;
58   private SotoContainer _container;
59
60   /**
61    * @see org.apache.avalon.framework.logger.LogEnabled#enableLogging(Logger)
62    */

63   public void enableLogging(Logger logger) {
64     _log = logger.getChildLogger(this.getClass().getName());
65   }
66
67   /**
68    * @see org.apache.avalon.framework.activity.Initializable#initialize()
69    */

70   public void initialize() throws Exception JavaDoc {
71     _container = new SotoContainer();
72     _container.getResourceHandlers().append(new CocoonResourceHandler(this));
73     _container.load(_sotoConfigResource);
74   }
75
76   /**
77    * @see org.apache.avalon.framework.parameters.Parameterizable#parameterize(org.apache.avalon.framework.parameters.Parameters)
78    */

79   public void parameterize(Parameters params) throws ParameterException {
80     _sotoConfigResource = params.getParameter(SOTO_CONFIG);
81
82     if (_sotoConfigResource == null) {
83       throw new ParameterException("Missing configuration parameter: " +
84         SOTO_CONFIG);
85     }
86
87     _stateMachineId = params.getParameter(STATE_SERVICE_ID);
88
89     if (_stateMachineId == null) {
90       throw new ParameterException("Missing configuration parameter: " +
91         STATE_SERVICE_ID);
92     }
93   }
94
95   /**
96    * @see org.apache.avalon.framework.activity.Startable#start()
97    */

98   public void start() throws Exception JavaDoc {
99     _container.start();
100   }
101
102   /**
103    * @see org.apache.avalon.framework.activity.Startable#stop()
104    */

105   public void stop() throws Exception JavaDoc {
106     _container.dispose();
107   }
108
109   /**
110    * @see org.apache.avalon.framework.component.Composable#compose(ComponentManager)
111    */

112   public void compose(ComponentManager manager) throws ComponentException {
113     _manager = manager;
114   }
115
116   /**
117    * @see org.sapia.soto.state.cocoon.CocoonStateMachineComponent#execute(String, Map, ContentHandler)
118    */

119   public void execute(String JavaDoc stateId, Map JavaDoc objectModel, ContentHandler JavaDoc handler)
120     throws Exception JavaDoc {
121     CocoonStateMachineService service = (CocoonStateMachineService) _container.lookup(_stateMachineId);
122     StateIdParser.Created stateInfo = StateIdParser.parseStateFrom(stateId,
123         null);
124
125     if (stateInfo == null) {
126       throw new IllegalArgumentException JavaDoc("Could not extract state identifier: " +
127         stateId);
128     }
129
130     service.execute(stateInfo.state, stateInfo.module, objectModel, handler);
131   }
132
133   protected Logger logger() {
134     return _log;
135   }
136
137   static final class CocoonResourceHandler implements ResourceHandler {
138     
139     public static final String JavaDoc CONTEXT_SCHEME = "context";
140         public static final String JavaDoc COCOON_SCHEME = "cocoon";
141     CocoonStateMachineComponentImpl _owner;
142
143     CocoonResourceHandler(CocoonStateMachineComponentImpl owner) {
144       _owner = owner;
145     }
146
147     /**
148      * @see org.sapia.soto.util.ResourceHandler#getResource(java.lang.String)
149      */

150     public InputStream JavaDoc getResource(String JavaDoc uri) throws IOException JavaDoc {
151       return getResourceObject(uri).getInputStream();
152     }
153
154     /**
155      * @see org.sapia.soto.util.ResourceHandler#getResourceObject(java.lang.String)
156      */

157     public Resource getResourceObject(String JavaDoc uri) throws IOException JavaDoc {
158       SourceResolver res = null;
159
160       try {
161         res = (SourceResolver) _owner._manager.lookup(SourceResolver.ROLE);
162         String JavaDoc toResolve = Utils.chopScheme(uri);
163         toResolve = CONTEXT_SCHEME + "://" + Utils.chopScheme(uri);
164
165         return new UrlResource(new URL JavaDoc(toResolve));
166       } catch (ComponentException e) {
167         throw new IOException JavaDoc(e.getMessage());
168       } finally {
169         if (res != null) {
170           _owner._manager.release(res);
171         }
172       }
173     }
174     
175     /**
176      * @see org.sapia.soto.util.ResourceHandler#accepts(java.lang.String)
177      */

178     public boolean accepts(String JavaDoc uri) {
179       String JavaDoc scheme = Utils.getScheme(uri);
180       if(scheme == null || scheme.length() == 0){
181         return true;
182       }
183       else if(scheme.equals(COCOON_SCHEME)){
184         return true;
185       }
186       else{
187         return false;
188       }
189     }
190
191   }
192 }
193
Popular Tags