View Javadoc

1   /*
2    * Copyright 1999-2001,2004 The Apache Software Foundation.
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */ 
16  
17  package org.apache.commons.workflow.core;
18  
19  
20  import java.util.EmptyStackException;
21  import org.apache.commons.workflow.Activity;
22  import org.apache.commons.workflow.Context;
23  import org.apache.commons.workflow.StepException;
24  import org.apache.commons.workflow.base.BaseStep;
25  
26  
27  /**
28   * <p>Pop the top value from the evaluation stack, which must be an
29   * <code>Activity</code>, and initiate a "subroutine call" to execute
30   * this Activity before resuming the current one.</p>
31   *
32   * <p><strong>NOTE</strong> - The means by which the Activity on the top
33   * of the stack was acquired is NOT mandated by this Step implementation.</p>
34   *
35   * @version $Revision: 155475 $ $Date: 2005-02-26 13:31:11 +0000 (Sat, 26 Feb 2005) $
36   * @author Craig R. McClanahan
37   */
38  
39  public class CallStep extends BaseStep {
40  
41  
42      // ----------------------------------------------------------= Constructors
43  
44  
45      /**
46       * Construct a default instance of this Step.
47       */
48      public CallStep() {
49  
50          super();
51  
52      }
53  
54  
55      /**
56       * Construct an instance of this Step with the specified identifier.
57       *
58       * @param id Step identifier
59       */
60      public CallStep(String id) {
61  
62          super();
63          setId(id);
64  
65      }
66  
67  
68      // --------------------------------------------------------- Public Methods
69  
70  
71      /**
72       * Perform the executable actions related to this Step, in the context of
73       * the specified Context.
74       *
75       * @param context The Context that is tracking our execution state
76       *
77       * @exception StepException if a processing error has occurred
78       */
79      public void execute(Context context) throws StepException {
80  
81          // Pop the evaluation stack
82          Object value = null;
83          try {
84              value = context.pop();
85          } catch (EmptyStackException e) {
86              throw new StepException("Evaluation stack is empty", e, this);
87          }
88  
89          // Call the requested Activity 
90          if (!(value instanceof Activity))
91              throw new StepException("Top of stack is not an Activity", this);
92          context.call((Activity) value);
93  
94      }
95  
96  
97  }