001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.commons.scxml.model;
018:
019: import java.util.Collection;
020:
021: import org.apache.commons.logging.Log;
022: import org.apache.commons.scxml.Context;
023: import org.apache.commons.scxml.ErrorReporter;
024: import org.apache.commons.scxml.Evaluator;
025: import org.apache.commons.scxml.EventDispatcher;
026: import org.apache.commons.scxml.SCInstance;
027: import org.apache.commons.scxml.SCXMLExpressionException;
028: import org.apache.commons.scxml.TriggerEvent;
029:
030: /**
031: * The class in this SCXML object model that corresponds to the
032: * <var> SCXML element.
033: *
034: */
035: public class Var extends Action {
036:
037: /**
038: * Serial version UID.
039: */
040: private static final long serialVersionUID = 1L;
041:
042: /**
043: * The name of the variable to be created.
044: */
045: private String name;
046:
047: /**
048: * The expression that evaluates to the initial value of the variable.
049: */
050: private String expr;
051:
052: /**
053: * Constructor.
054: */
055: public Var() {
056: super ();
057: }
058:
059: /**
060: * Get the expression that evaluates to the initial value
061: * of the variable.
062: *
063: * @return String Returns the expr.
064: */
065: public final String getExpr() {
066: return expr;
067: }
068:
069: /**
070: * Set the expression that evaluates to the initial value
071: * of the variable.
072: *
073: * @param expr The expr to set.
074: */
075: public final void setExpr(final String expr) {
076: this .expr = expr;
077: }
078:
079: /**
080: * Get the name of the (new) variable.
081: *
082: * @return String Returns the name.
083: */
084: public final String getName() {
085: return name;
086: }
087:
088: /**
089: * Set the name of the (new) variable.
090: *
091: * @param name The name to set.
092: */
093: public final void setName(final String name) {
094: this .name = name;
095: }
096:
097: /**
098: * {@inheritDoc}
099: */
100: public void execute(final EventDispatcher evtDispatcher,
101: final ErrorReporter errRep, final SCInstance scInstance,
102: final Log appLog, final Collection derivedEvents)
103: throws ModelException, SCXMLExpressionException {
104: Context ctx = scInstance.getContext(getParentState());
105: Evaluator eval = scInstance.getEvaluator();
106: ctx.setLocal(getNamespacesKey(), getNamespaces());
107: Object varObj = eval.eval(ctx, expr);
108: ctx.setLocal(getNamespacesKey(), null);
109: ctx.setLocal(name, varObj);
110: if (appLog.isDebugEnabled()) {
111: appLog.debug("<var>: Defined variable '" + name
112: + "' with initial value '" + String.valueOf(varObj)
113: + "'");
114: }
115: TriggerEvent ev = new TriggerEvent(name + ".change",
116: TriggerEvent.CHANGE_EVENT);
117: derivedEvents.add(ev);
118: }
119:
120: }
|