You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by at...@apache.org on 2014/11/15 04:48:38 UTC
svn commit: r1639830 - in
/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2:
EvaluatorFactory.java env/minimal/ env/minimal/MinimalContext.java
env/minimal/MinimalEvaluator.java
Author: ate
Date: Sat Nov 15 03:48:38 2014
New Revision: 1639830
URL: http://svn.apache.org/r1639830
Log:
SCXML-214: Implementation of the SCXML specification required support for the "null" datamodel
Added:
commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/minimal/
commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalContext.java (with props)
commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalEvaluator.java (with props)
Modified:
commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java
Modified: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java?rev=1639830&r1=1639829&r2=1639830&view=diff
==============================================================================
--- commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java (original)
+++ commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/EvaluatorFactory.java Sat Nov 15 03:48:38 2014
@@ -22,6 +22,7 @@ import java.util.concurrent.ConcurrentHa
import org.apache.commons.scxml2.env.groovy.GroovyEvaluator;
import org.apache.commons.scxml2.env.javascript.JSEvaluator;
import org.apache.commons.scxml2.env.jexl.JexlEvaluator;
+import org.apache.commons.scxml2.env.minimal.MinimalEvaluator;
import org.apache.commons.scxml2.env.xpath.XPathEvaluator;
import org.apache.commons.scxml2.model.ModelException;
import org.apache.commons.scxml2.model.SCXML;
@@ -40,6 +41,7 @@ import static org.apache.commons.scxml2.
* <li>datamodel="ecmascript": {@link JSEvaluator.JSEvaluatorProvider}</li>
* <li>datamodel="groovy": {@link GroovyEvaluator.GroovyEvaluatorProvider}</li>
* <li>datamodel="xpath": {@link XPathEvaluator.XPathEvaluatorProvider}</li>
+ * <li>datamodel="null": {@link MinimalEvaluator.MinimalEvaluatorProvider}</li>
* </ul>
* </p>
* <p>
@@ -63,6 +65,7 @@ public class EvaluatorFactory {
providers.put(JSEvaluator.SUPPORTED_DATA_MODEL, new JSEvaluator.JSEvaluatorProvider());
providers.put(GroovyEvaluator.SUPPORTED_DATA_MODEL, new GroovyEvaluator.GroovyEvaluatorProvider());
providers.put(JexlEvaluator.SUPPORTED_DATA_MODEL, new JexlEvaluator.JexlEvaluatorProvider());
+ providers.put(MinimalEvaluator.SUPPORTED_DATA_MODEL, new MinimalEvaluator.MinimalEvaluatorProvider());
providers.put(DEFAULT_DATA_MODEL, providers.get(JexlEvaluator.SUPPORTED_DATA_MODEL));
}
Added: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalContext.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalContext.java?rev=1639830&view=auto
==============================================================================
--- commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalContext.java (added)
+++ commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalContext.java Sat Nov 15 03:48:38 2014
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.scxml2.env.minimal;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.apache.commons.scxml2.Context;
+import org.apache.commons.scxml2.env.SimpleContext;
+
+/**
+ * MinimalContext implementation for the SCXML Null Data Model.
+ * <p>
+ * This context disables any access to the parent context (other than through getParent()) and
+ * ignores setting any local data.
+ * </p>
+ * <p>
+ * The MinimalContext requires a none MinimalContext based parent Context for creation.
+ * If the parent context is of type MinimalContext, <em>its</em> parent will be used as the parent of the
+ * new MinimalContext instance
+ * </p>
+ */
+public class MinimalContext extends SimpleContext {
+
+ /** Serial version UID. */
+ private static final long serialVersionUID = 1L;
+
+ private static Context getMinimalContextParent(final Context parent) {
+ if (parent != null) {
+ if (parent instanceof MinimalContext) {
+ return getMinimalContextParent(parent.getParent());
+ }
+ return parent;
+ }
+ throw new IllegalStateException("A MinimalContext instance requires a non MinimalContext based parent.");
+ }
+
+ public MinimalContext(final Context parent) {
+ super(getMinimalContextParent(parent));
+ }
+
+ @Override
+ public void set(final String name, final Object value) {
+ }
+
+ @Override
+ public Object get(final String name) {
+ return null;
+ }
+
+ @Override
+ public boolean has(final String name) {
+ return false;
+ }
+
+ @Override
+ public boolean hasLocal(final String name) {
+ return false;
+ }
+
+ @Override
+ public void reset() {
+ }
+
+ @Override
+ public void setLocal(final String name, final Object value) {
+ }
+
+ @Override
+ protected void setVars(final Map<String, Object> vars) {
+ }
+
+ @Override
+ public Map<String, Object> getVars() {
+ return Collections.emptyMap();
+ }
+}
Propchange: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalContext.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalContext.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalEvaluator.java
URL: http://svn.apache.org/viewvc/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalEvaluator.java?rev=1639830&view=auto
==============================================================================
--- commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalEvaluator.java (added)
+++ commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalEvaluator.java Sat Nov 15 03:48:38 2014
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.scxml2.env.minimal;
+
+import java.io.Serializable;
+
+import org.apache.commons.scxml2.Builtin;
+import org.apache.commons.scxml2.Context;
+import org.apache.commons.scxml2.Evaluator;
+import org.apache.commons.scxml2.EvaluatorProvider;
+import org.apache.commons.scxml2.SCXMLExpressionException;
+import org.apache.commons.scxml2.model.SCXML;
+
+/**
+ * Minimal Evaluator implementing and providing support for the SCXML Null Data Model.
+ * <p>
+ * The SCXML Null Data Model only supports the SCXML "In(stateId)" builtin function.
+ * </p>
+ */
+public class MinimalEvaluator implements Evaluator, Serializable {
+
+ /** Serial version UID. */
+ private static final long serialVersionUID = 1L;
+
+ public static final String SUPPORTED_DATA_MODEL = Evaluator.NULL_DATA_MODEL;
+
+ public static class MinimalEvaluatorProvider implements EvaluatorProvider {
+
+ @Override
+ public String getSupportedDatamodel() {
+ return SUPPORTED_DATA_MODEL;
+ }
+
+ @Override
+ public Evaluator getEvaluator() {
+ return new MinimalEvaluator();
+ }
+
+ @Override
+ public Evaluator getEvaluator(final SCXML document) {
+ return new MinimalEvaluator();
+ }
+ }
+
+ @Override
+ public String getSupportedDatamodel() {
+ return SUPPORTED_DATA_MODEL;
+ }
+
+ @Override
+ public Object eval(final Context ctx, final String expr) throws SCXMLExpressionException {
+ return expr;
+ }
+
+ @Override
+ public Boolean evalCond(final Context ctx, final String expr) throws SCXMLExpressionException {
+ // only support the "In(stateId)" predicate
+ String predicate = expr != null ? expr.trim() : "";
+ if (predicate.startsWith("In(") && predicate.endsWith(")")) {
+ String stateId = predicate.substring(3, predicate.length()-1);
+ return Builtin.isMember(ctx, stateId);
+ }
+ return false;
+ }
+
+ @Override
+ public Object evalLocation(final Context ctx, final String expr) throws SCXMLExpressionException {
+ return expr;
+ }
+
+ @Override
+ public void evalAssign(final Context ctx, final String location, final Object data, final AssignType type, final String attr) throws SCXMLExpressionException {
+ throw new UnsupportedOperationException("Assign expressions are not supported by the \"null\" datamodel");
+ }
+
+ @Override
+ public Object evalScript(final Context ctx, final String script) throws SCXMLExpressionException {
+ throw new UnsupportedOperationException("Scripts are not supported by the \"null\" datamodel");
+ }
+
+ @Override
+ public Context newContext(final Context parent) {
+ return parent instanceof MinimalContext ? parent : new MinimalContext(parent);
+ }
+}
Propchange: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalEvaluator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml2/env/minimal/MinimalEvaluator.java
------------------------------------------------------------------------------
svn:keywords = Id