cpee 1.4.32 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cc0378a344f36f63688176739300a794d7382bd0b64328f77268a86d7793b600
4
- data.tar.gz: dc7386cf36ec7fa429869d574f0fcf00100e7f6e557a40659ffad85d14578059
3
+ metadata.gz: f1a67a57df57f103e16d89aed2ad52661c1f461d04679c1938ce1718eaf87b25
4
+ data.tar.gz: dcccdb2185dcc3815e0639d9dea9f790a7a235ce58cd6a6b53526950463559bf
5
5
  SHA512:
6
- metadata.gz: 9752ddc5b88787159245f8cf00fc4ac5bde112bae2bd663d6f2c0ce79fd92e2298e83acc28a806a5828560fbcedb71b16b2e4ff9ddf22666cc02d49104cafd71
7
- data.tar.gz: cc8b6d31edf48155691537d23ecb959ef86c98d8cdbe0ae94361d81f9b5d1fbc14eedbda84215372ef8422c38c02a2cc7410b91bc08e87da24c827b633d47e4b
6
+ metadata.gz: a4684d331a2d9595b2d2bd2604ae04e2226b3348ec8a8fd73504320475130ad885b03b45013501f3779b43e02e72ed8c2c16de4eef5530656b7cc50193a259d0
7
+ data.tar.gz: '039bb234831d978fea5e05457ac80e9142052f7fdd14592bc05da276ae4389abe3f6b5345155c1823088ced6673dcb24a8f7f785dd2efec0037c98faf29c4147'
@@ -19,6 +19,12 @@ $(document).ready(function() {
19
19
  do_main_save();
20
20
  }
21
21
  });
