You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mr...@apache.org on 2008/09/06 01:06:44 UTC

svn commit: r692573 - in /ode/sandbox/simpel: ./ src/main/antlr/org/apache/ode/simpel/antlr/ src/main/java/org/apache/ode/simpel/expr/ src/main/java/org/apache/ode/simpel/omodel/ src/test/java/org/apache/ode/simpel/

Author: mriou
Date: Fri Sep  5 16:06:44 2008
New Revision: 692573

URL: http://svn.apache.org/viewvc?rev=692573&view=rev
Log:
ifff

Removed:
    ode/sandbox/simpel/src/main/java/org/apache/ode/simpel/expr/SimPELExprRuntime.java
Modified:
    ode/sandbox/simpel/Rakefile
    ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPELWalker.g
    ode/sandbox/simpel/src/main/java/org/apache/ode/simpel/omodel/OBuilder.java
    ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/SimPELRuntimeTest.java

Modified: ode/sandbox/simpel/Rakefile
URL: http://svn.apache.org/viewvc/ode/sandbox/simpel/Rakefile?rev=692573&r1=692572&r2=692573&view=diff
==============================================================================
--- ode/sandbox/simpel/Rakefile (original)
+++ ode/sandbox/simpel/Rakefile Fri Sep  5 16:06:44 2008
@@ -76,6 +76,7 @@
     patch_walker[/SimPELWalker.g(.*)ns_id$/, 51, "ids = (LinkedListTree)input.LT(1);"]
     patch_walker[/SimPELWalker.g(.*) \( path_expr \)$/, 37, "lv = (LinkedListTree)input.LT(1);"]
     patch_walker[/SimPELWalker.g(.*) \( rvalue \)$/, 34, "rv = (LinkedListTree)input.LT(1);"]
+    patch_walker[/SimPELWalker.g(.*) \( expr \)$/, 34, "e = (LinkedListTree)input.LT(1);"]
 
     File.open(walker, 'w') { |f| f << walker_txt }
   end

Modified: ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPELWalker.g
URL: http://svn.apache.org/viewvc/ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPELWalker.g?rev=692573&r1=692572&r2=692573&view=diff
==============================================================================
--- ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPELWalker.g (original)
+++ ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPELWalker.g Fri Sep  5 16:06:44 2008
@@ -127,13 +127,16 @@
 join	:	^(JOIN ID* expr?);
 
 if_ex	
-scope ExprContext;
+scope ExprContext Parent;
 	:	^(IF {
         $ExprContext::expr = new SimPELExpr(builder.getProcess());
     }
-    e=expr body (^(ELSE body))?) {
-        // TODO compile if        
-    };
+    e=(expr) {
+        $ExprContext::expr.setExpr(deepText($e));
+        OBuilder.StructuredActivity<OSwitch> oswitch = builder.build(OSwitch.class, $BPELScope::oscope, $Parent[-1]::activity, $ExprContext::expr);
+        $Parent::activity = oswitch;
+    } b1=(body)
+    (^(ELSE b2=(body)))?);
 
 while_ex
 scope ExprContext;
@@ -195,8 +198,8 @@
 receive	
 scope ReceiveBlock;
 	:	^(RECEIVE ^(p=ID o=ID correlation?)) { 
-        OBuilder.StructuredActivity<OPickReceive> rec = builder.build(OPickReceive.class, $BPELScope::oscope, 
-        $Parent::activity, text($p), text($o)); 
+            OBuilder.StructuredActivity<OPickReceive> rec = builder.build(OPickReceive.class, $BPELScope::oscope,
+                $Parent::activity, text($p), text($o));
 		    $ReceiveBlock::receive = rec.getOActivity();
 		}
 		(prb=(param_block))?;
