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


Reply via email to