cpee 1.3.120 → 1.3.121
Sign up to get free protection for your applications and to get access to all the features.
- data/cockpit/css/ui.css +11 -7
- data/cockpit/index.html +11 -8
- data/cockpit/js/details.js +6 -5
- data/cockpit/js/instance.js +11 -1
- data/cockpit/js/ui.js +7 -0
- data/cockpit/js/wfadaptor.cpee.js +2 -1
- data/cockpit/testsets/index.xml +0 -3
- data/cpee.gemspec +1 -1
- data/lib/cpee/controller.rb +8 -18
- data/lib/cpee/handler_notifications.rb +3 -2
- data/server/instances/1/properties.xml +145 -0
- data/server/instances/10/properties.xml +109 -0
- data/server/instances/11/properties.xml +109 -0
- data/server/instances/2/properties.xml +83 -0
- data/server/instances/3/properties.xml +83 -0
- data/server/instances/4/properties.xml +83 -0
- data/server/instances/5/properties.xml +83 -0
- data/server/instances/6/properties.xml +83 -0
- data/server/instances/7/properties.xml +83 -0
- data/server/instances/8/properties.xml +83 -0
- data/server/instances/9/properties.xml +77 -0
- metadata +13 -5
- data/cockpit/testsets/RESCUE - Book Movie - Local.xml +0 -100
- data/cockpit/testsets/RESCUE - Book Movie.xml +0 -100
- data/cockpit/testsets/RESCUE - Loop-Parallel Injection.xml +0 -93
data/cockpit/css/ui.css
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
body {
|
2
|
+
-webkit-user-select: none;
|
3
|
+
-moz-user-select: -moz-none;
|
4
|
+
-ms-user-select: none;
|
5
|
+
user-select: none;
|
6
|
+
}
|
7
|
+
|
8
|
+
|
1
9
|
#areanew { height: 7em; }
|
2
10
|
#areanew td:nth-child(1) { width: 7em; padding-right: 1em; }
|
3
11
|
#areanew td:nth-child(3) { width: 16em; padding-left: 1em; }
|
@@ -173,10 +181,6 @@ span.vote {
|
|
173
181
|
#dat_details tr:nth-child(odd) { background-color: ButtonFace; color: ButtonText; }
|
174
182
|
#dat_details .header button { border: 1pt solid buttonshadow; }
|
175
183
|
|
176
|
-
#disclaimer {
|
177
|
-
|
178
|
-
}
|
179
|
-
|
180
|
-
#disclaimer p {
|
181
|
-
max-width: 80ex;
|
182
|
-
}
|
184
|
+
#disclaimer { margin: 1em; }
|
185
|
+
#disclaimer p { max-width: 80ex; text-align: justify; }
|
186
|
+
#disclaimer input { margin:0; padding:0; vertical-align:bottom; margin-right: 0.5em; }
|
data/cockpit/index.html
CHANGED
@@ -53,6 +53,8 @@
|
|
53
53
|
</head>
|
54
54
|
<body>
|
55
55
|
<div id='disclaimer' class='hidden'>
|
56
|
+
<h1>Disclaimer</h1>
|
57
|
+
|
56
58
|
<p>
|
57
59
|
We use reasonable care in creating and presenting the functionality
|
58
60
|
found in this demonstrator. It is provided purely for demonstration purposes
|
@@ -93,7 +95,10 @@
|
|
93
95
|
</p>
|
94
96
|
|
95
97
|
<p>
|
96
|
-
|
98
|
+
<input id='iagree' type='checkbox'/><label for'iagree'><strong>OK, I Agree with this terms. I will be a happy person, and do no evil.</strong></label>
|
99
|
+
</p>
|
100
|
+
<p>
|
101
|
+
<button id='icontinue' disabled='disabled'>Continue</button>
|
97
102
|
</p>
|
98
103
|
</div>
|
99
104
|
|
@@ -272,13 +277,11 @@
|
|
272
277
|
</td> <!--}}}-->
|
273
278
|
</tr>
|
274
279
|
</table>
|
275
|
-
<div class="tabbelow">
|
276
|
-
|
277
|
-
<
|
278
|
-
|
279
|
-
|
280
|
-
</div> <!--}}}-->
|
281
|
-
</div>
|
280
|
+
<div id="areadsl" class="tabbelow inactive"></div>
|
281
|
+
<div id="arealog" class="tabbelow inactive"> <!--{{{-->
|
282
|
+
<table id="dat_log" class="layout">
|
283
|
+
</table>
|
284
|
+
</div> <!--}}}-->
|
282
285
|
</div>
|
283
286
|
|
284
287
|
</body>
|
data/cockpit/js/details.js
CHANGED
@@ -4,11 +4,12 @@ $(document).ready(function() {
|
|
4
4
|
// save buttons shown or not //{{{
|
5
5
|
$('#main table.tabbar td.tab:not(.switch):not(.tabbehind)').click(function(event){
|
6
6
|
var me = $(event.target).parents('td.tab');
|
7
|
-
if (
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
if ($('#state').text() != 'finished')
|
8
|
+
if (me.attr('id') == 'tabdetails') {
|
9
|
+
$('#main .tabbehind button').show();
|
10
|
+
} else {
|
11
|
+
$('#main .tabbehind button').hide();
|
12
|
+
}
|
12
13
|
}); //}}}
|
13
14
|
|
14
15
|
// New entry //{{{
|
data/cockpit/js/instance.js
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
var ws;
|
1
2
|
var running = false;
|
2
3
|
var load;
|
3
4
|
var graphrealization;
|
@@ -135,7 +136,7 @@ function create_instance() {// {{{
|
|
135
136
|
function monitor_instance() {// {{{
|
136
137
|
var url = $("input[name=instance-url]").val();
|
137
138
|
|
138
|
-
$('
|
139
|
+
$('.tabbehind button').hide();
|
139
140
|
$('#dat_details').empty();
|
140
141
|
|
141
142
|
$.ajax({
|
@@ -155,6 +156,8 @@ function monitor_instance() {// {{{
|
|
155
156
|
|
156
157
|
// Change url to return to current instance when reloading (because new subscription is made)
|
157
158
|
$("input[name=votecontinue]").removeAttr('checked');
|
159
|
+
subscription_state = 'less';
|
160
|
+
|
158
161
|
$.ajax({
|
159
162
|
type: "POST",
|
160
163
|
url: url + "/notifications/subscriptions/",
|
@@ -168,6 +171,7 @@ function monitor_instance() {// {{{
|
|
168
171
|
});
|
169
172
|
append_to_log("monitoring", "id", subscription);
|
170
173
|
var Socket = "MozWebSocket" in window ? MozWebSocket : WebSocket;
|
174
|
+
if (ws) ws.close();
|
171
175
|
ws = new Socket(url.replace(/http/,'ws') + "/notifications/subscriptions/" + subscription + "/ws/");
|
172
176
|
ws.onopen = function() {
|
173
177
|
append_to_log("monitoring", "opened", "");
|
@@ -378,6 +382,12 @@ function monitor_instance_state_change(notification) { //{{{
|
|
378
382
|
but = " ⇒ <button onclick='$(this).attr(\"disabled\",\"disabled\");stop_instance();'>stop</button>";
|
379
383
|
}
|
380
384
|
|
385
|
+
if (notification == "finished") {
|
386
|
+
$('.tabbehind button').hide();
|
387
|
+
} else {
|
388
|
+
$('#parameters .tabbehind button').show();
|
389
|
+
}
|
390
|
+
|
381
391
|
ctv.append(notification + but);
|
382
392
|
}
|
383
393
|
} //}}}
|
data/cockpit/js/ui.js
CHANGED
@@ -17,6 +17,13 @@ $(document).ready(function() {
|
|
17
17
|
});
|
18
18
|
|
19
19
|
$("#iagree").click(function(){
|
20
|
+
if($(this).is(':checked')){
|
21
|
+
$("#icontinue").prop("disabled", false);
|
22
|
+
} else {
|
23
|
+
$("#icontinue").prop("disabled", true);
|
24
|
+
}
|
25
|
+
});
|
26
|
+
$("#icontinue").click(function(){
|
20
27
|
$.cookie('cpee_iagree','yes');
|
21
28
|
location.reload();
|
22
29
|
});
|
@@ -117,7 +117,8 @@ function CPEE(adaptor) {
|
|
117
117
|
return;
|
118
118
|
}
|
119
119
|
|
120
|
-
$('#
|
120
|
+
if ($('#state').text() != 'finished')
|
121
|
+
$('#main .tabbehind button').show();
|
121
122
|
if ($('#main .tabbehind button').hasClass('highlight')) {
|
122
123
|
var check = confirm("Discard changes?");
|
123
124
|
if (check)
|
data/cockpit/testsets/index.xml
CHANGED
@@ -7,9 +7,6 @@
|
|
7
7
|
<testset>Mangler 2</testset>
|
8
8
|
<testset>Concurrent</testset>
|
9
9
|
<testset>Endpoints and Data Manipulation</testset>
|
10
|
-
<testset>RESCUE - Book Movie - Local</testset>
|
11
|
-
<testset>RESCUE - Book Movie</testset>
|
12
|
-
<testset>RESCUE - Loop-Parallel Injection</testset>
|
13
10
|
<testset>TEST - Wrong Positions</testset>
|
14
11
|
<testset>TEST - Bad Loop</testset>
|
15
12
|
<testset>Syncing P34</testset>
|
data/cpee.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "cpee"
|
3
|
-
s.version = "1.3.
|
3
|
+
s.version = "1.3.121"
|
4
4
|
s.platform = Gem::Platform::RUBY
|
5
5
|
s.license = "LGPL-3"
|
6
6
|
s.summary = "Preliminary release of cloud process execution engine (cpee). If you just need workflow execution, without a rest/xmpp service exposing it, then use WEEL"
|
data/lib/cpee/controller.rb
CHANGED
@@ -189,7 +189,11 @@ module CPEE
|
|
189
189
|
def unserialize_notifications!(op,key)# {{{
|
190
190
|
case op
|
191
191
|
when :del
|
192
|
+
@notifications.subscriptions[key].delete if @notifications.subscriptions.include?(key)
|
193
|
+
|
194
|
+
@communication[key].io.close_connection if @communication[key].class == Riddl::Utils::Notifications::Producer::WS
|
192
195
|
@communication.delete(key)
|
196
|
+
|
193
197
|
@events.each do |eve,keys|
|
194
198
|
keys.delete_if{|k,v| key == k}
|
195
199
|
end
|
@@ -202,13 +206,13 @@ module CPEE
|
|
202
206
|
end
|
203
207
|
end
|
204
208
|
when :upd
|
205
|
-
if @notifications.subscriptions
|
209
|
+
if @notifications.subscriptions.include?(key)
|
206
210
|
url = @communication[key]
|
207
211
|
evs = []
|
208
212
|
vos = []
|
209
213
|
@events.each { |e,v| evs << e }
|
210
214
|
@votes.each { |e,v| vos << e }
|
211
|
-
@notifications.subscriptions[key].
|
215
|
+
@notifications.subscriptions[key].read do |doc|
|
212
216
|
turl = doc.find('string(/n:subscription/@url)')
|
213
217
|
url = turl == '' ? url : turl
|
214
218
|
@communication[key] = url
|
@@ -232,7 +236,7 @@ module CPEE
|
|
232
236
|
end
|
233
237
|
end
|
234
238
|
when :cre
|
235
|
-
@notifications.subscriptions[key].
|
239
|
+
@notifications.subscriptions[key].read do |doc|
|
236
240
|
turl = doc.find('string(/n:subscription/@url)')
|
237
241
|
url = turl == '' ? nil : turl
|
238
242
|
@communication[key] = url
|
@@ -479,7 +483,7 @@ module CPEE
|
|
479
483
|
end
|
480
484
|
end # }}}
|
481
485
|
|
482
|
-
def
|
486
|
+
def add_websocket(key,socket)# {{{
|
483
487
|
@communication[key] = socket
|
484
488
|
@events.each do |a|
|
485
489
|
if a[1].has_key?(key)
|
@@ -493,20 +497,6 @@ module CPEE
|
|
493
497
|
end
|
494
498
|
end # }}}
|
495
499
|
|
496
|
-
def del_ws(key)# {{{
|
497
|
-
@communication[key] = nil
|
498
|
-
@events.each do |a|
|
499
|
-
if a[1].has_key?(key)
|
500
|
-
a[1][key] = nil
|
501
|
-
end
|
502
|
-
end
|
503
|
-
@votes.each do |a|
|
504
|
-
if a[1].has_key?(key)
|
505
|
-
a[1][key] = nil
|
506
|
-
end
|
507
|
-
end
|
508
|
-
end # }}}
|
509
|
-
|
510
500
|
private
|
511
501
|
|
512
502
|
def build_notification(key,what,content,type,callback=nil)# {{{
|
@@ -14,10 +14,11 @@
|
|
14
14
|
|
15
15
|
class NotificationsHandler < Riddl::Utils::Notifications::Producer::HandlerBase
|
16
16
|
def ws_open(socket)
|
17
|
-
@data.
|
17
|
+
@data.add_websocket(@key,socket)
|
18
18
|
end
|
19
19
|
def ws_close
|
20
|
-
@data.
|
20
|
+
@data.unserialize_notifications!(:del,@key)
|
21
|
+
@data.notify('properties/handlers/change', :instance => @data.instance_url)
|
21
22
|
end
|
22
23
|
def ws_message(data)
|
23
24
|
begin
|
@@ -0,0 +1,145 @@
|
|
1
|
+
<properties xmlns="http://riddl.org/ns/common-patterns/properties/1.0">
|
2
|
+
<info>Enter info here</info>
|
3
|
+
<state>ready</state>
|
4
|
+
<handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
|
5
|
+
<positions/>
|
6
|
+
<dataelements>
|
7
|
+
<persons>3</persons>
|
8
|
+
<card>Visa_12345</card>
|
9
|
+
<airline>null</airline>
|
10
|
+
<hotels>[]</hotels>
|
11
|
+
<from>Vienna</from>
|
12
|
+
<to>Prague</to>
|
13
|
+
<costs>0</costs>
|
14
|
+
</dataelements>
|
15
|
+
<endpoints>
|
16
|
+
<bookAir>http://gruppe.wst.univie.ac.at/~mangler/services/airline.php</bookAir>
|
17
|
+
<bookHotel>http://gruppe.wst.univie.ac.at/~mangler/services/hotel.php</bookHotel>
|
18
|
+
<approve>http://gruppe.wst.univie.ac.at/~mangler/services/approval.php</approve>
|
19
|
+
</endpoints>
|
20
|
+
<dsl>call :a1, :bookAir, { :method => "post", :parameters => { :from => data.from, :to => data.to, :persons => data.persons } }, <<-end
|
21
|
+
data.airline = result.value('id')
|
22
|
+
data.costs += result.value('costs').to_f
|
23
|
+
status.update 1, 'Hotel'
|
24
|
+
end
|
25
|
+
parallel do
|
26
|
+
loop pre_test{data.persons > 0} do
|
27
|
+
parallel_branch data.persons do |p|
|
28
|
+
call :a2, :bookHotel, { :method => "post", :parameters => { :to => data.to } }, <<-end
|
29
|
+
data.hotels << result.value('id')
|
30
|
+
data.costs += result.value('costs').to_f
|
31
|
+
end
|
32
|
+
end
|
33
|
+
manipulate :a3, <<-end
|
34
|
+
data.persons -= 1
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
choose do
|
39
|
+
alternative data.costs > 700 do
|
40
|
+
call :a4, :approve, { :method => "post", :parameters => { :costs => data.costs } }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
</dsl>
|
44
|
+
<dslx>
|
45
|
+
<description xmlns="http://cpee.org/ns/description/1.0">
|
46
|
+
<call id="a1" endpoint="bookAir">
|
47
|
+
<parameters>
|
48
|
+
<method>post</method>
|
49
|
+
<parameters>
|
50
|
+
<from>data.from</from>
|
51
|
+
<to>data.to</to>
|
52
|
+
<persons>data.persons</persons>
|
53
|
+
</parameters>
|
54
|
+
</parameters>
|
55
|
+
<manipulate output="result"> data.airline = result.value('id')
|
56
|
+
data.costs += result.value('costs').to_f
|
57
|
+
status.update 1, 'Hotel'</manipulate>
|
58
|
+
</call>
|
59
|
+
<parallel>
|
60
|
+
<loop pre_test="data.persons > 0">
|
61
|
+
<parallel_branch pass="data.persons" local="p">
|
62
|
+
<call id="a2" endpoint="bookHotel">
|
63
|
+
<parameters>
|
64
|
+
<method>post</method>
|
65
|
+
<parameters>
|
66
|
+
<to>data.to</to>
|
67
|
+
</parameters>
|
68
|
+
</parameters>
|
69
|
+
<manipulate output="result"> data.hotels << result.value('id')
|
70
|
+
data.costs += result.value('costs').to_f</manipulate>
|
71
|
+
</call>
|
72
|
+
</parallel_branch>
|
73
|
+
<manipulate id="a3"> data.persons -= 1</manipulate>
|
74
|
+
</loop>
|
75
|
+
</parallel>
|
76
|
+
<choose>
|
77
|
+
<alternative condition="data.costs > 700">
|
78
|
+
<call id="a4" endpoint="approve">
|
79
|
+
<parameters>
|
80
|
+
<method>post</method>
|
81
|
+
<parameters>
|
82
|
+
<costs>data.costs</costs>
|
83
|
+
</parameters>
|
84
|
+
</parameters>
|
85
|
+
</call>
|
86
|
+
</alternative>
|
87
|
+
</choose>
|
88
|
+
</description>
|
89
|
+
</dslx>
|
90
|
+
<status>
|
91
|
+
<id>0</id>
|
92
|
+
<message>undefined</message>
|
93
|
+
</status>
|
94
|
+
<description>
|
95
|
+
<description xmlns="http://cpee.org/ns/description/1.0">
|
96
|
+
<call id="a1" endpoint="bookAir">
|
97
|
+
<parameters>
|
98
|
+
<method>post</method>
|
99
|
+
<parameters>
|
100
|
+
<from>data.from</from>
|
101
|
+
<to>data.to</to>
|
102
|
+
<persons>data.persons</persons>
|
103
|
+
</parameters>
|
104
|
+
</parameters>
|
105
|
+
<manipulate output="result"> data.airline = result.value('id')
|
106
|
+
data.costs += result.value('costs').to_f
|
107
|
+
status.update 1, 'Hotel'</manipulate>
|
108
|
+
</call>
|
109
|
+
<parallel>
|
110
|
+
<loop pre_test="data.persons > 0">
|
111
|
+
<parallel_branch pass="data.persons" local="p">
|
112
|
+
<call id="a2" endpoint="bookHotel">
|
113
|
+
<parameters>
|
114
|
+
<method>post</method>
|
115
|
+
<parameters>
|
116
|
+
<to>data.to</to>
|
117
|
+
</parameters>
|
118
|
+
</parameters>
|
119
|
+
<manipulate output="result"> data.hotels << result.value('id')
|
120
|
+
data.costs += result.value('costs').to_f</manipulate>
|
121
|
+
</call>
|
122
|
+
</parallel_branch>
|
123
|
+
<manipulate id="a3"> data.persons -= 1</manipulate>
|
124
|
+
</loop>
|
125
|
+
</parallel>
|
126
|
+
<choose>
|
127
|
+
<alternative condition="data.costs > 700">
|
128
|
+
<call id="a4" endpoint="approve">
|
129
|
+
<parameters>
|
130
|
+
<method>post</method>
|
131
|
+
<parameters>
|
132
|
+
<costs>data.costs</costs>
|
133
|
+
</parameters>
|
134
|
+
</parameters>
|
135
|
+
</call>
|
136
|
+
</alternative>
|
137
|
+
</choose>
|
138
|
+
</description>
|
139
|
+
</description>
|
140
|
+
<transformation>
|
141
|
+
<description type="copy"/>
|
142
|
+
<dataelements type="rest"/>
|
143
|
+
<endpoints type="rest"/>
|
144
|
+
</transformation>
|
145
|
+
</properties>
|
@@ -0,0 +1,109 @@
|
|
1
|
+
<properties xmlns="http://riddl.org/ns/common-patterns/properties/1.0">
|
2
|
+
<info>Enter info here</info>
|
3
|
+
<state>ready</state>
|
4
|
+
<handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
|
5
|
+
<positions>
|
6
|
+
<a1>after</a1>
|
7
|
+
</positions>
|
8
|
+
<dataelements>
|
9
|
+
<x/>
|
10
|
+
</dataelements>
|
11
|
+
<endpoints>
|
12
|
+
<timeout>http://gruppe.wst.univie.ac.at/~mangler/services/timeout.php</timeout>
|
13
|
+
</endpoints>
|
14
|
+
<dsl>call :a1, :timeout, { :method => "post", :parameters => { :timeout => 2 } }, <<-end
|
15
|
+
data.x += "a1,"
|
16
|
+
end
|
17
|
+
call :a2, :timeout, { :method => "post", :parameters => { :timeout => 4 } }, <<-end
|
18
|
+
data.x += "a2,"
|
19
|
+
end
|
20
|
+
call :a3, :timeout, { :method => "post", :parameters => { :timeout => 4 } }, <<-end
|
21
|
+
data.x += "a3,"
|
22
|
+
end
|
23
|
+
</dsl>
|
24
|
+
<dslx>
|
25
|
+
<description xmlns="http://cpee.org/ns/description/1.0">
|
26
|
+
<!--{{{-->
|
27
|
+
<call id="a1" endpoint="timeout">
|
28
|
+
<parameters>
|
29
|
+
<!--{{{-->
|
30
|
+
<method>post</method>
|
31
|
+
<parameters>
|
32
|
+
<timeout>2</timeout>
|
33
|
+
</parameters>
|
34
|
+
</parameters>
|
35
|
+
<!--}}}-->
|
36
|
+
<manipulate output="result"> data.x += "a1,"</manipulate>
|
37
|
+
</call>
|
38
|
+
<call id="a2" endpoint="timeout">
|
39
|
+
<parameters>
|
40
|
+
<!--{{{-->
|
41
|
+
<method>post</method>
|
42
|
+
<parameters>
|
43
|
+
<timeout>4</timeout>
|
44
|
+
</parameters>
|
45
|
+
</parameters>
|
46
|
+
<!--}}}-->
|
47
|
+
<manipulate output="result"> data.x += "a2,"</manipulate>
|
48
|
+
</call>
|
49
|
+
<call id="a3" endpoint="timeout">
|
50
|
+
<parameters>
|
51
|
+
<!--{{{-->
|
52
|
+
<method>post</method>
|
53
|
+
<parameters>
|
54
|
+
<timeout>4</timeout>
|
55
|
+
</parameters>
|
56
|
+
</parameters>
|
57
|
+
<!--}}}-->
|
58
|
+
<manipulate output="result"> data.x += "a3,"</manipulate>
|
59
|
+
</call>
|
60
|
+
</description>
|
61
|
+
</dslx>
|
62
|
+
<status>
|
63
|
+
<id>0</id>
|
64
|
+
<message>undefined</message>
|
65
|
+
</status>
|
66
|
+
<description>
|
67
|
+
<description xmlns="http://cpee.org/ns/description/1.0">
|
68
|
+
<!--{{{-->
|
69
|
+
<call id="a1" endpoint="timeout">
|
70
|
+
<parameters>
|
71
|
+
<!--{{{-->
|
72
|
+
<method>post</method>
|
73
|
+
<parameters>
|
74
|
+
<timeout>2</timeout>
|
75
|
+
</parameters>
|
76
|
+
</parameters>
|
77
|
+
<!--}}}-->
|
78
|
+
<manipulate output="result"> data.x += "a1,"</manipulate>
|
79
|
+
</call>
|
80
|
+
<call id="a2" endpoint="timeout">
|
81
|
+
<parameters>
|
82
|
+
<!--{{{-->
|
83
|
+
<method>post</method>
|
84
|
+
<parameters>
|
85
|
+
<timeout>4</timeout>
|
86
|
+
</parameters>
|
87
|
+
</parameters>
|
88
|
+
<!--}}}-->
|
89
|
+
<manipulate output="result"> data.x += "a2,"</manipulate>
|
90
|
+
</call>
|
91
|
+
<call id="a3" endpoint="timeout">
|
92
|
+
<parameters>
|
93
|
+
<!--{{{-->
|
94
|
+
<method>post</method>
|
95
|
+
<parameters>
|
96
|
+
<timeout>4</timeout>
|
97
|
+
</parameters>
|
98
|
+
</parameters>
|
99
|
+
<!--}}}-->
|
100
|
+
<manipulate output="result"> data.x += "a3,"</manipulate>
|
101
|
+
</call>
|
102
|
+
</description>
|
103
|
+
</description>
|
104
|
+
<transformation>
|
105
|
+
<description type="copy"/>
|
106
|
+
<dataelements type="rest"/>
|
107
|
+
<endpoints type="rest"/>
|
108
|
+
</transformation>
|
109
|
+
</properties>
|