22
+ $(document).on('keypress','#dat_details [contenteditable]',function(e){
23
+ if (e.keyCode == 13) {
24
+ document.execCommand('insertText', false, '\n');
25
+ return false;
26
+ }
27
+ });
22
28
  $(document).on('relaxngui_remove', '#dat_details', function(e){
23
29
  clearTimeout(timer);
24
30
  do_main_save();
@@ -75,7 +75,7 @@ function WFAdaptorManifestation(adaptor) {
75
75
  }; //}}}
76
76
 
77
77
  function copyOrMove(menu,group,xml_node,mode) { //{{{
78
- var markymark = self.marked();
78
+ var markymark = _.uniq(self.marked());
79
79
  var check1 = [];
80
80
  var check2 = [];
81
81
  $(markymark).each(function(key,svgid){
@@ -471,7 +471,7 @@ function WFAdaptorManifestation(adaptor) {
471
471
  'menu_icon': self.elements.alternative.illustrator.svg.clone(),
472
472
  'type': 'alternative',
473
473
  'params': [self.adaptor.description.elements.alternative, node]}];
474
- if((node.children('otherwise').length == 0) && node.parents('parallel').length == node.parents('parallel_branch').length)
474
+ if((node.children('otherwise').length == 0) && node.parents('parallel').length == node.parents('parallel_branch').length && node.parent('choose').length == 0)
475
475
  childs.push({'label': 'Otherwise',
476
476
  'function_call': self.adaptor.description.insert_last_into,
477
477
  'menu_icon': self.elements.otherwise.illustrator.svg.clone(),
@@ -653,7 +653,7 @@ function WFAdaptorManifestation(adaptor) {
653
653
  }, //}}}
654
654
  'adaptor': {//{{{
655
655
  'mousedown': function (node,e) {
656
- self.events.mousedown(node,e,true,false);
656
+ self.events.mousedown(node,e,true,true);
657
657
  },
658
658
  'click': self.events.click,
659
659
  'dblclick': self.events.dblclick,
@@ -54,6 +54,21 @@
54
54
  </element>
55
55
  </zeroOrMore>
56
56
  </element>
57
+ <element name="aggregators" rngui:header="Aggregators">
58
+ <zeroOrMore rngui:label="Add Aggregator">
59
+ <element name="aggregator">
60
+ <element name="name" rngui:label="Label">
61
+ <data type="string" rngui:label="Label"/>
62
+ </element>
63
+ <element name="aggregator_url" rngui:label="Aggregator Url">
64
+ <data type="string" rngui:label="Url"/>
65
+ </element>
66
+ <element name="aggregator_arg" rngui:label="Aggregator Argument">
67
+ <data type="string" rngui:label="Path"/>
68
+ </element>
69
+ </element>
70
+ </zeroOrMore>
71
+ </element>
57
72
  </element>
58
73
  <element name="_timing" rngui:header="Timing">
59
74
  <element name="_timing_min" rngui:label='Min in min'>
@@ -66,6 +81,24 @@
66
81
  <data type='float' rngui:label='Minutes'/>
67
82
  </element>
68
83
  </element>
84
+ <element name="_cost" rngui:header="Costs">
85
+ <zeroOrMore rngui:label="Create Cost Factor">
86
+ <element name='_cost_factor'>
87
+ <element name="name" rngui:label="Label">
88
+ <data type="string" rngui:label="Label"/>
89
+ </element>
90
+ <element name="target" rngui:label="Target Value">
91
+ <data type="string" rngui:label="Value"/>
92
+ </element>
93
+ <element name="vfunc" rngui:label="Violation Function">
94
+ <data type="string" rngui:label="Url"/>
95
+ </element>
96
+ <element name="vcost" rngui:label="Violation Cost">
97
+ <data type="string" rngui:label="Value"/>
98
+ </element>
99
+ </element>
100
+ </zeroOrMore>
101
+ </element>
69
102
  <element name="_notes" rngui:header="Notes">
70
103
  <element name="_notes_general" rngui:label='General'>
71
104
  <text rngui:wrap='true' rngui:label='Notes'/>
@@ -54,6 +54,21 @@
54
54
  </element>
55
55
  </zeroOrMore>
56
56
  </element>
57
+ <element name="aggregators" rngui:header="Aggregators">
58
+ <zeroOrMore rngui:label="Add Aggregator">
59
+ <element name="aggregator">
60
+ <element name="name" rngui:label="Label">
61
+ <data type="string" rngui:label="Label"/>
62
+ </element>
63
+ <element name="aggregator_url" rngui:label="Aggregator Url">
64
+ <data type="string" rngui:label="Url"/>
65
+ </element>
66
+ <element name="aggregator_arg" rngui:label="Aggregator Argument">
67
+ <data type="string" rngui:label="Path"/>
68
+ </element>
69
+ </element>
70
+ </zeroOrMore>
71
+ </element>
57
72
  </element>
58
73
  <element name="finalize" rngui:header="Finalize" rngui:label="Code">
59
74
  <attribute name="output" rngui:label="Access Variable" rngui:default="result">
@@ -78,6 +93,24 @@
78
93
  <data type='float' rngui:label='Minutes'/>
79
94
  </element>
80
95
  </element>
96
+ <element name="_cost" rngui:header="Costs">
97
+ <zeroOrMore rngui:label="Create Cost Factor">
98
+ <element name='_cost_factor'>
99
+ <element name="name" rngui:label="Label">
100
+ <data type="string" rngui:label="Label"/>
101
+ </element>
102
+ <element name="target" rngui:label="Target Value">
103
+ <data type="string" rngui:label="Value"/>
104
+ </element>
105
+ <element name="vfunc" rngui:label="Violation Function">
106
+ <data type="string" rngui:label="Url"/>
107
+ </element>
108
+ <element name="vcost" rngui:label="Violation Cost">
109
+ <data type="string" rngui:label="Value"/>
110
+ </element>
111
+ </element>
112
+ </zeroOrMore>
113
+ </element>
81
114
  <element name="_notes" rngui:header="Notes">
82
115
  <element name="_notes_general" rngui:label='General'>
83
116
  <text rngui:wrap='true' rngui:label='Notes'/>
@@ -75,7 +75,7 @@ function WFAdaptorManifestation(adaptor) {
75
75
  }; //}}}
76
76
 
77
77
  function copyOrMove(menu,group,xml_node,mode) { //{{{
78
- var markymark = self.marked();
78
+ var markymark = _.uniq(self.marked());
79
79
  var check1 = [];
80
80
  var check2 = [];
81
81
  $(markymark).each(function(key,svgid){
@@ -472,7 +472,7 @@ function WFAdaptorManifestation(adaptor) {
472
472
  'menu_icon': self.elements.alternative.illustrator.svg.clone(),
473
473
  'type': 'alternative',
474
474
  'params': [self.adaptor.description.elements.alternative, node]}];
475
- if((node.children('otherwise').length == 0) && node.parents('parallel').length == node.parents('parallel_branch').length)
475
+ if((node.children('otherwise').length == 0) && node.parents('parallel').length == node.parents('parallel_branch').length && node.parent('choose').length == 0)
476
476
  childs.push({'label': 'Otherwise',
477
477
  'function_call': self.adaptor.description.insert_last_into,
478
478
  'menu_icon': self.elements.otherwise.illustrator.svg.clone(),
@@ -654,7 +654,7 @@ function WFAdaptorManifestation(adaptor) {
654
654
  }, //}}}
655
655
  'adaptor': {//{{{
656
656
  'mousedown': function (node,e) {
657
- self.events.mousedown(node,e,true,false);
657
+ self.events.mousedown(node,e,true,true);
658
658
  },
659
659
  'click': self.events.click,
660
660
  'dblclick': self.events.dblclick,
@@ -75,7 +75,7 @@ function WFAdaptorManifestation(adaptor) {
75
75
  }; //}}}
76
76
 
77
77
  function copyOrMove(menu,group,xml_node,mode) { //{{{
78
- var markymark = self.marked();
78
+ var markymark = _.uniq(self.marked());
79
79
  var check1 = [];
80
80
  var check2 = [];
81
81
  $(markymark).each(function(key,svgid){
@@ -504,7 +504,7 @@ function WFAdaptorManifestation(adaptor) {
504
504
  'menu_icon': self.elements.alternative.illustrator.svg.clone(),
505
505
  'type': 'alternative',
506
506
  'params': [self.adaptor.description.elements.alternative, node]}];
507
- if((node.children('otherwise').length == 0) && node.parents('parallel').length == node.parents('parallel_branch').length)
507
+ if((node.children('otherwise').length == 0) && node.parents('parallel').length == node.parents('parallel_branch').length && node.parent('choose').length == 0)
508
508
  childs.push({'label': 'Otherwise',
509
509
  'function_call': self.adaptor.description.insert_last_into,
510
510
  'menu_icon': self.elements.otherwise.illustrator.svg.clone(),
@@ -694,7 +694,7 @@ function WFAdaptorManifestation(adaptor) {
694
694
  }, //}}}
695
695
  'adaptor': {//{{{
696
696
  'mousedown': function (node,e) {
697
- self.events.mousedown(node,e,true,false);
697
+ self.events.mousedown(node,e,true,true);
698
698
  },
699
699
  'click': self.events.click,
700
700
  'dblclick': self.events.dblclick,
@@ -75,7 +75,7 @@ function WFAdaptorManifestation(adaptor) {
75
75
  }; //}}}
76
76
 
77
77
  function copyOrMove(menu,group,xml_node,mode) { //{{{
78
- var markymark = self.marked();
78
+ var markymark = _.uniq(self.marked());
79
79
  var check1 = [];
80
80
  var check2 = [];
81
81
  $(markymark).each(function(key,svgid){
@@ -471,7 +471,7 @@ function WFAdaptorManifestation(adaptor) {
471
471
  'menu_icon': self.elements.alternative.illustrator.svg.clone(),
472
472
  'type': 'alternative',
473
473
  'params': [self.adaptor.description.elements.alternative, node]}];
474
- if((node.children('otherwise').length == 0) && node.parents('parallel').length == node.parents('parallel_branch').length)
474
+ if((node.children('otherwise').length == 0) && node.parents('parallel').length == node.parents('parallel_branch').length && node.parent('choose').length == 0)
475
475
  childs.push({'label': 'Otherwise',
476
476
  'function_call': self.adaptor.description.insert_last_into,
477
477
  'menu_icon': self.elements.otherwise.illustrator.svg.clone(),
@@ -653,7 +653,7 @@ function WFAdaptorManifestation(adaptor) {
653
653
  }, //}}}
654
654
  'adaptor': {//{{{
655
655
  'mousedown': function (node,e) {
656
- self.events.mousedown(node,e,true,false);
656
+ self.events.mousedown(node,e,true,true);
657
657
  },
658
658
  'click': self.events.click,
659
659
  'dblclick': self.events.dblclick,
@@ -0,0 +1 @@
1
+ ../../default/rngs/alternative.rng
@@ -0,0 +1,121 @@
1
+ <element rngui:version="1.2" name="call" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" xmlns="http://relaxng.org/ns/structure/1.0" xmlns:rngui="http://rngui.org">
2
+ <attribute name="id" rngui:label="ID" rngui:default="javascript:get_free_id()">
3
+ <data type="string" rngui:readonly="true"/>
4
+ </attribute>
5
+ <attribute name="endpoint" rngui:label="Endpoint">
6
+ <data type="string"/>
7
+ </attribute>
8
+ <element name='parameters' rngui:header="Properties">
9
+ <element name="label" rngui:label="Label">
10
+ <data type="string" rngui:label="Short description of the task"/>
11
+ </element>
12
+ <element name="method" rngui:label="Method">
13
+ <choice>
14
+ <value>:post</value>
15
+ <value>:get</value>
16
+ <value>:put</value>
17
+ <value>:delete</value>
18
+ </choice>
19
+ </element>
20
+ <element name="arguments" rngui:header="Arguments">
21
+ <zeroOrMore rngui:label="Create Argument Pair">
22
+ <element rngui:label='Name'>
23
+ <anyName/>
24
+ <data type="string" rngui:label="Value"/>
25
+ </element>
26
+ </zeroOrMore>
27
+ </element>
28
+ <element name="stream" rngui:header="Data Stream Handling" rngui:fold="closed">
29
+ <element name="sensors" rngui:header="Sensors" rngui:fold="closed">
30
+ <zeroOrMore rngui:label="Add Sensor">
31
+ <element name="sensor">
32
+ <element name="name" rngui:label="Label">
33
+ <data type="string" rngui:label="Label"/>
34
+ </element>
35
+ <element name="extractor_url" rngui:label="Extractor Url">
36
+ <data type="string" rngui:label="Service Url"/>
37
+ </element>
38
+ <element name="extractor_arg" rngui:label="Extractor Argument">
39
+ <data type="string" rngui:label="Value / Json"/>
40
+ </element>
41
+ <element name="visualizer_url" rngui:label="Visualizer Url">
42
+ <data type="string" rngui:label="Service Url"/>
43
+ </element>
44
+ <element name="visualizer_params" rngui:header="Visualizer Arguments">
45
+ <zeroOrMore rngui:label="Create Visualizer Argument Pairs">
46
+ <element rngui:label='Name'>
47
+ <anyName/>
48
+ <data type="string" rngui:label="Value / Json"/>
49
+ </element>
50
+ </zeroOrMore>
51
+ </element>
52
+ </element>
53
+ </zeroOrMore>
54
+ </element>
55
+ <element name="aggregators" rngui:header="Aggregators" rngui:fold="closed">
56
+ <zeroOrMore rngui:label="Add Aggregator">
57
+ <element name="aggregator">
58
+ <element name="name" rngui:label="Label">
59
+ <data type="string" rngui:label="Label"/>
60
+ </element>
61
+ <element name="aggregator_url" rngui:label="Aggregator Url">
62
+ <data type="string" rngui:label="Service Url"/>
63
+ </element>
64
+ <element name="aggregator_arg" rngui:label="Aggregator Argument">
65
+ <data type="string" rngui:label="Value / Json"/>
66
+ </element>
67
+ </element>
68
+ </zeroOrMore>
69
+ </element>
70
+ <element name="_cost" rngui:header="Costs" rngui:fold="closed">
71
+ <zeroOrMore rngui:label="Create Cost Factor">
72
+ <element name='_cost_factor'>
73
+ <element name="name" rngui:label="Label">
74
+ <data type="string" rngui:label="Label"/>
75
+ </element>
76
+ <element name="target" rngui:label="Target Value">
77
+ <data type="string" rngui:label="Value"/>
78
+ </element>
79
+ <element name="vfunc_url" rngui:label="Violation Function Url">
80
+ <data type="string" rngui:label="Service Url"/>
81
+ </element>
82
+ <element name="vfunc_arg" rngui:label="Violation Function Argument">
83
+ <data type="string" rngui:label="Service Url"/>
84
+ </element>
85
+ <element name="vcost" rngui:label="Violation Cost">
86
+ <data type="string" rngui:label="Value"/>
87
+ </element>
88
+ </element>
89
+ </zeroOrMore>
90
+ </element>
91
+ </element>
92
+ </element>
93
+ <element name="annotations" rngui:header="Annotations">
94
+ <element name="_timing" rngui:header="Timing" rngui:fold="closed">
95
+ <element name="_timing_min" rngui:label='Min in min'>
96
+ <data type='float' rngui:label='Minutes'/>
97
+ </element>
98
+ <element name="_timing_max" rngui:label='Max in min'>
99
+ <data type='float' rngui:label='Minutes'/>
100
+ </element>
101
+ <element name="_timing_avg" rngui:label='Avg in min'>
102
+ <data type='float' rngui:label='Minutes'/>
103
+ </element>
104
+ </element>
105
+ <element name="_notes" rngui:header="Notes" rngui:fold="closed">
106
+ <element name="_notes_general" rngui:label='General'>
107
+ <text rngui:wrap='true' rngui:label='Notes'/>
108
+ </element>
109
+ <element name="_attachments">
110
+ <zeroOrMore rngui:label="Create Attachment">
111
+ <element name='_attachment' rngui:label='Attachment'>
112
+ <attribute name="label" rngui:label="Note">
113
+ <data type="string"/>
114
+ </attribute>
115
+ <data type="string" rngui:label="Url"/>
116
+ </element>
117
+ </zeroOrMore>
118
+ </element>
119
+ </element>
120
+ </element>
121
+ </element>
@@ -0,0 +1,147 @@
1
+ <element rngui:version="1.2" name="call" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" xmlns="http://relaxng.org/ns/structure/1.0" xmlns:rngui="http://rngui.org">
2
+ <attribute name="id" rngui:label="ID" rngui:default="javascript:get_free_id()">
3
+ <data type="string" rngui:readonly="true"/>
4
+ </attribute>
5
+ <attribute name="endpoint" rngui:label="Endpoint">
6
+ <data type="string"/>
7
+ </attribute>
8
+ <element name='parameters' rngui:header="Properties">
9
+ <element name="label" rngui:label="Label">
10
+ <data type="string" rngui:label="Short description of the task"/>
11
+ </element>
12
+ <element name="method" rngui:label="Method">
13
+ <choice>
14
+ <value>:post</value>
15
+ <value>:get</value>
16
+ <value>:put</value>
17
+ <value>:delete</value>
18
+ </choice>
19
+ </element>
20
+ <element name="arguments" rngui:header="Arguments">
21
+ <zeroOrMore rngui:label="Create Argument Pair">
22
+ <element rngui:label='Name'>
23
+ <anyName/>
24
+ <data type="string" rngui:label="Value"/>
25
+ </element>
26
+ </zeroOrMore>
27
+ </element>
28
+ <element name="stream" rngui:header="Data Stream Handling" rngui:fold="closed">
29
+ <element name="sensors" rngui:header="Sensors" rngui:fold="closed">
30
+ <zeroOrMore rngui:label="Add Sensor">
31
+ <element name="sensor">
32
+ <element name="name" rngui:label="Label">
33
+ <data type="string" rngui:label="Label"/>
34
+ </element>
35
+ <element name="extractor_url" rngui:label="Extractor Url">
36
+ <data type="string" rngui:label="Service Url"/>
37
+ </element>
38
+ <element name="extractor_arg" rngui:label="Extractor Argument">
39
+ <data type="string" rngui:label="Value / Json"/>
40
+ </element>
41
+ <element name="visualizer_url" rngui:label="Visualizer Url">
42
+ <data type="string" rngui:label="Service Url"/>
43
+ </element>
44
+ <element name="visualizer_params" rngui:header="Visualizer Arguments">
45
+ <zeroOrMore rngui:label="Create Visualizer Argument Pairs">
46
+ <element rngui:label='Name'>
47
+ <anyName/>
48
+ <data type="string" rngui:label="Value / Json"/>
49
+ </element>
50
+ </zeroOrMore>
51
+ </element>
52
+ </element>
53
+ </zeroOrMore>
54
+ </element>
55
+ <element name="aggregators" rngui:header="Aggregators" rngui:fold="closed">
56
+ <zeroOrMore rngui:label="Add Aggregator">
57
+ <element name="aggregator">
58
+ <element name="name" rngui:label="Label">
59
+ <data type="string" rngui:label="Label"/>
60
+ </element>
61
+ <element name="aggregator_url" rngui:label="Aggregator Url">
62
+ <data type="string" rngui:label="Service Url"/>
63
+ </element>
64
+ <element name="aggregator_arg" rngui:label="Aggregator Argument">
65
+ <data type="string" rngui:label="Value / Json"/>
66
+ </element>
67
+ </element>
68
+ </zeroOrMore>
69
+ </element>
70
+ <element name="_cost" rngui:header="Costs" rngui:fold="closed">
71
+ <zeroOrMore rngui:label="Create Cost Factor">
72
+ <element name='_cost_factor'>
73
+ <element name="name" rngui:label="Label">
74
+ <data type="string" rngui:label="Label"/>
75
+ </element>
76
+ <element name="target" rngui:label="Target Value">
77
+ <data type="string" rngui:label="Value"/>
78
+ </element>
79
+ <element name="vfunc_url" rngui:label="Violation Function Url">
80
+ <data type="string" rngui:label="Service Url"/>
81
+ </element>
82
+ <element name="vfunc_arg" rngui:label="Violation Function Argument">
83
+ <data type="string" rngui:label="Service Url"/>
84
+ </element>
85
+ <element name="vcost" rngui:label="Violation Cost">
86
+ <data type="string" rngui:label="Value"/>
87
+ </element>
88
+ </element>
89
+ </zeroOrMore>
90
+ </element>
91
+ </element>
92
+ </element>
93
+ <element name="code" rngui:header="Implementation">
94
+ <element name="prepare" rngui:header="Prepare" rngui:label="Code" rngui:fold='closed_conditional'>
95
+ <text rngui:label='Script that is executed, before a service call'/>
96
+ </element>
97
+ <element name="finalize" rngui:header="Finalize" rngui:label="Code" rngui:fold='closed_conditional'>
98
+ <attribute name="output" rngui:label="Access Variable" rngui:default="result">
99
+ <data type="string" rngui:readonly="true"/>
100
+ </attribute>
101
+ <text rngui:label='Script that is executed, when a service returns data'/>
102
+ </element>
103
+ <element name="update" rngui:header="Update" rngui:label="Code" rngui:fold='closed_conditional'>
104
+ <attribute name="output" rngui:label="Access Variable" rngui:default="result">
105
+ <data type="string" rngui:readonly="true"/>
106
+ </attribute>
107
+ <text rngui:label='Script that is executed, when a service sends intermediate data'/>
108
+ </element>
109
+ <element name="rescue" rngui:header="Rescue" rngui:label="Code" rngui:fold='closed_conditional'>
110
+ <attribute name="output" rngui:label="Access Variable" rngui:default="result">
111
+ <data type="string" rngui:readonly="true"/>
112
+ </attribute>
113
+ <text rngui:label='Script that is executed, if a service call fails'/>
114
+ </element>
115
+ </element>
116
+ <element name="annotations" rngui:header="Annotations">
117
+ <element name="_timing" rngui:header="Timing" rngui:fold="closed">
118
+ <element name="_timing_min" rngui:label='Min in min'>
119
+ <data type='float' rngui:label='Minutes'/>
120
+ </element>
121
+ <element name="_timing_max" rngui:label='Max in min'>
122
+ <data type='float' rngui:label='Minutes'/>
123
+ </element>
124
+ <element name="_timing_avg" rngui:label='Avg in min'>
125
+ <data type='float' rngui:label='Minutes'/>
126
+ </element>
127
+ </element>
128
+ <element name="_notes" rngui:header="Notes" rngui:fold="closed">
129
+ <element name="_notes_general" rngui:label='General'>
130
+ <text rngui:wrap='true' rngui:label='Notes'/>
131
+ </element>
132
+ <element name="_notes_output" rngui:label='Output'>
133
+ <text rngui:wrap='true' rngui:label='Notes'/>
134
+ </element>
135
+ <element name="_attachments">
136
+ <zeroOrMore rngui:label="Create Attachment">
137
+ <element name='_attachment' rngui:label='Attachment'>
138
+ <attribute name="label" rngui:label="Note">
139
+ <data type="string"/>
140
+ </attribute>
141
+ <data type="string" rngui:label="Url"/>
142
+ </element>
143
+ </zeroOrMore>
144
+ </element>
145
+ </element>
146
+ </element>
147
+ </element>