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.scxml.Context;
022 import org.apache.commons.scxml.ErrorReporter;
023 import org.apache.commons.scxml.Evaluator;
024 import org.apache.commons.scxml.EventDispatcher;
025 import org.apache.commons.scxml.SCInstance;
026 import org.apache.commons.scxml.SCXMLExpressionException;
027
028 /**
029 * The class in this SCXML object model that corresponds to the
030 * <log> SCXML element.
031 *
032 */
033 public class Log extends Action {
034
035 /**
036 * Serial version UID.
037 */
038 private static final long serialVersionUID = 1L;
039
040 /**
041 * An expression evaluating to a string to be logged.
042 */
043 private String expr;
044
045 /**
046 * An expression which returns string which may be used, for example,
047 * to indicate the purpose of the log.
048 */
049 private String label;
050
051 /**
052 * Constructor.
053 */
054 public Log() {
055 super();
056 }
057
058 /**
059 * Get the log expression.
060 *
061 * @return Returns the expression.
062 */
063 public final String getExpr() {
064 return expr;
065 }
066
067 /**
068 * Set the log expression.
069 *
070 * @param expr The expr to set.
071 */
072 public final void setExpr(final String expr) {
073 this.expr = expr;
074 }
075
076 /**
077 * Get the log label.
078 *
079 * @return Returns the label.
080 */
081 public final String getLabel() {
082 return label;
083 }
084
085 /**
086 * Set the log label.
087 *
088 * @param label The label to set.
089 */
090 public final void setLabel(final String label) {
091 this.label = label;
092 }
093
094 /**
095 * {@inheritDoc}
096 */
097 public void execute(final EventDispatcher evtDispatcher,
098 final ErrorReporter errRep, final SCInstance scInstance,
099 final org.apache.commons.logging.Log appLog,
100 final Collection derivedEvents)
101 throws ModelException, SCXMLExpressionException {
102 Context ctx = scInstance.getContext(getParentTransitionTarget());
103 Evaluator eval = scInstance.getEvaluator();
104 ctx.setLocal(getNamespacesKey(), getNamespaces());
105 appLog.info(label + ": " + String.valueOf(eval.eval(ctx, expr)));
106 ctx.setLocal(getNamespacesKey(), null);
107 }
108 }
109