@@ -208,7 +211,7 @@
     }
     lv=(path_expr) rv=(rvalue)) {
         $ExprContext::expr.setExpr(deepText($rv));
-		    OBuilder.StructuredActivity<OAssign> assign = 
+		OBuilder.StructuredActivity<OAssign> assign =
             builder.build(OAssign.class, $BPELScope::oscope, $Parent::activity, deepText($lv), $ExprContext::expr);
         // The long, winding road of abstraction
         $ExprContext::expr = (SimPELExpr) ((OAssign.Expression)((OAssign.Copy)assign.

Modified: ode/sandbox/simpel/src/main/java/org/apache/ode/simpel/omodel/OBuilder.java
URL: http://svn.apache.org/viewvc/ode/sandbox/simpel/src/main/java/org/apache/ode/simpel/omodel/OBuilder.java?rev=692573&r1=692572&r2=692573&view=diff
==============================================================================
--- ode/sandbox/simpel/src/main/java/org/apache/ode/simpel/omodel/OBuilder.java (original)
+++ ode/sandbox/simpel/src/main/java/org/apache/ode/simpel/omodel/OBuilder.java Fri Sep  5 16:06:44 2008
@@ -25,6 +25,7 @@
     private static final String SIMPEL_NS = "http://ode.apache.org/simpel/1.0/definition";
 
     private OExpressionLanguage _exprLang;
+    private OExpressionLanguage _konstExprLang;
     private String _processNS;
     private HashMap<String,String> namespaces = new HashMap<String,String>();
     private HashMap<String,OPartnerLink> partnerLinks = new HashMap<String,OPartnerLink>();
@@ -33,7 +34,7 @@
 
     public OBuilder() {
         HashMap<String, String> exprRuntime = new HashMap<String, String>();
-        exprRuntime.put("runtime-class", "org.apache.ode.simpel.expr.SimPELExprRuntime");
+        exprRuntime.put("runtime-class", "org.apache.ode.simpel.expr.E4XExprRuntime");
         _exprLang = new OExpressionLanguage(_oprocess, exprRuntime);
         _exprLang.expressionLanguageUri = SIMPEL_NS + "/exprLang";
     }
@@ -89,6 +90,12 @@
         _oprocess.expressionLanguages.add(_exprLang);
         _processNS = SIMPEL_NS + "/" + name;
 
+        _konstExprLang = new OExpressionLanguage(_oprocess, null);
+        _konstExprLang.expressionLanguageUri = "uri:www.fivesight.com/konstExpression";
+        _konstExprLang.properties.put("runtime-class",
+                "org.apache.ode.bpel.runtime.explang.konst.KonstExpressionLanguageRuntimeImpl");
+        _oprocess.expressionLanguages.add(_konstExprLang);
+
         final OScope processScope = new OScope(_oprocess, null);
         processScope.name = "__PROCESS_SCOPE:" + name;
         _oprocess.procesScope = processScope;
@@ -103,6 +110,25 @@
         };
     }
 
+    public StructuredActivity<OSwitch> buildSwitch(final OSwitch oswitch, OScope parentScope, SimPELExpr condExpr) {
+        final OSwitch.OCase success = new OSwitch.OCase(_oprocess);
+        success.expression = condExpr;
+        success.expression.expressionLanguage = _exprLang;
+        oswitch.addCase(success);
+
+        return new StructuredActivity<OSwitch>(oswitch) {
+            public void run(OActivity child) {
+                if (success.activity == null) success.activity = child;
+                else {
+                    OSwitch.OCase opposite = new OSwitch.OCase(_oprocess);
+                    opposite.expression = booleanExpr(true);
+                    opposite.activity = child;
+                    oswitch.addCase(opposite);
+                }
+            }
+        };
+    }
+
     public SimpleActivity buildPickReceive(OPickReceive receive, OScope oscope, String partnerLink, String operation) {
         OPickReceive.OnMessage onMessage = new OPickReceive.OnMessage(_oprocess);
         onMessage.partnerLink = buildPartnerLink(oscope, partnerLink, operation, true);
@@ -132,7 +158,6 @@
         OAssign.Copy ocopy = new OAssign.Copy(_oprocess);
         oassign.operations.add(ocopy);
 
-        // TODO lvalue should also be an expression
         OAssign.VariableRef vref = new OAssign.VariableRef(_oprocess);
         String lvar = lexpr.split("\\.")[0];
         vref.variable = resolveVariable(oscope, lvar);
@@ -251,6 +276,13 @@
         return resolved;
     }
 
+    private OExpression booleanExpr(boolean value) {
+        OConstantExpression ce = new OConstantExpression(_oprocess, value ? Boolean.TRUE : Boolean.FALSE);
+        ce.expressionLanguage = _konstExprLang;
+        return ce;
+    }
+
+
     protected String getBpwsNamespace() {
         return "http://ode.apache.org/simpel/1.0";
     }

Modified: ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/SimPELRuntimeTest.java
URL: http://svn.apache.org/viewvc/ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/SimPELRuntimeTest.java?rev=692573&r1=692572&r2=692573&view=diff
==============================================================================
--- ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/SimPELRuntimeTest.java (original)
+++ ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/SimPELRuntimeTest.java Fri Sep  5 16:06:44 2008
@@ -29,7 +29,19 @@
             "        friendInfo.phone = msgIn.person.phone;\n" +
             "        reply(friendInfo);\n" +
             "    }\n" +
-             "}";
+            "}";
+
+    private static final String SIMPLE_IF =
+            "process SimpleIf {\n" +
+            "    receive(ifPl, ifOp) { |quantity|\n" +
+            "        if (quantity > 20) {\n" +
+            "            status = 0; \n" +
+            "        } else { \n" +
+            "            status = 1; \n" +
+            "        }\n" +
+            "        reply(status);\n" +
+            "    }\n" +
+            "}";
 
     public void testHelloWorldComplete() throws Exception {
         EmbeddedServer server = new  EmbeddedServer();
@@ -65,4 +77,22 @@
         assertEquals("(999)999-9999", DOMUtils.findChildByName(result, new QName(null, "phone")).getTextContent());
         assertEquals("John Doe", DOMUtils.findChildByName(result, new QName(null, "name")).getTextContent());
     }
+
+    public void testSimpleIf() throws Exception {
+        EmbeddedServer server = new  EmbeddedServer();
+        server.start();
+        server.deploy(SIMPLE_IF);
+        Element wrapper = DOMUtils.stringToDOM(
+                "<xd:ifOpRequest xmlns:xd=\"http://ode.apache.org/simpel/1.0/definition/SimpleIf\">30</xd:ifOpRequest>");
+        Element result = server.sendMessage("ifPl", "ifOp", wrapper);
+        assertNotNull(result);
+        assertEquals(0.0f, Float.parseFloat(result.getTextContent()));
+        System.out.println(DOMUtils.domToString(result));
+
+        wrapper = DOMUtils.stringToDOM(
+                "<xd:ifOpRequest xmlns:xd=\"http://ode.apache.org/simpel/1.0/definition/SimpleIf\">10</xd:ifOpRequest>");
+        result = server.sendMessage("ifPl", "ifOp", wrapper);
+        assertNotNull(result);
+        assertEquals(1.0f, Float.parseFloat(result.getTextContent()));
+    }
 }