Author: mriou
Date: Wed Nov 26 18:02:39 2008
New Revision: 721069

URL: http://svn.apache.org/viewvc?rev=721069&view=rev
Log:
Compilation of scope with a few RESTful handlers.

Modified:
    ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPEL.g
    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/RestfulSimPELTest.java
    ode/sandbox/simpel/src/test/resources/compile-tests-ok.simpel

Modified: ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPEL.g
URL: 
http://svn.apache.org/viewvc/ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPEL.g?rev=721069&r1=721068&r2=721069&view=diff
==============================================================================
--- ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPEL.g 
(original)
+++ ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPEL.g Wed 
Nov 26 18:02:39 2008
@@ -8,8 +8,9 @@
 tokens {
     ROOT; PROCESS; PICK; SEQUENCE; FLOW; IF; ELSEIF; ELSE; WHILE; UNTIL; 
FOREACH; FORALL; INVOKE;
     RECEIVE; REPLY; ASSIGN; THROW; WAIT; EXIT; TIMEOUT; TRY; CATCH; CATCH_ALL; 
SCOPE; EVENT;
-    COLLECT; RESOURCE;
-    ALARM; COMPENSATION; COMPENSATE; CORRELATION; CORR_MAP; PARTNERLINK; 
VARIABLE; BLOCK_PARAM;
+    RESOURCE;
+    ONEVENT; ONALARM; ONRECEIVE; ONUPDATE; ONQUERY; COMPENSATION; COMPENSATE;
+    CORRELATION; CORR_MAP; PARTNERLINK; VARIABLE; BLOCK_PARAM;
     SIGNAL; JOIN; WITH; MAP;
     EXPR; EXT_EXPR; XML_LITERAL; CALL; NAMESPACE; NS; PATH;
 }
@@ -95,7 +96,7 @@
 
 proc_stmt
        :       pick | flow | if_ex | while_ex | until_ex | foreach | forall | 
