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);