try_ex | scope_ex | with_ex
-               | receive | invoke | collect | ((reply | assign | throw_ex | 
wait_ex | exit | signal | join
+               | receive | invoke | ((reply | assign | throw_ex | wait_ex | 
exit | signal | join
                | variables | partner_link) SEMI!);
 
 block  :       '{' proc_stmt+ '}' -> ^(SEQUENCE proc_stmt+);
@@ -125,10 +126,13 @@
 
 scope_ex:      'scope' ('(' ID ')')? body scope_stmt* -> ^(SCOPE ID? body 
scope_stmt*);
 scope_stmt
-       :       event | alarm | compensation;
+       :       onevent | onalarm | compensation | onquery | onrec | onupd;
 
-event  :       'event' '(' p=ID ',' o=ID ')' param_block -> ^(EVENT $p $o 
param_block);
-alarm  :       'alarm' '(' expr ')' body -> ^(ALARM expr body);
+onevent        :       'onEvent' '(' p=ID ',' o=ID ')' param_block -> 
^(ONEVENT $p $o param_block);
+onalarm        :       'onAlarm' '(' expr ')' body -> ^(ONALARM expr body);
+onquery        :       'onQuery' '(' r=ID ')' body -> ^(ONQUERY $r body);
+onrec  :       'onReceive' '(' r=ID ')' body -> ^(ONRECEIVE $r body);
+onupd  :       'onUpdate' '(' r=ID ')' body -> ^(ONUPDATE $r body);
 compensation
        :       'compensation' body -> ^(COMPENSATION body);
 
@@ -168,10 +172,6 @@
 
 exit   :       'exit' -> ^(EXIT);
 
-// RESTful activities
-
-collect : 'collect' '(' ID ')' param_block -> ^(COLLECT ID) param_block;
-
 // Others
 namespace
        :       'namespace' ID '=' STRING SEMI -> ^(NAMESPACE ID STRING);

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=721069&r1=721068&r2=721069&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 
Wed Nov 26 18:02:39 2008
@@ -9,7 +9,7 @@
 }
 scope BPELScope { OScope oscope; }
 scope Parent { OBuilder.StructuredActivity activity; }
-scope ReceiveBlock { OActivity activity; }
+scope ReceiveBlock { OComm activity; }
 scope ExprContext { SimPELExpr expr; }
 
 @header {
@@ -99,7 +99,6 @@
 proc_stmt
        :       pick | flow | if_ex | while_ex | until_ex | foreach | forall | 
try_ex | scope_ex | with_ex
                | invoke | receive | reply | assign | throw_ex | wait_ex | exit 
| signal | join
-               | collect
                | variable | partner_link;
 block
 scope Parent;
@@ -166,7 +165,7 @@
 try_ex
 scope BPELScope;
        :       ^(TRY {
-            OBuilder.StructuredActivity<OScope> oscope = 
builder.build(OScope.class, null, $Parent::activity);
+            OBuilder.StructuredActivity<OScope> oscope = 
builder.build(OScope.class, $BPELScope[-1]::oscope, $Parent::activity);
             $BPELScope::oscope = oscope.getOActivity();
         }
         body catch_ex*);
@@ -175,15 +174,39 @@
 scope_ex
 scope BPELScope;
        :       ^(SCOPE {
-            OBuilder.StructuredActivity<OScope> oscope = 
builder.build(OScope.class, null, $Parent::activity);
+            OBuilder.StructuredActivity<OScope> oscope = 
builder.build(OScope.class, $BPELScope[-1]::oscope, $Parent::activity);
             $BPELScope::oscope = oscope.getOActivity();
         }
            ID? body scope_stmt*);
 scope_stmt
-       :       event | alarm | compensation;
+       :       onevent | onalarm | compensation | onquery | onrec | onupd;
 
-event  :       ^(EVENT ID ID param_block);
-alarm  :       ^(ALARM expr body);
+onevent        :       ^(ONEVENT ID ID param_block);
+onalarm        :       ^(ONALARM expr body);
+onquery
+scope ReceiveBlock;
+    :  ^(ONQUERY ID {
+            OBuilder.StructuredActivity<OEventHandler.OEvent> on = builder
+                .build(OEventHandler.OEvent.class, $BPELScope::oscope, 
$Parent::activity, deepText($ID), "GET");
+            $ReceiveBlock::activity = on.getOActivity();
+        }
+        body);
+onrec
+scope ReceiveBlock;
+    :  ^(ONRECEIVE ID {
+            OBuilder.StructuredActivity<OEventHandler.OEvent> on = builder
+                .build(OEventHandler.OEvent.class, $BPELScope::oscope, 
$Parent::activity, deepText($ID), "POST");
+            $ReceiveBlock::activity = on.getOActivity();
+        }
+        body);
+onupd
+scope ReceiveBlock;
+    :  ^(ONUPDATE ID {
+            OBuilder.StructuredActivity<OEventHandler.OEvent> on = builder
+                .build(OEventHandler.OEvent.class, $BPELScope::oscope, 
$Parent::activity, deepText($ID), "PUT");
+            $ReceiveBlock::activity = on.getOActivity();
+        }
+        body);
 compensation
        :       ^(COMPENSATION body);
 
@@ -222,9 +245,9 @@
             OBuilder.StructuredActivity<OPickReceive> rec = 
builder.build(OPickReceive.class, $BPELScope::oscope,
                 $Parent::activity, text($p), text($o), $ExprContext::expr);
 
-                   $ReceiveBlock::activity = rec.getOActivity();
+                   $ReceiveBlock::activity = 
rec.getOActivity().onMessages.get(0);
             // TODO support for multiple "correlations"
-            if ($correlation.corr != null) 
builder.addCorrelationMatch($ReceiveBlock::activity, $correlation.corr); 
+            if ($correlation.corr != null) 
builder.addCorrelationMatch(rec.getOActivity(), $correlation.corr); 
                } )
                (prb=(param_block))?;
 
@@ -263,16 +286,6 @@
 
 exit   :       EXIT;
 
-// RESTful activities
-
-collect
-scope ReceiveBlock;
-    : ^(COLLECT ID) {
-        OBuilder.StructuredActivity<OCollect> collect = 
builder.build(OCollect.class, $BPELScope::oscope,
-            $Parent::activity, text($ID));
-        $ReceiveBlock::activity = collect.getOActivity();
-    } param_block;
-
 // Other
 variable:      ^(VARIABLE ID VAR_MODS*) { builder.addVariableDecl(text($ID), 
text($VAR_MODS)); };
 

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=721069&r1=721068&r2=721069&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 
Wed Nov 26 18:02:39 2008
@@ -194,6 +194,17 @@
         return new SimpleActivity<OPickReceive>(receive);
     }
 
+    public StructuredActivity buildEvent(final OEventHandler.OEvent oevent, 
OScope oscope, String resource, String method) {
+        oevent.resource = webResources.get(resource);
+        // TODO a single resource can have more than one method
+        oevent.resource.setMethod(method);
+        return new StructuredActivity<OEventHandler.OEvent>(oevent) {
+            public void run(OActivity child) {
+                oevent.activity = child;
+            }
+        };
+    }    
+
     public SimpleActivity buildInvoke(OInvoke invoke, OScope oscope, String 
partnerLink,
                                       String operation, String incomingMsg) {
         invoke.partnerLink = buildPartnerLink(oscope, partnerLink, operation, 
false, incomingMsg != null);
@@ -244,18 +255,17 @@
         return new SimpleActivity<OWait>(owait);
     }
 
-    public SimpleActivity buildReply(OReply oreply, OScope oscope, 
OPickReceive oreceive,
+    public SimpleActivity buildReply(OReply oreply, OScope oscope, OComm ocomm,
                                      String var, String partnerLink, String 
operation) {
         oreply.variable = resolveVariable(oscope, var, operation, false);
         if (partnerLink == null) {
-            if (oreceive == null) throw new RuntimeException("No parent 
receive but reply with var " + var +
+            if (ocomm == null) throw new RuntimeException("No parent receive 
but reply with var " + var +
                     " has no partnerLink/operation information.");
-            OPickReceive.OnMessage onm = oreceive.onMessages.get(0);
-            if (onm.isRestful()) {
-                oreply.resource = onm.resource;
+            if (ocomm.isRestful()) {
+                oreply.resource = ocomm.getResource();
             } else {
-                oreply.partnerLink = onm.partnerLink;
-                oreply.operation = onm.operation;
+                oreply.partnerLink = ocomm.getPartnerLink();
+                oreply.operation = ocomm.getOperation();
                 buildPartnerLink(oscope, oreply.partnerLink.name, 
oreply.operation.getName(), true, false);
             }
         } else {

Modified: 
ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/RestfulSimPELTest.java
URL: 
http://svn.apache.org/viewvc/ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/RestfulSimPELTest.java?rev=721069&r1=721068&r2=721069&view=diff
==============================================================================
--- 
ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/RestfulSimPELTest.java 
(original)
+++ 
ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/RestfulSimPELTest.java 
Wed Nov 26 18:02:39 2008
@@ -58,11 +58,30 @@
             "       links.increment = inc; \n" +
             "       links.decrement = dec; \n" +
             "       links.value = value; \n" +
-            "       reply(); \n" +
+            "       reply(links); \n" +
             "   } onQuery(value) {\n" +
-            "       reply(counter) \n" +
+            "       reply(counter); \n" +
+            "   } onReceive(dec) {\n" +
+            "       counter = counter - 1; \n" +
+            "       reply(counter); \n" +
             "   } \n" +
             "}";
 
+    public void testCounter() throws Exception {
+        EmbeddedServer server = new EmbeddedServer();
+        server.start();
+        Descriptor desc = new Descriptor();
+        desc.setAddress("/counter");
+        server.deploy(COUNTER, desc);
 
+        ClientConfig cc = new DefaultClientConfig();
+        Client c = Client.create(cc);
+
+        WebResource wr = c.resource("http://localhost:3434/counter";);
+        ClientResponse resp = 
wr.path("/").accept("application/xml").type("application/xml")
+                .post(ClientResponse.class, "<simpelWrapper 
xmlns=\"http://ode.apache.org/simpel/1.0/definition/HelloWorld\";>5</simpelWrapper>");
+        String response = resp.getEntity(String.class);
+
+        server.stop();
+    }
 }

Modified: ode/sandbox/simpel/src/test/resources/compile-tests-ok.simpel
URL: 
http://svn.apache.org/viewvc/ode/sandbox/simpel/src/test/resources/compile-tests-ok.simpel?rev=721069&r1=721068&r2=721069&view=diff
==============================================================================
--- ode/sandbox/simpel/src/test/resources/compile-tests-ok.simpel (original)
+++ ode/sandbox/simpel/src/test/resources/compile-tests-ok.simpel Wed Nov 26 
18:02:39 2008
@@ -64,7 +64,7 @@
   msg_in = receive(my_pl, start_op);
   scope {
     wait([PT59S]);
-  } alarm([PT60S]) {
+  } onAlarm([PT60S]) {
     exit;
   }
 }
@@ -77,7 +77,7 @@
   msg_in = receive(my_pl, start_op);
   scope {
     wait([PT60S]);
-  } event(stop_pl, stop) { |msg|
+  } onEvent(stop_pl, stop) { |msg|
     exit;
   }
 }
@@ -103,9 +103,9 @@
   msg_in = receive(my_pl, start_op);
   scope {
     wait([PT60S]);
-  } alarm([PT60S]) {
+  } onAlarm([PT60S]) {
     exit;
-  } event(stop_pl, stop) { |msg|
+  } onEvent(stop_pl, stop) { |msg|
     exit;
   } compensation {
     invoke(pl, op, msg);
@@ -120,7 +120,7 @@
   msg_in = receive(my_pl, start_op);
   scope
     wait([PT60S]);
-  alarm([PT60S])
+  onAlarm([PT60S])
     exit;
   compensation
     invoke(pl, op, msg);


Reply via email to