Merge "[master] IFrame view added, minor fixes in rangeFilter handling - WebGUI_Improvements"
diff --git a/license.txt b/license.txt
deleted file mode 100644
index c29ecb0..0000000
--- a/license.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-Copyright (c) 2000-2017 Ericsson Telecom AB
-
-All rights reserved.
-
-This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http:www.eclipse.org/legal/epl-v10.html
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
-Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-Neither the name of the Eclipse Foundation, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/test/DsRestAPI/DsRestAPITestConfig.json b/test/DsRestAPI/DsRestAPITestConfig.json
new file mode 100644
index 0000000..00d8b4d
--- /dev/null
+++ b/test/DsRestAPI/DsRestAPITestConfig.json
@@ -0,0 +1,217 @@
+DsRestAPITestConfig = {
+ "DSClientName" : "DsRestAPI_Test_DataSource",
+ "EntityGroups" : [
+ {
+ "Value" : "EntityGroup_0",
+ "tp" : 10,
+ "Scenarios" : [
+ {
+ "Value" : "Scenario_0",
+ "tp" : 10,
+ "TrafficCases" : [
+ {
+ "Value" : "TrafficCase_0",
+ "tp" : 10,
+ "TcStart" : {
+ "Value" : "false",
+ "tp" : 3
+ },
+ "TcStop" : {
+ "Value" : "true",
+ "tp" : 3
+ }
+ },
+ {
+ "Value" : "TrafficCase_1",
+ "tp" : 10,
+ "TcStart" : {
+ "Value" : "true",
+ "tp" : 3
+ },
+ "TcStop" : {
+ "Value" : "false",
+ "tp" : 3
+ }
+ }
+ ],
+ "Dummy" : [
+ {
+ "Value" : "Dummy_0",
+ "tp" : 10
+ },
+ {
+ "Value" : "Dummy_1",
+ "tp" : 10
+ }
+ ],
+ "ScStart" : {
+ "Value" : "true",
+ "tp" : 3
+ },
+ "ScStop" : {
+ "Value" : "true",
+ "tp" : 3
+ },
+ "ScStatusLED" : {
+ "Value" : "[led:green]Scenario EntityGroup_0.Scenario_0 is running",
+ "tp" : 11
+ }
+ },
+ {
+ "Value" : "Scenario_1",
+ "tp" : 10,
+ "TrafficCases" : [
+ {
+ "Value" : "TrafficCase_0",
+ "tp" : 10,
+ "TcStart" : {
+ "Value" : "false",
+ "tp" : 3
+ },
+ "TcStop" : {
+ "Value" : "true",
+ "tp" : 3
+ }
+ },
+ {
+ "Value" : "TrafficCase_1",
+ "tp" : 10,
+ "TcStart" : {
+ "Value" : "true",
+ "tp" : 3
+ },
+ "TcStop" : {
+ "Value" : "false",
+ "tp" : 3
+ }
+ }
+ ],
+ "Dummy" : [
+ {
+ "Value" : "Dummy_0",
+ "tp" : 10
+ },
+ {
+ "Value" : "Dummy_1",
+ "tp" : 10
+ }
+ ],
+ "ScStart" : {
+ "Value" : "false",
+ "tp" : 3
+ },
+ "ScStop" : {
+ "Value" : "false",
+ "tp" : 3
+ }
+ }
+ ],
+ "EGrpType" : { "Value" : "entityType_0", "tp" : 4 },
+ "EGrpSize" : { "Value" : "0", "tp" : 1 }
+ },
+ {
+ "Value" : "EntityGroup_1",
+ "tp" : 10,
+ "Scenarios" : [
+ {
+ "Value" : "Scenario_0",
+ "tp" : 10,
+ "TrafficCases" : [
+ {
+ "Value" : "TrafficCase_0",
+ "tp" : 10,
+ "TcStart" : {
+ "Value" : "false",
+ "tp" : 3
+ },
+ "TcStop" : {
+ "Value" : "true",
+ "tp" : 3
+ }
+ },
+ {
+ "Value" : "TrafficCase_1",
+ "tp" : 10,
+ "TcStart" : {
+ "Value" : "true",
+ "tp" : 3
+ },
+ "TcStop" : {
+ "Value" : "false",
+ "tp" : 3
+ }
+ }
+ ],
+ "Dummy" : [
+ {
+ "Value" : "Dummy_0",
+ "tp" : 10
+ },
+ {
+ "Value" : "Dummy_1",
+ "tp" : 10
+ }
+ ],
+ "ScStart" : {
+ "Value" : "true",
+ "tp" : 3
+ },
+ "ScStop" : {
+ "Value" : "true",
+ "tp" : 3
+ }
+ },
+ {
+ "Value" : "Scenario_1",
+ "tp" : 10,
+ "TrafficCases" : [
+ {
+ "Value" : "TrafficCase_0",
+ "tp" : 10,
+ "TcStart" : {
+ "Value" : "false",
+ "tp" : 3
+ },
+ "TcStop" : {
+ "Value" : "true",
+ "tp" : 3
+ }
+ },
+ {
+ "Value" : "TrafficCase_1",
+ "tp" : 10,
+ "TcStart" : {
+ "Value" : "true",
+ "tp" : 3
+ },
+ "TcStop" : {
+ "Value" : "false",
+ "tp" : 3
+ }
+ }
+ ],
+ "Dummy" : [
+ {
+ "Value" : "Dummy_0",
+ "tp" : 10
+ },
+ {
+ "Value" : "Dummy_1",
+ "tp" : 10
+ }
+ ],
+ "ScStart" : {
+ "Value" : "false",
+ "tp" : 3
+ },
+ "ScStop" : {
+ "Value" : "false",
+ "tp" : 3
+ }
+ }
+ ],
+ "EGrpType" : { "Value" : "entityType_1", "tp" : 4 },
+ "EGrpSize" : { "Value" : "1", "tp" : 1 }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/DsRestAPI/JSON_reqResp/test1.request b/test/DsRestAPI/JSON_reqResp/test1.request
new file mode 100644
index 0000000..e4536b4
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test1.request
@@ -0,0 +1,13 @@
+requests.test1 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : []
+ }
+ }
+ ]
+}
+
+descriptions.test1 = "Basic getData with empty but present params and children."
diff --git a/test/DsRestAPI/JSON_reqResp/test1.response b/test/DsRestAPI/JSON_reqResp/test1.response
new file mode 100644
index 0000000..369575b
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test1.response
@@ -0,0 +1,17 @@
+responses.test1 = {
+ "contentList" : [{
+ "list" : [{
+ "node" : {
+ "val" : "EntityGroup_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "EntityGroup_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test10.request b/test/DsRestAPI/JSON_reqResp/test10.request
new file mode 100644
index 0000000..d4539b1
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test10.request
@@ -0,0 +1,19 @@
+requests.test10 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "ScStatusLED",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }
+ ],
+ "children" : []
+ }
+ }
+ ]
+}
+descriptions.test10 = "Valid getData with multiple params."
diff --git a/test/DsRestAPI/JSON_reqResp/test10.response b/test/DsRestAPI/JSON_reqResp/test10.response
new file mode 100644
index 0000000..ba8efe7
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test10.response
@@ -0,0 +1,9 @@
+responses.test10 = {
+ "contentList" : [{
+ "node" : {
+ "val" : "[led:green]Scenario EntityGroup_0.Scenario_0 is running",
+ "tp" : 11
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test11.request b/test/DsRestAPI/JSON_reqResp/test11.request
new file mode 100644
index 0000000..4347c92
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test11.request
@@ -0,0 +1,35 @@
+requests.test11 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "ScStatusLED",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }
+ ],
+ "children" : []
+ }
+ }, {
+ "setData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "ScStatusLED",
+ "content" : "[led:red]Scenario EntityGroup_0.Scenario_0 is stopped",
+ "tp" : 11,
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }
+ ]
+ }
+ }
+ ]
+}
+
+descriptions.test11 = "Valid getData and setData in one request."
diff --git a/test/DsRestAPI/JSON_reqResp/test11.response b/test/DsRestAPI/JSON_reqResp/test11.response
new file mode 100644
index 0000000..011d993
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test11.response
@@ -0,0 +1,16 @@
+responses.test11 = {
+ "contentList" : [
+ {
+ "node" : {
+ "val" : "[led:green]Scenario EntityGroup_0.Scenario_0 is running",
+ "tp" : 11
+ }
+ },
+ {
+ "node" : {
+ "val" : "[led:red]Scenario EntityGroup_0.Scenario_0 is stopped",
+ "tp" : 11
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/DsRestAPI/JSON_reqResp/test12.request b/test/DsRestAPI/JSON_reqResp/test12.request
new file mode 100644
index 0000000..a9bf3d3
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test12.request
@@ -0,0 +1,15 @@
+requests.test12 = {
+ "requests" : {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : []
+ }
+ }
+ ]
+ }
+}
+
+descriptions.test12 = "Invalid getData, double requests fields."
diff --git a/test/DsRestAPI/JSON_reqResp/test12.response b/test/DsRestAPI/JSON_reqResp/test12.response
new file mode 100644
index 0000000..65e26ad
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test12.response
@@ -0,0 +1,9 @@
+responses.test12 = {
+ "contentList" : [{
+ "node" : {
+ "val" : "Error processing request, Reason: While JSON-decoding type '@EPTF_CLL_DsRestAPI_DSServer_Definitions.EPTF_DsRestAPI_RqWrapper': Invalid JSON token found while decoding field 'requests'",
+ "tp" : 4
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test13.request b/test/DsRestAPI/JSON_reqResp/test13.request
new file mode 100644
index 0000000..6e5a915
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test13.request
@@ -0,0 +1,15 @@
+requests.test13 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : [{
+ "apple" : "20"
+ }
+ ]
+ }
+ }
+ ]
+}
+descriptions.test13 = "Invalid getData, invalid key in children."
diff --git a/test/DsRestAPI/JSON_reqResp/test13.response b/test/DsRestAPI/JSON_reqResp/test13.response
new file mode 100644
index 0000000..a2157de
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test13.response
@@ -0,0 +1,9 @@
+responses.test13 = {
+ "contentList" : [{
+ "node" : {
+ "val" : "Error processing request, Reason: While JSON-decoding type '@EPTF_CLL_DsRestAPI_DSServer_Definitions.EPTF_DsRestAPI_RqWrapper': Invalid field name 'apple'",
+ "tp" : 4
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test14.request b/test/DsRestAPI/JSON_reqResp/test14.request
new file mode 100644
index 0000000..8c1839a
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test14.request
@@ -0,0 +1,15 @@
+requests.test14 = {
+ "requests" : [{
+ "setData" : {
+ "source" : "ExecCtrl",
+ "element" : "help",
+ "params" : [{
+ "paramName" : "Format",
+ "paramValue" : "TEXT"
+ }
+ ]
+ }
+ }
+ ]
+}
+descriptions.test14 = "Invalid setData, without content and tp."
diff --git a/test/DsRestAPI/JSON_reqResp/test14.response b/test/DsRestAPI/JSON_reqResp/test14.response
new file mode 100644
index 0000000..5d2d25d
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test14.response
@@ -0,0 +1,9 @@
+responses.test14 = {
+ "contentList" : [{
+ "node" : {
+ "val" : "Error processing request, Reason: While JSON-decoding type '@EPTF_CLL_DsRestAPI_DSServer_Definitions.EPTF_DsRestAPI_RqWrapper': No JSON data found for field 'content'",
+ "tp" : 4
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test15.request b/test/DsRestAPI/JSON_reqResp/test15.request
new file mode 100644
index 0000000..0876a0b
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test15.request
@@ -0,0 +1,16 @@
+requests.test15 = {
+ "requests" : [{
+ "setData" : {
+ "source" : "ExecCtrl",
+ "element" : "help",
+ "content" : "[led:red]Scenario EntityGroup_0.Scenario_0 is stopped",
+ "params" : [{
+ "paramName" : "Format",
+ "paramValue" : "TEXT"
+ }
+ ]
+ }
+ }
+ ]
+}
+descriptions.test15 = "Invalid setData, without tp."
diff --git a/test/DsRestAPI/JSON_reqResp/test15.response b/test/DsRestAPI/JSON_reqResp/test15.response
new file mode 100644
index 0000000..d860f72
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test15.response
@@ -0,0 +1,9 @@
+responses.test15 = {
+ "contentList" : [{
+ "node" : {
+ "val" : "Error processing request, Reason: While JSON-decoding type '@EPTF_CLL_DsRestAPI_DSServer_Definitions.EPTF_DsRestAPI_RqWrapper': No JSON data found for field 'tp'",
+ "tp" : 4
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test16.request b/test/DsRestAPI/JSON_reqResp/test16.request
new file mode 100644
index 0000000..1515642
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test16.request
@@ -0,0 +1,16 @@
+requests.test16 = {
+ "requests" : [{
+ "setData" : {
+ "source" : "ExecCtrl",
+ "element" : "help",
+ "tp" : 11,
+ "params" : [{
+ "paramName" : "Format",
+ "paramValue" : "TEXT"
+ }
+ ]
+ }
+ }
+ ]
+}
+descriptions.test16 = "Invalid setData, without content."
diff --git a/test/DsRestAPI/JSON_reqResp/test16.response b/test/DsRestAPI/JSON_reqResp/test16.response
new file mode 100644
index 0000000..d5a2c0c
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test16.response
@@ -0,0 +1,9 @@
+responses.test16 = {
+ "contentList" : [{
+ "node" : {
+ "val" : "Error processing request, Reason: While JSON-decoding type '@EPTF_CLL_DsRestAPI_DSServer_Definitions.EPTF_DsRestAPI_RqWrapper': No JSON data found for field 'content'",
+ "tp" : 4
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test17.request b/test/DsRestAPI/JSON_reqResp/test17.request
new file mode 100644
index 0000000..8d8fc0c
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test17.request
@@ -0,0 +1,17 @@
+requests.test17 = {
+ "requests" : [{
+ "setData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "help",
+ "content" : "[led:red]Scenario EntityGroup_0.Scenario_0 is stopped",
+ "tp" : 2,
+ "params" : [{
+ "paramName" : "Format",
+ "paramValue" : "TEXT"
+ }
+ ]
+ }
+ }
+ ]
+}
+descriptions.test17 = "Invalid setData, tp 2 is float, not bool; also, everything in help is read-only."
diff --git a/test/DsRestAPI/JSON_reqResp/test17.response b/test/DsRestAPI/JSON_reqResp/test17.response
new file mode 100644
index 0000000..c45adba
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test17.response
@@ -0,0 +1,9 @@
+responses.test17 = {
+ "contentList" : [{
+ "node" : {
+ "val" : "Cannot convert content: [led:red]Scenario EntityGroup_0.Scenario_0 is stopped to tp: 2, Reason: The argument of function str2float(), which is \"[led:red]Scenario EntityGroup_0.Scenario_0 is stopped\", does not represent a valid float value. Invalid character `[' was found at index 0.",
+ "tp" : 4
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test18.request b/test/DsRestAPI/JSON_reqResp/test18.request
new file mode 100644
index 0000000..ded0f09
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test18.request
@@ -0,0 +1,17 @@
+requests.test18 = {
+ "requests" : [{
+ "setData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "help",
+ "content" : "[led:red]Scenario EntityGroup_0.Scenario_0 is stopped",
+ "tp" : 20,
+ "params" : [{
+ "paramName" : "Format",
+ "paramValue" : "TEXT"
+ }
+ ]
+ }
+ }
+ ]
+}
+descriptions.test18 = "Invalid setData, tp 20 is invalid, not LED(10); also, everything in help is read-only."
diff --git a/test/DsRestAPI/JSON_reqResp/test18.response b/test/DsRestAPI/JSON_reqResp/test18.response
new file mode 100644
index 0000000..daad3e5
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test18.response
@@ -0,0 +1,9 @@
+responses.test18 = {
+ "contentList" : [{
+ "node" : {
+ "val" : "Invalid tp: 20",
+ "tp" : 4
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test19.request b/test/DsRestAPI/JSON_reqResp/test19.request
new file mode 100644
index 0000000..a8affe0
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test19.request
@@ -0,0 +1,17 @@
+requests.test19 = {
+ "requests" : [{
+ "setData" : {
+ "source" : "DataSource",
+ "element" : "help",
+ "content" : "[led:red]Scenario EntityGroup_0.Scenario_0 is stopped",
+ "tp" : 11,
+ "params" : [{
+ "paramName" : "Format",
+ "paramValue" : "TEXT"
+ }
+ ]
+ }
+ }
+ ]
+}
+descriptions.test19 = "Valid setData, BUT everything in help is read-only."
diff --git a/test/DsRestAPI/JSON_reqResp/test19.response b/test/DsRestAPI/JSON_reqResp/test19.response
new file mode 100644
index 0000000..842c7c6
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test19.response
@@ -0,0 +1,9 @@
+responses.test19 = {
+ "contentList" : [{
+ "node" : {
+ "val" : "Value cannot be changed",
+ "tp" : 4
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test2.request b/test/DsRestAPI/JSON_reqResp/test2.request
new file mode 100644
index 0000000..9ac9a60
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test2.request
@@ -0,0 +1,18 @@
+requests.test2 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TrafficCases",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }
+ ],
+ "children" : []
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test2.response b/test/DsRestAPI/JSON_reqResp/test2.response
new file mode 100644
index 0000000..9e63d50
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test2.response
@@ -0,0 +1,17 @@
+responses.test2 = {
+ "contentList" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test20.request b/test/DsRestAPI/JSON_reqResp/test20.request
new file mode 100644
index 0000000..334ece2
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test20.request
@@ -0,0 +1,16 @@
+requests.test20 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : [],
+ "filter": {
+ "dataValue": "true"
+ }
+ }
+ }
+ ]
+}
+
+descriptions.test20 = "Basic getData with empty but present params and children with filter true."
diff --git a/test/DsRestAPI/JSON_reqResp/test20.response b/test/DsRestAPI/JSON_reqResp/test20.response
new file mode 100644
index 0000000..5998631
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test20.response
@@ -0,0 +1,17 @@
+responses.test20 = {
+ "contentList" : [{
+ "list" : [{
+ "node" : {
+ "val" : "EntityGroup_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "EntityGroup_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test21.request b/test/DsRestAPI/JSON_reqResp/test21.request
new file mode 100644
index 0000000..c185b44
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test21.request
@@ -0,0 +1,21 @@
+requests.test21 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TrafficCases",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }
+ ],
+ "children" : [],
+ "filter": {
+ "dataValue": "true"
+ }
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test21.response b/test/DsRestAPI/JSON_reqResp/test21.response
new file mode 100644
index 0000000..f7a3c1b
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test21.response
@@ -0,0 +1,17 @@
+responses.test21 = {
+ "contentList" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test22.request b/test/DsRestAPI/JSON_reqResp/test22.request
new file mode 100644
index 0000000..1d0263f
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test22.request
@@ -0,0 +1,20 @@
+requests.test22 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EGrpType",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }
+ ],
+ "children" : [],
+ "filter": {
+ "dataValue": "true"
+ }
+ }
+ }
+ ]
+}
+
+descriptions.test22 = "Valid getData with params with filter true."
diff --git a/test/DsRestAPI/JSON_reqResp/test22.response b/test/DsRestAPI/JSON_reqResp/test22.response
new file mode 100644
index 0000000..7c42820
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test22.response
@@ -0,0 +1,9 @@
+responses.test22 = {
+ "contentList" : [{
+ "node" : {
+ "val" : "entityType_0",
+ "tp" : 4
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test23.request b/test/DsRestAPI/JSON_reqResp/test23.request
new file mode 100644
index 0000000..1f89083
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test23.request
@@ -0,0 +1,71 @@
+requests.test23 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EGrpType",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }
+ ],
+ "children" : [],
+ "filter": {
+ "dataValue": "true"
+ }
+ }
+ }, {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EGrpSize",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }
+ ],
+ "children" : [],
+ "filter": {
+ "dataValue": "true"
+ }
+ }
+ }, {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "ScStart",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }
+ ],
+ "children" : [],
+ "filter": {
+ "dataValue": "true"
+ }
+ }
+ }, {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TcStop",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }, {
+ "paramName" : "TrafficCase",
+ "paramValue" : "TrafficCase_0"
+ }
+ ],
+ "children" : [],
+ "filter": {
+ "dataValue": "true"
+ }
+ }
+ }
+ ]
+}
+
+descriptions.test23 = "Valid array of 4 getDatas with filter true."
diff --git a/test/DsRestAPI/JSON_reqResp/test23.response b/test/DsRestAPI/JSON_reqResp/test23.response
new file mode 100644
index 0000000..e66ef13
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test23.response
@@ -0,0 +1,24 @@
+responses.test23 = {
+ "contentList" : [{
+ "node" : {
+ "val" : "entityType_0",
+ "tp" : 4
+ }
+ }, {
+ "node" : {
+ "val" : "0",
+ "tp" : 1
+ }
+ }, {
+ "node" : {
+ "val" : "true",
+ "tp" : 3
+ }
+ }, {
+ "node" : {
+ "val" : "true",
+ "tp" : 3
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test24.request b/test/DsRestAPI/JSON_reqResp/test24.request
new file mode 100644
index 0000000..9b09ca2
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test24.request
@@ -0,0 +1,43 @@
+requests.test24 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "Scenarios",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }
+ ],
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TrafficCases",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }
+ ],
+ "children" : []
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "filter": {
+ "dataValue": "true"
+ }
+ }
+ }
+ ]
+}
+
+descriptions.test24 = "Valid getData with children in a depth of 3 with filter true."
diff --git a/test/DsRestAPI/JSON_reqResp/test24.response b/test/DsRestAPI/JSON_reqResp/test24.response
new file mode 100644
index 0000000..a97a66b
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test24.response
@@ -0,0 +1,107 @@
+responses.test24 = {
+ "contentList" : [{
+ "list" : [{
+ "node" : {
+ "val" : "EntityGroup_0",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Scenario_0",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "Scenario_1",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "EntityGroup_1",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Scenario_0",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "Scenario_1",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test25.request b/test/DsRestAPI/JSON_reqResp/test25.request
new file mode 100644
index 0000000..420b508
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test25.request
@@ -0,0 +1,57 @@
+requests.test25 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "Scenarios",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }
+ ],
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "ScStart",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }
+ ],
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "Dummy",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }
+ ],
+ "children" : []
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "filter": {
+ "dataValue": "true"
+ }
+ }
+ }
+ ]
+}
+descriptions.test25 = "Valid getData with children in a depth of 4 with filter true."
diff --git a/test/DsRestAPI/JSON_reqResp/test25.response b/test/DsRestAPI/JSON_reqResp/test25.response
new file mode 100644
index 0000000..b850aa8
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test25.response
@@ -0,0 +1,135 @@
+responses.test25 = {
+ "contentList" : [{
+ "list" : [{
+ "node" : {
+ "val" : "EntityGroup_0",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Scenario_0",
+ "tp" : 10,
+ "childVals" : [{
+ "node" : {
+ "val" : "true",
+ "tp" : 3,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Dummy_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "Dummy_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "Scenario_1",
+ "tp" : 10,
+ "childVals" : [{
+ "node" : {
+ "val" : "true",
+ "tp" : 3,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Dummy_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "Dummy_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "EntityGroup_1",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Scenario_0",
+ "tp" : 10,
+ "childVals" : [{
+ "node" : {
+ "val" : "true",
+ "tp" : 3,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Dummy_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "Dummy_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "Scenario_1",
+ "tp" : 10,
+ "childVals" : [{
+ "node" : {
+ "val" : "true",
+ "tp" : 3,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Dummy_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "Dummy_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test26.request b/test/DsRestAPI/JSON_reqResp/test26.request
new file mode 100644
index 0000000..d90408a
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test26.request
@@ -0,0 +1,33 @@
+requests.test26 = {
+ "requests" : [
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "dataElementPresent",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "HostAdminServer"
+ },
+ {
+ "paramName": "Element",
+ "paramValue": "Hosts"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "Hosts"
+ }
+ }
+ ],
+ "filter": {
+ "dataValue": "%Parent0%"
+ }
+ }
+ }
+ ]
+}
+
+descriptions.test26 = "False filter value ponting to its request. Children should not be processed."
\ No newline at end of file
diff --git a/test/DsRestAPI/JSON_reqResp/test26.response b/test/DsRestAPI/JSON_reqResp/test26.response
new file mode 100644
index 0000000..2515b76
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test26.response
@@ -0,0 +1,9 @@
+responses.test26 = {
+ "contentList" : [{
+ "node": {
+ "val": "",
+ "tp": 0
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/DsRestAPI/JSON_reqResp/test27.request b/test/DsRestAPI/JSON_reqResp/test27.request
new file mode 100644
index 0000000..32410e6
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test27.request
@@ -0,0 +1,43 @@
+requests.test27 = {
+ "requests" : [
+ {
+ "getData": {
+ "source": "DsRestAPI_Test_DataSource",
+ "element": "EntityGroups",
+ "filter": {
+ "request": {
+ "source": "DataSource",
+ "element": ">",
+ "params": [
+ {
+ "paramName": "Par1",
+ "paramValue": {
+ "request": {
+ "source": "DsRestAPI_Test_DataSource",
+ "element": "EGrpSize",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": {
+ "dataValue": "%Parent0%"
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "paramName": "Par2",
+ "paramValue": {
+ "dataValue": "0"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+}
+
+descriptions.test27 = "EnittyGroups whose EGrpSize is > 0"
diff --git a/test/DsRestAPI/JSON_reqResp/test27.response b/test/DsRestAPI/JSON_reqResp/test27.response
new file mode 100644
index 0000000..bee6f06
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test27.response
@@ -0,0 +1,12 @@
+responses.test27 = {
+ "contentList" : [{
+ "list" : [{
+ "node" : {
+ "val" : "EntityGroup_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test28.request b/test/DsRestAPI/JSON_reqResp/test28.request
new file mode 100644
index 0000000..224fa4f
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test28.request
@@ -0,0 +1,80 @@
+requests.test28 = {
+ "requests" : [
+ {
+ "getData": {
+ "source": "DsRestAPI_Test_DataSource",
+ "element": "EntityGroups",
+ "children": [
+ {
+ "getData": {
+ "source": "DsRestAPI_Test_DataSource",
+ "element": "Scenarios",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ }
+ ],
+ "filter": {
+ "request": {
+ "source": "DataSource",
+ "element": "and",
+ "params": [
+ {
+ "paramName": "Par1",
+ "paramValue": {
+ "request": {
+ "source": "DsRestAPI_Test_DataSource",
+ "element": "ScStop",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": {
+ "dataValue": "%Parent0%"
+ }
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": {
+ "dataValue": "%Parent1%"
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "paramName": "Par2",
+ "paramValue": {
+ "request": {
+ "source": "DsRestAPI_Test_DataSource",
+ "element": "ScStart",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": {
+ "dataValue": "%Parent0%"
+ }
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": {
+ "dataValue": "%Parent1%"
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ ]
+}
+
+descriptions.test28 = "Scenarios who are started and stopped at the same time..."
diff --git a/test/DsRestAPI/JSON_reqResp/test28.response b/test/DsRestAPI/JSON_reqResp/test28.response
new file mode 100644
index 0000000..4601d67
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test28.response
@@ -0,0 +1,43 @@
+responses.test28 = {
+ "contentList" : [
+ {
+ "list" : [
+ {
+ "node" : {
+ "val" : "EntityGroup_0",
+ "tp" : 10,
+ "childVals" : [
+ {
+ "list" : [
+ {
+ "node" : {
+ "val" : "Scenario_0",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "EntityGroup_1",
+ "tp" : 10,
+ "childVals" : [
+ {
+ "list" : [
+ {
+ "node" : {
+ "val" : "Scenario_0",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test29.request b/test/DsRestAPI/JSON_reqResp/test29.request
new file mode 100644
index 0000000..d6e8712
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test29.request
@@ -0,0 +1,43 @@
+requests.test29 = {
+ "requests" : [
+ {
+ "getData": {
+ "source": "DsRestAPI_Test_DataSource",
+ "element": "EntityGroups",
+ "children": [
+ {
+ "getData": {
+ "source": "DsRestAPI_Test_DataSource",
+ "element": "Scenarios",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "DsRestAPI_Test_DataSource",
+ "element": "ScStart",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+}
+descriptions.test29 = "Valid getData with multiple params and parents."
diff --git a/test/DsRestAPI/JSON_reqResp/test29.response b/test/DsRestAPI/JSON_reqResp/test29.response
new file mode 100644
index 0000000..abbd327
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test29.response
@@ -0,0 +1,85 @@
+responses.test29 = {
+ "contentList" : [
+ {
+ "list" : [
+ {
+ "node" : {
+ "val" : "EntityGroup_0",
+ "tp" : 10,
+ "childVals" : [
+ {
+ "list" : [
+ {
+ "node" : {
+ "val" : "Scenario_0",
+ "tp" : 10,
+ "childVals" : [
+ {
+ "node": {
+ "val": "true",
+ "tp": 3
+ }
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "Scenario_1",
+ "tp" : 10,
+ "childVals" : [
+ {
+ "node": {
+ "val": "false",
+ "tp": 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "EntityGroup_1",
+ "tp" : 10,
+ "childVals" : [
+ {
+ "list" : [
+ {
+ "node" : {
+ "val" : "Scenario_0",
+ "tp" : 10,
+ "childVals" : [
+ {
+ "node": {
+ "val": "true",
+ "tp": 3
+ }
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "Scenario_1",
+ "tp" : 10,
+ "childVals" : [
+ {
+ "node": {
+ "val": "false",
+ "tp": 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test3.request b/test/DsRestAPI/JSON_reqResp/test3.request
new file mode 100644
index 0000000..d0fc6b2
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test3.request
@@ -0,0 +1,17 @@
+requests.test3 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EGrpType",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }
+ ],
+ "children" : []
+ }
+ }
+ ]
+}
+
+descriptions.test3 = "Valid getData with params."
diff --git a/test/DsRestAPI/JSON_reqResp/test3.response b/test/DsRestAPI/JSON_reqResp/test3.response
new file mode 100644
index 0000000..55d1dc8
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test3.response
@@ -0,0 +1,9 @@
+responses.test3 = {
+ "contentList" : [{
+ "node" : {
+ "val" : "entityType_0",
+ "tp" : 4
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test39.request b/test/DsRestAPI/JSON_reqResp/test39.request
new file mode 100644
index 0000000..eadaecb
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test39.request
@@ -0,0 +1,16 @@
+requests.test39 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : [],
+ "filter": {
+ "dataValue": "false"
+ }
+ }
+ }
+ ]
+}
+
+descriptions.test39 = "Filtering with constant false"
diff --git a/test/DsRestAPI/JSON_reqResp/test39.response b/test/DsRestAPI/JSON_reqResp/test39.response
new file mode 100644
index 0000000..bc39941
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test39.response
@@ -0,0 +1,9 @@
+responses.test39 = {
+ "contentList" : [{
+ "node": {
+ "val": "",
+ "tp": 0
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test4.request b/test/DsRestAPI/JSON_reqResp/test4.request
new file mode 100644
index 0000000..c9fd479
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test4.request
@@ -0,0 +1,59 @@
+requests.test4 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EGrpType",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }
+ ],
+ "children" : []
+ }
+ }, {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EGrpSize",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }
+ ],
+ "children" : []
+ }
+ }, {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "ScStart",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }
+ ],
+ "children" : []
+ }
+ }, {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TcStop",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }, {
+ "paramName" : "TrafficCase",
+ "paramValue" : "TrafficCase_0"
+ }
+ ],
+ "children" : []
+ }
+ }
+ ]
+}
+
+descriptions.test4 = "Valid array of 4 getDatas."
diff --git a/test/DsRestAPI/JSON_reqResp/test4.response b/test/DsRestAPI/JSON_reqResp/test4.response
new file mode 100644
index 0000000..d3c64e8
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test4.response
@@ -0,0 +1,24 @@
+responses.test4 = {
+ "contentList" : [{
+ "node" : {
+ "val" : "entityType_0",
+ "tp" : 4
+ }
+ }, {
+ "node" : {
+ "val" : "0",
+ "tp" : 1
+ }
+ }, {
+ "node" : {
+ "val" : "true",
+ "tp" : 3
+ }
+ }, {
+ "node" : {
+ "val" : "true",
+ "tp" : 3
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test40.request b/test/DsRestAPI/JSON_reqResp/test40.request
new file mode 100644
index 0000000..dead671
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test40.request
@@ -0,0 +1,14 @@
+requests.test40 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : [],
+ "filter": "true"
+ }
+ }
+ ]
+}
+
+descriptions.test21 = "Filter syntax error, bool string not union"
diff --git a/test/DsRestAPI/JSON_reqResp/test40.response b/test/DsRestAPI/JSON_reqResp/test40.response
new file mode 100644
index 0000000..69a2cf7
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test40.response
@@ -0,0 +1,9 @@
+responses.test40 = {
+ "contentList" : [{
+ "node" : {
+ "val" : "Error processing request, Reason: While JSON-decoding type '@EPTF_CLL_DsRestAPI_DSServer_Definitions.EPTF_DsRestAPI_RqWrapper': Invalid JSON token found while decoding field 'filter'",
+ "tp" : 4
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test41.request b/test/DsRestAPI/JSON_reqResp/test41.request
new file mode 100644
index 0000000..6cd28af
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test41.request
@@ -0,0 +1,16 @@
+requests.test41 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : [],
+ "filter": {
+ "datavalue" : "true"
+ }
+ }
+ }
+ ]
+}
+
+descriptions.test41 = "Filter syntax error, union field name error"
diff --git a/test/DsRestAPI/JSON_reqResp/test41.response b/test/DsRestAPI/JSON_reqResp/test41.response
new file mode 100644
index 0000000..80bd5d9
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test41.response
@@ -0,0 +1,9 @@
+responses.test41 = {
+ "contentList" : [{
+ "node": {
+ "val" : "Error processing request, Reason: While JSON-decoding type '@EPTF_CLL_DsRestAPI_DSServer_Definitions.EPTF_DsRestAPI_RqWrapper': Invalid field name 'datavalue'",
+ "tp" : 4
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test42.request b/test/DsRestAPI/JSON_reqResp/test42.request
new file mode 100644
index 0000000..1b62953
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test42.request
@@ -0,0 +1,18 @@
+requests.test42 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : [],
+ "filter": {
+ "request" : {
+ "source" : "DsRestAPI_Test_DataSource"
+ }
+ }
+ }
+ }
+ ]
+}
+
+descriptions.test42 = "Filter syntax error, request not complete"
diff --git a/test/DsRestAPI/JSON_reqResp/test42.response b/test/DsRestAPI/JSON_reqResp/test42.response
new file mode 100644
index 0000000..ac0d70b
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test42.response
@@ -0,0 +1,9 @@
+responses.test42 = {
+ "contentList" : [{
+ "node": {
+ "val" : "Error processing request, Reason: While JSON-decoding type '@EPTF_CLL_DsRestAPI_DSServer_Definitions.EPTF_DsRestAPI_RqWrapper': No JSON data found for field 'element'",
+ "tp" : 4
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test43.request b/test/DsRestAPI/JSON_reqResp/test43.request
new file mode 100644
index 0000000..8edae68
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test43.request
@@ -0,0 +1,19 @@
+requests.test43 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : [],
+ "filter": {
+ "request" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "ScStatusLED"
+ }
+ }
+ }
+ }
+ ]
+}
+
+descriptions.test43 = "Filter semantic error, request result is error, processed as false"
diff --git a/test/DsRestAPI/JSON_reqResp/test43.response b/test/DsRestAPI/JSON_reqResp/test43.response
new file mode 100644
index 0000000..75e60b8
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test43.response
@@ -0,0 +1,9 @@
+responses.test43 = {
+ "contentList" : [{
+ "node": {
+ "val": "",
+ "tp": 0
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test44.request b/test/DsRestAPI/JSON_reqResp/test44.request
new file mode 100644
index 0000000..000970b
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test44.request
@@ -0,0 +1,37 @@
+requests.test44 = {
+ "requests" : [
+ {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : [],
+ "filter": {
+ "request" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TcStop",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : {
+ "dataValue" : "EntityGroup_0"
+ }
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : {
+ "dataValue" : "Scenario_0"
+ }
+ }, {
+ "paramName" : "TrafficCase",
+ "paramValue" : {
+ "dataValue" : "TrafficCase_0"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+}
+
+descriptions.test44 = "Filter request with params"
diff --git a/test/DsRestAPI/JSON_reqResp/test44.response b/test/DsRestAPI/JSON_reqResp/test44.response
new file mode 100644
index 0000000..ef549b3
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test44.response
@@ -0,0 +1,17 @@
+responses.test44 = {
+ "contentList" : [{
+ "list" : [{
+ "node" : {
+ "val" : "EntityGroup_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "EntityGroup_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test45.request b/test/DsRestAPI/JSON_reqResp/test45.request
new file mode 100644
index 0000000..2d1b5ea
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test45.request
@@ -0,0 +1,30 @@
+requests.test45 = {
+ "requests" : [
+ {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TcStop",
+ "params" : [
+ {
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ },
+ {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ },
+ {
+ "paramName" : "TrafficCase",
+ "paramValue" : "TrafficCase_0"
+ }
+ ],
+ "children" : [],
+ "filter": {
+ "dataValue" : "%Parent0%"
+ }
+ }
+ }
+ ]
+}
+
+descriptions.test45 = "Filtering based on response value"
diff --git a/test/DsRestAPI/JSON_reqResp/test45.response b/test/DsRestAPI/JSON_reqResp/test45.response
new file mode 100644
index 0000000..2ca4830
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test45.response
@@ -0,0 +1,10 @@
+responses.test45 = {
+ "contentList" : [
+ {
+ "node" : {
+ "val" : "true",
+ "tp" : 3
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test46.request b/test/DsRestAPI/JSON_reqResp/test46.request
new file mode 100644
index 0000000..e7b8fbf
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test46.request
@@ -0,0 +1,34 @@
+requests.test46 = {
+ "requests" : [
+ {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TcStart",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }, {
+ "paramName" : "TrafficCase",
+ "paramValue" : "TrafficCase_0"
+ }
+ ],
+ "children" : [
+ {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "filter" : {
+ "dataValue" : "%Parent0%"
+ }
+ }
+ }
+ ]
+ }
+ }
+ ]
+}
+
+descriptions.test46 = "Filtering based on parent response value"
diff --git a/test/DsRestAPI/JSON_reqResp/test46.response b/test/DsRestAPI/JSON_reqResp/test46.response
new file mode 100644
index 0000000..0f57a7c
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test46.response
@@ -0,0 +1,18 @@
+responses.test46 = {
+ "contentList" : [
+ {
+ "node" : {
+ "val" : "false",
+ "tp" : 3,
+ "childVals" : [
+ {
+ "node" : {
+ "val" : "",
+ "tp" : 0
+ }
+ }
+ ]
+ }
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test47.request b/test/DsRestAPI/JSON_reqResp/test47.request
new file mode 100644
index 0000000..61de8e1
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test47.request
@@ -0,0 +1,34 @@
+requests.test47 = {
+ "requests" : [
+ {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TcStop",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }, {
+ "paramName" : "TrafficCase",
+ "paramValue" : "TrafficCase_0"
+ }
+ ],
+ "children" : [
+ {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "filter" : {
+ "dataValue" : "%Parent0%"
+ }
+ }
+ }
+ ]
+ }
+ }
+ ]
+}
+
+descriptions.test47 = "Filtering based on parent response value when true"
diff --git a/test/DsRestAPI/JSON_reqResp/test47.response b/test/DsRestAPI/JSON_reqResp/test47.response
new file mode 100644
index 0000000..199cbbb
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test47.response
@@ -0,0 +1,28 @@
+responses.test47 = {
+ "contentList" : [
+ {
+ "node": {
+ "val": "true",
+ "tp": 3,
+ "childVals": [
+ {
+ "list": [
+ {
+ "node": {
+ "val": "EntityGroup_0",
+ "tp": 10
+ }
+ },
+ {
+ "node": {
+ "val": "EntityGroup_1",
+ "tp": 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test5.request b/test/DsRestAPI/JSON_reqResp/test5.request
new file mode 100644
index 0000000..46577a3
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test5.request
@@ -0,0 +1,40 @@
+requests.test5 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "Scenarios",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }
+ ],
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TrafficCases",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }
+ ],
+ "children" : []
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+}
+
+descriptions.test5 = "Valid getData with children in a depth of 3."
diff --git a/test/DsRestAPI/JSON_reqResp/test5.response b/test/DsRestAPI/JSON_reqResp/test5.response
new file mode 100644
index 0000000..0aedeae
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test5.response
@@ -0,0 +1,107 @@
+responses.test5 = {
+ "contentList" : [{
+ "list" : [{
+ "node" : {
+ "val" : "EntityGroup_0",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Scenario_0",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "Scenario_1",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "EntityGroup_1",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Scenario_0",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "Scenario_1",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test6.request b/test/DsRestAPI/JSON_reqResp/test6.request
new file mode 100644
index 0000000..686d6bf
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test6.request
@@ -0,0 +1,54 @@
+requests.test6 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "Scenarios",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }
+ ],
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "ScStart",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }
+ ],
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "Dummy",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "Scenario_0"
+ }
+ ],
+ "children" : []
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+}
+descriptions.test6 = "Valid getData with children in a depth of 4."
diff --git a/test/DsRestAPI/JSON_reqResp/test6.response b/test/DsRestAPI/JSON_reqResp/test6.response
new file mode 100644
index 0000000..74b7853
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test6.response
@@ -0,0 +1,135 @@
+responses.test6 = {
+ "contentList" : [{
+ "list" : [{
+ "node" : {
+ "val" : "EntityGroup_0",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Scenario_0",
+ "tp" : 10,
+ "childVals" : [{
+ "node" : {
+ "val" : "true",
+ "tp" : 3,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Dummy_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "Dummy_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "Scenario_1",
+ "tp" : 10,
+ "childVals" : [{
+ "node" : {
+ "val" : "true",
+ "tp" : 3,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Dummy_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "Dummy_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "EntityGroup_1",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Scenario_0",
+ "tp" : 10,
+ "childVals" : [{
+ "node" : {
+ "val" : "true",
+ "tp" : 3,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Dummy_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "Dummy_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "Scenario_1",
+ "tp" : 10,
+ "childVals" : [{
+ "node" : {
+ "val" : "true",
+ "tp" : 3,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Dummy_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "Dummy_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test7.request b/test/DsRestAPI/JSON_reqResp/test7.request
new file mode 100644
index 0000000..af226d3
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test7.request
@@ -0,0 +1,5 @@
+requests.test7 = {
+ "requests" : []
+}
+
+descriptions.test7 = "An empty request."
diff --git a/test/DsRestAPI/JSON_reqResp/test7.response b/test/DsRestAPI/JSON_reqResp/test7.response
new file mode 100644
index 0000000..6fbed24
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test7.response
@@ -0,0 +1,3 @@
+responses.test7 = {
+ "contentList" : []
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test8.request b/test/DsRestAPI/JSON_reqResp/test8.request
new file mode 100644
index 0000000..f94a070
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test8.request
@@ -0,0 +1,17 @@
+requests.test8 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TrafficCases",
+ "params" : [{
+ "paramName" : "ScenarioInstance",
+ "paramValue" : "EntityGroup_0.Scenario_0"
+ }
+ ],
+ "children" : []
+ }
+ }
+ ]
+}
+
+descriptions.test8 = "Valid getData with params."
diff --git a/test/DsRestAPI/JSON_reqResp/test8.response b/test/DsRestAPI/JSON_reqResp/test8.response
new file mode 100644
index 0000000..a93783d
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test8.response
@@ -0,0 +1,17 @@
+responses.test8 = {
+ "contentList" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/DsRestAPI/JSON_reqResp/test9.request b/test/DsRestAPI/JSON_reqResp/test9.request
new file mode 100644
index 0000000..65f478f
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test9.request
@@ -0,0 +1,37 @@
+requests.test9 = {
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "Scenarios",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "EntityGroup_0"
+ }
+ ],
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TrafficCases",
+ "params" : [{
+ "paramName" : "ScenarioInstance",
+ "paramValue" : "%Parent0%.%Parent1%"
+ }
+ ],
+ "children" : []
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+}
+
+descriptions.test9 = "Valid getData with children in a depth of 3."
diff --git a/test/DsRestAPI/JSON_reqResp/test9.response b/test/DsRestAPI/JSON_reqResp/test9.response
new file mode 100644
index 0000000..8057ba2
--- /dev/null
+++ b/test/DsRestAPI/JSON_reqResp/test9.response
@@ -0,0 +1,107 @@
+responses.test9 = {
+ "contentList" : [{
+ "list" : [{
+ "node" : {
+ "val" : "EntityGroup_0",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Scenario_0",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "Scenario_1",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "EntityGroup_1",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Scenario_0",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "Scenario_1",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/MockTest/AjvSelfTest.js b/test/MockTest/AjvSelfTest.js
new file mode 100644
index 0000000..7992cd8
--- /dev/null
+++ b/test/MockTest/AjvSelfTest.js
@@ -0,0 +1,277 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2017 Ericsson Telecom AB //
+// //
+// All rights reserved. This program and the accompanying materials //
+// are made available under the terms of the Eclipse Public License v1.0 //
+// which accompanies this distribution, and is available at //
+// http://www.eclipse.org/legal/epl-v10.html //
+///////////////////////////////////////////////////////////////////////////////
+function AjvSelfTest() {
+ "use strict";
+
+ var ajv = new Ajv({
+ allErrors : true,
+ format : "full",
+ verbose : true,
+ inlineRefs : false
+ });
+ /* selftest:
+ The selftest.pass[].inputs are known good.
+ The selftest.fail[].inputs are known bad.
+
+ A selftest step fails if the validator's result does not match the expected result.
+
+ This is for semantically checking our JSON schema.
+ */
+
+ var selftest = {
+ "pass" : {
+ "expects" : true,
+ "inputs" : []
+ },
+ "fail" : {
+ "expects" : false,
+ "inputs" : []
+ }
+ };
+
+ selftest.pass.inputs.push({
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource2",
+ "element" : "EntityGroups2"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ });
+ selftest.pass.inputs.push({
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups"
+ }
+ }
+ ]
+ });
+ selftest.pass.inputs.push({
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "Scenarios",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "%Parent0%"
+ }
+ ],
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TrafficCases",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "%Parent0%"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "%Parent1%"
+ }
+ ],
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TcStart",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "%Parent0%"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "%Parent1%"
+ }, {
+ "paramName" : "TrafficCase",
+ "paramValue" : "%Parent2%"
+ }
+ ]
+ }
+ }, {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "TcStop",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "%Parent0%"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "%Parent1%"
+ }, {
+ "paramName" : "TrafficCase",
+ "paramValue" : "%Parent2%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }, {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "Dummy",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "%Parent0%"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "%Parent1%"
+ }
+ ]
+ }
+ }, {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "ScStart",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "%Parent0%"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "%Parent1%"
+ }
+ ]
+ }
+ }, {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "ScStop",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "%Parent0%"
+ }, {
+ "paramName" : "Scenario",
+ "paramValue" : "%Parent1%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }, {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EGrpType",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "%Parent0%"
+ }
+ ]
+ }
+ }, {
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EGrpSize",
+ "params" : [{
+ "paramName" : "EntityGroup",
+ "paramValue" : "%Parent0%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ });
+
+ selftest.pass.inputs.push({
+ "requests" : []
+ });
+
+ selftest.fail.inputs.push({
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : [{
+ "apple" : "20"
+ }
+ ]
+ }
+ }
+ ]
+ });
+ selftest.fail.inputs.push({
+ "horgxxp" : [{
+ "xxetData" : {
+ "source" : "DsRestAPI_Test_DataSource"
+ }
+ }
+ ]
+ });
+ selftest.fail.inputs.push({
+ "requests" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroups",
+ "params" : [],
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "Ent7658765ityGroups",
+ "children" : [{
+ "getData" : {
+ "source" : "DsRestAPI_Test_DataSource",
+ "element" : "EntityGroug76ps",
+ "params" : [],
+ "children" : [{
+ "deep_apple" : "20"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ });
+
+ this.validate = function (schema) {
+ var validateSchema = ajv.compile({
+ "$ref" : "http://json-schema.org/draft-04/schema#"
+ });
+ var isSchemaValid = validateSchema(schema);
+ if (!isSchemaValid) {
+ console.error("Our JSON Schema is not syntactically valid per json-schema draft-04! Cannot continue...", validateSchema.errors);
+ return false;
+ }
+
+ var validator = ajv.compile(schema);
+ var validator_result = true;
+
+ for (var key in selftest) {
+ if (selftest.hasOwnProperty(key)) {
+ for (var i = 0; i < selftest[key].inputs.length; ++i) {
+ var result = validator(selftest[key].inputs[i]);
+ if (result !== selftest[key].expects) {
+ validator_result = false;
+ console.error("Selftest failure: ", key + "[" + (i + 1) + "]: ", result + " returned but expected " + selftest[key].expects, "!!!", validator.errors);
+ }
+ }
+ }
+ }
+
+ return validator_result;
+ };
+}
diff --git a/test/MockTest/Main.js b/test/MockTest/Main.js
new file mode 100644
index 0000000..fe94ed8
--- /dev/null
+++ b/test/MockTest/Main.js
@@ -0,0 +1,199 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2017 Ericsson Telecom AB //
+// //
+// All rights reserved. This program and the accompanying materials //
+// are made available under the terms of the Eclipse Public License v1.0 //
+// which accompanies this distribution, and is available at //
+// http://www.eclipse.org/legal/epl-v10.html //
+///////////////////////////////////////////////////////////////////////////////
+var WebApplications = WebApplications || [];
+
+WebApplications.push({"application": new MockTest_Application()});
+
+var responses = {};
+var requests = {};
+var descriptions = {};
+
+function MockTest_Application() {
+ "use strict";
+ var v_appBase = new WebAppBase();
+
+ var jsfiles = [
+ "WebApplications/MockTest/DsRestAPITestConfig.js",
+ "WebApplications/MockTest/TestConfigModelFiller.js",
+ "WebApplications/MockTest/AjvSelfTest.js",
+
+ "Utils/DsRestAPI/DsRestAPI.js",
+ "Utils/DsRestAPI/MockedServer/DSHelp.js",
+ "Utils/DsRestAPI/MockedServer/DataGenerator.js",
+ "Utils/DsRestAPI/MockedServer/Model.js",
+ "Utils/DsRestAPI/MockedServer/DsRestAPIComm_Mock.js",
+
+ // The test requests
+ "WebApplications/MockTest/Testcases/all.request",
+ "WebApplications/MockTest/Testcases/test1.request",
+ "WebApplications/MockTest/Testcases/test2.request",
+ "WebApplications/MockTest/Testcases/test3.request",
+ "WebApplications/MockTest/Testcases/test4.request",
+ "WebApplications/MockTest/Testcases/test5.request",
+ "WebApplications/MockTest/Testcases/test6.request",
+ "WebApplications/MockTest/Testcases/test7.request",
+ "WebApplications/MockTest/Testcases/test8.request",
+ "WebApplications/MockTest/Testcases/test9.request",
+ "WebApplications/MockTest/Testcases/test10.request",
+ "WebApplications/MockTest/Testcases/test11.request",
+ "WebApplications/MockTest/Testcases/test12.request",
+ "WebApplications/MockTest/Testcases/test13.request",
+ "WebApplications/MockTest/Testcases/test14.request",
+ "WebApplications/MockTest/Testcases/test15.request",
+ "WebApplications/MockTest/Testcases/test16.request",
+ "WebApplications/MockTest/Testcases/test17.request",
+ "WebApplications/MockTest/Testcases/test18.request",
+ "WebApplications/MockTest/Testcases/test19.request",
+
+ // The responses
+ "WebApplications/MockTest/Testcases/all.response",
+ "WebApplications/MockTest/Testcases/test1.response",
+ "WebApplications/MockTest/Testcases/test2.response",
+ "WebApplications/MockTest/Testcases/test3.response",
+ "WebApplications/MockTest/Testcases/test4.response",
+ "WebApplications/MockTest/Testcases/test5.response",
+ "WebApplications/MockTest/Testcases/test6.response",
+ "WebApplications/MockTest/Testcases/test7.response",
+ "WebApplications/MockTest/Testcases/test8.response",
+ "WebApplications/MockTest/Testcases/test9.response",
+ "WebApplications/MockTest/Testcases/test10.response",
+ "WebApplications/MockTest/Testcases/test11.response",
+ "WebApplications/MockTest/Testcases/test12.response",
+ "WebApplications/MockTest/Testcases/test13.response",
+ "WebApplications/MockTest/Testcases/test14.response",
+ "WebApplications/MockTest/Testcases/test15.response",
+ "WebApplications/MockTest/Testcases/test16.response",
+ "WebApplications/MockTest/Testcases/test17.response",
+ "WebApplications/MockTest/Testcases/test18.response",
+ "WebApplications/MockTest/Testcases/test19.response"
+ ];
+
+ this.info = function () {
+ return {
+ defaultIcon : "WebApplications/RequestConsole/main_icon.png",
+ defaultName : "Mock Test"
+ };
+ };
+
+ this.load = function (p_webAppModel) {
+ v_appBase.load(jsfiles, [], start, p_webAppModel.getFileHandler());
+ };
+
+ this.unload = function(webappUnloaded) {
+ webappUnloaded(true);
+ };
+
+ function start(p_callback) {
+ var model = new Model(new DataGenerator());
+ var testConfigModelFiller = new TestConfigModelFiller(model);
+ testConfigModelFiller.fillModel(DsRestAPITestConfig);
+ var mock = new CDsRestAPIComm(true, model);
+ runTests(mock);
+ p_callback();
+ }
+
+ function Comparator(p_key, p_response) {
+ var response = p_response;
+ this.successful = false;
+ var v_this = this;
+
+ this.compare = function (answer) {
+ var expected = JSON.stringify(response);
+ var actualObj = answer;
+ var actual = JSON.stringify(actualObj);
+ var isErrorExpected = response.contentList &&
+ response.contentList.length > 0 && response.contentList[0] && (
+ (response.contentList[0].list &&
+ typeof response.contentList[0].list[0].node.val === 'string' &&
+ response.contentList[0].list[0].node.val.toLowerCase().indexOf("error") > -1) ||
+ (response.contentList[0].node &&
+ typeof response.contentList[0].node.val === 'string' &&
+ response.contentList[0].node.val.toLowerCase().indexOf("error") > -1));
+ var isErrorReceived = actualObj.contentList &&
+ actualObj.contentList.length > 0 && actualObj.contentList[0] && (
+ (actualObj.contentList[0].list &&
+ typeof actualObj.contentList[0].list[0].node.val === 'string' &&
+ actualObj.contentList[0].list[0].node.val.match(/(error|cannot|invalid)/i)) ||
+ (actualObj.contentList[0].node &&
+ typeof actualObj.contentList[0].node.val === 'string' &&
+ actualObj.contentList[0].node.val.match(/(error|cannot|invalid)/i)));
+
+ v_this.successful = (isErrorExpected && isErrorReceived) || (actual == expected);
+
+ if (!v_this.successful)
+ console.log("-----------------\ntestcase: " + p_key + "\nexpected: " + expected + "\nreceived: " + actual + "\n-----------------");
+ };
+ }
+
+ function runTests(p_mock) {
+ var mock = p_mock;
+ var successful = true;
+ var selftest = new AjvSelfTest();
+
+ if (!selftest.validate(mock.getSchema())) {
+ console.error("Schema validator selftest failed!");
+ } else {
+ console.log("Schema validator selftest passed.");
+ }
+ var requestmap = [];
+ var keymap = [];
+ for (var key in requests)
+ if (requests.hasOwnProperty(key)) {
+ requestmap.push(requests[key]);
+ keymap.push(key);
+ }
+
+ var errors = requestmap.reduce(function(prev, current, index, context) {
+ console.log("Commencing test #" + keymap[index]);
+ var comparator = new Comparator(index, responses[keymap[index]]);
+ var err = "";
+ var isHexstring = false;
+ if (current.requests && current.requests[0])
+ isHexstring = (current.requests[0].listOfGetData ? false : (current.requests[0].getData ? current.requests[0].getData.element === "help" : current.requests[0].setData.element === "help"));
+ mock.ajaxCall(current, function ajaxCallCallback(answer) {
+ answer = {"contentList": answer};
+ if (isHexstring) {
+ // response to an "element: help" request --> node.val is a hexstring
+ var answerObj = answer;
+ for(var i = 0; i < answerObj.contentList.length; i++)
+ if (!answerObj.contentList[i].node.val.startsWith("Error")) // Errors are not in hexstring.
+ answerObj.contentList[i].node.val = hex2a(answerObj.contentList[i].node.val);
+ answer = answerObj;
+ }
+ comparator.compare(answer);
+ });
+ if (!comparator.successful) {
+ err = "Wrong response for " + keymap[index];
+ if (descriptions[keymap[index]])
+ err += " -- Description of the test step: " + descriptions[keymap[index]];
+ }
+ return prev.concat(err);
+ }, []);
+
+ var errormsg = errors.reduce(function(prev, current, index, context) {return current.length?prev + current + "\n":prev;}, "");
+
+ successful = errors.reduce(function(prev, current, index, context) {
+ return (prev && !current.length);
+ }, true);
+
+ if (successful) {
+ alert("Test result: pass");
+ } else {
+ alert("Test result: fail\n" + errormsg);
+ }
+ }
+
+ function hex2a(hex)
+ {
+ var str = '';
+ for (var i = 0; i < hex.length; i += 2)
+ str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
+ return str;
+ }
+}
diff --git a/test/MockTest/TestConfigModelFiller.js b/test/MockTest/TestConfigModelFiller.js
new file mode 100644
index 0000000..1b7d44b
--- /dev/null
+++ b/test/MockTest/TestConfigModelFiller.js
@@ -0,0 +1,76 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2017 Ericsson Telecom AB //
+// //
+// All rights reserved. This program and the accompanying materials //
+// are made available under the terms of the Eclipse Public License v1.0 //
+// which accompanies this distribution, and is available at //
+// http://www.eclipse.org/legal/epl-v10.html //
+///////////////////////////////////////////////////////////////////////////////
+function TestConfigModelFiller(p_model) {
+
+ /** private member */
+ var model;
+
+ /** contructor */
+ model = p_model;
+
+ /** private functions */
+
+ function getKey(source, element, parents) {
+ var key = source + "." + element;
+ parents.sort();
+ for (var i = 0; i < parents.length; ++i) {
+ key += "." + parents[i];
+ }
+ return key;
+ }
+
+ /**
+ Traverse a list in the data. Creates the content by collecting the answers in a list.
+ */
+ function traverseModelList(source, element, parents, data) {
+ var content = {list : []};
+ for (var i = 0; i < data.length; ++i) {
+ var obj = data[i];
+ var ans = traverseModelObject(source, parents, obj);
+ content.list.push(ans);
+ }
+ model.addContent(getKey(source, element, parents), content);
+
+ }
+
+ /**
+ Traverses an object in the data. Creates a node content and traverses its list or object elements recursively.
+ */
+ function traverseModelObject(source, parents, data) {
+ var content = {node : {}};
+ var value = data["Value"];
+ content.node.val = value;
+ content.node.tp = data["tp"];
+ for (var key in data) {
+ if (data.hasOwnProperty(key) && key != "Value" && key != "tp") {
+ parents.push(value);
+ if (data[key]["Value"] == undefined) {
+ traverseModelList(source, key, parents, data[key]);
+ } else {
+ model.addContent(getKey(source, key, parents), traverseModelObject(source, parents, data[key]));
+ }
+ parents.pop();
+ }
+ }
+ return content;
+ }
+
+ /** public functions */
+
+ this.fillModel = function(data) {
+ var source = data["DSClientName"];
+ for (var key in data) {
+ if (key == "DSClientName" || !data.hasOwnProperty(key)) {
+ continue;
+ }
+ var parents = [];
+ traverseModelList(source, key, parents, data[key]);
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/MockTest/Testcases/all.request b/test/MockTest/Testcases/all.request
new file mode 100644
index 0000000..759003e
--- /dev/null
+++ b/test/MockTest/Testcases/all.request
@@ -0,0 +1,137 @@
+requests.all = {
+ "requests": [{
+ "getData":{
+ "source":"DsRestAPI_Test_DataSource",
+ "element":"EntityGroups",
+ "children":[
+ {
+ "getData": {
+ "source":"DsRestAPI_Test_DataSource",
+ "element":"Scenarios",
+ "params":[{
+ "paramName":"EntityGroup",
+ "paramValue":"%Parent0%"
+ }],
+ "children":[
+ {
+ "getData":{
+ "source":"DsRestAPI_Test_DataSource",
+ "element":"TrafficCases",
+ "params":[{
+ "paramName":"EntityGroup",
+ "paramValue":"%Parent0%"
+ },
+ {
+ "paramName":"Scenario",
+ "paramValue":"%Parent1%"
+ }],
+ "children":[
+ {
+ "getData": {
+ "source":"DsRestAPI_Test_DataSource",
+ "element":"TcStart",
+ "params":[{
+ "paramName":"EntityGroup",
+ "paramValue":"%Parent0%"
+ },
+ {
+ "paramName":"Scenario",
+ "paramValue":"%Parent1%"
+ },
+ {
+ "paramName":"TrafficCase",
+ "paramValue":"%Parent2%"
+ }],
+ }
+ },
+ {
+ "getData": {
+ "source":"DsRestAPI_Test_DataSource",
+ "element":"TcStop",
+ "params":[{
+ "paramName":"EntityGroup",
+ "paramValue":"%Parent0%"
+ },
+ {
+ "paramName":"Scenario",
+ "paramValue":"%Parent1%"
+ },
+ {
+ "paramName":"TrafficCase",
+ "paramValue":"%Parent2%"
+ }],
+ }
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source":"DsRestAPI_Test_DataSource",
+ "element":"Dummy",
+ "params":[{
+ "paramName":"EntityGroup",
+ "paramValue":"%Parent0%"
+ },
+ {
+ "paramName":"Scenario",
+ "paramValue":"%Parent1%"
+ }],
+ }
+ },
+ {
+ "getData": {
+ "source":"DsRestAPI_Test_DataSource",
+ "element":"ScStart",
+ "params":[{
+ "paramName":"EntityGroup",
+ "paramValue":"%Parent0%"
+ },
+ {
+ "paramName":"Scenario",
+ "paramValue":"%Parent1%"
+ }],
+ }
+ },
+ {
+ "getData": {
+ "source":"DsRestAPI_Test_DataSource",
+ "element":"ScStop",
+ "params":[{
+ "paramName":"EntityGroup",
+ "paramValue":"%Parent0%"
+ },
+ {
+ "paramName":"Scenario",
+ "paramValue":"%Parent1%"
+ }],
+ }
+ }]
+ }
+ },
+ {
+ "getData": {
+ "source":"DsRestAPI_Test_DataSource",
+ "element":"EGrpType",
+ "params":[{
+ "paramName":"EntityGroup",
+ "paramValue":"%Parent0%"
+ }],
+ },
+ },
+ {
+ "getData": {
+ "source":"DsRestAPI_Test_DataSource",
+ "element":"EGrpSize",
+ "params":[{
+ "paramName":"EntityGroup",
+ "paramValue":"%Parent0%"
+ }],
+ }
+ }
+ ]}
+ }
+ ]
+}
+
+descriptions.all = "Valid getData, with numerous childrens."
\ No newline at end of file
diff --git a/test/MockTest/Testcases/all.response b/test/MockTest/Testcases/all.response
new file mode 100644
index 0000000..3a6d3f0
--- /dev/null
+++ b/test/MockTest/Testcases/all.response
@@ -0,0 +1,315 @@
+responses.all = {
+ "contentList" : [{
+ "list" : [{
+ "node" : {
+ "val" : "EntityGroup_0",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Scenario_0",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10,
+ "childVals" : [{
+ "node" : {
+ "val" : "false",
+ "tp" : 3
+ }
+ }, {
+ "node" : {
+ "val" : "true",
+ "tp" : 3
+ }
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10,
+ "childVals" : [{
+ "node" : {
+ "val" : "true",
+ "tp" : 3
+ }
+ }, {
+ "node" : {
+ "val" : "false",
+ "tp" : 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }, {
+ "list" : [{
+ "node" : {
+ "val" : "Dummy_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "Dummy_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }, {
+ "node" : {
+ "val" : "true",
+ "tp" : 3
+ }
+ }, {
+ "node" : {
+ "val" : "true",
+ "tp" : 3
+ }
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "Scenario_1",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10,
+ "childVals" : [{
+ "node" : {
+ "val" : "false",
+ "tp" : 3
+ }
+ }, {
+ "node" : {
+ "val" : "true",
+ "tp" : 3
+ }
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10,
+ "childVals" : [{
+ "node" : {
+ "val" : "true",
+ "tp" : 3
+ }
+ }, {
+ "node" : {
+ "val" : "false",
+ "tp" : 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }, {
+ "list" : [{
+ "node" : {
+ "val" : "Dummy_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "Dummy_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }, {
+ "node" : {
+ "val" : "false",
+ "tp" : 3
+ }
+ }, {
+ "node" : {
+ "val" : "false",
+ "tp" : 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }, {
+ "node" : {
+ "val" : "entityType_0",
+ "tp" : 4
+ }
+ }, {
+ "node" : {
+ "val" : "0",
+ "tp" : 1
+ }
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "EntityGroup_1",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "Scenario_0",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10,
+ "childVals" : [{
+ "node" : {
+ "val" : "false",
+ "tp" : 3
+ }
+ }, {
+ "node" : {
+ "val" : "true",
+ "tp" : 3
+ }
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10,
+ "childVals" : [{
+ "node" : {
+ "val" : "true",
+ "tp" : 3
+ }
+ }, {
+ "node" : {
+ "val" : "false",
+ "tp" : 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }, {
+ "list" : [{
+ "node" : {
+ "val" : "Dummy_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "Dummy_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }, {
+ "node" : {
+ "val" : "true",
+ "tp" : 3
+ }
+ }, {
+ "node" : {
+ "val" : "true",
+ "tp" : 3
+ }
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "Scenario_1",
+ "tp" : 10,
+ "childVals" : [{
+ "list" : [{
+ "node" : {
+ "val" : "TrafficCase_0",
+ "tp" : 10,
+ "childVals" : [{
+ "node" : {
+ "val" : "false",
+ "tp" : 3
+ }
+ }, {
+ "node" : {
+ "val" : "true",
+ "tp" : 3
+ }
+ }
+ ]
+ }
+ }, {
+ "node" : {
+ "val" : "TrafficCase_1",
+ "tp" : 10,
+ "childVals" : [{
+ "node" : {
+ "val" : "true",
+ "tp" : 3
+ }
+ }, {
+ "node" : {
+ "val" : "false",
+ "tp" : 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }, {
+ "list" : [{
+ "node" : {
+ "val" : "Dummy_0",
+ "tp" : 10
+ }
+ }, {
+ "node" : {
+ "val" : "Dummy_1",
+ "tp" : 10
+ }
+ }
+ ]
+ }, {
+ "node" : {
+ "val" : "false",
+ "tp" : 3
+ }
+ }, {
+ "node" : {
+ "val" : "false",
+ "tp" : 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }, {
+ "node" : {
+ "val" : "entityType_1",
+ "tp" : 4
+ }
+ }, {
+ "node" : {
+ "val" : "1",
+ "tp" : 1
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/MockedServer/DSHelp.js b/test/MockedServer/DSHelp.js
new file mode 100644
index 0000000..a2c9bb1
--- /dev/null
+++ b/test/MockedServer/DSHelp.js
@@ -0,0 +1,6753 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2017 Ericsson Telecom AB //
+// //
+// All rights reserved. This program and the accompanying materials //
+// are made available under the terms of the Eclipse Public License v1.0 //
+// which accompanies this distribution, and is available at //
+// http://www.eclipse.org/legal/epl-v10.html //
+///////////////////////////////////////////////////////////////////////////////
+DSHelp = {
+ "sources": [
+ {
+ "source": "DataSource",
+ "dataElements": [
+ {
+ "dataElement": {
+ "name": "Sources",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "Source"
+ },
+ "description": "This iterator enlists the data sources that have been registered into the DataSource"
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "PTCs",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "PTC"
+ },
+ "description": "This data element returns the list of PTCs for a given data source",
+ "parameters": [
+ {
+ "name": "Source",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Source"
+ }
+ },
+ "description": "the data source. Should be one item in the list returned by 'Sources'",
+ "exampleValue": "DataSource"
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "dataElementPresent",
+ "valueType": "boolType",
+ "description": "This condition returns true if the specified dataElement is present",
+ "parameters": [
+ {
+ "name": "Source",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Source"
+ }
+ },
+ "description": "the data source",
+ "exampleValue": "DataSource"
+ },
+ {
+ "name": "PTCName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "PTC"
+ }
+ },
+ "description": "the PTC name (optional)",
+ "exampleValue": ""
+ },
+ {
+ "name": "Element",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "the Element. This parameter is followed by an optional list of the parameterName-Value pairs",
+ "exampleValue": "PTCs"
+ },
+ {
+ "name": "ParamName",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "the ParamName",
+ "exampleValue": "Source"
+ },
+ {
+ "name": "ParamValue",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "the ParamValue",
+ "exampleValue": "DataSource"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "sizeOf",
+ "valueType": "intType",
+ "description": "This dataelement returns the size of the iterator list or 1 for single elements",
+ "parameters": [
+ {
+ "name": "Source",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Source"
+ }
+ },
+ "description": "the data source",
+ "exampleValue": "DataSource"
+ },
+ {
+ "name": "PTCName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "PTC"
+ }
+ },
+ "description": "the PTC name (optional)",
+ "exampleValue": ""
+ },
+ {
+ "name": "Element",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "the Element. This parameter is followed by an optional list of the parameterName-Value pairs",
+ "exampleValue": "PTCs"
+ },
+ {
+ "name": "ParamName",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "the ParamName",
+ "exampleValue": "Source"
+ },
+ {
+ "name": "ParamValue",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "the ParamValue",
+ "exampleValue": "DataSource"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "!=",
+ "valueType": "boolType",
+ "description": "This condition tests if the value of the first argument differs from the second",
+ "parameters": [
+ {
+ "name": "Par1",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "the first param to compare",
+ "exampleValue": "some string"
+ },
+ {
+ "name": "Par2",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "the second param to compare",
+ "exampleValue": "some other string"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "<",
+ "valueType": "boolType",
+ "description": "This condition tests if the value of the first argument is less than the second. The value of the parameters should be a float number.",
+ "parameters": [
+ {
+ "name": "Par1",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "the first param to compare",
+ "exampleValue": "1.0"
+ },
+ {
+ "name": "Par2",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "the second param to compare",
+ "exampleValue": "2.0e-2"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "<=",
+ "valueType": "boolType",
+ "description": "This condition tests if the value of the first argument is less or equal than the second. The value of the parameters should be a float number.",
+ "parameters": [
+ {
+ "name": "Par1",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "the first param to compare",
+ "exampleValue": "1.0"
+ },
+ {
+ "name": "Par2",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "the second param to compare",
+ "exampleValue": "2.0e-2"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "==",
+ "valueType": "boolType",
+ "description": "This condition tests if the value of the first argument is the same as of the second",
+ "parameters": [
+ {
+ "name": "Par1",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "the first param to compare",
+ "exampleValue": "some string"
+ },
+ {
+ "name": "Par2",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "the second param to compare",
+ "exampleValue": "some other string"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": ">",
+ "valueType": "boolType",
+ "description": "This condition tests if the value of the first argument is more than the second. The value of the parameters should be a float number.",
+ "parameters": [
+ {
+ "name": "Par1",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "the first param to compare",
+ "exampleValue": "1.0"
+ },
+ {
+ "name": "Par2",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "the second param to compare",
+ "exampleValue": "2.0e-2"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": ">=",
+ "valueType": "boolType",
+ "description": "This condition tests if the value of the first argument is more or equal than the second. The value of the parameters should be a float number.",
+ "parameters": [
+ {
+ "name": "Par1",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "the first param to compare",
+ "exampleValue": "1.0"
+ },
+ {
+ "name": "Par2",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "the second param to compare",
+ "exampleValue": "2.0e-2"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "and",
+ "valueType": "boolType",
+ "description": "This condition returns the logical 'and' of the arguments",
+ "parameters": [
+ {
+ "name": "Par1",
+ "typeDescriptor": {
+ "valueType": "boolType"
+ },
+ "description": "the first param. Type: booltype",
+ "exampleValue": "true"
+ },
+ {
+ "name": "Par2",
+ "typeDescriptor": {
+ "valueType": "boolType"
+ },
+ "description": "the second param. Type: booltype",
+ "exampleValue": "false"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "help",
+ "valueType": "charstringType",
+ "description": "This data element returns the help information about all dataElements supported",
+ "parameters": [
+ {
+ "name": "Format",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "The format of the output. Valid values: \"JSON\", \"TEXT\". Default: \"JSON\"",
+ "exampleValue": "TEXT"
+ },
+ {
+ "name": "Source",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "The source to select the help for. If not specified (or empty string \"\" is given) it means 'all available sources'",
+ "exampleValue": "DataSource"
+ },
+ {
+ "name": "Element",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "The element to select the help for. If not specified (or empty string \"\" is given) it means 'all available elements'",
+ "exampleValue": ""
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "match",
+ "valueType": "boolType",
+ "description": "This condition tests if the value of the first argument matches the second. The ttcn match function is called for the given arguments in order. The second parameter used as a pattern string for matching.",
+ "parameters": [
+ {
+ "name": "Par1",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "the first param to compare",
+ "exampleValue": "some string"
+ },
+ {
+ "name": "Par2",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "the second param to compare. This parameter is used as a pattern string for matching",
+ "exampleValue": "*str*"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "not",
+ "valueType": "boolType",
+ "description": "This condition returns the logical 'not' of the argument",
+ "parameters": [
+ {
+ "name": "Par1",
+ "typeDescriptor": {
+ "valueType": "boolType"
+ },
+ "description": "the first param. Type: booltype",
+ "exampleValue": "false"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "not match",
+ "valueType": "boolType",
+ "description": "This condition tests if the value of the first argument does not match the second. The ttcn match function is called for the given arguments in order. The second parameter used as a pattern string for matching.",
+ "parameters": [
+ {
+ "name": "Par1",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "the first param to compare",
+ "exampleValue": "some string"
+ },
+ {
+ "name": "Par2",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "the second param to compare. This parameter is used as a pattern string for matching",
+ "exampleValue": "*str*"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "or",
+ "valueType": "boolType",
+ "description": "This condition returns the logical 'or' of the arguments",
+ "parameters": [
+ {
+ "name": "Par1",
+ "typeDescriptor": {
+ "valueType": "boolType"
+ },
+ "description": "the first param. Type: booltype",
+ "exampleValue": "true"
+ },
+ {
+ "name": "Par2",
+ "typeDescriptor": {
+ "valueType": "boolType"
+ },
+ "description": "the second param. Type: booltype",
+ "exampleValue": "false"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "source": "StatManager",
+ "dataElements": [
+ {
+ "dataElement": {
+ "name": "LEDlimit",
+ "valueType": "statusLEDType",
+ "description": "This dataElement creates/returns a limits statistics for a given source and reference variable.",
+ "parameters": [
+ {
+ "name": "blackLimit",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "Limiting value above which the LED colour becomes black (optional)",
+ "exampleValue": "10.0"
+ },
+ {
+ "name": "blueLimit",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "Limiting value above which the LED colour becomes blue (optional)",
+ "exampleValue": "20.0"
+ },
+ {
+ "name": "redLimit",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "Limiting value above which the LED colour becomes red (optional)",
+ "exampleValue": "30.0"
+ },
+ {
+ "name": "yellowLimit",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "Limiting value above which the LED colour becomes yellow (optional)",
+ "exampleValue": "40.0"
+ },
+ {
+ "name": "greenLimit",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "Limiting value above which the LED colour becomes green (optional)",
+ "exampleValue": "50.0"
+ },
+ {
+ "name": "defaultColor",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "Specifies the default colour of the LED (colour below the lowest limit). Its value should be one of: \"blue\",\"black\",\"yellow\",\"green\" or \"red\". (optional, default: \"black\")",
+ "exampleValue": "green"
+ },
+ {
+ "name": "enableValueInLEDText",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "If set to \"yes\": enables value indication in the label of the statusLED. When enabled, the value of the data variable will appear in the LED text. Possible values: \"yes\", \"no\" (optional, default: \"no\")",
+ "exampleValue": "yes"
+ },
+ {
+ "name": "VarId",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "the name of the EPTF Variable that contains the source data for the limits statistics (its value should be float or integer type)",
+ "exampleValue": "varNameThatContainsFloatOrIntValue"
+ },
+ {
+ "name": "refVarId",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "The name of the reference variable (optional). If specified the limits are considered as relative difference in percentile from the value of the reference variable. If not specified, the limits will be taken as absolute values. The reference variable should contain a float or integer type value.",
+ "exampleValue": "referenceVarNameThatContainsFloatOrIntValue"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "LEDlimitValue",
+ "valueType": "statusLEDType",
+ "description": "This dataElement creates/returns a limits statistics for a given source and reference value.",
+ "parameters": [
+ {
+ "name": "blackLimit",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "Limiting value above which the LED colour becomes black (optional)",
+ "exampleValue": "10.0"
+ },
+ {
+ "name": "blueLimit",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "Limiting value above which the LED colour becomes blue (optional)",
+ "exampleValue": "20.0"
+ },
+ {
+ "name": "redLimit",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "Limiting value above which the LED colour becomes red (optional)",
+ "exampleValue": "30.0"
+ },
+ {
+ "name": "yellowLimit",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "Limiting value above which the LED colour becomes yellow (optional)",
+ "exampleValue": "40.0"
+ },
+ {
+ "name": "greenLimit",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "Limiting value above which the LED colour becomes green (optional)",
+ "exampleValue": "50.0"
+ },
+ {
+ "name": "defaultColor",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "Specifies the default colour of the LED (colour below the lowest limit). Its value should be one of: \"blue\",\"black\",\"yellow\",\"green\" or \"red\". (optional, default: \"black\")",
+ "exampleValue": "green"
+ },
+ {
+ "name": "enableValueInLEDText",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "If set to \"yes\": enables value indication in the label of the statusLED. When enabled, the value of the data variable will appear in the LED text. Possible values: \"yes\", \"no\" (optional, default: \"no\")",
+ "exampleValue": "yes"
+ },
+ {
+ "name": "value",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "the value of the source data for the limits statistics (its value should be float or integer type)",
+ "exampleValue": "20.0"
+ },
+ {
+ "name": "refValue",
+ "typeDescriptor": {
+ "valueType": "floatType"
+ },
+ "description": "The name of the reference value (optional). If specified the limits are considered as relative difference in percentile from the value of the reference value. If not specified, the limits will be taken as absolute values. The reference value should contain a float or integer type value.",
+ "exampleValue": "100.0"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "help",
+ "valueType": "charstringType",
+ "description": "This data element returns the help information about all dataElements supported",
+ "parameters": [
+ {
+ "name": "Format",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "The format of the output. Valid values: JSON, TEXT. Default: JSON",
+ "exampleValue": "TEXT"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "source": "HostAdmin",
+ "dataElements": [
+ {
+ "dataElement": {
+ "name": "CPUs",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "CPU"
+ },
+ "description": " This iterator lists the CPUs on a given host."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "CPULoad",
+ "valueType": "floatType",
+ "description": "This data element returns the CPULoad of a CPU",
+ "parameters": [
+ {
+ "name": "CPU_ID",
+ "typeDescriptor": {
+ "reference": {
+ "isIndexInListOf": true,
+ "typeName": "CPU"
+ }
+ },
+ "description": "Cpu id. Valid values: 0..HostNumCPUs",
+ "exampleValue": "HostNumCPUs"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "Processes",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "Process"
+ },
+ "description": "This iterator lists the processes on a given host."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "ProcCPULoad",
+ "valueType": "floatType",
+ "description": "This data element returns the CPU load of the process",
+ "parameters": [
+ {
+ "name": "ProcID",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Process"
+ }
+ },
+ "description": "process id",
+ "exampleValue": "1"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ProcMEMUsage",
+ "valueType": "intType",
+ "description": "This data element returns the memory usage of the given process",
+ "parameters": [
+ {
+ "name": "ProcID",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Process"
+ }
+ },
+ "description": "process id",
+ "exampleValue": "1"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ProcName",
+ "valueType": "charstringType",
+ "description": "This data element returns the name of the given process (=selfName)",
+ "parameters": [
+ {
+ "name": "ProcID",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Process"
+ }
+ },
+ "description": "process id",
+ "exampleValue": "1"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "AvgCPULoad",
+ "valueType": "floatType",
+ "description": "This data element returns the average CPU load of the host, type float"
+ }
+ },
+ {
+ "dataElement": {
+ "name": "HostCPULoad",
+ "valueType": "floatType",
+ "description": "This data element returns the CPU load of the host"
+ }
+ },
+ {
+ "dataElement": {
+ "name": "HostFreeMemory",
+ "valueType": "intType",
+ "description": "This data element returns the free memory on the host"
+ }
+ },
+ {
+ "dataElement": {
+ "name": "HostName",
+ "valueType": "charstringType",
+ "description": "This data element returns the name of the host"
+ }
+ },
+ {
+ "dataElement": {
+ "name": "HostNumCPUs",
+ "valueType": "intType",
+ "description": "This data element returns the number of CPUs on the host"
+ }
+ },
+ {
+ "dataElement": {
+ "name": "HostPhysicalMemory",
+ "valueType": "intType",
+ "description": "This data element returns the physical memory available on the host"
+ }
+ },
+ {
+ "dataElement": {
+ "name": "IPv4Addr",
+ "valueType": "charstringType",
+ "description": "This data element returns the IPv4 address of the host, type charsting"
+ }
+ },
+ {
+ "dataElement": {
+ "name": "IPv6Addr",
+ "valueType": "charstringType",
+ "description": "This data element returns the IPv6 address of the host, type charsting"
+ }
+ },
+ {
+ "dataElement": {
+ "name": "MaxCPULoad",
+ "valueType": "floatType",
+ "description": "This data element returns the maximal CPU load of the host, type float"
+ }
+ },
+ {
+ "dataElement": {
+ "name": "MinCPULoad",
+ "valueType": "floatType",
+ "description": "This data element returns the minimal CPU load of the host, type float"
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ResetMinMaxAvgCPULoad",
+ "valueType": "intType",
+ "description": " This data element defines a button to reset the min/max/average CPU load of the host"
+ }
+ },
+ {
+ "dataElement": {
+ "name": "help",
+ "valueType": "charstringType",
+ "description": "This data element returns the help information about all dataElements supported",
+ "parameters": [
+ {
+ "name": "Format",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "The format of the output. Valid values: JSON, TEXT. Default: JSON",
+ "exampleValue": "TEXT"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "source": "StatHandler",
+ "dataElements": [
+ {
+ "dataElement": {
+ "name": "ResetAll",
+ "valueType": "intType",
+ "description": "This constant defines the data element for the ResetAll button"
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ResetComponent",
+ "valueType": "intType",
+ "description": "This constant defines the data element for the ResetComponent button"
+ }
+ },
+ {
+ "dataElement": {
+ "name": "help",
+ "valueType": "charstringType",
+ "description": "This data element returns the help information about all dataElements supported",
+ "parameters": [
+ {
+ "name": "Format",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "The format of the output. Valid values: JSON, TEXT. Default: JSON",
+ "exampleValue": "TEXT"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "source": "ExecCtrl",
+ "dataElements": [
+ {
+ "dataElement": {
+ "name": "Clients",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "LGen"
+ },
+ "description": "This iterator enlists all the ExecCtrl clients (usually load generators)."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "EntityGroups",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "EntityGroup"
+ },
+ "description": "This iterator enlists the entity groups deployed onto the specified client PTC.",
+ "parameters": [
+ {
+ "name": "LGen",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "LGen"
+ }
+ },
+ "description": "Name of the ExecCtrl client load generator PTC. Should be one item in the list returned by 'Clients'",
+ "exampleValue": "LGen01"
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "EGrpOffsetForLGen",
+ "valueType": "intType",
+ "description": "This dataElement returns the offset of the first entity of the entity group which is allocated on the given LGen.",
+ "parameters": [
+ {
+ "name": "LGen",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "LGen"
+ }
+ },
+ "description": "Name of the ExecCtrl client load generator PTC. Should be one item in the list returned by 'Clients'",
+ "exampleValue": "LGen01"
+ },
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "EGrpSizeForLGen",
+ "valueType": "intType",
+ "description": "This dataElement returns the size of that part of the entity group which is allocated on the given LGen.",
+ "parameters": [
+ {
+ "name": "LGen",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "LGen"
+ }
+ },
+ "description": "Name of the ExecCtrl client load generator PTC. Should be one item in the list returned by 'Clients'",
+ "exampleValue": "LGen01"
+ },
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "EntityTypesForLGen",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "EntityType"
+ },
+ "description": "This iterator enlists the supported entity types of the load generator clients.",
+ "parameters": [
+ {
+ "name": "LGen",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "LGen"
+ }
+ },
+ "description": "Name of the ExecCtrl client load generator PTC. Should be one item in the list returned by 'Clients'",
+ "exampleValue": "LGen01"
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "NofCurrentAvailEntitiesForLGen",
+ "valueType": "intType",
+ "description": "This dataElement returns the number of current available entities for an LGen for a given entity type.",
+ "parameters": [
+ {
+ "name": "LGen",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "LGen"
+ }
+ },
+ "description": "Name of the ExecCtrl client load generator PTC. Should be one item in the list returned by 'Clients'",
+ "exampleValue": "LGen01"
+ },
+ {
+ "name": "EntityType",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityType"
+ }
+ },
+ "description": "Name of the entity type. Should be one item in the list returned by 'EntityTypesForLGen'",
+ "exampleValue": "ExecCtrlDefaultETypeName"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "NofMaxAvailEntitiesForLGen",
+ "valueType": "intType",
+ "description": "This dataElement returns the number of max available entities for an LGen for a given entity type.",
+ "parameters": [
+ {
+ "name": "LGen",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "LGen"
+ }
+ },
+ "description": "Name of the ExecCtrl client load generator PTC. Should be one item in the list returned by 'Clients'",
+ "exampleValue": "LGen01"
+ },
+ {
+ "name": "EntityType",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityType"
+ }
+ },
+ "description": "Name of the entity type. Should be one item in the list returned by 'EntityTypesForLGen'",
+ "exampleValue": "ExecCtrlDefaultETypeName"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "EGrpsOnClients",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "EGrpOnClient"
+ },
+ "description": "This iterator enlists all the EntityGroups on all Clients."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "ClientOfEGrpOnClient",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "LGen"
+ },
+ "description": "This dataElement returns the client name for the EGrpOnClient item.",
+ "parameters": [
+ {
+ "name": "EGrpOnClient",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EGrpOnClient"
+ }
+ },
+ "description": "A pair of ExecCtrl EntityGroup and client load generator PTC. Should be one item in the list returned by 'EGrpsOnClients'",
+ "exampleValue": "0.0"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "EntityGroupOfEGrpOnClient",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "EntityGroup"
+ },
+ "description": "This dataElement returns the entity group for the EGrpOnClient item.",
+ "parameters": [
+ {
+ "name": "EGrpOnClient",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EGrpOnClient"
+ }
+ },
+ "description": "A pair of ExecCtrl EntityGroup and client load generator PTC. Should be one item in the list returned by 'EGrpsOnClients'",
+ "exampleValue": "0.0"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "EntityGroups",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "EntityGroup"
+ },
+ "description": "This iterator enlists the entity groups of the whole configuration."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "Clients",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "LGen"
+ },
+ "description": "This iterator enlists the ExecCtrl clients (usually load generators) that the entity group is distributed on.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "EGrpOffsetForLGen",
+ "valueType": "intType",
+ "description": "This dataElement returns the offset of the first entity of the entity group which is allocated on the given LGen.",
+ "parameters": [
+ {
+ "name": "LGen",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "LGen"
+ }
+ },
+ "description": "Name of the ExecCtrl client load generator PTC. Should be one item in the list returned by 'Clients'",
+ "exampleValue": "LGen01"
+ },
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "EGrpSizeForLGen",
+ "valueType": "intType",
+ "description": "This dataElement returns the size of that part of the entity group which is allocated on the given LGen.",
+ "parameters": [
+ {
+ "name": "LGen",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "LGen"
+ }
+ },
+ "description": "Name of the ExecCtrl client load generator PTC. Should be one item in the list returned by 'Clients'",
+ "exampleValue": "LGen01"
+ },
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "Scenarios",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "Scenario"
+ },
+ "description": "This iterator enlists the scenarios of an entity group.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "Clients",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "LGen"
+ },
+ "description": "This iterator enlists all the ExecCtrl clients (usually load generators)."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "ScStatusForLGen",
+ "valueType": "statusLEDType",
+ "description": "This dataElement returns the status of the scenario on the given LGen.",
+ "parameters": [
+ {
+ "name": "LGen",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "LGen"
+ }
+ },
+ "description": "Name of the ExecCtrl client load generator PTC. Should be one item in the list returned by 'Clients'",
+ "exampleValue": "LGen01"
+ },
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "Phases",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "Phase"
+ },
+ "description": "This iterator enlists the phases of a scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "ScGrpScEnablePhase",
+ "valueType": "boolType",
+ "description": "This dataElement returns the enable phase checkbox for the given phase for the given scenario in a scenario group.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "Phase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Phase"
+ }
+ },
+ "description": "Name of the phase. Should be one item in the list returned by 'Phases'",
+ "exampleValue": "loadgen"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "TrafficCases",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "TrafficCase"
+ },
+ "description": "This iterator enlists the traffic cases of a scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "FsmStats",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "FSMStatistic"
+ },
+ "description": "This iterator enlists the TC scope statistics of the FSMs of the given traffic cases.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "FSMStat",
+ "valueType": "floatType",
+ "description": "This dataElement returns the value of the given FSM statistics of a TC.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ },
+ {
+ "name": "Statistic",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "FSMStatistic"
+ }
+ },
+ "description": "Name of the FSM statistics. Should be one item in the list returned by 'FsmStats'",
+ "exampleValue": "NofStarts"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "TcStats",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "Statistic"
+ },
+ "description": "This iterator enlists the TC scope statistics of the given traffic cases.",
+ "parameters": []
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "TcStat",
+ "valueType": "floatType",
+ "description": "This dataElement returns the value of the given TC statistics.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ },
+ {
+ "name": "Statistic",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Statistic"
+ }
+ },
+ "description": "Name of the TC statistics. Should be one item in the list returned by 'TcStats'",
+ "exampleValue": "CurrentCPS"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcStatDelta",
+ "valueType": "floatType",
+ "description": "This dataElement returns the value of the given TC statistics delta element.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ },
+ {
+ "name": "Statistic",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Statistic"
+ }
+ },
+ "description": "Name of the TC statistics. Should be one item in the list returned by 'TcStats'",
+ "exampleValue": "CurrentCPS"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "TcExecTime",
+ "valueType": "floatType",
+ "description": "This dataElement returns the execution time of the traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcGroupFinishStatus",
+ "valueType": "statusLEDType",
+ "description": "This dataElement returns the traffic case group finish status LED.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcGrpFinishStatus",
+ "valueType": "statusLEDType",
+ "description": "This dataElement returns the traffic case group-finish status LED.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ },
+ {
+ "name": "Condition",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "Specifies a group finish condition of a traffic case. Valid values: \"FinTraffic\", \"RangeLoops\", \"Starts\", \"Success\", \"Fail\", \"Timeout\", \"Error\", \"ExecTime\"",
+ "exampleValue": "Starts"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcRegulator",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the regulator used for the traffic case CPS.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcSingleShotEnableLog",
+ "valueType": "boolType",
+ "description": "This dataElement returns the enable log checkbox for the single shot for the given traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcSingleShotEntityIdx",
+ "valueType": "intType",
+ "description": "This dataElement returns the index of the entity for which the single shot traffic should be started for the given traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcSingleShotStart",
+ "valueType": "intType",
+ "description": "This dataElement returns the start single shot button for the given traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcStart",
+ "valueType": "boolType",
+ "description": "This dataElement returns the start checkbox of the traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcStartButton",
+ "valueType": "intType",
+ "description": "This dataElement returns the start button of the traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcStartDelay",
+ "valueType": "floatType",
+ "description": "This dataElement returns the start delay of the traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcStatus",
+ "valueType": "statusLEDType",
+ "description": "This dataElement returns the traffic case status LED.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcStop",
+ "valueType": "boolType",
+ "description": "This dataElement returns the stop checkbox of the traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcStopButton",
+ "valueType": "intType",
+ "description": "This dataElement returns the stop button of the traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcTargetCPSOrWeight",
+ "valueType": "floatType",
+ "description": "This dataElement returns the target CPS for traffic case in non-weighted scenario and the traffic case weight for traffic case in weighted-scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcTimeProfile",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the time profile used for the traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case of an scenario. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "CurrentCPS",
+ "valueType": "floatType",
+ "description": "This dataElement returns the value of the given Current CPS statistics for the scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "IsInScGroup",
+ "valueType": "boolType",
+ "description": "This condition returns true if the given scenario is in a scenario group.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "IsWeightedSc",
+ "valueType": "boolType",
+ "description": "This condition returns true if the given scenario is weighted.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScCPS",
+ "valueType": "floatType",
+ "description": "This dataElement returns the scenario CPS of the weighted scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScGroupOfSc",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the scenario group of the given scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScGrpCurrentPhase",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the current phase of the scenario that is in a scenario group.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScGrpMode",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the scenario group mode of the scenario that is in a scenario group.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScGrpReset",
+ "valueType": "boolType",
+ "description": "This dataElement returns the scenario group reset checkbox of the scenario that is in a scenario group.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScGrpScStatus",
+ "valueType": "statusLEDType",
+ "description": "This dataElement returns the scenario group-status LED.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScGrpStart",
+ "valueType": "boolType",
+ "description": "This dataElement returns the scenario group start checkbox of the scenario that is in a scenario group.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScGrpStatus",
+ "valueType": "statusLEDType",
+ "description": "This dataElement returns the scenario group status LED of the scenario that is in a scenario group.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScGrpTerminate",
+ "valueType": "boolType",
+ "description": "This dataElement returns the scenario group terminate checkbox of the scenario that is in a scenario group.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScInstanceName",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the instance name of the scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScIsWeighted",
+ "valueType": "charstringType",
+ "description": "This dataElement returns \"Decl\" if the scenario is non-weighted, \"Weighted\" if the scenario is weighted.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScPhaseListName",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the name of the phase-list if the scenario belongs to a scenario group.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScRegulatorName",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the name of regulator which regulates the target CPS of the weighted scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScReset",
+ "valueType": "intType",
+ "description": "This dataElement returns the scenario reset button.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScScGrpName",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the name of the scenario group to which the scenario belongs to.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScStart",
+ "valueType": "boolType",
+ "description": "This dataElement returns the start checkbox of the scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScStartButton",
+ "valueType": "intType",
+ "description": "This dataElement returns the scenario start button.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScStatus",
+ "valueType": "statusLEDType",
+ "description": "This dataElement returns the status of the scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScStop",
+ "valueType": "boolType",
+ "description": "This dataElement returns the stop checkbox of the scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScStopButton",
+ "valueType": "intType",
+ "description": "This dataElement returns the scenario stop button.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScTargetCPS",
+ "valueType": "floatType",
+ "description": "This dataElement returns the target CPS of the weighted scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcRegulator",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the regulator used for the weighted scenario CPS.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario of an entity group. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "EGrpLGenPool",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the name of the LGen pool on which the entity group is distributed on.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "EGrpOffset",
+ "valueType": "intType",
+ "description": "This dataElement returns the offset of the first entity in the entity group.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "EGrpSize",
+ "valueType": "intType",
+ "description": "This dataElement returns the size of an Entity Group.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "EGrpType",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the Entity Type of an Entity Group.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "NofActiveEntities",
+ "valueType": "intType",
+ "description": "This dataElement returns number active entities of the given entity group.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "NofDeployedLGens",
+ "valueType": "charstringType",
+ "description": "This dataElement returns number of LGens the given entity group is distributed on.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "EntityTypesForLGenOnClients",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "EntityTypeForLGenOnClient"
+ },
+ "description": "This iterator enlists all the EntityTypes on all Clients."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "ClientOfEntityTypesForLGenOnClients",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "LGen"
+ },
+ "description": "This dataElement returns the client name for the EntityTypesForLGenOnClients item.",
+ "parameters": [
+ {
+ "name": "EntityTypeForLGenOnClient",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityTypeForLGenOnClient"
+ }
+ },
+ "description": "A pair of ExecCtrl entity type and client load generator PTC. Should be one item in the list returned by 'EntityTypesForLGenOnClients'",
+ "exampleValue": "0.0"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "EntityTypeOfEntityTypesForLGenOnClients",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "EntityType"
+ },
+ "description": "This dataElement returns the entity type for the EntityTypesForLGenOnClients item.",
+ "parameters": [
+ {
+ "name": "EntityTypeForLGenOnClient",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityTypeForLGenOnClient"
+ }
+ },
+ "description": "A pair of ExecCtrl entity type and client load generator PTC. Should be one item in the list returned by 'EntityTypesForLGenOnClients'",
+ "exampleValue": "0.0"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "GlobalStats",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "GlobalStatistic"
+ },
+ "description": "This iterator enlists the global scope statistic."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "GlobalStat",
+ "valueType": "floatType",
+ "description": "This dataElement returns the value of the given global statistics.",
+ "parameters": [
+ {
+ "name": "Statistic",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "GlobalStatistic"
+ }
+ },
+ "description": "Name of the global statistics. Should be one item in the list returned by 'GlobalStats'",
+ "exampleValue": "Success"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "PhaseLists",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "PhaseList"
+ },
+ "description": "This iterator enlists the phaselists."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "Phases",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "Phase"
+ },
+ "description": "This iterator enlists the phases of phaselist.",
+ "parameters": [
+ {
+ "name": "PhaseList",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "PhaseList"
+ }
+ },
+ "description": "Name of the phaselist. Should be one item in the list returned by 'PhaseLists'",
+ "exampleValue": "BasicPhases"
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "PhaseListEnablePhase",
+ "valueType": "boolType",
+ "description": "This dataElement returns the enable phase checkbox for the given Phase in given PhaseList.",
+ "parameters": [
+ {
+ "name": "PhaseList",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "PhaseList"
+ }
+ },
+ "description": "Name of the phaselist. Should be one item in the list returned by 'PhaseLists'",
+ "exampleValue": "BasicPhases"
+ },
+ {
+ "name": "Phase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Phase"
+ }
+ },
+ "description": "Name of the phase. Should be one item in the list returned by 'Phases'",
+ "exampleValue": "loadgen"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "ScenarioGroups",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "ScenarioGroup"
+ },
+ "description": "This iterator enlists the scenario groups of a configuration for a given phase list.",
+ "parameters": [
+ {
+ "name": "PhaseList",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "PhaseList"
+ }
+ },
+ "description": "Name of the phaselist. Should be one item in the list returned by 'PhaseLists'",
+ "exampleValue": "BasicPhases"
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "Phases",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "Phase"
+ },
+ "description": "This iterator enlists the phases of a scenario group.",
+ "parameters": [
+ {
+ "name": "ScenarioGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioGroup"
+ }
+ },
+ "description": "Name of the scenario group. Should be one item in the list returned by 'ScenarioGroups'",
+ "exampleValue": "ScGrp"
+ },
+ {
+ "name": "PhaseList",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "PhaseList"
+ }
+ },
+ "description": "Name of the phaselist. Should be one item in the list returned by 'PhaseLists'",
+ "exampleValue": "BasicPhases"
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "ScGrpEnablePhase",
+ "valueType": "boolType",
+ "description": "This dataElement returns the enable phase checkbox for the given scenario group.",
+ "parameters": [
+ {
+ "name": "ScenarioGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioGroup"
+ }
+ },
+ "description": "Name of the scenario group. Should be one item in the list returned by 'ScenarioGroups'",
+ "exampleValue": "ScGrp"
+ },
+ {
+ "name": "Phase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Phase"
+ }
+ },
+ "description": "Name of the phase. Should be one item in the list returned by 'Phases'",
+ "exampleValue": "loadgen"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "ScenariosOfScenarioGroupsWithPhaseList",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "ScenarioOfScenarioGroup"
+ },
+ "description": "This iterator enlists all Scenarios of the ScenarioGroups with the given PhaseList.",
+ "parameters": [
+ {
+ "name": "PhaseList",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "PhaseList"
+ }
+ },
+ "description": "Name of the phaselist. Should be one item in the list returned by 'PhaseLists'",
+ "exampleValue": "BasicPhases"
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "ScenarioGroupOfScenariosOfScenarioGroupsWithPhaseList",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "ScenarioGroup"
+ },
+ "description": "This dataElement returns the ScenarioGroup for the ScenariosOfScenarioGroupsWithPhaseList item.",
+ "parameters": [
+ {
+ "name": "ScenarioOfScenarioGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioOfScenarioGroup"
+ }
+ },
+ "description": "A pair of ExecCtrl ScenarioInstance and ScenarioGroup. Should be one item in the list returned by 'ScenariosOfScenarioGroupsWithPhaseList'",
+ "exampleValue": "0.0"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScenarioOfScenariosOfScenarioGroupsWithPhaseList",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "ScenarioInstance"
+ },
+ "description": "This dataElement returns the ScenarioInstance for the ScenariosOfScenarioGroupsWithPhaseList item.",
+ "parameters": [
+ {
+ "name": "ScenarioOfScenarioGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioOfScenarioGroup"
+ }
+ },
+ "description": "A pair of ExecCtrl ScenarioInstance and ScenarioGroup. Should be one item in the list returned by 'ScenariosOfScenarioGroupsWithPhaseList'",
+ "exampleValue": "0.0"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "Phases",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "Phase"
+ },
+ "description": "This iterator enlists the phases."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "TrafficCasesOfScenarios",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "TrafficCaseOfScenario"
+ },
+ "description": "This iterator enlists all the TrafficCases of all Scenarios."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "ScenarioOfTrafficCasesOfScenarios",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "ScenarioInstance"
+ },
+ "description": "This dataElement returns the ScenarioInstance for the TrafficCasesOfScenarios item.",
+ "parameters": [
+ {
+ "name": "TrafficCaseOfScenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCaseOfScenario"
+ }
+ },
+ "description": "A pair of ExecCtrl ScenarioInstance and TrafficCase. Should be one item in the list returned by 'TrafficCasesOfScenarios'",
+ "exampleValue": "0.0"
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "ScGrpScEnablePhase",
+ "valueType": "boolType",
+ "description": "This dataElement returns the enable phase checkbox for the given phase for the given scenario instance in a scenario group.",
+ "parameters": [
+ {
+ "name": "ScenarioInstance",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioInstance"
+ }
+ },
+ "description": "Name of the scenario instance.",
+ "exampleValue": "EGrpName.ScName"
+ },
+ {
+ "name": "Phase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Phase"
+ }
+ },
+ "description": "Name of the phase. Should be one item in the list returned by 'Phases'",
+ "exampleValue": "loadgen"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "RegulatedItems",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "RegulatedItemId"
+ },
+ "description": "This iterator enlists the regulated items in the configuration."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "RegulatedItemEnabled",
+ "valueType": "boolType",
+ "description": "This dataElement returns the checkbox to enable the regulation of the regulated item.",
+ "parameters": [
+ {
+ "name": "RegulatedItemId",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "RegulatedItemId"
+ }
+ },
+ "description": "Id of the regulated item. Should be one item in the list returned by 'RegulatedItems'",
+ "exampleValue": "CpsToReach"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "RegulatedItemName",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the regulated item name of the regulated item.",
+ "parameters": [
+ {
+ "name": "RegulatedItemId",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "RegulatedItemId"
+ }
+ },
+ "description": "Id of the regulated item. Should be one item in the list returned by 'RegulatedItems'",
+ "exampleValue": "CpsToReach"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "RegulatedItemType",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the regulated item type (\"Scenario CPS\" or \"TrafficCase CPS\")for the regulated item.",
+ "parameters": [
+ {
+ "name": "RegulatedItemId",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "RegulatedItemId"
+ }
+ },
+ "description": "Id of the regulated item. Should be one item in the list returned by 'RegulatedItems'",
+ "exampleValue": "CpsToReach"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "RegulatedItemWeight",
+ "valueType": "floatType",
+ "description": "This dataElement returns the weight of the regulated item.",
+ "parameters": [
+ {
+ "name": "RegulatedItemId",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "RegulatedItemId"
+ }
+ },
+ "description": "Id of the regulated item. Should be one item in the list returned by 'RegulatedItems'",
+ "exampleValue": "CpsToReach"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "RegulatorName",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the regulator name that regulates the regulated item.",
+ "parameters": [
+ {
+ "name": "RegulatedItemId",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "RegulatedItemId"
+ }
+ },
+ "description": "Id of the regulated item. Should be one item in the list returned by 'RegulatedItems'",
+ "exampleValue": "CpsToReach"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "Regulators",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "RegulatorName"
+ },
+ "description": "This iterator enlists the regulators appearing in the configuration."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "RegulatorCurrentLoad",
+ "valueType": "floatType",
+ "description": "This dataElement returns current load of the regulator.",
+ "parameters": [
+ {
+ "name": "RegulatorName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "RegulatorName"
+ }
+ },
+ "description": "Name of the regulator. Should be one item in the list returned by 'Regulators'",
+ "exampleValue": "LoadRegulator"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "RegulatorStatus",
+ "valueType": "statusLEDType",
+ "description": "This dataElement returns status LED of the regulator.",
+ "parameters": [
+ {
+ "name": "RegulatorName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "RegulatorName"
+ }
+ },
+ "description": "Name of the regulator. Should be one item in the list returned by 'Regulators'",
+ "exampleValue": "LoadRegulator"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "RegulatorTargetLoad",
+ "valueType": "floatType",
+ "description": "This dataElement returns target load of the regulator. The regulator adapts the total value so that the curret load reach this value.",
+ "parameters": [
+ {
+ "name": "RegulatorName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "RegulatorName"
+ }
+ },
+ "description": "Name of the regulator. Should be one item in the list returned by 'Regulators'",
+ "exampleValue": "LoadRegulator"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "RegulatorTotalValue",
+ "valueType": "floatType",
+ "description": "This dataElement returns total value of the regulator. This total value is devided among the regulated items regulated by the regulator according to their weights.",
+ "parameters": [
+ {
+ "name": "RegulatorName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "RegulatorName"
+ }
+ },
+ "description": "Name of the regulator. Should be one item in the list returned by 'Regulators'",
+ "exampleValue": "LoadRegulator"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "ScenarioGroups",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "ScenarioGroup"
+ },
+ "description": "This iterator enlists the scenario groups of a configuration."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "Scenarios",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "ScenarioInstance"
+ },
+ "description": "This iterator enlists the scenarios of a scenario group. Returns the scenario instance name",
+ "parameters": [
+ {
+ "name": "ScenarioGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioGroup"
+ }
+ },
+ "description": "Name of the scenario group. Should be one item in the list returned by 'ScenarioGroups'",
+ "exampleValue": "ScGrp"
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "EntityGroupOfScenarioInstance",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "EntityGroup"
+ },
+ "description": "This dataElement returns the entity group name for the scenario instance.",
+ "parameters": [
+ {
+ "name": "ScenarioInstance",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioInstance"
+ }
+ },
+ "description": "Name of the scenario instance.",
+ "exampleValue": "EGrpName.ScName"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "NofDeployedLGens",
+ "valueType": "charstringType",
+ "description": "This dataElement returns number of LGens the given scenario instance is distributed on.",
+ "parameters": [
+ {
+ "name": "ScenarioInstance",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioInstance"
+ }
+ },
+ "description": "Name of the scenario instance.",
+ "exampleValue": "EGrpName.ScName"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScGrpScStatus",
+ "valueType": "statusLEDType",
+ "description": "This dataElement returns the scenario group-status LED inside the scenario group.",
+ "parameters": [
+ {
+ "name": "ScenarioGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioGroup"
+ }
+ },
+ "description": "Name of the scenario group. Should be one item in the list returned by 'ScenarioGroups'",
+ "exampleValue": "ScGrp"
+ },
+ {
+ "name": "ScenarioInstance",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioInstance"
+ }
+ },
+ "description": "Name of the scenario instance.",
+ "exampleValue": "EGrpName.ScName"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScenarioTypeNameOfScenarioInstance",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "Scenario"
+ },
+ "description": "This dataElement returns the scenario type name for the scenario instance.",
+ "parameters": [
+ {
+ "name": "ScenarioInstance",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioInstance"
+ }
+ },
+ "description": "Name of the scenario instance.",
+ "exampleValue": "EGrpName.ScName"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TrafficCases",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "TrafficCase"
+ },
+ "description": "This iterator enlists the traffic cases of a scenario instance.",
+ "parameters": [
+ {
+ "name": "ScenarioInstance",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioInstance"
+ }
+ },
+ "description": "Name of the scenario instance.",
+ "exampleValue": "EGrpName.ScName"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "ScGrpCurrentPhase",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the current phase of the scenario group.",
+ "parameters": [
+ {
+ "name": "ScenarioGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioGroup"
+ }
+ },
+ "description": "Name of the scenario group. Should be one item in the list returned by 'ScenarioGroups'",
+ "exampleValue": "ScGrp"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScGrpMode",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the scenario group mode.",
+ "parameters": [
+ {
+ "name": "ScenarioGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioGroup"
+ }
+ },
+ "description": "Name of the scenario group. Should be one item in the list returned by 'ScenarioGroups'",
+ "exampleValue": "ScGrp"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScGrpReset",
+ "valueType": "boolType",
+ "description": "This dataElement returns the scenario group reset checkbox.",
+ "parameters": [
+ {
+ "name": "ScenarioGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioGroup"
+ }
+ },
+ "description": "Name of the scenario group. Should be one item in the list returned by 'ScenarioGroups'",
+ "exampleValue": "ScGrp"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScGrpStart",
+ "valueType": "boolType",
+ "description": "This dataElement returns the scenario group start checkbox.",
+ "parameters": [
+ {
+ "name": "ScenarioGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioGroup"
+ }
+ },
+ "description": "Name of the scenario group. Should be one item in the list returned by 'ScenarioGroups'",
+ "exampleValue": "ScGrp"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScGrpStatus",
+ "valueType": "statusLEDType",
+ "description": "This dataElement returns the scenario group status LED.",
+ "parameters": [
+ {
+ "name": "ScenarioGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioGroup"
+ }
+ },
+ "description": "Name of the scenario group. Should be one item in the list returned by 'ScenarioGroups'",
+ "exampleValue": "ScGrp"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "ScenariosOnClients",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "ScenarioOnClient"
+ },
+ "description": "This iterator enlists all the Scenarios on all EntityGroups of all Clients."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "ClientOfScenariosOnClients",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "LGen"
+ },
+ "description": "This dataElement returns the client name for the ScenariosOnClients item.",
+ "parameters": [
+ {
+ "name": "ScenarioOnClient",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioOnClient"
+ }
+ },
+ "description": "A triple of ExecCtrl Scenario, EntityGroup and client load generator PTC. Should be one item in the list returned by 'ScenariosOnClients'",
+ "exampleValue": "0.0.0"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "EntityGroupOfScenariosOnClients",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "EntityGroup"
+ },
+ "description": "This dataElement returns the EntityGroup for the ScenariosOnClients item.",
+ "parameters": [
+ {
+ "name": "ScenarioOnClient",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioOnClient"
+ }
+ },
+ "description": "A triple of ExecCtrl Scenario, EntityGroup and client load generator PTC. Should be one item in the list returned by 'ScenariosOnClients'",
+ "exampleValue": "0.0.0"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScenarioOfScenariosOnClients",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "Scenario"
+ },
+ "description": "This dataElement returns the Scenario for the ScenariosOnClients item.",
+ "parameters": [
+ {
+ "name": "ScenarioOnClient",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioOnClient"
+ }
+ },
+ "description": "A triple of ExecCtrl Scenario, EntityGroup and client load generator PTC. Should be one item in the list returned by 'ScenariosOnClients'",
+ "exampleValue": "0.0.0"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "TrafficCasesOfScenarios",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "TrafficCaseOfScenario"
+ },
+ "description": "This iterator enlists all the TrafficCases of all Scenarios."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "ScenarioOfTrafficCasesOfScenarios",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "ScenarioInstance"
+ },
+ "description": "This dataElement returns the ScenarioInstance for the TrafficCasesOfScenarios item.",
+ "parameters": [
+ {
+ "name": "TrafficCaseOfScenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCaseOfScenario"
+ }
+ },
+ "description": "A pair of ExecCtrl ScenarioInstance and TrafficCase. Should be one item in the list returned by 'TrafficCasesOfScenarios'",
+ "exampleValue": "0.0"
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "EntityGroupOfScenarioInstance",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "EntityGroup"
+ },
+ "description": "This dataElement returns the entity group name for the scenario instance.",
+ "parameters": [
+ {
+ "name": "ScenarioInstance",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioInstance"
+ }
+ },
+ "description": "Name of the scenario instance.",
+ "exampleValue": "EGrpName.ScName"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "NofDeployedLGens",
+ "valueType": "charstringType",
+ "description": "This dataElement returns number of LGens the given scenario instance is distributed on.",
+ "parameters": [
+ {
+ "name": "ScenarioInstance",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioInstance"
+ }
+ },
+ "description": "Name of the scenario instance.",
+ "exampleValue": "EGrpName.ScName"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScenarioTypeNameOfScenarioInstance",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "Scenario"
+ },
+ "description": "This dataElement returns the scenario type name for the scenario instance.",
+ "parameters": [
+ {
+ "name": "ScenarioInstance",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioInstance"
+ }
+ },
+ "description": "Name of the scenario instance.",
+ "exampleValue": "EGrpName.ScName"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TrafficCases",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "TrafficCase"
+ },
+ "description": "This iterator enlists the traffic cases of a scenario instance.",
+ "parameters": [
+ {
+ "name": "ScenarioInstance",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ScenarioInstance"
+ }
+ },
+ "description": "Name of the scenario instance.",
+ "exampleValue": "EGrpName.ScName"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "TrafficCaseOfTrafficCasesOfScenarios",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "TrafficCase"
+ },
+ "description": "This dataElement returns the TrafficCase for the TrafficCasesOfScenarios item.",
+ "parameters": [
+ {
+ "name": "TrafficCaseOfScenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCaseOfScenario"
+ }
+ },
+ "description": "A pair of ExecCtrl ScenarioInstance and TrafficCase. Should be one item in the list returned by 'TrafficCasesOfScenarios'",
+ "exampleValue": "0.0"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "ConfigFile",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the ConfigFile of the application."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "EndOfConfig",
+ "valueType": "statusLEDType",
+ "description": "This dataElement returns the EndOfConfig variable. Green LED indicates when the configuration is finished."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "EndOfTest",
+ "valueType": "statusLEDType",
+ "description": "This dataElement returns the EndOfTest variable. Green LED indicates when the Test is done, and the test report is generated."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "Executable",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the Executable of the application."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "Exit",
+ "valueType": "intType",
+ "description": "This dataElement returns the ExitButton variable. When its value is changed, the button is pressed."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "GUIDone",
+ "valueType": "statusLEDType",
+ "description": "This dataElement returns the GUIDone variable. Green LED indicates when the GUI is ready."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "GlobalProgressbar",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the Global ProgressBar variable. Shows the global progress as a percentage value."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "Progressbar",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the ProgressBar variable. Shows the progress as a percentage value."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ProgressbarText",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the ProgressBar text variable. It contains a text of what is in progress."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ReadyToRun",
+ "valueType": "statusLEDType",
+ "description": "This dataElement returns the ReadyToRun variable. Green LED indicates when the traffic cases are ready to run."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "Restart",
+ "valueType": "intType",
+ "description": "This dataElement restarts the application.",
+ "parameters": [
+ {
+ "name": "Executable",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "Name of the Executable.",
+ "exampleValue": "Executable"
+ },
+ {
+ "name": "ConfigFile",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "Name of the Configuration File",
+ "exampleValue": "ConfigFile.cfg"
+ },
+ {
+ "name": "TestCases",
+ "typeDescriptor": {
+ "valueType": "charstringlistType"
+ },
+ "description": "Name of the TestCases separated by space",
+ "exampleValue": "Main_module.tc_1 Main_module.tc_2"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "Snapshot",
+ "valueType": "intType",
+ "description": "This dataElement returns the Snapshot test variable. The main SnapshotButton can be pressed by changing the value of this variable."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "Start",
+ "valueType": "intType",
+ "description": "This dataElement returns the Start test variable. The main StartButton can be pressed by changing the value of this variable."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "StartCommand",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the Start Command of the application."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "Stop",
+ "valueType": "intType",
+ "description": "This dataElement returns the Stop test variable. The main StopButton can be pressed by changing the value of this variable."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcStats",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "Statistic"
+ },
+ "description": "This iterator enlists the TC scope statistics of the given traffic cases.",
+ "parameters": []
+ }
+ },
+ {
+ "dataElement": {
+ "name": "Terminate",
+ "valueType": "intType",
+ "description": "This dataElement returns the Terminate test variable. The main TerminateButton can be pressed by changing the value of this variable."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TestCases",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the TestCases of the application."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TimeElapsed",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the TimeElapsed variable. Its value shows the elapsed time since the main StartButton was pressed."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "help",
+ "valueType": "charstringType",
+ "description": "This data element returns the help information about all dataElements supported",
+ "parameters": [
+ {
+ "name": "Format",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "The format of the output. Valid values: JSON, TEXT. Default: JSON",
+ "exampleValue": "TEXT"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "source": "LGenBase",
+ "dataElements": [
+ {
+ "dataElement": {
+ "name": "EntityGroups",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "EntityGroup"
+ },
+ "description": "This iterator returns the list of entity groups."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "Scenarios",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "Scenario"
+ },
+ "description": "This iterator returns the list of scenarios in the specified entity group.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "TrafficCases",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "TrafficCase"
+ },
+ "description": "This iterator returns the list of traffic cases in the specified scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "CpsToReach",
+ "valueType": "floatType",
+ "description": "This data element can be used to set and get the target CPS value of the specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "IsTcPresent",
+ "valueType": "boolType",
+ "description": "This condition returns true if specified traffic case exists, and returns false otherwise.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "LastCps",
+ "valueType": "floatType",
+ "description": "This data element returns the last (current) CPS of specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "MaxBusyEntities",
+ "valueType": "intType",
+ "description": "This data element returns the highest number of busy entities during the specified traffic case execution.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "MaxRunningEntities",
+ "valueType": "intType",
+ "description": "This data element returns the highest number of running entities during the specified traffic case execution.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "MinAvailableEntities",
+ "valueType": "intType",
+ "description": "This data element returns the smallest number of available entities during the specified traffic case execution.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "NrOfAllEntities",
+ "valueType": "intType",
+ "description": "This data element returns the number of all entities.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "NrOfAvailableEntities",
+ "valueType": "intType",
+ "description": "This data element returns the number of available entities for the specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "NrOfErrors",
+ "valueType": "intType",
+ "description": "This data element returns the number of errors reported by the specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "NrOfFails",
+ "valueType": "intType",
+ "description": "This data element returns the number of failed traffic cases.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "NrOfNotFinishedEntities",
+ "valueType": "intType",
+ "description": "This data element returns the number of finished traffic cases.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "NrOfRunningEntities",
+ "valueType": "intType",
+ "description": "This data element returns the number of running entities for the specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "NrOfStarts",
+ "valueType": "intType",
+ "description": "This data element returns the number of starts.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "NrOfSuccesses",
+ "valueType": "intType",
+ "description": "This data element returns the number of succeeded traffic cases.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "NrOfTimeouts",
+ "valueType": "intType",
+ "description": "This data element returns the number of timeouts reported by the specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "RangeLoops",
+ "valueType": "intType",
+ "description": "This data element returns the range loops of specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ReceivedAnswers",
+ "valueType": "intType",
+ "description": "This data element returns the number of received messages by the specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "SentMessages",
+ "valueType": "intType",
+ "description": "This data element returns the number of sent messages by the specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TCName",
+ "valueType": "charstringType",
+ "description": "This data element returns the name specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcAbortButton",
+ "valueType": "boolType",
+ "description": "This data element returns the abort button (checkbox) of specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcEnabled",
+ "valueType": "boolType",
+ "description": "This data element returns true if traffic case is enabled, and false otherwise.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcEnabledAtStartup",
+ "valueType": "boolType",
+ "description": "This data element returns true if traffic case is enabled at start up, and returns false otherwise.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcPauseButton",
+ "valueType": "boolType",
+ "description": "This data element returns the pause button (checkbox) of specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcRestoreButton",
+ "valueType": "boolType",
+ "description": "This data element returns the abort button (checkbox) of specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcSingleShotBtn",
+ "valueType": "boolType",
+ "description": "This data element returns the single shot button (checkbox) of specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcStartButton",
+ "valueType": "boolType",
+ "description": "This data element returns the start button (checkbox) of specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcState",
+ "valueType": "intType",
+ "description": "This data element returns the state of specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcStateName",
+ "valueType": "charstringType",
+ "description": "This data element returns the state name of specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcStopButton",
+ "valueType": "boolType",
+ "description": "This data element returns the stop button (checkbox) of specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TcUserData",
+ "valueType": "charstringType",
+ "description": "This data element returns the user data linked to specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TrafficType",
+ "valueType": "charstringType",
+ "description": "This data element returns the traffic type of specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "UniqueName",
+ "valueType": "charstringType",
+ "description": "This data element returns the unique name of specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "Weight",
+ "valueType": "floatType",
+ "description": "This data element returns the weight of specified traffic case.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ },
+ {
+ "name": "TrafficCase",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCase"
+ }
+ },
+ "description": "Name of the traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "TrafficCase01"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "IsScPresent",
+ "valueType": "boolType",
+ "description": "This condition returns true if specified scenario exists, and returns false otherwise.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "IsWeightedSc",
+ "valueType": "boolType",
+ "description": "This condition returns true if specified scenario is weighted, and returns false otherwise.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScAbortButton",
+ "valueType": "intType",
+ "description": "This data element returns the abort push button's value of specified scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScCpsToReach",
+ "valueType": "floatType",
+ "description": "This data element can be used to set and get the target CPS for the specified scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScEnabled",
+ "valueType": "boolType",
+ "description": "This data element returns the enabled state of specified scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScLockCPS",
+ "valueType": "boolType",
+ "description": "This data element returns true if the specified scenario's CPS is locked, and returns false otherwise.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScName",
+ "valueType": "charstringType",
+ "description": "This data element returns the name of specified scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScPauseButton",
+ "valueType": "intType",
+ "description": "This data element returns the pause push button's value of specified scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScRestoreButton",
+ "valueType": "intType",
+ "description": "This data element returns the restore push button's value of specified scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScSingleShotBtn",
+ "valueType": "intType",
+ "description": "This data element returns the single shot push button's value of specified scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScStartButton",
+ "valueType": "intType",
+ "description": "This data element returns the start push button's value of specified scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScState",
+ "valueType": "intType",
+ "description": "This data element returns the state of specified scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScStateName",
+ "valueType": "charstringType",
+ "description": "This data element returns the state name of specified scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScStopButton",
+ "valueType": "intType",
+ "description": "This data element returns the stop push button's value of specified scenario.",
+ "parameters": [
+ {
+ "name": "EntityGroup",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "EntityGroup"
+ }
+ },
+ "description": "Name of the entity group the traffic case belongs to. Should be one item in the list returned by 'EntityGroups'",
+ "exampleValue": "EGrp01"
+ },
+ {
+ "name": "Scenario",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "Scenario"
+ }
+ },
+ "description": "Name of the scenario the traffic case belongs to. Should be one item in the list returned by 'Scenarios'",
+ "exampleValue": "Scenario01"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "TrafficCasesOfScenarios",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "TrafficCaseOfScenario"
+ },
+ "description": "This iterator returns the list of traffic cases of all scenarios."
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "EntityGroupOfTrafficCasesOfScenarios",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "EntityGroup"
+ },
+ "description": "This dataElement returns the EntityGroup for the TrafficCasesOfScenarios item.",
+ "parameters": [
+ {
+ "name": "TrafficCaseOfScenarios",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCaseOfScenario"
+ }
+ },
+ "description": "A triple of LGenBase entity group, scenario and traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "0.0.0"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ScenarioOfTrafficCasesOfScenarios",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "Scenario"
+ },
+ "description": "This dataElement returns the Scenario for the TrafficCasesOfScenarios item.",
+ "parameters": [
+ {
+ "name": "TrafficCaseOfScenarios",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCaseOfScenario"
+ }
+ },
+ "description": "A triple of LGenBase entity group, scenario and traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "0.0.0"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "TrafficCaseOfTrafficCasesOfScenarios",
+ "valueType": "charstringType",
+ "typeDescriptor": {
+ "typeName": "TrafficCase"
+ },
+ "description": "This dataElement returns the TrafficCase for the TrafficCasesOfScenarios item.",
+ "parameters": [
+ {
+ "name": "TrafficCaseOfScenarios",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "TrafficCaseOfScenario"
+ }
+ },
+ "description": "A triple of LGenBase entity group, scenario and traffic case. Should be one item in the list returned by 'TrafficCases'",
+ "exampleValue": "0.0.0"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "HasActiveTc",
+ "valueType": "boolType",
+ "description": "This condition returns true if the current PTC has at least one active traffic case, and returns false otherwise."
+ }
+ },
+ {
+ "dataElement": {
+ "name": "help",
+ "valueType": "charstringType",
+ "description": "This data element returns the help information about all dataElements supported",
+ "parameters": [
+ {
+ "name": "Format",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "The format of the output. Valid values: JSON, TEXT. Default: JSON",
+ "exampleValue": "TEXT"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "source": "HostAdminServer",
+ "dataElements": [
+ {
+ "dataElement": {
+ "name": "Hosts",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "HostName"
+ },
+ "description": "This iterator enlists the hosts tracked by the HostAdminServer"
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "CPUs",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "CPU"
+ },
+ "description": "This iterator enlists the CPUs for a host",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host. Should be one item in the list given by the iterator \"Hosts\"",
+ "exampleValue": ""
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "PerCpuLoad",
+ "valueType": "floatType",
+ "description": "This dataElement returns the PerCpuLoad variable for a cpu on a host",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host",
+ "exampleValue": ""
+ },
+ {
+ "name": "CpuIdx",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "CPU"
+ }
+ },
+ "description": "Specifies the CPU index (as returned by the CPUs iterator)",
+ "exampleValue": "0"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "ProcessesOnHost",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "ProcessOnHost"
+ },
+ "description": "This iterator enlists the processes on a given host",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host. Should be one item in the list given by the iterator \"Hosts\"",
+ "exampleValue": ""
+ }
+ ]
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "CpuLoad",
+ "valueType": "floatType",
+ "description": "This dataElement returns the CpuLoad variable for a process or host",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host",
+ "exampleValue": ""
+ },
+ {
+ "name": "ProcessIdx",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ProcessOnHost"
+ }
+ },
+ "description": "Specifies the process index (as returned by the processes iterator",
+ "exampleValue": ""
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "MemUsage",
+ "valueType": "intType",
+ "description": "This dataElement returns the MemUsage variable for a process",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host",
+ "exampleValue": ""
+ },
+ {
+ "name": "ProcessIdx",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ProcessOnHost"
+ }
+ },
+ "description": "Specifies the process index (as returned by the processes iterator",
+ "exampleValue": ""
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "MemUsageHRF",
+ "valueType": "charstringType",
+ "description": "his dataElement returns the MemUsage variable for a process in Human Readable Fromat",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host",
+ "exampleValue": ""
+ },
+ {
+ "name": "ProcessIdx",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ProcessOnHost"
+ }
+ },
+ "description": "Specifies the process index (as returned by the processes iterator",
+ "exampleValue": ""
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "PID",
+ "valueType": "intType",
+ "description": " This dataElement returns the PID variable for a process",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host",
+ "exampleValue": ""
+ },
+ {
+ "name": "ProcessIdx",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ProcessOnHost"
+ }
+ },
+ "description": "Specifies the process index (as returned by the processes iterator)",
+ "exampleValue": "0"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "SelfName",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the SelfName variable for a process",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host",
+ "exampleValue": ""
+ },
+ {
+ "name": "ProcessIdx",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ProcessOnHost"
+ }
+ },
+ "description": "Specifies the process index (as returned by the processes iterator)",
+ "exampleValue": "0"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "CpuAvg",
+ "valueType": "floatType",
+ "description": "This dataElement returns the CpuAvg variable for a host",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host",
+ "exampleValue": ""
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "CpuLoad",
+ "valueType": "floatType",
+ "description": "This dataElement returns the CpuLoad variable for a process or host",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host",
+ "exampleValue": ""
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "CpuMax",
+ "valueType": "floatType",
+ "description": "This dataElement returns the CpuMax variable for a host",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host",
+ "exampleValue": ""
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "CpuMin",
+ "valueType": "floatType",
+ "description": "This dataElement returns the CpuMin variable for a host",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host",
+ "exampleValue": ""
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "FreeMem",
+ "valueType": "intType",
+ "description": "This dataElement returns the FreeMem [kB] variable for a host",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host",
+ "exampleValue": ""
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "FreeMemHRF",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the FreeMem variable for a host in Human Readable Fromat (e.g. '1.5 MB', '3.8 GB')",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host",
+ "exampleValue": ""
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "IPv4Addr",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the IPv4 Address variable for a host",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host",
+ "exampleValue": ""
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "IPv6Addr",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the IPv6 Address variable for a host",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host",
+ "exampleValue": ""
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "PhysicalMem",
+ "valueType": "intType",
+ "description": "This dataElement returns the PhysicalMem [kB] variable for a host",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host",
+ "exampleValue": ""
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "PhysicalMemHRF",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the PhysicalMem variable for a host in Human Readable Fromat (e.g. '1.5 MB', '3.8 GB')",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host",
+ "exampleValue": ""
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ResetMinMaxAvgCPULoad",
+ "valueType": "intType",
+ "description": "This dataElement returns the ResetMinMaxAvgCPULoad variable for a host which can be used to reset the Min/Max/Avg/CPULoad",
+ "parameters": [
+ {
+ "name": "HostName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "HostName"
+ }
+ },
+ "description": "the name of the host",
+ "exampleValue": ""
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "ProcessNames",
+ "valueType": "charstringlistType",
+ "typeDescriptor": {
+ "isListOf": true,
+ "typeName": "ProcessName"
+ },
+ "description": "This iterator enlists the process names (globally, regardless of hostname)"
+ },
+ "children": [
+ {
+ "dataElement": {
+ "name": "CpuLoad",
+ "valueType": "floatType",
+ "description": "This dataElement returns the CpuLoad variable for a process or host",
+ "parameters": [
+ {
+ "name": "SelfName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ProcessName"
+ }
+ },
+ "description": "Specifies the selfName of a process",
+ "exampleValue": ""
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "HostName",
+ "valueType": "charstringType",
+ "description": "This dataElement returns the host name variable for a process",
+ "parameters": [
+ {
+ "name": "SelfName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ProcessName"
+ }
+ },
+ "description": "Specifies the selfName of a process",
+ "exampleValue": ""
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "MemUsage",
+ "valueType": "intType",
+ "description": "This dataElement returns the MemUsage variable for a process",
+ "parameters": [
+ {
+ "name": "SelfName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ProcessName"
+ }
+ },
+ "description": "Specifies the selfName of a process",
+ "exampleValue": ""
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "MemUsageHRF",
+ "valueType": "charstringType",
+ "description": "his dataElement returns the MemUsage variable for a process in Human Readable Fromat",
+ "parameters": [
+ {
+ "name": "SelfName",
+ "typeDescriptor": {
+ "reference": {
+ "typeName": "ProcessName"
+ }
+ },
+ "description": "Specifies the selfName of a process",
+ "exampleValue": ""
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "dataElement": {
+ "name": "NofHosts",
+ "valueType": "intType",
+ "description": "This dataElement returns the number of hosts"
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ProcessSortOption",
+ "valueType": "charstringType",
+ "description": "DataElement to set the process sort option. Value should be one of: { \"EPTF SelfName\", \"CPU Load\", \"Memory Usage\", \"Unsorted\" } which is the list returned by the iterator \"ProcessSortOptionList\""
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ProcessSortOptionList",
+ "valueType": "charstringlistType",
+ "description": "This iterator enlists the sort options for process sorting that can be used in the data element \"ProcessSortOption\""
+ }
+ },
+ {
+ "dataElement": {
+ "name": "ResetMinMaxAvgCPULoad",
+ "valueType": "intType",
+ "description": "This dataElement returns the ResetMinMaxAvgCPULoad variable for all hosts"
+ }
+ },
+ {
+ "dataElement": {
+ "name": "help",
+ "valueType": "charstringType",
+ "description": "This data element returns the help information about all dataElements supported",
+ "parameters": [
+ {
+ "name": "Format",
+ "typeDescriptor": {
+ "valueType": "charstringType"
+ },
+ "description": "The format of the output. Valid values: JSON, TEXT. Default: JSON",
+ "exampleValue": "TEXT"
+ }
+ ]
+ }
+ },
+ {
+ "dataElement": {
+ "name": "isMultipleHosts",
+ "valueType": "boolType",
+ "description": "This condition returns true if there are more than one hosts"
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/MockedServer/DataGenerator.js b/test/MockedServer/DataGenerator.js
new file mode 100644
index 0000000..8cd4a3d
--- /dev/null
+++ b/test/MockedServer/DataGenerator.js
@@ -0,0 +1,158 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2017 Ericsson Telecom AB //
+// //
+// All rights reserved. This program and the accompanying materials //
+// are made available under the terms of the Eclipse Public License v1.0 //
+// which accompanies this distribution, and is available at //
+// http://www.eclipse.org/legal/epl-v10.html //
+///////////////////////////////////////////////////////////////////////////////
+function DataGenerator() {
+
+ var LISTLENGTH = 3;
+
+ var TypeEnum = {
+ intType : 1,
+ floatType : 2,
+ boolType : 3,
+ charstringType : 4,
+ octetstringType : 5,
+ hexstringType : 6,
+ bitstringType : 7,
+ integerlistType : 8,
+ floatlistType : 9,
+ charstringlistType : 10,
+ statusLEDType : 11
+ }
+
+ function genPredef(content, tp) {
+ var obj = {
+ node : {
+ val : content,
+ tp : tp
+ }
+ };
+ return obj;
+ }
+
+ function genString(source, element) {
+ var obj = {
+ node : {
+ val : source + " " + element,
+ tp : TypeEnum.charstringType
+ }
+ }
+ return obj;
+ }
+
+ function genStringList(source, element) {
+ var obj = {list : []};
+ for (var i = 0; i < LISTLENGTH; ++i) {
+ var stringnode = genString(source, element);
+ stringnode.node.val += " " + i;
+ obj.list.push(stringnode);
+ }
+ return obj;
+ }
+
+ function genInt(source, element) {
+ var obj = {
+ node : {
+ val : Math.floor((Math.random() * 5) + 1),
+ tp : TypeEnum.intType
+ }
+ }
+ return obj;
+ }
+
+ function genIntList(source, element) {
+ var obj = {list : []};
+ for (var i = 0; i < LISTLENGTH; ++i) {
+ obj.list.push(genInt(source, element));
+ }
+ return obj;
+ }
+
+ function genFloat(source, element) {
+ var obj = {
+ node : {
+ val : Math.random(),
+ tp : TypeEnum.floatType
+ }
+ }
+ return obj;
+ }
+
+ function genFloatList(source, element) {
+ var number = Math.floor((Math.random() * 5) + 1);
+ var obj = {list : []};
+ for (var i = 0; i < LISTLENGTH; ++i) {
+ obj.list.push(genFloat(source, element));
+ }
+ return obj;
+ }
+
+ function genBool(source, element) {
+ var obj = {
+ node : {
+ val : Math.floor((Math.random() * 2)) == 0,
+ tp : TypeEnum.boolType
+ }
+ }
+ return obj;
+ }
+
+ function genStatusLEDType(source, element) {
+ var LedList = [
+ "[led:blue]Idle",
+ "[led:blue]Stopped",
+ "[led:black]Off",
+ "[led:green]Running",
+ "[led:red]Stopping"
+ ];
+ var number = Math.floor((Math.random() * LedList.length));
+ var obj = {
+ node : {
+ val : LedList[number],
+ tp : TypeEnum.statusLEDType
+ }
+ }
+ return obj;
+ }
+
+ this.generateContent = function(source, element, type) {
+ var obj;
+
+ switch (type) {
+ case "intType":
+ obj = genInt(source, element);
+ break;
+ case "floatType":
+ obj = genFloat(source, element);
+ break;
+ case "boolType":
+ obj = genBool(source, element);
+ break;
+ case "charstringType":
+ obj = genString(source, element);
+ break;
+ case "charstringlistType":
+ obj = genStringList(source, element);
+ break;
+ case "floatlistType":
+ obj = genFloatList(source, element);
+ break;
+ case "integerlistType":
+ obj = genIntList(source, element);
+ break;
+ case "statusLEDType":
+ obj = genStatusLEDType(source, element);
+ break;
+ default:
+ mlog("Unsupported type, using charstringType: ", "source: " + source, "element: " + element, "type: " + type, "");
+ obj = genString(source, element, TypeEnum.charstringType);
+ break;
+ }
+
+ return obj;
+ }
+}
\ No newline at end of file
diff --git a/test/MockedServer/DsRestAPIComm_Mock.js b/test/MockedServer/DsRestAPIComm_Mock.js
new file mode 100644
index 0000000..050fa54
--- /dev/null
+++ b/test/MockedServer/DsRestAPIComm_Mock.js
@@ -0,0 +1,477 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2017 Ericsson Telecom AB //
+// //
+// All rights reserved. This program and the accompanying materials //
+// are made available under the terms of the Eclipse Public License v1.0 //
+// which accompanies this distribution, and is available at //
+// http://www.eclipse.org/legal/epl-v10.html //
+///////////////////////////////////////////////////////////////////////////////
+/**
+The function we mock.
+ */
+function CDsRestAPIComm(p_extension, p_model) {
+ "use strict";
+ ////////////////////////// MOCK OF DS CALLS //////////////////////////
+
+ var model;
+ if (p_model != undefined) {
+ model = p_model;
+ } else {
+ model = new Model(new DataGenerator());
+ }
+
+ var schema = {
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "definitions": {
+ "filter": {
+ "oneOf": [
+ {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "dataValue": {
+ "type": "string"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "request": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "source": {
+ "type": "string"
+ },
+ "ptcname": {
+ "type": "string"
+ },
+ "element": {
+ "type": "string"
+ },
+ "params": {
+ "$ref": "#/definitions/filterParams"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "filterParams": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "paramName": {
+ "type": "string"
+ },
+ "paramValue": {
+ "$ref": "#/definitions/filter"
+ }
+ }
+ }
+ },
+ "params": {
+ "type": "array",
+ "items": {
+ "title": "params",
+ "description": "params",
+ "type" : "object",
+ "additionalProperties": false,
+ "properties": {
+ "paramName": {
+ "type": "string"
+ },
+ "paramValue": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "paramName",
+ "paramValue"
+ ]
+ }
+ },
+ "getDataRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "getData": {
+ "title": "getDataFieldsDef",
+ "description": "getDataFieldsDef",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "source": {
+ "type": "string"
+ },
+ "ptcname": {
+ "type": "string"
+ },
+ "element": {
+ "type": "string"
+ },
+ "params": {
+ "$ref": "#/definitions/params"
+ },
+ "cookie": {
+ "type": "string"
+ },
+ "children": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/getDataRequest"
+ }
+ },
+ "filter": {
+ "$ref": "#/definitions/filter"
+ },
+ "rangeFilter": {
+ "type": "object",
+ "properties": {
+ "offset": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "count": {
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "additionalProperties": false
+ },
+ "selection": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "selectionValues": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "writableInfo": {
+ "type": "boolean"
+ },
+ "timeline": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "period": {
+ "type": "number",
+ "minimum": 0
+ },
+ "maxpoints": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "since": {
+ "type": "integer",
+ "minimum": 0
+ }
+ }
+ }
+ },
+ "required": [
+ "source",
+ "element"
+ ]
+ }
+ }
+ },
+ "setDataRequest": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "setData": {
+ "type": "object",
+ "properties": {
+ "source": {
+ "type": "string"
+ },
+ "ptcname": {
+ "type": "string"
+ },
+ "element": {
+ "type": "string"
+ },
+ "content": {
+ "type": "string"
+ },
+ "tp": {
+ "type": "integer"
+ },
+ "indxsInList": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "params": {
+ "$ref": "#/definitions/params"
+ }
+ },
+ "required": [
+ "source",
+ "element",
+ "content",
+ "tp"
+ ]
+ }
+ }
+ }
+ },
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "requests": {
+ "type": "array",
+ "items": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/getDataRequest"
+ },
+ {
+ "$ref": "#/definitions/setDataRequest"
+ }
+ ]
+ }
+ }
+ }
+ };
+
+ var ajv = new Ajv({
+ allErrors : true,
+ format : "full",
+ verbose : true,
+ inlineRefs : false
+ });
+
+ var validate = ajv.compile(schema);
+
+ this.ajaxCall = function (request, callback) {
+ var v_requestObj = request;
+ var isRequestValid = validate(v_requestObj);
+ var answer;
+
+ if (isRequestValid) {
+ answer = parseRequest(v_requestObj).contentList;
+ } else {
+ console.log("AJV validate says, the request is invalid per DsRestAPI DSServer JSON API!");
+ console.log("AJV says, these are the errors:", validate.errors);
+ console.log("The invalid request:", JSON.stringify(request, null, 4));
+ answer = [
+ {
+ "node" : {
+ "val" : "Error processing request, Reason: While JSON-decoding type '@EPTF_CLL_DsRestAPI_DSServer_Definitions.EPTF_DsRestAPI_RqWrapper': Invalid field name 'XY'",
+ "tp" : 4
+ }
+ }
+ ];
+ }
+
+ callback(answer);
+ };
+
+ /**
+ This method obtains or sets the data from the outside source.
+ @param data: a getData or a setData object
+ @param parents: the parents of the current node
+ @returns the content belonging to the current node obtained from an outside source
+ */
+ function getContent(data, parents) {
+ var content;
+ if (data.content) {
+ content = model.setContent(data);
+ } else {
+ content = model.getContent(data, parents);
+ }
+ // we create a copy of the answer since we may have to modify it
+ content = mcopy(content);
+ return content;
+ }
+
+ /**
+ This method creates the tree using a recursive DFS algorithm. For more details, see the comments below.
+ @param data: either a getData or a setData object
+ @param contentList: the list that will contain the children of the parent
+ @param parents: the parent list of the current node of the tree
+ */
+ function expand(data, contentList, parents) {
+ // data can be undefined if the request is wrong, in this case, we return the already constructed list
+ // TODO the real server returns an empty content list as the complete answer even if a single child request is invalid somewhere
+ if (data == undefined) {
+ return;
+ }
+
+ // we obtain the content that belongs to this node
+ // this is an object that either contains a single "node" object or a "list" of node objects
+ var content = getContent(data, parents);
+ // we add the content to the output
+ contentList.push(content);
+
+ // a tricky part that keeps the code shorter
+ // we create an empty list
+ // if the content we got is a list of nodes, then this list will be the same
+ // else we got a single node that we now add to the empty list
+ // the point is, we can iterate over this list and do not have to check multiple conditions and there will be no code duplication
+ var list = [];
+ if (content.list == undefined) {
+ list.push(content);
+ } else {
+ list = content.list;
+ }
+
+ if (data.children != undefined && data.children.length > 0) {
+ var ListLength = list.length;
+ for (var i = 0; i < ListLength; ++i) {
+ // NOTE: originally the second part of the condition was "i in data.selection", which does not work with arrays...
+ if (data.selection == undefined || data.selection.indexOf(i) != -1) {
+ // here we create an empty list of children for the current node
+ var node = list[i].node;
+ node.childVals = [];
+ // we add the node to the parent list, which we use as a simple stack
+ parents.push(node);
+ var childrenLength = data.children.length;
+ for (var j = 0; j < childrenLength; ++j) {
+ // we expand the children of the currently examined node recursively
+ expand(getGetData(data.children[j]), node.childVals, parents);
+ }
+ // we remove the current node from the parents list, since we have now finished examined all its children
+ parents.pop();
+ }
+ }
+ }
+ }
+
+ /**
+ This method parses the request and returns the answer.
+ The result is obtained by a simple DFS algorithm.
+ @param request: The request
+ @returns the answer to the request that is accepted by the GUI
+ */
+ function parseRequest(request) {
+ var answer = {
+ contentList : []
+ };
+ var requestsLength = request.requests.length;
+ for (var i = 0; i < requestsLength; ++i) {
+ var data = getGetData(request.requests[i]);
+ // if there is no getData or setData, return
+ if (data == undefined) {
+ return answer;
+ }
+
+ // ---------- setData and tp checking ----------
+ var isSetData = !!(request.requests[i].setData);
+ var isTpMatch = false;
+ var TpMatchErrorMsg = ">> TODO This error message is not set properly in DsRestAPIComm_Mock! It should be set according to the datatype conversion failure. <<";
+
+ if (isSetData) {
+ // Check if tp matches the content's implicit type
+ switch (data.tp) {
+ case 1:
+ isTpMatch = /^(\-|\+)?([0-9]+)$/.test(data.content);
+ if (!isTpMatch)
+ TpMatchErrorMsg = "Cannot convert content: " + data.content + " to tp: " + data.tp + ", Reason: The argument of function str2int(), which is \"" + data.content + "\", does not represent a valid int value. Invalid character `" + data.content[0] + "' was found at index 0.";
+ break; // int
+ case 2:
+ isTpMatch = /^(\-|\+)?([0-9]+(\.[0-9]+)?)$/.test(data.content);
+ if (!isTpMatch)
+ TpMatchErrorMsg = "Cannot convert content: " + data.content + " to tp: " + data.tp + ", Reason: The argument of function str2float(), which is \"" + data.content + "\", does not represent a valid float value. Invalid character `" + data.content[0] + "' was found at index 0.";
+ break; // float
+ case 3:
+ isTpMatch = /^(true|false)$/.test(data.content);
+ break; // boolean
+ case 4:
+ isTpMatch = true;
+ break; // charstring
+ case 5: // octetstring
+ case 6:
+ isTpMatch = /^([0-9a-fA-F]{2})*$/.test(data.content);
+ break; // hexstring
+ case 7:
+ isTpMatch = /^[0-1]*$/.test(data.content);
+ break; // bitstring
+ case 8: // integer[]
+ case 9: // float[]
+ case 10:
+ isTpMatch = /^\[.*\]$/.test(data.content);
+ break; // charstring[] -- we only check if it is a list, not the inner type.
+ case 11:
+ isTpMatch = /^\[led:\w+\]/.test(data.content);
+ break; // LED
+ default:
+ TpMatchErrorMsg = "Invalid tp: " + data.tp;
+ // error - invalid tp#
+ }
+ }
+
+ // the help needs to be returned in a special way
+ if (data.element === "help" && data.params != undefined && data.params.length === 1) {
+ if (!isTpMatch && isSetData) {
+ // request tp does not match request content's datatype
+ answer.contentList.push({
+ "node" : {
+ "val" : a2hex(TpMatchErrorMsg),
+ "tp" : 4
+ }
+ });
+ } else if (isSetData) {
+ // Nothing is writable in the help section.
+ answer.contentList.push({
+ "node" : {
+ "val" : a2hex("Value cannot be changed"),
+ "tp" : 4
+ }
+ });
+
+ // ---------- end of setData and tp checking ----------
+
+ } else {
+ var helpstr = JSON.stringify(DSHelp, null, 4);
+ var hex = a2hex(helpstr);
+ answer.contentList.push({
+ "node" : {
+ "val" : hex,
+ "tp" : 10
+ }
+ });
+ }
+ } else {
+ var parents = [];
+ expand(data, answer.contentList, parents);
+ }
+
+
+ }
+ return answer;
+ }
+
+ /**
+ @param obj An object
+ @returns getData or setData from the object if one of them exists, or null if they do not
+ */
+ function getGetData(obj) {
+ if (obj.getData != undefined) {
+ return obj.getData;
+ } else if (obj.setData != undefined) {
+ return obj.setData;
+ } else if (obj.listOfGetData != undefined) {
+ return obj.listOfGetData;
+ } else {
+ mlog("Request has neither getData, nor setData element...");
+ return undefined;
+ }
+ }
+
+ this.getSchema = function () {
+ return mcopy(schema);
+ };
+}
diff --git a/test/MockedServer/FileHandler.js b/test/MockedServer/FileHandler.js
new file mode 100644
index 0000000..4c13d10
--- /dev/null
+++ b/test/MockedServer/FileHandler.js
@@ -0,0 +1,185 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2017 Ericsson Telecom AB //
+// //
+// All rights reserved. This program and the accompanying materials //
+// are made available under the terms of the Eclipse Public License v1.0 //
+// which accompanies this distribution, and is available at //
+// http://www.eclipse.org/legal/epl-v10.html //
+///////////////////////////////////////////////////////////////////////////////
+function FileHandler() {
+
+ ////////////////////////// MOCK OF FILE OPERATIONS //////////////////////////
+
+ var fileCache = {};
+
+ // The existing directories and files, this must be updated when there is a change
+ var contentOnDisc = [
+ REPLACETHIS
+ ];
+
+ /**
+ Since saving is not allowed by the browsers, we use a hashmap with the ulrs as keys
+ */
+ this.putFile = function (url, data, callback) {
+ fileCache[url] = data;
+ callback(true, data);
+ };
+
+ /**
+ A function to remove duplicate items from a list
+ */
+ function uniq(list) {
+ var seen = {};
+ return list.filter(function (item) {
+ return seen.hasOwnProperty(item) ? false : (seen[item] = true);
+ });
+ }
+
+ /**
+ Since there is no list dir command in a local browser, we have to return contentOnDisc from a predefined list
+ */
+ this.getDirectory = function (url, callback) {
+ var contentList = [];
+
+ if (url != "/" && url.startsWith("/")) {
+ url = url.substr(1);
+ }
+
+ // find the contentOnDisc in the directory
+ for (var i = 0; i < contentOnDisc.length; ++i) {
+ if (contentOnDisc[i].substr(0, url.length) == url && contentOnDisc[i].length != url.length) {
+ var index = contentOnDisc[i].indexOf("/", url.length + 1);
+ if (index != -1) {
+ contentList.push(contentOnDisc[i].substring(0, index));
+ } else {
+ contentList.push(contentOnDisc[i]);
+ }
+ }
+
+ if (url == "/" && contentOnDisc[i].indexOf("/") == -1) {
+ contentList.push(contentOnDisc[i]);
+ }
+ }
+
+ // find the fileCache in the directory
+ for (var key in fileCache) {
+ if (fileCache.hasOwnProperty(key) && key.substr(0, url.length) == url) {
+ var index = key.indexOf("/", url.length + 1);
+ if (index != -1) {
+ contentList.push(key.substring(0, index));
+ } else {
+ contentList.push(key);
+ }
+ }
+ }
+
+ var fileList = [];
+ var listOfNames = uniq(contentList);
+ for (var i = 0; i < listOfNames.length; ++i) {
+ var contentType;
+ if (listOfNames[i].indexOf('.') == -1) {
+ contentType = "-d"
+ } else {
+ contentType = "-f"
+ }
+ fileList.push({
+ "contentType" : contentType,
+ "fileName" : listOfNames[i],
+ "size" : 0,
+ "timeStamp" : 0
+ });
+ }
+
+ callback(fileList);
+ };
+
+ this.createDirectory = function (url, callback) {
+ if (contentOnDisc.indexOf(url) == -1) {
+ contentOnDisc.push(url);
+ }
+ callback(true);
+ };
+
+ this.delDirectory = function (url, callback) {
+ var i = 0;
+ while (i < contentOnDisc.length) {
+ if (contentOnDisc[i].substr(0, url.length) == url) {
+ contentOnDisc.splice(i, 1);
+ } else {
+ ++i;
+ }
+ }
+
+ var todelete = [];
+ for (var key in fileCache) {
+ if (fileCache.hasOwnProperty(key) && key.substr(0, url.length) == url) {
+ todelete.push(key);
+ }
+ }
+
+ for (var j = 0; j < todelete.length; ++j) {
+ delete fileCache[todelete[j]];
+ }
+
+ callback(true);
+ };
+
+ this.loadFile = function (url, callback) {
+
+ if (fileCache.hasOwnProperty(url)) {
+ callback(true, fileCache[url]);
+ return;
+ }
+
+ function success(data, textStatus, jqXHR) {
+ callback(true, data);
+ }
+
+ function error(data, textStatus, jqXHR) {
+ callback(false, "Loading: " + textStatus + " " + jqXHR);
+ }
+
+ return $.ajax({
+ url : url,
+ type : 'GET',
+ success : success,
+ error : error,
+ dataType : "text",
+ data : "",
+ async : false
+ });
+ };
+
+ this.importJsFile = function (file, p_callback) {
+ var v_callback = p_callback;
+ function success(data, textStatus, jqXHR) {
+ v_callback(true);
+ }
+
+ function error(data, textStatus, jqXHR) {
+ v_callback(false, "Loading: " + textStatus + " " + jqXHR + " " + file);
+ }
+
+ $.ajax({
+ url : file,
+ dataType : "script",
+ success : success,
+ error : error,
+ async : false
+ });
+ };
+
+
+ this.loadCss = function(hmtlContentId, cssFile, callback) {
+ $("#" + hmtlContentId).load(cssFile, callback);
+ };
+
+ this.loadCssFiles = function(cssFiles, id) {
+ for (var i = 0; i < cssFiles.length; ++i) {
+ // html ids should not contain / and . so we replace them with _
+ var cssId = cssFiles[i].replace(/[\/\.]/gi, "_");
+ $("#" + id).prepend('<style id="' + cssId + '" type="text/css"></style>');
+ this.loadCss(cssId, cssFiles[i]);
+ }
+ };
+}
\ No newline at end of file
diff --git a/test/MockedServer/Model.js b/test/MockedServer/Model.js
new file mode 100644
index 0000000..6234864
--- /dev/null
+++ b/test/MockedServer/Model.js
@@ -0,0 +1,159 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2017 Ericsson Telecom AB //
+// //
+// All rights reserved. This program and the accompanying materials //
+// are made available under the terms of the Eclipse Public License v1.0 //
+// which accompanies this distribution, and is available at //
+// http://www.eclipse.org/legal/epl-v10.html //
+///////////////////////////////////////////////////////////////////////////////
+function Model(p_dataGenerator) {
+
+ var PATTERN = /%Parent(\d+)%/g;
+
+ var dataGenerator = p_dataGenerator;
+ var model = {};
+
+ /**
+ Finds an element in the given section of the Help.
+ NOTE: this is a recursive function, since it is possible that the element is not in the root of the section.
+ @param element: the element
+ @param list: the section in the Help we will search
+ */
+ function findElementType(element, list) {
+ var type;
+ var listLength = list.length;
+ for (var j = 0; j < listLength; ++j) {
+ var dataElement = list[j].dataElement;
+ if (dataElement.name == element) {
+ type = dataElement.valueType;
+ }
+ if (list[j].children != undefined && type == undefined) {
+ type = findElementType(element, list[j].children);
+ }
+ }
+ return type;
+ }
+
+ /**
+ Finds the valueType of a source and element pair using the Help.
+ @param source: the data source
+ @param element: the name of a data element
+ @returns the type or null if the pair is not in the Help
+ */
+ function getType(source, element) {
+ var type;
+ var sourcesLength = DSHelp.sources.length;
+ for (var i = 0; i < sourcesLength; ++i) {
+ var obj = DSHelp.sources[i];
+ if (obj.source == source) {
+ type = findElementType(element, obj.dataElements);
+ }
+ }
+
+ if (type == undefined) {
+ mlog("Not found in HELP, using intType:" + " source: " + source + " dataElement: " + element);
+ return "intType";
+ } else {
+ return type;
+ }
+ }
+
+ function replaceParent(str, parents) {
+ var pattern = new RegExp(PATTERN);
+ var match = pattern.exec(str);
+ return parents[parseInt(match[1])].val;
+ }
+
+ /**
+ The key of the content in the hashmap is a concatenation of its source, element and parameters so we have to sort the parameters.
+ @param data: a getData object
+ @param parents: the list of parents
+ @returns the key
+ */
+ function getGetDataKey(data, parents) {
+ var list = [];
+ if (data.params != undefined) {
+ for (var i = 0; i < data.params.length; ++i) {
+ var paramValue = data.params[i].paramValue;
+ list.push(paramValue.replace(new RegExp(PATTERN), function(match) {return replaceParent(match, parents)}));
+ }
+ }
+ list.sort();
+
+ var key = data.source + "." + data.element;
+ for (var i = 0; i < list.length; ++i) {
+ key += "." + list[i];
+ }
+
+ return key;
+ }
+
+ /**
+ The key of the content in the hashmap is a concatenation of its source, element and parameters so we have to sort the parameters.
+ @param: data a getData object
+ @returns the key
+ */
+ function getSetDataKey(data) {
+ var list = [];
+ if (data.params != undefined) {
+ for (var i = 0; i < data.params.length; ++i) {
+ list.push(data.params[i].paramValue);
+ }
+ }
+ list.sort();
+
+ var key = data.source + "." + data.element;
+ for (var i = 0; i < list.length; ++i) {
+ key += "." + list[i];
+ }
+
+ return key;
+ }
+
+ /**
+ This function creates random content for the current node that belongs to the data and parents.
+ If the content was already generated, we simply return it.
+ @param data: a getData object
+ @param parents: the parent list of the current node
+ @returns the node or the list of nodes
+ */
+ this.getContent = function(data, parents) {
+ var key = getGetDataKey(data, parents);
+ if (model[key] == undefined) {
+ model[key] = dataGenerator.generateContent(data.source, data.element, getType(data.source, data.element));
+ }
+ return model[key];
+ };
+
+ /**
+ This function sets the content of a node.
+ @oaram data: a setData object
+ @returns the node or the list of nodes that was or were changes
+ */
+ this.setContent = function(data) {
+ var key = getSetDataKey(data);
+ var content = model[key] || {"node": {"val": "Value cannot be changed", "tp": 4}};
+ if (data.tp && (data.tp < 0 || data.tp > 11))
+ if (data.tp === content.node.tp)
+ return {"node": {"val": "Value cannot be changed", "tp": 4}};
+ else
+ return {"node": {"val": "Invalid tp: " + data.tp, "tp": 4}};
+ if (content.list && data.indxsInList.length == 1) {
+ content.list[data.indxsInList[0]].node.val = data.content;
+ content.list[data.indxsInList[0]].node.tp = data.tp;
+ } else {
+ content.node.val = data.content;
+ content.node.tp = data.tp;
+ }
+ return content;
+ };
+
+ /**
+ This functions adds a new node using a setData object and a tp number.
+ @param key: the key in the hashmap
+ @param content: the content
+ */
+ this.addContent = function(key, content) {
+ model[key] = content;
+ }
+}
\ No newline at end of file
diff --git a/test/Selenium/BaseTestCase.py b/test/Selenium/BaseTestCase.py
new file mode 100644
index 0000000..2cf73e0
--- /dev/null
+++ b/test/Selenium/BaseTestCase.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#///////////////////////////////////////////////////////////////////////////////
+#// Copyright (c) 2000-2017 Ericsson Telecom AB //
+#// //
+#// All rights reserved. This program and the accompanying materials //
+#// are made available under the terms of the Eclipse Public License v1.0 //
+#// which accompanies this distribution, and is available at //
+#// http://www.eclipse.org/legal/epl-v10.html //
+#///////////////////////////////////////////////////////////////////////////////
+
+import os
+import unittest
+from selenium import webdriver
+from selenium.webdriver.common.keys import Keys
+from selenium.webdriver.support.ui import WebDriverWait
+
+class BaseTestCase(unittest.TestCase):
+
+ # yes... a \ has to be escaped even in a raw string, and a string can not end with \, so we have to create a string that does not end with a \ and get the \ character from its index...
+ HTML_FILE = ("file:///" + os.path.abspath("../Test.html").replace(r"\\ "[0], r"/"))
+
+ def setUp(self):
+ self.driver = webdriver.Firefox()
+ self.driver.maximize_window()
+ self.driver.implicitly_wait(3)
+ # these are not built in members, but no one said we could not add them
+ self.driver.wait = WebDriverWait(self.driver, 3)
+ self.driver.applicationStarted = False
+
+ def tearDown(self):
+ # Get the list produced by 'window.onerror' in Utilities.js
+ javaScript = "return window.jsErrors.length"
+ jsErrorsLength = int(self.driver.execute_script(javaScript))
+ x = 0
+ while (x < jsErrorsLength):
+ if (x == 0):
+ print '\n*** Test id :', self.id()
+ javaScript = "return window.jsErrors[" + str(x) + "] "
+ print self.driver.execute_script(javaScript) + '\n'
+ x += 1
+
+ self.driver.quit()
+
+if __name__ == "__main__":
+ unittest.main(catchbreak=True)
\ No newline at end of file
diff --git a/test/Selenium/Framework_CommonFunctions.py b/test/Selenium/Framework_CommonFunctions.py
new file mode 100644
index 0000000..7bad155
--- /dev/null
+++ b/test/Selenium/Framework_CommonFunctions.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#///////////////////////////////////////////////////////////////////////////////
+#// Copyright (c) 2000-2017 Ericsson Telecom AB //
+#// //
+#// All rights reserved. This program and the accompanying materials //
+#// are made available under the terms of the Eclipse Public License v1.0 //
+#// which accompanies this distribution, and is available at //
+#// http://www.eclipse.org/legal/epl-v10.html //
+#///////////////////////////////////////////////////////////////////////////////
+
+import time
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support import expected_conditions as EC
+from selenium.common.exceptions import NoSuchElementException
+
+def startGuiEditor(driver):
+ browserCompatibilityCheck(driver)
+ time.sleep(1)
+ button = driver.wait.until(EC.element_to_be_clickable((By.ID, 'applications_header_appBtn_1')))
+ button.click()
+ time.sleep(1)
+
+def startRequestTester(driver):
+ browserCompatibilityCheck(driver)
+ time.sleep(1)
+ button = driver.wait.until(EC.element_to_be_clickable((By.ID, 'applications_header_appBtn_2')))
+ button.click()
+ time.sleep(1)
+
+def startCustomizableApp(driver):
+ browserCompatibilityCheck(driver)
+ time.sleep(1)
+ button = driver.wait.until(EC.element_to_be_clickable((By.ID, 'applications_header_appBtn_0')))
+ button.click()
+ time.sleep(1)
+
+def browserCompatibilityCheck(driver):
+ if (not driver.applicationStarted):
+ driver.applicationStarted = True
+ time.sleep(1)
+ try:
+ div = driver.find_element_by_id('UnsupportedBrowser').find_element_by_tag_name('button').click()
+ time.sleep(1)
+ except NoSuchElementException as e:
+ pass
\ No newline at end of file
diff --git a/test/Selenium/Framework_LoadingWebApps.py b/test/Selenium/Framework_LoadingWebApps.py
new file mode 100644
index 0000000..f3563ba
--- /dev/null
+++ b/test/Selenium/Framework_LoadingWebApps.py
@@ -0,0 +1,93 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#///////////////////////////////////////////////////////////////////////////////
+#// Copyright (c) 2000-2017 Ericsson Telecom AB //
+#// //
+#// All rights reserved. This program and the accompanying materials //
+#// are made available under the terms of the Eclipse Public License v1.0 //
+#// which accompanies this distribution, and is available at //
+#// http://www.eclipse.org/legal/epl-v10.html //
+#///////////////////////////////////////////////////////////////////////////////
+
+import time
+
+from BaseTestCase import *
+from Framework_CommonFunctions import *
+
+from selenium.webdriver.common.alert import Alert
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support import expected_conditions as EC
+from selenium.common.exceptions import NoSuchElementException
+
+class Framework_LoadingWebApps(BaseTestCase):
+
+ def test_titleContainsWebGUI(self):
+ self.driver.get(self.HTML_FILE)
+ self.assertIn("TitanSim", self.driver.title)
+
+ def test_mockedServer(self):
+ self.driver.get(self.HTML_FILE)
+ browserCompatibilityCheck(self.driver)
+
+ time.sleep(1)
+ button = self.driver.wait.until(EC.element_to_be_clickable((By.ID,'applications_header_appBtn_4')))
+ button.click()
+
+ alert = Alert(self.driver)
+ alert_text = alert.text
+ alert.accept()
+
+ self.assertEqual("Test result: pass", alert_text, "The mocked server test did not pass")
+
+ # ---------- testing starting applications ----------
+
+ def checkApplicationStart(self, element_id):
+ try:
+ element = self.driver.find_element_by_id(element_id)
+ except NoSuchElementException as e:
+ self.fail("element by id " + element_id + " not found after starting application")
+
+ def test_titanSimGuiStart(self):
+ self.driver.get(self.HTML_FILE)
+ startCustomizableApp(self.driver)
+ self.checkApplicationStart("customAppMainview")
+
+ def test_guiEditorStart(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+ self.checkApplicationStart("GuiEditor_MainView")
+
+ def test_requestTesterStart(self):
+ self.driver.get(self.HTML_FILE)
+ startRequestTester(self.driver)
+ self.checkApplicationStart("RequestConsole_MainView")
+
+ # ---------- testing switching applications ----------
+
+ def checkApplicationSwitch(self, element_id1, element_id2):
+ try:
+ self.driver.find_element_by_id(element_id1)
+ self.fail("element by id " + element_id + " found, but it should not exist after switching applications")
+ except NoSuchElementException as e:
+ pass
+
+ def test_switchTitanSimGuiEditor(self):
+ self.driver.get(self.HTML_FILE)
+ startCustomizableApp(self.driver)
+ startGuiEditor(self.driver)
+ self.checkApplicationSwitch("customAppMainview", "GuiEditor_MainView")
+
+ def test_switchGuiEditorRequestTester(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+ startRequestTester(self.driver)
+ self.checkApplicationSwitch("GuiEditor_MainView", "RequestConsole_MainView")
+
+ def test_switchRequestTesterTitanSimGui(self):
+ self.driver.get(self.HTML_FILE)
+ startRequestTester(self.driver)
+ startGuiEditor(self.driver)
+ self.checkApplicationSwitch("RequestConsole_MainView", "customAppMainview")
+
+if __name__ == "__main__":
+ unittest.main(catchbreak=True)
\ No newline at end of file
diff --git a/test/Selenium/GuiEditor_CommonFunctions.py b/test/Selenium/GuiEditor_CommonFunctions.py
new file mode 100644
index 0000000..126e7c5
--- /dev/null
+++ b/test/Selenium/GuiEditor_CommonFunctions.py
@@ -0,0 +1,231 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#///////////////////////////////////////////////////////////////////////////////
+#// Copyright (c) 2000-2017 Ericsson Telecom AB //
+#// //
+#// All rights reserved. This program and the accompanying materials //
+#// are made available under the terms of the Eclipse Public License v1.0 //
+#// which accompanies this distribution, and is available at //
+#// http://www.eclipse.org/legal/epl-v10.html //
+#///////////////////////////////////////////////////////////////////////////////
+
+import time
+from selenium.webdriver.common.keys import Keys
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support.ui import WebDriverWait
+from selenium.webdriver.support import expected_conditions as EC
+from selenium.common.exceptions import NoSuchElementException, StaleElementReferenceException
+from selenium.webdriver import ActionChains
+
+# ---------- Handling main buttons ----------
+
+def newSetup(driver):
+ button = driver.wait.until(EC.element_to_be_clickable((By.ID, 'GuiEditor_Button_New')))
+ button.click()
+ time.sleep(0.5)
+
+def loadSetup(driver, setupName):
+ radioId = "GuiEditor_Dialog_LoadSetup_RadioButton_" + setupName
+ loadButton = driver.wait.until(EC.element_to_be_clickable((By.ID, 'GuiEditor_Button_Load')))
+ loadButton.click()
+ radioButton = driver.find_element_by_id(radioId)
+ radioButton.click()
+ dialogClickOk(driver, "LoadSetup")
+ time.sleep(1)
+
+def saveSetup(driver):
+ button = driver.wait.until(EC.element_to_be_clickable((By.ID, 'GuiEditor_Button_Save')))
+ button.click()
+
+def saveSetupAs(driver, setupName, exists = False, overwrite = False):
+ button = driver.wait.until(EC.element_to_be_clickable((By.ID, 'GuiEditor_Button_SaveAs')))
+ button.click()
+ editBox = driver.find_element_by_id("GuiEditor_Dialog_SaveSetupAs_Field")
+ ActionChains(driver).move_to_element(editBox).send_keys(Keys.HOME).perform()
+ ActionChains(driver).key_down(Keys.SHIFT).send_keys(Keys.END).key_up(Keys.SHIFT).send_keys(Keys.DELETE).perform()
+ ActionChains(driver).send_keys(setupName).perform()
+ dialogClickOk(driver, "SaveSetupAs")
+ try:
+ driver.find_element_by_id("GuiEditor_Dialog_OverWrite")
+ if overwrite:
+ dialogClickOk(driver, "OverWrite")
+ else:
+ closeButton = driver.find_element_by_class_name("ui-dialog-titlebar").find_element_by_class_name("ui-dialog-titlebar-close")
+ closeButton.click()
+ return exists
+ except NoSuchElementException as e:
+ return not exists
+
+# ---------- Handling setup manipulating buttons ----------
+
+def addViewModel(driver, className):
+ return addEditor(driver, "GuiEditor_ViewmodelEditor", className, "AddViewmodel")
+
+def addView(driver, className):
+ return addEditor(driver, "GuiEditor_ViewEditor", className, "AddView")
+
+def addImport(driver, setupName):
+ return addEditor(driver, "GuiEditor_ImportEditor", setupName, "AddImport")
+
+def addEmptyRequest(driver):
+ button = driver.wait.until(EC.element_to_be_clickable((By.ID,'GuiEditor_Button_AddRequest')))
+ button.click()
+ time.sleep(0.25)
+
+# ---------- Editor manipulating functions ----------
+
+def rightClickLabel(driver, editorId):
+ element = driver.find_element_by_id(editorId + "_Header")
+ actions = ActionChains(driver)
+ actions.context_click(element)
+ actions.perform()
+ time.sleep(0.25)
+
+def clickInContextMenu(driver, text):
+ listElements = driver.find_elements_by_css_selector("#GuiEditor_ContextMenu > li")
+ for element in listElements:
+ if element.text == text:
+ element.click()
+ time.sleep(0.5)
+ return True
+ return False
+
+def openCustomDataEditor(driver, editorId):
+ button = driver.wait.until(EC.element_to_be_clickable((By.ID, editorId + "_Button_Edit")))
+ button.click()
+ time.sleep(0.5)
+
+def closeCustomDataEditor(driver):
+ button = driver.wait.until(EC.element_to_be_clickable((By.ID, "GuiEditor_CustomDataEditor_Close")))
+ button.click()
+ time.sleep(0.5)
+
+# ---------- Connection creation ----------
+
+def getNodeFromTreeByElements(driver, treeId, elements):
+ children = driver.find_elements_by_css_selector("#" + treeId + " > ul > li")
+ nodeToReturn = None
+ for i in range(len(elements)):
+ missing = True
+ for node in children:
+ nodeText = node.find_element_by_class_name("jstree-anchor").text
+ if nodeText == elements[i]:
+ nodeToReturn = node
+ missing = False
+ break
+ if missing: return None
+ if i < len(elements) - 1:
+ if "jstree-closed" in nodeToReturn.get_attribute("class"):
+ nodeToReturn.find_element_by_class_name("jstree-icon").click()
+ time.sleep(0.25)
+ children = nodeToReturn.find_elements_by_css_selector("ul > li")
+ return nodeToReturn
+
+def getNodeFromTreeByPath(driver, treeId, path):
+ children = driver.find_elements_by_css_selector("#" + treeId + " > ul > li")
+ nodeToReturn = None
+ for i in range(len(path)):
+ if not path[i] < len(children): return None
+ nodeToReturn = children[path[i]]
+ if i < len(path) - 1:
+ if "jstree-closed" in nodeToReturn.get_attribute("class"):
+ nodeToReturn.find_element_by_class_name("jstree-icon").click()
+ time.sleep(0.25)
+ children = nodeToReturn.find_elements_by_css_selector("ul > li")
+ return nodeToReturn
+
+def clickInTreeContextMenu(driver, node, menuText):
+ anchor = node.find_element_by_class_name("jstree-anchor")
+ actions = ActionChains(driver)
+ actions.context_click(anchor)
+ actions.perform()
+ time.sleep(0.5)
+
+ contextMenu = driver.find_element_by_class_name("jstree-contextmenu")
+ items = contextMenu.find_elements_by_tag_name("li")
+ for element in items:
+ if menuText in element.text:
+ element.click()
+ time.sleep(0.5)
+ return True
+ return False
+
+def pressDeleteOnNode(driver, node):
+ node.click()
+ node.send_keys(Keys.DELETE)
+ time.sleep(0.25)
+
+def dragAndDrop(driver, fromId, toId):
+ source = driver.find_element_by_id(fromId)
+ target = driver.find_element_by_id(toId)
+ target.location_once_scrolled_into_view
+
+ action_chains = ActionChains(driver)
+ action_chains.drag_and_drop(source, target).perform()
+
+ time.sleep(0.25)
+
+# ---------- Utility functions ----------
+
+def addEditor(driver, className, radioButtonToSelect, buttonSuffix):
+ existingEditorIds = set()
+ existingEditors = driver.find_elements_by_class_name(className)
+ for editor in existingEditors:
+ editorId = editor.get_attribute("id")
+ existingEditorIds.add(editorId)
+
+ button = driver.wait.until(EC.element_to_be_clickable((By.ID, 'GuiEditor_Button_' + buttonSuffix)))
+ button.click()
+ selectRadioButtonInDialog(driver, buttonSuffix, radioButtonToSelect)
+ dialogClickOk(driver, buttonSuffix)
+ time.sleep(0.25)
+
+ newEditorId = None
+ existingEditors = driver.find_elements_by_class_name(className)
+ for editor in existingEditors:
+ editorId = editor.get_attribute("id")
+ if editorId not in existingEditorIds:
+ newEditorId = editorId
+ break
+ return newEditorId
+
+def selectRadioButtonInDialog(driver, dialogName, className):
+ dialog = driver.find_element_by_id("GuiEditor_Dialog_" + dialogName)
+ radio_button = dialog.find_element_by_id("GuiEditor_Dialog_" + dialogName + "_RadioButton_" + className)
+ radio_button.click()
+
+def dialogClickOk(driver, name):
+ buttonId = "GuiEditor_Dialog_" + name + "_OkButton"
+ button = driver.wait.until(EC.element_to_be_clickable((By.ID, buttonId)))
+ button.click()
+
+def getSetupName(driver):
+ label = driver.find_element_by_id("GuiEditor_SetupNameLabel")
+ return label.text
+
+def treeExists(driver, id):
+ try:
+ div = driver.find_element_by_id(id)
+ div.find_element_by_class_name("jstree-node")
+ return True
+ except NoSuchElementException as e:
+ return False
+
+def editorTypeExists(driver, className):
+ try:
+ driver.find_element_by_class_name(className)
+ return True
+ except NoSuchElementException as e:
+ return False
+
+def dialogExists(driver, name):
+ dialogId = "GuiEditor_Dialog_" + name
+ try:
+ driver.find_element_by_id(dialogId)
+ return True
+ except NoSuchElementException as e:
+ return False
+
+def pressDelete(driver):
+ actions = ActionChains(driver)
+ actions.send_keys(Keys.DELETE).perform()
\ No newline at end of file
diff --git a/test/Selenium/GuiEditor_ConnectionTests.py b/test/Selenium/GuiEditor_ConnectionTests.py
new file mode 100644
index 0000000..2a1635e
--- /dev/null
+++ b/test/Selenium/GuiEditor_ConnectionTests.py
@@ -0,0 +1,128 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#///////////////////////////////////////////////////////////////////////////////
+#// Copyright (c) 2000-2017 Ericsson Telecom AB //
+#// //
+#// All rights reserved. This program and the accompanying materials //
+#// are made available under the terms of the Eclipse Public License v1.0 //
+#// which accompanies this distribution, and is available at //
+#// http://www.eclipse.org/legal/epl-v10.html //
+#///////////////////////////////////////////////////////////////////////////////
+
+from BaseTestCase import *
+from Framework_CommonFunctions import *
+from GuiEditor_CommonFunctions import *
+
+class GuiEditor_ConnectionTests(BaseTestCase):
+
+ # ---------- testing connections with drag and drop ----------
+
+ def test_helpToRequest(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+ newSetup(self.driver)
+
+ source = getNodeFromTreeByElements(self.driver, "GuiEditor_HelpTree", ["ExecCtrl", "EntityGroups"])
+ dragAndDrop(self.driver, source.get_attribute("id"), "GuiEditor_RequestTree")
+
+ self.assertIsNotNone(getNodeFromTreeByElements(self.driver, "GuiEditor_RequestTree", ["EntityGroups"]), "Dragging from help to request failed")
+
+ def test_requestToViewmodel_dataConnection(self):
+ self.test_helpToRequest()
+
+ editorId = addViewModel(self.driver, "CViewModel_DynamicTable")
+ source = getNodeFromTreeByElements(self.driver, "GuiEditor_RequestTree", ["EntityGroups"])
+ target = getNodeFromTreeByPath(self.driver, editorId + "_Tree", [1])
+ dragAndDrop(self.driver, source.get_attribute("id"), target.get_attribute("id"))
+
+ self.assertIsNotNone(getNodeFromTreeByPath(self.driver, editorId + "_Tree", [1, 0]), "Dragging from request to viewmodel data connection failed")
+
+ def test_requestToViewmodel_selectionConnection(self):
+ self.test_helpToRequest()
+
+ editorId = addViewModel(self.driver, "CViewModel_DynamicTable")
+ source = getNodeFromTreeByElements(self.driver, "GuiEditor_RequestTree", ["EntityGroups"])
+ target = getNodeFromTreeByPath(self.driver, editorId + "_Tree", [2])
+ dragAndDrop(self.driver, source.get_attribute("id"), target.get_attribute("id"))
+
+ self.assertIsNotNone(getNodeFromTreeByPath(self.driver, editorId + "_Tree", [2, 0]), "Dragging from request to viewmodel selection connection failed")
+
+ def test_viewmodelToView(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+ newSetup(self.driver)
+
+ viewmodelEditorId = addViewModel(self.driver, "CViewModel_DynamicTable")
+ source = getNodeFromTreeByPath(self.driver, viewmodelEditorId + "_Tree", [0])
+ viewEditorId = addView(self.driver, "CView_ElementTable")
+ target = getNodeFromTreeByPath(self.driver, viewEditorId + "_Tree", [0])
+ dragAndDrop(self.driver, source.get_attribute("id"), target.get_attribute("id"))
+
+ self.assertIsNotNone(getNodeFromTreeByPath(self.driver, viewEditorId + "_Tree", [0, 0]), "Dragging from viewmodel to view failed")
+
+ # ---------- deleting connections via context menu ----------
+
+ def test_helpToRequest_delClick(self):
+ self.test_helpToRequest()
+ nodeToDelete = getNodeFromTreeByPath(self.driver, "GuiEditor_RequestTree", [0])
+ clickInTreeContextMenu(self.driver, nodeToDelete, "Delete")
+
+ self.assertIsNone(getNodeFromTreeByPath(self.driver, "GuiEditor_RequestTree", [0]), 'Deleted request is still present');
+
+ def test_requestToViewmodel_dataConnection_delClick(self):
+ self.test_requestToViewmodel_dataConnection()
+ nodeToDelete = getNodeFromTreeByPath(self.driver, "GuiEditor_ViewmodelEditor_0_Tree", [1, 0])
+ clickInTreeContextMenu(self.driver, nodeToDelete, "Delete")
+
+ self.assertIsNone(getNodeFromTreeByPath(self.driver, "GuiEditor_ViewmodelEditor_0_Tree", [1, 0]), 'Deleted viewmodel data connections is still present')
+
+ def test_requestToViewmodel_selectionConnection_delClick(self):
+ self.test_requestToViewmodel_selectionConnection()
+ nodeToDelete = getNodeFromTreeByPath(self.driver, "GuiEditor_ViewmodelEditor_0_Tree", [2, 0])
+ clickInTreeContextMenu(self.driver, nodeToDelete, "Delete")
+
+ self.assertIsNone(getNodeFromTreeByPath(self.driver, "GuiEditor_ViewmodelEditor_0_Tree", [2, 0]), 'Deleted viewmodel selection connections is still present')
+
+ def test_ViewmodelToView_delClick(self):
+ self.test_viewmodelToView()
+ nodeToDelete = getNodeFromTreeByPath(self.driver, "GuiEditor_ViewEditor_0_Tree", [0, 0])
+ clickInTreeContextMenu(self.driver, nodeToDelete, "Delete")
+
+ self.assertIsNone(getNodeFromTreeByPath(self.driver, "GuiEditor_ViewEditor_0_Tree", [0, 0]), 'Deleted viewmodel-view connections is still present')
+
+ # ---------- deleting connections using the DEL key ----------
+
+ def test_helpToRequest_delKey(self):
+ self.test_helpToRequest()
+ nodeToDelete = getNodeFromTreeByPath(self.driver, "GuiEditor_RequestTree", [0])
+ nodeToDelete.click()
+ pressDelete(self.driver)
+
+ self.assertIsNone(getNodeFromTreeByPath(self.driver, "GuiEditor_RequestTree", [0]), 'Deleted request is still present');
+
+ def test_requestToViewmodelDataConnection_delKey(self):
+ self.test_requestToViewmodel_dataConnection()
+ nodeToDelete = getNodeFromTreeByPath(self.driver, "GuiEditor_ViewmodelEditor_0_Tree", [1, 0])
+ nodeToDelete.click()
+ pressDelete(self.driver)
+
+ self.assertIsNone(getNodeFromTreeByPath(self.driver, "GuiEditor_ViewmodelEditor_0_Tree", [1, 0]), 'Deleted viewmodel data connections is still present')
+
+ def test_requestToViewmodelSelectionConnection_delKey(self):
+ self.test_requestToViewmodel_selectionConnection()
+ nodeToDelete = getNodeFromTreeByPath(self.driver, "GuiEditor_ViewmodelEditor_0_Tree", [2, 0])
+ nodeToDelete.click()
+ pressDelete(self.driver)
+
+ self.assertIsNone(getNodeFromTreeByPath(self.driver, "GuiEditor_ViewmodelEditor_0_Tree", [2, 0]), 'Deleted viewmodel selection connections is still present')
+
+ def test_ViewmodelToView_delKey(self):
+ self.test_viewmodelToView()
+ nodeToDelete = getNodeFromTreeByPath(self.driver, "GuiEditor_ViewEditor_0_Tree", [0, 0])
+ nodeToDelete.click()
+ pressDelete(self.driver)
+
+ self.assertIsNone(getNodeFromTreeByPath(self.driver, "GuiEditor_ViewEditor_0_Tree", [0, 0]), 'Deleted viewmodel-view connections is still present')
+
+if __name__ == "__main__":
+ unittest.main(catchbreak=True)
\ No newline at end of file
diff --git a/test/Selenium/GuiEditor_EditorTests.py b/test/Selenium/GuiEditor_EditorTests.py
new file mode 100644
index 0000000..6043bc3
--- /dev/null
+++ b/test/Selenium/GuiEditor_EditorTests.py
@@ -0,0 +1,126 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#///////////////////////////////////////////////////////////////////////////////
+#// Copyright (c) 2000-2017 Ericsson Telecom AB //
+#// //
+#// All rights reserved. This program and the accompanying materials //
+#// are made available under the terms of the Eclipse Public License v1.0 //
+#// which accompanies this distribution, and is available at //
+#// http://www.eclipse.org/legal/epl-v10.html //
+#///////////////////////////////////////////////////////////////////////////////
+
+import re
+
+from BaseTestCase import *
+from Framework_CommonFunctions import *
+from GuiEditor_CommonFunctions import *
+
+from selenium.webdriver.common.alert import Alert
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support import expected_conditions as EC
+from selenium.common.exceptions import NoSuchElementException
+from selenium.webdriver.support.color import Color
+
+class GuiEditor_EditorTests(BaseTestCase):
+
+ def test_addEmptyRequest(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+ newSetup(self.driver)
+
+ addEmptyRequest(self.driver)
+ self.assertTrue(editorTypeExists(self.driver, "JSONEditor"), "ElementEditor element not found after adding an empty request")
+
+ closeButton = self.driver.wait.until(EC.element_to_be_clickable((By.ID, 'GuiEditor_ElementEditor_Close')))
+ closeButton.click()
+
+ self.assertTrue(treeExists(self.driver, "GuiEditor_RequestTree"), "There is no request tree, but there should be after adding an empty request")
+
+ # ---------- adding editors ----------
+
+ def test_addViewModel(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+ newSetup(self.driver)
+
+ addViewModel(self.driver, "CViewModel_DynamicTable")
+ self.assertTrue(editorTypeExists(self.driver, "GuiEditor_ViewmodelEditor"), "ViewmodelEditor element not found after adding one")
+
+ def test_addView(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+ newSetup(self.driver)
+
+ addView(self.driver, "CView_ElementTable")
+ self.assertTrue(editorTypeExists(self.driver, "GuiEditor_ViewEditor"), "ViewEditor element not found after adding one")
+
+ def test_addImport(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+ newSetup(self.driver)
+
+ addImport(self.driver, "Test2")
+ self.assertTrue(editorTypeExists(self.driver, "GuiEditor_ImportEditor"), "ImportEditor element not found after adding one")
+
+ # ---------- custom data editors ----------
+
+ def test_validCustomData(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+
+ editorId = "GuiEditor_ViewmodelEditor_0"
+ openCustomDataEditor(self.driver, editorId)
+
+ customData = '{"value":28}'
+ script = "a = '" + customData + "';" + "view_editor = $('#GuiEditor_CustomDataEditor .CodeMirror')[0].CodeMirror; view_editor.setValue(a);"
+ self.driver.execute_script(script)
+
+ closeCustomDataEditor(self.driver)
+ openCustomDataEditor(self.driver, editorId)
+
+ script = "a = '" + customData + "';" + "view_editor = $('#GuiEditor_CustomDataEditor .CodeMirror')[0].CodeMirror; return view_editor.getValue();"
+ textInEditor = self.driver.execute_script(script)
+ # the editor formats the code, so we have to remove line breaks and spaces
+ textInEditor = re.sub(r"\s", "", textInEditor)
+
+ self.assertEqual(customData, textInEditor, "Custom data was not saved after closing the editor")
+
+ def test_invalidCustomData(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+
+ editorId = "GuiEditor_ViewmodelEditor_0"
+ openCustomDataEditor(self.driver, editorId)
+
+ customData = '{"value"28}'
+ script = "a = '" + customData + "';" + "view_editor = $('#GuiEditor_CustomDataEditor .CodeMirror')[0].CodeMirror; view_editor.setValue(a);"
+ self.driver.execute_script(script)
+
+ editorHeader = self.driver.find_element_by_id("GuiEditor_CustomDataEditor_Header")
+ editorHeaderColor = editorHeader.value_of_css_property("color")
+ self.assertEqual('#ff0000', str(Color.from_string(editorHeaderColor).hex), 'Custom data editor header should be red, it is ' + editorHeaderColor)
+
+ # ---------- deleting editors ----------
+
+ def test_delViewmodelEditor(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+
+ rightClickLabel(self.driver, "GuiEditor_ViewmodelEditor_0")
+ if not clickInContextMenu(self.driver, "delete"):
+ self.fail("No option for delete in context menu of ViewmodelEditor")
+
+ self.assertFalse(editorTypeExists(self.driver, "GuiEditor_ViewmodelEditor"), "ViewmodelEditor element found after it was deleted")
+
+ def test_delViewEditor(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+
+ rightClickLabel(self.driver, "GuiEditor_ViewEditor_0")
+ if not clickInContextMenu(self.driver, "delete"):
+ self.fail("No option for delete in context menu of ViewEditor")
+
+ self.assertFalse(editorTypeExists(self.driver, "GuiEditor_ViewEditor"), "ViewEditor element found after it was deleted")
+
+if __name__ == "__main__":
+ unittest.main(catchbreak=True)
\ No newline at end of file
diff --git a/test/Selenium/GuiEditor_SetupHandlingTests.py b/test/Selenium/GuiEditor_SetupHandlingTests.py
new file mode 100644
index 0000000..9cfe51f
--- /dev/null
+++ b/test/Selenium/GuiEditor_SetupHandlingTests.py
@@ -0,0 +1,118 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#///////////////////////////////////////////////////////////////////////////////
+#// Copyright (c) 2000-2017 Ericsson Telecom AB //
+#// //
+#// All rights reserved. This program and the accompanying materials //
+#// are made available under the terms of the Eclipse Public License v1.0 //
+#// which accompanies this distribution, and is available at //
+#// http://www.eclipse.org/legal/epl-v10.html //
+#///////////////////////////////////////////////////////////////////////////////
+
+from BaseTestCase import *
+from Framework_CommonFunctions import *
+from GuiEditor_CommonFunctions import *
+
+class GuiEditor_SetupHandlingTests(BaseTestCase):
+
+ def test_newSetup(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+ newSetup(self.driver)
+ setupName = getSetupName(self.driver)
+
+ self.driver.implicitly_wait(0.5)
+
+ self.assertEqual(setupName, "... unsaved setup ...", "Displayed setup name is incorrect, it is " + setupName + " and it should be: ... unsaved setup ...")
+ self.assertFalse(treeExists(self.driver, "GuiEditor_RequestTree"), "The request tree exists, but it should not in a new setup")
+ self.assertFalse(editorTypeExists(self.driver, "GuiEditor_ViewmodelEditor"), "There is a viewmodel editor, but there should be none in a new setup")
+ self.assertFalse(editorTypeExists(self.driver, "GuiEditor_ViewEditor"), "There is a view editor, but there should be none in a new setup")
+ self.assertFalse(editorTypeExists(self.driver, "GuiEditor_ImportEditor"), "There is an imports editor, but there should be none in a new setup")
+ self.assertTrue(editorTypeExists(self.driver, "GuiEditor_HtmlEditor"), "The html editor does not exists but it should")
+
+ saveSetup(self.driver)
+ self.assertTrue(dialogExists(self.driver, "SaveSetupAs"), "Save as dialog should have appeared after clicking the save button")
+
+ def test_loadFromConfigAtStart(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+ setupName = getSetupName(self.driver)
+
+ self.driver.implicitly_wait(0.5)
+
+ self.assertEqual(setupName, "Test1", "Displayed setup name is incorrect, it is " + setupName + " and it should be: Test1")
+ self.assertTrue(treeExists(self.driver, "GuiEditor_HelpTree"), "There is no help tree, but it must always exist")
+ self.assertTrue(treeExists(self.driver, "GuiEditor_RequestTree"), "There is no request tree, but there should be")
+ self.assertTrue(editorTypeExists(self.driver, "GuiEditor_ViewmodelEditor"), "There is no viewmodel editor, but there should be")
+ self.assertTrue(editorTypeExists(self.driver, "GuiEditor_ViewEditor"), "There is no view editor, but there should be")
+ self.assertFalse(editorTypeExists(self.driver, "GuiEditor_ImportEditor"), "There is an import editor, but there should be none")
+ self.assertTrue(editorTypeExists(self.driver, "GuiEditor_HtmlEditor"), "The html editor does not exists but it should")
+
+ def test_loadFromDialog(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+ loadSetup(self.driver, "Test2")
+ setupName = getSetupName(self.driver)
+
+ self.driver.implicitly_wait(0.5)
+
+ self.assertEqual(setupName, "Test2", "Displayed setup name is incorrect, it is " + setupName + " and it should be: Test2")
+ self.assertTrue(treeExists(self.driver, "GuiEditor_HelpTree"), "There is no help tree, but it must always exist")
+ self.assertTrue(treeExists(self.driver, "GuiEditor_RequestTree"), "There is no request tree, but there should be")
+ self.assertTrue(editorTypeExists(self.driver, "GuiEditor_ViewmodelEditor"), "There is no viewmodel editor, but there should be")
+ self.assertFalse(editorTypeExists(self.driver, "GuiEditor_ViewEditor"), "There is a view editor, but there should not be")
+ self.assertFalse(editorTypeExists(self.driver, "GuiEditor_ImportEditor"), "There is an import editor, but there should be none")
+ self.assertTrue(editorTypeExists(self.driver, "GuiEditor_HtmlEditor"), "The html editor does not exists but it should")
+
+ def test_saveSetup(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+ setupName = getSetupName(self.driver)
+ viewmodelEditor = self.driver.find_element_by_id("GuiEditor_ViewmodelEditor_0")
+
+ time.sleep(0.5)
+ rightClickLabel(self.driver, "GuiEditor_ViewmodelEditor_0")
+ time.sleep(0.5)
+ if not clickInContextMenu(self.driver, "delete"):
+ self.fail("No option for delete in context menu")
+ time.sleep(0.5)
+
+ saveSetup(self.driver)
+ newSetup(self.driver)
+ loadSetup(self.driver, setupName)
+
+ try:
+ viewmodelEditor = self.driver.find_element_by_id("GuiEditor_ViewmodelEditor_0")
+ self.fail("Deleted ViewModel Editor is still present in the saved setup")
+ except NoSuchElementException as e:
+ pass
+
+ def test_saveSetupAs(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+ origSetupName = getSetupName(self.driver)
+
+ newSetup(self.driver)
+ newSetupName = 'tmp_setup'
+ saveSetupAs(self.driver, newSetupName)
+ setupName = getSetupName(self.driver)
+ if not setupName == newSetupName: self.fail("Displayed setup name is incorrect, it is " + setupName + " and it should be: " + newSetupName)
+
+ loadSetup(self.driver, origSetupName)
+ loadSetup(self.driver, newSetupName)
+
+ self.driver.implicitly_wait(0.5)
+
+ self.assertFalse(treeExists(self.driver, "GuiEditor_RequestTree"), "The request tree exists, but it should not")
+ self.assertFalse(editorTypeExists(self.driver, "GuiEditor_ViewmodelEditor"), "There is a viewmodel editor, but there should be none")
+ self.assertFalse(editorTypeExists(self.driver, "GuiEditor_ViewEditor"), "There is a view editor, but there should be none")
+ self.assertFalse(editorTypeExists(self.driver, "GuiEditor_ImportEditor"), "There is an import editor, but there should be none")
+ self.assertTrue(editorTypeExists(self.driver, "GuiEditor_HtmlEditor"), "The html editor does not exists but it should")
+
+ def test_saveSetupAsOverwrite(self):
+ self.driver.get(self.HTML_FILE)
+ startGuiEditor(self.driver)
+ self.assertTrue(saveSetupAs(self.driver, "Test2", True, False), "SaveAs overwrite checking is not ok")
+
+if __name__ == "__main__":
+ unittest.main(catchbreak=True)
\ No newline at end of file
diff --git a/test/Selenium/RequestConsole_Tests.py b/test/Selenium/RequestConsole_Tests.py
new file mode 100644
index 0000000..d675f3f
--- /dev/null
+++ b/test/Selenium/RequestConsole_Tests.py
@@ -0,0 +1,349 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#///////////////////////////////////////////////////////////////////////////////
+#// Copyright (c) 2000-2017 Ericsson Telecom AB //
+#// //
+#// All rights reserved. This program and the accompanying materials //
+#// are made available under the terms of the Eclipse Public License v1.0 //
+#// which accompanies this distribution, and is available at //
+#// http://www.eclipse.org/legal/epl-v10.html //
+#///////////////////////////////////////////////////////////////////////////////
+
+import re
+from BaseTestCase import *
+from Framework_CommonFunctions import *
+from selenium.webdriver.support.color import Color
+from selenium.webdriver import ActionChains
+
+def init(driver, HTML_FILE):
+ driver.get(HTML_FILE)
+ startRequestTester(driver)
+
+def loadSetup(driver, setupName):
+ radioId = "RequestConsole_Dialog_LoadSetup_RadioButton_" + setupName
+ loadButton = driver.wait.until(EC.element_to_be_clickable((By.ID, 'RequestConsole_Button_Load')))
+ loadButton.click()
+ radioButton = driver.find_element_by_id(radioId)
+ radioButton.click()
+ dialogClickOk(driver, "LoadSetup")
+ time.sleep(1)
+
+def dialogClickOk(driver, name):
+ buttonId = "RequestConsole_Dialog_" + name + "_OkButton"
+ button = driver.wait.until(EC.element_to_be_clickable((By.ID, buttonId)))
+ button.click()
+
+def getSetupName(driver):
+ label = driver.find_element_by_id("RequestConsole_SetupNameLabel")
+ return label.text
+
+def treeExists(driver, id):
+ try:
+ div = driver.find_element_by_id(id)
+ div.find_element_by_class_name("jstree-node")
+ return True
+ except NoSuchElementException as e:
+ return False
+
+def newSetup(driver):
+ button = driver.wait.until(EC.element_to_be_clickable((By.ID, 'RequestConsole_Button_ClearRequest')))
+ button.click()
+ time.sleep(0.5)
+
+def addEmptyRequest(driver):
+ button = driver.wait.until(EC.element_to_be_clickable((By.ID,'RequestConsole_Button_AddRequest')))
+ button.click()
+ time.sleep(0.25)
+
+def sendRequest(driver):
+ button = driver.wait.until(EC.element_to_be_clickable((By.ID, 'RequestConsole_Button_Send')))
+ button.click()
+ time.sleep(0.25)
+
+def editorTypeExists(driver, className):
+ try:
+ driver.find_element_by_class_name(className)
+ return True
+ except NoSuchElementException as e:
+ return False
+
+class RequestConsole_SetupHandlingTests(BaseTestCase):
+ def test_loadSetup_FromConfigAtStart(self):
+ init(self.driver, self.HTML_FILE)
+ setupName = getSetupName(self.driver)
+
+ self.driver.implicitly_wait(0.5)
+
+ self.assertEqual(setupName, "Test1", "Displayed setup name is incorrect, it is " + setupName + " and it should be: Test1")
+ self.assertTrue(treeExists(self.driver, "RequestConsole_HelpTree"), "There is no help tree, but it must always exist")
+ self.assertTrue(treeExists(self.driver, "RequestConsole_RequestTree"), "There is no request tree, but there should be")
+
+ def test_loadSetup_ViaDialog(self):
+ init(self.driver, self.HTML_FILE)
+ loadSetup(self.driver, "Test2")
+ setupName = getSetupName(self.driver)
+
+ self.driver.implicitly_wait(0.5)
+
+ self.assertEqual(setupName, "Test2", "Displayed setup name is incorrect, it is " + setupName + " and it should be: Test2")
+ self.assertTrue(treeExists(self.driver, "RequestConsole_HelpTree"), "There is no help tree, but it must always exist")
+ self.assertTrue(treeExists(self.driver, "RequestConsole_RequestTree"), "There is no request tree, but there should be")
+
+ def test_elementEditor_addEmptyRequest(self):
+ init(self.driver, self.HTML_FILE)
+ newSetup(self.driver)
+
+ addEmptyRequest(self.driver)
+ self.assertTrue(editorTypeExists(self.driver, "JSONEditor"), "ElementEditor element not found after clicking the addEmptyRequest button")
+
+ closeButton = self.driver.wait.until(EC.element_to_be_clickable((By.ID, 'RequestConsole_ElementEditor_Close')))
+ closeButton.click()
+
+ self.assertTrue(treeExists(self.driver, "RequestConsole_RequestTree"), "There is no request tree, but there should be after adding an empty request")
+
+ def test_requestEditorTree_dragAtomicRequestWithinTheRequestObject(self):
+ init(self.driver, self.HTML_FILE)
+
+ treeElements = self.driver.find_elements_by_xpath("//*[contains(@id, '_anchor')]") #for elem in treeElements: print elem.get_attribute('innerHTML')
+ ActionChains(self.driver).drag_and_drop(treeElements[7], treeElements[8]).perform()
+ script = "code_editor = $('#RequestConsole_CodeEditor .CodeMirror')[0].CodeMirror; return code_editor.getValue();"
+ textInEditor = self.driver.execute_script(script)
+ expectedString = '[\n\
+ {\n\
+ "getData": {\n\
+ "source": "ExecCtrl",\n\
+ "element": "EntityGroups",\n\
+ "children": [\n\
+ {\n\
+ "getData": {\n\
+ "source": "ExecCtrl",\n\
+ "element": "Clients"\n\
+ }\n\
+ },\n\
+ {\n\
+ "getData": {\n\
+ "source": "ExecCtrl",\n\
+ "element": "EGrpType",\n\
+ "params": [\n\
+ {\n\
+ "paramName": "EntityGroup",\n\
+ "paramValue": "%Parent0%"\n\
+ }\n\
+ ]\n\
+ }\n\
+ },\n\
+ {\n\
+ "getData": {\n\
+ "source": "ExecCtrl",\n\
+ "element": "EGrpSize",\n\
+ "params": [\n\
+ {\n\
+ "paramName": "EntityGroup",\n\
+ "paramValue": "%Parent0%"\n\
+ }\n\
+ ]\n\
+ }\n\
+ }\n\
+ ]\n\
+ }\n\
+ }\n\
+]'
+ self.assertEqual(expectedString, textInEditor, "RequestEditor\'s content is not changed correctly after an inside drag and drop")
+
+ def test_requestEditorTree_dragRequestFromHelpTree(self):
+ init(self.driver, self.HTML_FILE)
+
+ treeElements = self.driver.find_elements_by_xpath("//*[contains(@id, '_anchor')]")
+
+ ActionChains(self.driver).double_click(treeElements[0]).perform()
+
+ treeElementsAfterExpand = self.driver.find_elements_by_xpath("//*[contains(@id, '_anchor')]")
+
+ ActionChains(self.driver).drag_and_drop(treeElementsAfterExpand[1], treeElements[8]).perform()
+ script = "code_editor = $('#RequestConsole_CodeEditor .CodeMirror')[0].CodeMirror; return code_editor.getValue();"
+ textInEditor = self.driver.execute_script(script)
+ expectedString = '[\n\
+ {\n\
+ "getData": {\n\
+ "source": "ExecCtrl",\n\
+ "element": "Clients"\n\
+ }\n\
+ },\n\
+ {\n\
+ "getData": {\n\
+ "source": "ExecCtrl",\n\
+ "element": "EntityGroups",\n\
+ "children": [\n\
+ {\n\
+ "getData": {\n\
+ "source": "DataSource",\n\
+ "element": "Sources"\n\
+ }\n\
+ },\n\
+ {\n\
+ "getData": {\n\
+ "source": "ExecCtrl",\n\
+ "element": "EGrpType",\n\
+ "params": [\n\
+ {\n\
+ "paramName": "EntityGroup",\n\
+ "paramValue": "%Parent0%"\n\
+ }\n\
+ ]\n\
+ }\n\
+ },\n\
+ {\n\
+ "getData": {\n\
+ "source": "ExecCtrl",\n\
+ "element": "EGrpSize",\n\
+ "params": [\n\
+ {\n\
+ "paramName": "EntityGroup",\n\
+ "paramValue": "%Parent0%"\n\
+ }\n\
+ ]\n\
+ }\n\
+ }\n\
+ ]\n\
+ }\n\
+ }\n\
+]'
+ self.assertEqual(expectedString, textInEditor, "RequestEditor\'s content is not changed correctly after dragging a request from help tree")
+
+ def test_requestEditor_addEmptyRequest(self):
+ init(self.driver, self.HTML_FILE)
+
+ newSetup(self.driver);
+ addEmptyRequest(self.driver);
+
+ script = "code_editor = $('#RequestConsole_CodeEditor .CodeMirror')[0].CodeMirror; return code_editor.getValue();"
+ textInEditor = self.driver.execute_script(script)
+ expectedString = '[\n\
+ {\n\
+ "getData": {\n\
+ "source": "Source",\n\
+ "element": "Element"\n\
+ }\n\
+ }\n\
+]'
+ self.assertEqual(expectedString, textInEditor, "RequestEditor's content is not an empty request as it should be")
+
+ def test_requestEditor_normalBorder_addEmptyRequest(self):
+ init(self.driver, self.HTML_FILE)
+
+ newSetup(self.driver);
+ addEmptyRequest(self.driver);
+
+ editorHeader = self.driver.find_element_by_id("RequestConsole_CodeEditor__Header")
+ editorHeaderColor = editorHeader.value_of_css_property("color")
+ self.assertEqual('#000000', str(Color.from_string(editorHeaderColor).hex), 'RequestEditor\'s header should be black, it is ' + str(Color.from_string(editorHeaderColor).hex))
+
+ def test_requestEditor_normalBorder_settingValidRequest(self):
+ init(self.driver, self.HTML_FILE)
+
+ request = '[{"getData": {"source": "Source","element": "Element"}}]'
+ script = "a = '" + request + "';" + "code_editor = $('#RequestConsole_CodeEditor .CodeMirror')[0].CodeMirror; code_editor.setValue(a);"
+ self.driver.execute_script(script)
+
+ editorHeader = self.driver.find_element_by_id("RequestConsole_CodeEditor__Header")
+ editorHeaderColor = editorHeader.value_of_css_property("color")
+ self.assertEqual('#000000', str(Color.from_string(editorHeaderColor).hex), 'RequestEditor header should be red, it is ' + str(Color.from_string(editorHeaderColor).hex))
+
+ def test_requestEditor_redBorder_settingInvalidRequest(self):
+ init(self.driver, self.HTML_FILE)
+
+ request = '[{"SCHEMAERROR_getData": {"source": "Source","element": "Element"}}]'
+ script = "a = '" + request + "';" + "code_editor = $('#RequestConsole_CodeEditor .CodeMirror')[0].CodeMirror; code_editor.setValue(a);"
+ self.driver.execute_script(script)
+
+ editorHeader = self.driver.find_element_by_id("RequestConsole_CodeEditor__Header")
+ editorHeaderColor = editorHeader.value_of_css_property("color")
+ self.assertEqual('#ff0000', str(Color.from_string(editorHeaderColor).hex), 'RequestEditor\'s header should be red, it is ' + str(Color.from_string(editorHeaderColor).hex))
+
+ def test_responseEditor_normalBorder_withValidJSON(self):
+ init(self.driver, self.HTML_FILE)
+
+ request = '{"value":28}'
+ script = "a = '" + request + "';" + "code_editor = $('#RequestConsole_ResponseDisplay .CodeMirror')[0].CodeMirror; code_editor.setValue(a);"
+ self.driver.execute_script(script)
+
+ script = "code_editor = $('#RequestConsole_ResponseDisplay .CodeMirror')[0].CodeMirror; return code_editor.getValue();"
+ textInEditor = self.driver.execute_script(script)
+ # the editor formats the code, so we have to remove line breaks and spaces
+ textInEditor = re.sub(r"\s", "", textInEditor)
+ self.assertEqual(request, textInEditor, "Response editor content can't be set")
+
+ editorHeader = self.driver.find_element_by_id("RequestConsole_ResponseDisplay__Header")
+ editorHeaderColor = editorHeader.value_of_css_property("color")
+ self.assertEqual('#000000', str(Color.from_string(editorHeaderColor).hex), 'ResponseDisplay header should be red, it is ' + str(Color.from_string(editorHeaderColor).hex))
+
+ def test_responseEditor_redBorder_withInvalidJSON(self):
+ init(self.driver, self.HTML_FILE)
+
+ request = '{"value"28}'
+ script = "a = '" + request + "';" + "code_editor = $('#RequestConsole_ResponseDisplay .CodeMirror')[0].CodeMirror; code_editor.setValue(a);"
+ self.driver.execute_script(script)
+
+ editorHeader = self.driver.find_element_by_id("RequestConsole_ResponseDisplay__Header")
+ editorHeaderColor = editorHeader.value_of_css_property("color")
+ self.assertEqual('#ff0000', str(Color.from_string(editorHeaderColor).hex), 'ResponseDisplay header should be red, it is ' + str(Color.from_string(editorHeaderColor).hex))
+
+ def test_responseEditor_normalBorder_withRealResponse(self):
+ init(self.driver, self.HTML_FILE)
+
+ sendRequest(self.driver);
+
+ editorHeader = self.driver.find_element_by_id("RequestConsole_ResponseDisplay__Header")
+ editorHeaderColor = editorHeader.value_of_css_property("color")
+ self.assertEqual('#000000', str(Color.from_string(editorHeaderColor).hex), 'ResponseDisplay header should be red, it is ' + str(Color.from_string(editorHeaderColor).hex))
+
+ def test_responseEditor_emptyListAfterEmptyRequest(self):
+ init(self.driver, self.HTML_FILE)
+
+ newSetup(self.driver);
+ sendRequest(self.driver);
+
+ script = "code_editor = $('#RequestConsole_ResponseDisplay .CodeMirror')[0].CodeMirror; return code_editor.getValue();"
+ textInEditor = self.driver.execute_script(script)
+ self.assertEqual("[]", textInEditor, "ResponseDisplay content is not [] as it should be")
+
+ def test_sendRequest_checkResponse(self):
+ init(self.driver, self.HTML_FILE)
+
+ request = '[{"getData": {"source": "ExecCtrl", "element": "EntityGroups"}}]'
+ script = "a = '" + request + "';" + "code_editor = $('#RequestConsole_CodeEditor .CodeMirror')[0].CodeMirror; code_editor.setValue(a);"
+ self.driver.execute_script(script)
+
+ sendRequest(self.driver);
+
+ script = "code_editor = $('#RequestConsole_ResponseDisplay .CodeMirror')[0].CodeMirror; return code_editor.getValue();"
+ textInEditor = self.driver.execute_script(script)
+
+ expectedResponse = '[\n\
+ {\n\
+ "list": [\n\
+ {\n\
+ "node": {\n\
+ "val": "ExecCtrl EntityGroups 0",\n\
+ "tp": 4\n\
+ }\n\
+ },\n\
+ {\n\
+ "node": {\n\
+ "val": "ExecCtrl EntityGroups 1",\n\
+ "tp": 4\n\
+ }\n\
+ },\n\
+ {\n\
+ "node": {\n\
+ "val": "ExecCtrl EntityGroups 2",\n\
+ "tp": 4\n\
+ }\n\
+ }\n\
+ ]\n\
+ }\n\
+]'
+ self.assertEqual(expectedResponse, textInEditor, "sendData is not returning the expexted result")
+
+if __name__ == "__main__":
+ unittest.main(catchbreak=True)
\ No newline at end of file
diff --git a/test/Selenium/runTests.py b/test/Selenium/runTests.py
new file mode 100755
index 0000000..04f64c4
--- /dev/null
+++ b/test/Selenium/runTests.py
@@ -0,0 +1,19 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#///////////////////////////////////////////////////////////////////////////////
+#// Copyright (c) 2000-2017 Ericsson Telecom AB //
+#// //
+#// All rights reserved. This program and the accompanying materials //
+#// are made available under the terms of the Eclipse Public License v1.0 //
+#// which accompanies this distribution, and is available at //
+#// http://www.eclipse.org/legal/epl-v10.html //
+#///////////////////////////////////////////////////////////////////////////////
+
+from Framework_LoadingWebApps import *
+from GuiEditor_SetupHandlingTests import *
+from GuiEditor_EditorTests import *
+from GuiEditor_ConnectionTests import *
+from RequestConsole_Tests import *
+
+if __name__ == "__main__":
+ unittest.main(catchbreak=True)
\ No newline at end of file
diff --git a/test/Selenium/runTestsWithXvfb.sh b/test/Selenium/runTestsWithXvfb.sh
new file mode 100755
index 0000000..3986037
--- /dev/null
+++ b/test/Selenium/runTestsWithXvfb.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+#///////////////////////////////////////////////////////////////////////////////
+#// Copyright (c) 2000-2017 Ericsson Telecom AB //
+#// //
+#// All rights reserved. This program and the accompanying materials //
+#// are made available under the terms of the Eclipse Public License v1.0 //
+#// which accompanies this distribution, and is available at //
+#// http://www.eclipse.org/legal/epl-v10.html //
+#///////////////////////////////////////////////////////////////////////////////
+
+echo "Checking if Xvfb is running..."
+XVFB_PID=`pgrep Xvfb`
+
+if [ "$?" == "0" ]; then
+
+ echo "Xvfb is running, finding display port..."
+ DISPLAY=`ps --format command --no-headers -ww --pid $XVFB_PID | grep -o ':[0-9]*'`
+ echo "Found display port: "$DISPLAY
+ export DISPLAY=$DISPLAY.0
+
+ chmod u+x runTests.py
+ ./runTests.py
+
+ exit 0
+
+else
+
+ echo -n "Xvfb is not running, starting it on display :999 with pid: "
+ Xvfb :999 -fp /usr/share/fonts/misc &
+ XVFB_PID=$!
+ echo $XVFB_PID
+
+ killXvfb_trap() {
+ kill $XVFB_PID
+ echo "Killed Xvfb ($XVFB_PID)"
+ }
+
+ trap killXvfb_trap INT
+ trap killXvfb_trap TERM
+
+ export DISPLAY=:999.0
+
+ chmod u+x runTests.py
+ result=$(./runTests.py)
+ echo $result
+
+ killXvfb_trap
+
+ exit 0
+fi
diff --git a/test/TestContent/CustomizableApp/AppConfig.json b/test/TestContent/CustomizableApp/AppConfig.json
new file mode 100644
index 0000000..4f5e436
--- /dev/null
+++ b/test/TestContent/CustomizableApp/AppConfig.json
@@ -0,0 +1,14 @@
+{
+ "setup": "Test1",
+ "overlayOpacity": 0.25,
+ "overlayEnabledOnSelect": true,
+ "overlayEnabledOnSetData": true,
+ "refreshInterval": 1000,
+ "filesToInclude": [
+ "Utils/DsRestAPI/DsRestAPI.js",
+ "Utils/DsRestAPI/MockedServer/DSHelp.js",
+ "Utils/DsRestAPI/MockedServer/DataGenerator.js",
+ "Utils/DsRestAPI/MockedServer/Model.js",
+ "Utils/DsRestAPI/MockedServer/DsRestAPIComm_Mock.js"
+ ]
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/AppConfigSchema.json b/test/TestContent/CustomizableApp/AppConfigSchema.json
new file mode 100644
index 0000000..e38a188
--- /dev/null
+++ b/test/TestContent/CustomizableApp/AppConfigSchema.json
@@ -0,0 +1,53 @@
+{
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "title": "CustomizableApp",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "setup": {
+ "description": "The initial setup to load.",
+ "type": "string"
+ },
+ "overlayOpacity": {
+ "description": "The opacity of the overlay when the gui is busy.",
+ "type": "number",
+ "default": 0.0,
+ "minimum": 0.0,
+ "exclusiveMinimum": false,
+ "maximum": 1.0,
+ "exclusiveMaximum": false
+ },
+ "overlayEnabledOnSelect": {
+ "description": "Whether we show the overlay when selection changes.",
+ "type": "boolean",
+ "default": true
+ },
+ "overlayEnabledOnSetData": {
+ "description": "Whether we show the overlay when a setData occures (e.g. when pressing a button).",
+ "type": "boolean",
+ "default": true
+ },
+ "refreshInterval": {
+ "description": "The period in milliseconds in which requests are sent to the server.",
+ "type": "integer",
+ "default": 1000
+ },
+ "filesToInclude": {
+ "description": "Additional javascript files that will be included at start.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "title": "Javascript files"
+ },
+ "format": "table"
+ },
+ "apiExtension": {
+ "description": "The extension used by the api.",
+ "type": "string",
+ "default": "dsapi"
+ }
+ },
+ "required": [
+ "setup"
+ ]
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/Desktop.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/Desktop.json
new file mode 100644
index 0000000..e0a5fca
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/Desktop.json
@@ -0,0 +1,79 @@
+{
+ "ViewmodelEditors": [
+ {
+ "pos": {
+ "top": 85,
+ "left": 493
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 167,
+ "left": 338
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 8,
+ "left": 351
+ },
+ "visible": false
+ }
+ ],
+ "ViewEditors": [
+ {
+ "pos": {
+ "top": 123,
+ "left": 750
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 170,
+ "left": 979
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 44,
+ "left": 738
+ },
+ "visible": false
+ }
+ ],
+ "HtmlEditor": {
+ "pos": {
+ "top": 226,
+ "left": 1154
+ },
+ "visible": false
+ },
+ "RequestEditor": {},
+ "Imports": [
+ {
+ "pos": {
+ "top": 286,
+ "left": 769
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 240,
+ "left": 818
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 19,
+ "left": 831
+ },
+ "visible": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/Imports.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/Imports.json
new file mode 100644
index 0000000..f9afd41
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/Imports.json
@@ -0,0 +1,14 @@
+[
+ {
+ "setupName": "EPTF_CLL_ExecCtrl_CommonControls",
+ "parentID": "EPTF_CLL_ExecCtrl_CommonControls"
+ },
+ {
+ "setupName": "EPTF_CLL_ExecCtrl_Status",
+ "parentID": "EPTF_CLL_ExecCtrl_ClientResources_CView_Aligner_3"
+ },
+ {
+ "setupName": "EPTF_CLL_SetupTabs",
+ "parentID": "EPTF_CLL_ExecCtrl_ClientResources_CView_Aligner_0"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/Request.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/Request.json
new file mode 100644
index 0000000..b0936d9
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/Request.json
@@ -0,0 +1,178 @@
+[
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "sizeOf",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "ExecCtrl"
+ },
+ {
+ "paramName": "Element",
+ "paramValue": "EntityTypesForLGenOnClients"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EntityTypesForLGenOnClients",
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ClientOfEntityTypesForLGenOnClients",
+ "params": [
+ {
+ "paramName": "EntityTypeForLGenOnClient",
+ "paramValue": "%Parent0%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EntityTypeOfEntityTypesForLGenOnClients",
+ "params": [
+ {
+ "paramName": "EntityTypeForLGenOnClient",
+ "paramValue": "%Parent0%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "NofMaxAvailEntitiesForLGen",
+ "params": [
+ {
+ "paramName": "LGen",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "EntityType",
+ "paramValue": "%Parent2%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "NofCurrentAvailEntitiesForLGen",
+ "params": [
+ {
+ "paramName": "LGen",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "EntityType",
+ "paramValue": "%Parent2%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "rangeFilter": {
+ "offset": 0,
+ "count": 15
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "sizeOf",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "ExecCtrl"
+ },
+ {
+ "paramName": "Element",
+ "paramValue": "EGrpsOnClients"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EGrpsOnClients",
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EntityGroupOfEGrpOnClient",
+ "params": [
+ {
+ "paramName": "EGrpOnClient",
+ "paramValue": "%Parent0%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ClientOfEGrpOnClient",
+ "params": [
+ {
+ "paramName": "EGrpOnClient",
+ "paramValue": "%Parent0%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EGrpSizeForLGen",
+ "params": [
+ {
+ "paramName": "LGen",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EGrpOffsetForLGen",
+ "params": [
+ {
+ "paramName": "LGen",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "rangeFilter": {
+ "offset": 0,
+ "count": 15
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/Setup.css b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/Setup.css
new file mode 100644
index 0000000..908639d
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/Setup.css
@@ -0,0 +1,7 @@
+#EPTF_CLL_ExecCtrl_ClientResources {
+ height: calc(100% - 40px);
+}
+
+#EPTF_CLL_ExecCtrl_CommonControls {
+ height: 40px;
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/Setup.html b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/Setup.html
new file mode 100644
index 0000000..da0afc4
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/Setup.html
@@ -0,0 +1,2 @@
+<div id="EPTF_CLL_ExecCtrl_ClientResources"></div>
+<div id="EPTF_CLL_ExecCtrl_CommonControls"></div>
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/ViewInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/ViewInstances.json
new file mode 100644
index 0000000..c56e585
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/ViewInstances.json
@@ -0,0 +1,83 @@
+[
+ {
+ "class": "CView_ElementTableForLargeData",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "autoHeight": true,
+ "columns": [
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ }
+ ],
+ "class": "TableGray"
+ },
+ "viewModelIndexes": [
+ 1,
+ 0
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_ClientResources_CView_Aligner_2"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "orientation": "vertical",
+ "css": {
+ "overflow": "auto"
+ }
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_ClientResources_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_ClientResources_CView_Aligner_1",
+ "EPTF_CLL_ExecCtrl_ClientResources_CView_Aligner_2",
+ "EPTF_CLL_ExecCtrl_ClientResources_CView_Aligner_3"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_ClientResources"
+ },
+ {
+ "class": "CView_ElementTableForLargeData",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "autoHeight": true,
+ "columns": [
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ }
+ ],
+ "class": "TableGray"
+ },
+ "viewModelIndexes": [
+ 2,
+ 0
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_ClientResources_CView_Aligner_1"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/ViewModelInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/ViewModelInstances.json
new file mode 100644
index 0000000..4538c2d
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_ClientResources/ViewModelInstances.json
@@ -0,0 +1,118 @@
+[
+ {
+ "class": "CViewModel_FlexAligner",
+ "customData": {},
+ "dataPathStrList": [],
+ "dataPathList": [],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_TableForLargeData",
+ "customData": {
+ "name": "Entity Group Distribution overview",
+ "iteratorColumnPosition": -1,
+ "allowScrollBelow": false,
+ "streamingThreshold": 15,
+ "header": [
+ "Entity Group",
+ "LGen",
+ "eCount",
+ "eOffset"
+ ]
+ },
+ "dataPathStrList": [
+ "sizeOf",
+ "EGrpsOnClients",
+ "EGrpsOnClients.EntityGroupOfEGrpOnClient",
+ "EGrpsOnClients.EntityGroupOfEGrpOnClient.ClientOfEGrpOnClient",
+ "EGrpsOnClients.EntityGroupOfEGrpOnClient.ClientOfEGrpOnClient.EGrpSizeForLGen",
+ "EGrpsOnClients.EntityGroupOfEGrpOnClient.ClientOfEGrpOnClient.EGrpOffsetForLGen"
+ ],
+ "dataPathList": [
+ [
+ 2
+ ],
+ [
+ 3
+ ],
+ [
+ 3,
+ 0
+ ],
+ [
+ 3,
+ 0,
+ 0
+ ],
+ [
+ 3,
+ 0,
+ 0,
+ 0
+ ],
+ [
+ 3,
+ 0,
+ 0,
+ 1
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_TableForLargeData",
+ "customData": {
+ "name": "Resource information",
+ "iteratorColumnPosition": -1,
+ "allowScrollBelow": false,
+ "streamingThreshold": 15,
+ "header": [
+ "Client Name",
+ "Entity type",
+ "Max available resource",
+ "Current available resource"
+ ]
+ },
+ "dataPathStrList": [
+ "sizeOf",
+ "EntityTypesForLGenOnClients",
+ "EntityTypesForLGenOnClients.ClientOfEntityTypesForLGenOnClients",
+ "EntityTypesForLGenOnClients.ClientOfEntityTypesForLGenOnClients.EntityTypeOfEntityTypesForLGenOnClients",
+ "EntityTypesForLGenOnClients.ClientOfEntityTypesForLGenOnClients.EntityTypeOfEntityTypesForLGenOnClients.NofMaxAvailEntitiesForLGen",
+ "EntityTypesForLGenOnClients.ClientOfEntityTypesForLGenOnClients.EntityTypeOfEntityTypesForLGenOnClients.NofCurrentAvailEntitiesForLGen"
+ ],
+ "dataPathList": [
+ [
+ 0
+ ],
+ [
+ 1
+ ],
+ [
+ 1,
+ 0
+ ],
+ [
+ 1,
+ 0,
+ 0
+ ],
+ [
+ 1,
+ 0,
+ 0,
+ 0
+ ],
+ [
+ 1,
+ 0,
+ 0,
+ 1
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/Desktop.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/Desktop.json
new file mode 100644
index 0000000..00e161a
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/Desktop.json
@@ -0,0 +1,72 @@
+{
+ "ViewmodelEditors": [
+ {
+ "pos": {
+ "top": 54,
+ "left": 511
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 361,
+ "left": 446
+ },
+ "visible": false
+ }
+ ],
+ "ViewEditors": [
+ {
+ "pos": {
+ "top": 103,
+ "left": 807
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 265,
+ "left": 680
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 66,
+ "left": 951
+ },
+ "visible": false
+ }
+ ],
+ "HtmlEditor": {
+ "pos": {
+ "top": 137,
+ "left": 1154
+ },
+ "visible": false
+ },
+ "RequestEditor": {},
+ "Imports": [
+ {
+ "pos": {
+ "top": 362,
+ "left": 674
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 336,
+ "left": 727
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 11,
+ "left": 831
+ },
+ "visible": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/Imports.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/Imports.json
new file mode 100644
index 0000000..c845fc5
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/Imports.json
@@ -0,0 +1,14 @@
+[
+ {
+ "setupName": "EPTF_CLL_ExecCtrl_CommonControls",
+ "parentID": "EPTF_CLL_ExecCtrl_CommonControls"
+ },
+ {
+ "setupName": "EPTF_CLL_ExecCtrl_Status",
+ "parentID": "EPTF_CLL_ExecCtrl_Clients_CView_Aligner_2"
+ },
+ {
+ "setupName": "EPTF_CLL_SetupTabs",
+ "parentID": "EPTF_CLL_ExecCtrl_Clients_CView_Aligner_0"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/Request.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/Request.json
new file mode 100644
index 0000000..6e63cd7
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/Request.json
@@ -0,0 +1,931 @@
+[
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "PTCs",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "LGenBase"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "PTCs",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "LGenBase"
+ }
+ ],
+ "selection": [
+ 0
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "sizeOf",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "LGenBase"
+ },
+ {
+ "paramName": "Element",
+ "paramValue": "TrafficCasesOfScenarios"
+ },
+ {
+ "paramName": "PTCName",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "TrafficCasesOfScenarios",
+ "children": [
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "EntityGroupOfTrafficCasesOfScenarios",
+ "params": [
+ {
+ "paramName": "TrafficCaseOfScenarios",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "ScenarioOfTrafficCasesOfScenarios",
+ "params": [
+ {
+ "paramName": "TrafficCaseOfScenarios",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "ScEnabled",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "ScStateName",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "IsWeightedSc",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "ScCpsToReach",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "ptcname": "%Parent0%",
+ "filter": {
+ "dataValue": "%Parent4%"
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "ScLockCPS",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "ptcname": "%Parent0%",
+ "filter": {
+ "dataValue": "%Parent4%"
+ }
+ }
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "ScenarioOfTrafficCasesOfScenarios",
+ "params": [
+ {
+ "paramName": "TrafficCaseOfScenarios",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "ScStartButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "ScStopButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "ScPauseButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "ScAbortButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "ScRestoreButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "ScSingleShotBtn",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "ScenarioOfTrafficCasesOfScenarios",
+ "params": [
+ {
+ "paramName": "TrafficCaseOfScenarios",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "sizeOf",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "LGenBase"
+ },
+ {
+ "paramName": "Element",
+ "paramValue": "TrafficCases"
+ },
+ {
+ "paramName": "ParamName",
+ "paramValue": "EntityGroup"
+ },
+ {
+ "paramName": "ParamValue",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "ParamName",
+ "paramValue": "Scenario"
+ },
+ {
+ "paramName": "ParamValue",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "PTCName",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "TrafficCaseOfTrafficCasesOfScenarios",
+ "params": [
+ {
+ "paramName": "TrafficCaseOfScenarios",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "TcEnabled",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "TcStateName",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "TcUserData",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "TcStartButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "TcStopButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "TcPauseButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "TcAbortButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "TcSingleShotBtn",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "TrafficType",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "IsWeightedSc",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "Weight",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%",
+ "filter": {
+ "dataValue": "%Parent5%"
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "CpsToReach",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%",
+ "filter": {
+ "request": {
+ "source": "DataSource",
+ "element": "not",
+ "params": [
+ {
+ "paramName": "Par1",
+ "paramValue": {
+ "dataValue": "%Parent5%"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "LastCps",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "NrOfRunningEntities",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "NrOfAvailableEntities",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "NrOfNotFinishedEntities",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "NrOfStarts",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "NrOfSuccesses",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "NrOfFails",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "NrOfErrors",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "NrOfTimeouts",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "MaxRunningEntities",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "MinAvailableEntities",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "MaxBusyEntities",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "ReceivedAnswers",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ },
+ {
+ "getData": {
+ "source": "LGenBase",
+ "element": "RangeLoops",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ }
+ ],
+ "ptcname": "%Parent0%"
+ }
+ }
+ ],
+ "rangeFilter": {
+ "offset": 0,
+ "count": 8
+ },
+ "ptcname": "%Parent0%"
+ }
+ }
+ ]
+ }
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/Setup.css b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/Setup.css
new file mode 100644
index 0000000..b291e07
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/Setup.css
@@ -0,0 +1,7 @@
+#EPTF_CLL_ExecCtrl_Clients {
+ height: calc(100% - 40px);
+}
+
+#EPTF_CLL_ExecCtrl_CommonControls {
+ height: 40px;
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/Setup.html b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/Setup.html
new file mode 100644
index 0000000..879153b
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/Setup.html
@@ -0,0 +1,2 @@
+<div id="EPTF_CLL_ExecCtrl_Clients"></div>
+<div id="EPTF_CLL_ExecCtrl_CommonControls"></div>
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/ViewInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/ViewInstances.json
new file mode 100644
index 0000000..63d7528
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/ViewInstances.json
@@ -0,0 +1,208 @@
+[
+ {
+ "class": "CView_TabsWithData",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "orientation": "vertical"
+ },
+ "viewModelIndexes": [
+ 0
+ ],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Clients_CView_Aligner_1_CView_TabsWithData_0"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Clients_CView_Aligner_1"
+ },
+ {
+ "class": "CView_Clients",
+ "customData": {
+ "customDataForFirstAligner": {
+ "flexCalculation": true,
+ "subviews": [
+ {
+ "subView": "CView_Label",
+ "isElementLabelPresent": true,
+ "disabled": true,
+ "flex": 1
+ },
+ {
+ "subView": "CView_CheckboxOrSwitch",
+ "isElementLabelPresent": true,
+ "flex": 1
+ },
+ {
+ "subView": "CView_Label",
+ "isElementLabelPresent": true,
+ "disabled": true,
+ "flex": 1
+ },
+ {
+ "subView": "CView_Label",
+ "isElementLabelPresent": true,
+ "flex": 1
+ },
+ {
+ "subView": "CView_CheckboxOrSwitch",
+ "isElementLabelPresent": true,
+ "flex": 1
+ }
+ ]
+ },
+ "customDataForSecondAligner": {
+ "flexCalculation": true,
+ "subviews": [
+ {
+ "subView": "CView_BasicButton",
+ "flex": 1
+ },
+ {
+ "subView": "CView_BasicButton",
+ "flex": 1
+ },
+ {
+ "subView": "CView_BasicButton",
+ "flex": 1
+ },
+ {
+ "subView": "CView_BasicButton",
+ "flex": 1
+ },
+ {
+ "subView": "CView_BasicButton",
+ "flex": 1
+ },
+ {
+ "subView": "CView_BasicButton",
+ "flex": 1
+ }
+ ]
+ },
+ "customDataForTable": {
+ "class": "TableGray",
+ "displayName": false,
+ "autoHeight": true,
+ "filter": false,
+ "sort": false,
+ "columns": [
+ {
+ "flex": 2
+ },
+ {
+ "subView": "CView_CheckboxOrSwitch",
+ "flex": 1
+ },
+ {},
+ {
+ "subView": "CView_Label",
+ "flex": 2
+ },
+ {
+ "subView": "CView_CheckboxOrSwitch",
+ "flex": 1
+ },
+ {
+ "subView": "CView_CheckboxOrSwitch",
+ "flex": 1
+ },
+ {
+ "subView": "CView_CheckboxOrSwitch",
+ "flex": 1
+ },
+ {
+ "subView": "CView_CheckboxOrSwitch",
+ "flex": 1
+ },
+ {
+ "subView": "CView_CheckboxOrSwitch",
+ "flex": 1
+ },
+ {},
+ {
+ "subView": "CView_Label",
+ "flex": 2
+ },
+ {
+ "subView": "CView_Label",
+ "flex": 2
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ }
+ ],
+ "processCss": {
+ "INPUT": {
+ "width": "100%",
+ "text-align": "right"
+ },
+ "td .NoData": {
+ "height": "19px"
+ }
+ }
+ }
+ },
+ "viewModelIndexes": [
+ 1
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Clients_CView_Aligner_1_CView_TabsWithData_0"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "orientation": "vertical",
+ "css": {
+ "overflow": "auto"
+ }
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Clients_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_Clients_CView_Aligner_1",
+ "EPTF_CLL_ExecCtrl_Clients_CView_Aligner_2"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Clients"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/ViewModelInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/ViewModelInstances.json
new file mode 100644
index 0000000..2922ad3
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Clients/ViewModelInstances.json
@@ -0,0 +1,421 @@
+[
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "PTCs"
+ ],
+ "dataPathList": [
+ [
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [
+ "PTCs"
+ ],
+ "selectionToControlPathList": [
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "class": "CViewModel_Clients",
+ "customData": {
+ "header": [
+ "Scenario",
+ "Enabled",
+ "State",
+ "CPS",
+ "Lock CPS",
+ "Start",
+ "Stop",
+ "Pause",
+ "Abort",
+ "Restore",
+ "Single shot",
+ "#",
+ "TC",
+ "En.",
+ "State",
+ "Info",
+ "Start",
+ "Stop",
+ "Pause",
+ "Abort",
+ "Single shot",
+ "Traffic type",
+ "Weight",
+ "CPS",
+ "Last CPS",
+ "Running",
+ "Available",
+ "Not finished",
+ "Starts",
+ "Success",
+ "Fail",
+ "Erroneous",
+ "Timeout",
+ "Max running",
+ "Min available",
+ "Max busy",
+ "Fin traffic",
+ "Range loop"
+ ],
+ "iteratorColumnPosition": -1,
+ "separateBy": 0,
+ "allowScrollBelow": true,
+ "streamingThreshold": 8,
+ "numberOfElementsInFirstAligner": 5,
+ "numberOfElementsInSecondAligner": 6
+ },
+ "dataPathStrList": [
+ "PTCs.sizeOf",
+ "PTCs.TrafficCasesOfScenarios",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.ScEnabled",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.ScStateName",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.IsWeightedSc.ScCpsToReach",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.IsWeightedSc.ScLockCPS",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.ScStartButton",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.ScStopButton",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.ScPauseButton",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.ScAbortButton",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.ScRestoreButton",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.ScSingleShotBtn",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.sizeOf",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.TcEnabled",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.TcStateName",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.TcUserData",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.TcStartButton",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.TcStopButton",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.TcPauseButton",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.TcAbortButton",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.TcSingleShotBtn",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.TrafficType",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.IsWeightedSc.Weight",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.IsWeightedSc.CpsToReach",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.LastCps",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.NrOfRunningEntities",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.NrOfAvailableEntities",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.NrOfNotFinishedEntities",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.NrOfStarts",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.NrOfSuccesses",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.NrOfFails",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.NrOfErrors",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.NrOfTimeouts",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.MaxRunningEntities",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.MinAvailableEntities",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.MaxBusyEntities",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.ReceivedAnswers",
+ "PTCs.TrafficCasesOfScenarios.EntityGroupOfTrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.TrafficCaseOfTrafficCasesOfScenarios.RangeLoops"
+ ],
+ "dataPathList": [
+ [
+ 1,
+ 0
+ ],
+ [
+ 1,
+ 1
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 0
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 0,
+ 0
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 0,
+ 2,
+ 0
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 0,
+ 2,
+ 1
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 1,
+ 0
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 1,
+ 1
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 1,
+ 2
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 1,
+ 3
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 1,
+ 4
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 1,
+ 5
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 0
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 0
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 1
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 2
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 3
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 4
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 5
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 6
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 7
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 8
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 9,
+ 0
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 9,
+ 1
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 10
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 11
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 12
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 13
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 14
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 15
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 16
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 17
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 18
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 19
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 20
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 21
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 22
+ ],
+ [
+ 1,
+ 1,
+ 0,
+ 2,
+ 1,
+ 23
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/Desktop.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/Desktop.json
new file mode 100644
index 0000000..88c5053
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/Desktop.json
@@ -0,0 +1,113 @@
+{
+ "ViewmodelEditors": [
+ {
+ "pos": {
+ "top": 3,
+ "left": 229
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 159,
+ "left": 239
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 28,
+ "left": 230
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 53,
+ "left": 228
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 77,
+ "left": 227
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 101,
+ "left": 228
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 124,
+ "left": 228
+ },
+ "visible": false
+ }
+ ],
+ "ViewEditors": [
+ {
+ "pos": {
+ "top": 160,
+ "left": 582
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 5,
+ "left": 485
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 81,
+ "left": 457
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 29,
+ "left": 458
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 56,
+ "left": 456
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 128,
+ "left": 456
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 105,
+ "left": 456
+ },
+ "visible": false
+ }
+ ],
+ "HtmlEditor": {
+ "pos": {
+ "top": 159,
+ "left": 744
+ },
+ "visible": false
+ },
+ "RequestEditor": {},
+ "Imports": []
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/Imports.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/Imports.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/Imports.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/Request.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/Request.json
new file mode 100644
index 0000000..2a5df47
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/Request.json
@@ -0,0 +1,40 @@
+[
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TimeElapsed"
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "Start",
+ "writableInfo": true
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "Stop",
+ "writableInfo": true
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "Terminate"
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "Snapshot"
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "Exit"
+ }
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/Setup.css b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/Setup.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/Setup.css
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/Setup.html b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/Setup.html
new file mode 100644
index 0000000..2a75889
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/Setup.html
@@ -0,0 +1 @@
+<div id="EPTF_CLL_ExecCtrl_CommonControls"></div>
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/ViewInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/ViewInstances.json
new file mode 100644
index 0000000..61485aa
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/ViewInstances.json
@@ -0,0 +1,118 @@
+[
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "flexCalculation": true,
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "processCss": {
+ ".Aligner_Horizontal_Content": {
+ "padding-right": "5px"
+ },
+ ".BasicButton": {
+ "width": "100%"
+ },
+ ".BasicButton > BUTTON": {
+ "width": "100%"
+ }
+ }
+ },
+ "viewModelIndexes": [
+ 1
+ ],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_CommonControls_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_CommonControls_CView_Aligner_1",
+ "EPTF_CLL_ExecCtrl_CommonControls_CView_Aligner_2",
+ "EPTF_CLL_ExecCtrl_CommonControls_CView_Aligner_3",
+ "EPTF_CLL_ExecCtrl_CommonControls_CView_Aligner_4",
+ "EPTF_CLL_ExecCtrl_CommonControls_CView_Aligner_5"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_CommonControls"
+ },
+ {
+ "class": "CView_Label",
+ "customData": {
+ "disabled": true,
+ "flex": 1
+ },
+ "viewModelIndexes": [
+ 0
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_CommonControls_CView_Aligner_0"
+ },
+ {
+ "class": "CView_BasicButton",
+ "customData": {
+ "text": "Terminate Test",
+ "img": "WebApplicationFramework/Res/terminate.png",
+ "imagePosition": "right",
+ "flex": "150px"
+ },
+ "viewModelIndexes": [
+ 4
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_CommonControls_CView_Aligner_3"
+ },
+ {
+ "class": "CView_BasicButton",
+ "customData": {
+ "text": "Start Test",
+ "img": "WebApplicationFramework/Res/starttest.png",
+ "imagePosition": "right",
+ "flex": "150px"
+ },
+ "viewModelIndexes": [
+ 2
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_CommonControls_CView_Aligner_1"
+ },
+ {
+ "class": "CView_BasicButton",
+ "customData": {
+ "text": "Stop Test",
+ "img": "WebApplicationFramework/Res/stoptest.png",
+ "imagePosition": "right",
+ "flex": "150px"
+ },
+ "viewModelIndexes": [
+ 3
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_CommonControls_CView_Aligner_2"
+ },
+ {
+ "class": "CView_BasicButton",
+ "customData": {
+ "text": "Exit",
+ "img": "WebApplicationFramework/Res/exit.png",
+ "imagePosition": "right",
+ "flex": "150px"
+ },
+ "viewModelIndexes": [
+ 6
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_CommonControls_CView_Aligner_5"
+ },
+ {
+ "class": "CView_BasicButton",
+ "customData": {
+ "text": "Snapshot",
+ "img": "WebApplicationFramework/Res/save.png",
+ "imagePosition": "right",
+ "flex": "150px"
+ },
+ "viewModelIndexes": [
+ 5
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_CommonControls_CView_Aligner_4"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/ViewModelInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/ViewModelInstances.json
new file mode 100644
index 0000000..c62fd91
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_CommonControls/ViewModelInstances.json
@@ -0,0 +1,94 @@
+[
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "TimeElapsed"
+ ],
+ "dataPathList": [
+ [
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_FlexAligner",
+ "customData": {},
+ "dataPathStrList": [],
+ "dataPathList": [],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "Start"
+ ],
+ "dataPathList": [
+ [
+ 1
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "Stop"
+ ],
+ "dataPathList": [
+ [
+ 2
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "Terminate"
+ ],
+ "dataPathList": [
+ [
+ 3
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "Snapshot"
+ ],
+ "dataPathList": [
+ [
+ 4
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "Exit"
+ ],
+ "dataPathList": [
+ [
+ 5
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/Desktop.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/Desktop.json
new file mode 100644
index 0000000..1b5a42f
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/Desktop.json
@@ -0,0 +1,65 @@
+{
+ "ViewmodelEditors": [
+ {
+ "pos": {
+ "top": 65,
+ "left": 410
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 19,
+ "left": 231
+ },
+ "visible": false
+ }
+ ],
+ "ViewEditors": [
+ {
+ "pos": {
+ "top": 42,
+ "left": 661
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 82,
+ "left": 859
+ },
+ "visible": false
+ }
+ ],
+ "HtmlEditor": {
+ "pos": {
+ "top": 85,
+ "left": 1034
+ },
+ "visible": false
+ },
+ "RequestEditor": {},
+ "Imports": [
+ {
+ "pos": {
+ "top": 143,
+ "left": 666
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 121,
+ "left": 719
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 20,
+ "left": 756
+ },
+ "visible": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/Imports.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/Imports.json
new file mode 100644
index 0000000..8c028c8
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/Imports.json
@@ -0,0 +1,14 @@
+[
+ {
+ "setupName": "EPTF_CLL_ExecCtrl_CommonControls",
+ "parentID": "EPTF_CLL_ExecCtrl_CommonControls"
+ },
+ {
+ "setupName": "EPTF_CLL_ExecCtrl_Status",
+ "parentID": "EPTF_CLL_ExecCtrl_EntityGroups_CView_Aligner_2"
+ },
+ {
+ "setupName": "EPTF_CLL_SetupTabs",
+ "parentID": "EPTF_CLL_ExecCtrl_EntityGroups_CView_Aligner_0"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/Request.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/Request.json
new file mode 100644
index 0000000..e7c221f
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/Request.json
@@ -0,0 +1,54 @@
+[
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "sizeOf",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "ExecCtrl"
+ },
+ {
+ "paramName": "Element",
+ "paramValue": "EntityGroups"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EntityGroups",
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EGrpType",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EGrpSize",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ }
+ ],
+ "rangeFilter": {
+ "offset": 0,
+ "count": 30
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/Setup.css b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/Setup.css
new file mode 100644
index 0000000..000cb2a
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/Setup.css
@@ -0,0 +1,7 @@
+#EPTF_CLL_ExecCtrl_EntityGroups {
+ height: calc(100% - 40px);
+}
+
+#EPTF_CLL_ExecCtrl_CommonControls {
+ height: 40px;
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/Setup.html b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/Setup.html
new file mode 100644
index 0000000..f43a40e
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/Setup.html
@@ -0,0 +1,2 @@
+<div id="EPTF_CLL_ExecCtrl_EntityGroups"></div>
+<div id="EPTF_CLL_ExecCtrl_CommonControls"></div>
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/ViewInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/ViewInstances.json
new file mode 100644
index 0000000..2ca8112
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/ViewInstances.json
@@ -0,0 +1,47 @@
+[
+ {
+ "class": "CView_ElementTableForLargeData",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "class": "TableGray",
+ "autoHeight": true,
+ "columns": [
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ }
+ ]
+ },
+ "viewModelIndexes": [
+ 1,
+ 0
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_EntityGroups_CView_Aligner_1"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "orientation": "vertical",
+ "css": {
+ "overflow": "auto"
+ }
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_EntityGroups_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_EntityGroups_CView_Aligner_1",
+ "EPTF_CLL_ExecCtrl_EntityGroups_CView_Aligner_2"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_EntityGroups"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/ViewModelInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/ViewModelInstances.json
new file mode 100644
index 0000000..9617288
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_EntityGroups/ViewModelInstances.json
@@ -0,0 +1,37 @@
+[
+ {
+ "class": "CViewModel_FlexAligner",
+ "customData": {},
+ "dataPathStrList": [],
+ "dataPathList": [],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_TableForLargeData",
+ "customData": {
+ "allowScrollBelow": false,
+ "streamingThreshold": 30,
+ "header": [
+ "Entity Group Name",
+ "Entity Type",
+ "Number Of Entities"
+ ],
+ "name": "Entity Group Overview"
+ },
+ "dataPathStrList": [
+ "sizeOf",
+ "EntityGroups"
+ ],
+ "dataPathList": [
+ [
+ 0
+ ],
+ [
+ 1
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/Desktop.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/Desktop.json
new file mode 100644
index 0000000..d64f988
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/Desktop.json
@@ -0,0 +1,35 @@
+{
+ "ViewmodelEditors": [
+ {
+ "pos": {
+ "top": 0,
+ "left": 250
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 25,
+ "left": 265
+ },
+ "visible": false
+ }
+ ],
+ "ViewEditors": [
+ {
+ "pos": {
+ "top": 0,
+ "left": 477
+ },
+ "visible": false
+ }
+ ],
+ "Imports": [],
+ "HtmlEditor": {
+ "pos": {
+ "top": 0,
+ "left": 663
+ },
+ "visible": false
+ }
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/Imports.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/Imports.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/Imports.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/Request.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/Request.json
new file mode 100644
index 0000000..e1f79e4
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/Request.json
@@ -0,0 +1,22 @@
+[
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "GlobalStats",
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "GlobalStat",
+ "params": [
+ {
+ "paramName": "Statistic",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/Setup.css b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/Setup.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/Setup.css
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/Setup.html b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/Setup.html
new file mode 100644
index 0000000..9cae1f6
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/Setup.html
@@ -0,0 +1 @@
+<div id="EPTF_CLL_ExecCtrl_GlobalStats"></div>
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/ViewInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/ViewInstances.json
new file mode 100644
index 0000000..f46442d
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/ViewInstances.json
@@ -0,0 +1,21 @@
+[
+ {
+ "class": "CView_ElementTable",
+ "customData": {
+ "class": "TableGray",
+ "autoHeight": true,
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "2px",
+ "border": "1px solid gray"
+ },
+ "displayName": false
+ },
+ "viewModelIndexes": [
+ 0,
+ 1
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_GlobalStats"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/ViewModelInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/ViewModelInstances.json
new file mode 100644
index 0000000..c07c70e
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_GlobalStats/ViewModelInstances.json
@@ -0,0 +1,37 @@
+[
+ {
+ "class": "CViewModel_DynamicTable",
+ "customData": {
+ "iteratorIsHeader": true,
+ "transposeTable": true,
+ "dataManipulator": [
+ {
+ "text": "Total #"
+ }
+ ]
+ },
+ "dataPathStrList": [
+ "GlobalStats",
+ "GlobalStats.GlobalStat"
+ ],
+ "dataPathList": [
+ [
+ 0
+ ],
+ [
+ 0,
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_FlexAligner",
+ "customData": {},
+ "dataPathStrList": [],
+ "dataPathList": [],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/Desktop.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/Desktop.json
new file mode 100644
index 0000000..25cb985
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/Desktop.json
@@ -0,0 +1,100 @@
+{
+ "ViewmodelEditors": [
+ {
+ "pos": {
+ "top": 126,
+ "left": 565
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 80,
+ "left": 554
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 28,
+ "left": 552
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 206,
+ "left": 536
+ },
+ "visible": false
+ }
+ ],
+ "ViewEditors": [
+ {
+ "pos": {
+ "top": 178,
+ "left": 877
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 93,
+ "left": 1059
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 130,
+ "left": 1003
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 211,
+ "left": 803
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 135,
+ "left": 1184
+ },
+ "visible": false
+ }
+ ],
+ "HtmlEditor": {
+ "pos": {
+ "top": 174,
+ "left": 1346
+ },
+ "visible": false
+ },
+ "RequestEditor": {},
+ "Imports": [
+ {
+ "pos": {
+ "top": 282,
+ "left": 906
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 261,
+ "left": 958
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 69,
+ "left": 1087
+ },
+ "visible": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/Imports.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/Imports.json
new file mode 100644
index 0000000..fe220d4
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/Imports.json
@@ -0,0 +1,14 @@
+[
+ {
+ "setupName": "EPTF_CLL_ExecCtrl_CommonControls",
+ "parentID": "EPTF_CLL_ExecCtrl_CommonControls"
+ },
+ {
+ "setupName": "EPTF_CLL_ExecCtrl_Status",
+ "parentID": "EPTF_CLL_ExecCtrl_PhaseLists_CView_Aligner_2"
+ },
+ {
+ "setupName": "EPTF_CLL_SetupTabs",
+ "parentID": "EPTF_CLL_ExecCtrl_PhaseLists_CView_Aligner_0"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/Request.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/Request.json
new file mode 100644
index 0000000..a754b3a
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/Request.json
@@ -0,0 +1,281 @@
+[
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "PhaseLists"
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "PhaseLists",
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "Phases",
+ "params": [
+ {
+ "paramName": "PhaseList",
+ "paramValue": "%Parent0%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "PhaseListEnablePhase",
+ "params": [
+ {
+ "paramName": "PhaseList",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Phase",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "sizeOf",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "ExecCtrl"
+ },
+ {
+ "paramName": "Element",
+ "paramValue": "ScenariosOfScenarioGroupsWithPhaseList"
+ },
+ {
+ "paramName": "ParamName",
+ "paramValue": "PhaseList"
+ },
+ {
+ "paramName": "ParamValue",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScenariosOfScenarioGroupsWithPhaseList",
+ "params": [
+ {
+ "paramName": "PhaseList",
+ "paramValue": "%Parent0%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScenarioGroupOfScenariosOfScenarioGroupsWithPhaseList",
+ "params": [
+ {
+ "paramName": "ScenarioOfScenarioGroup",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScGrpCurrentPhase",
+ "params": [
+ {
+ "paramName": "ScenarioGroup",
+ "paramValue": "%Parent2%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScGrpMode",
+ "params": [
+ {
+ "paramName": "ScenarioGroup",
+ "paramValue": "%Parent2%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScGrpStatus",
+ "params": [
+ {
+ "paramName": "ScenarioGroup",
+ "paramValue": "%Parent2%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScGrpStart",
+ "params": [
+ {
+ "paramName": "ScenarioGroup",
+ "paramValue": "%Parent2%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScGrpReset",
+ "params": [
+ {
+ "paramName": "ScenarioGroup",
+ "paramValue": "%Parent2%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScenarioOfScenariosOfScenarioGroupsWithPhaseList",
+ "params": [
+ {
+ "paramName": "ScenarioOfScenarioGroup",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "NofDeployedLGens",
+ "params": [
+ {
+ "paramName": "ScenarioInstance",
+ "paramValue": "%Parent3%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScGrpScStatus",
+ "params": [
+ {
+ "paramName": "ScenarioGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "ScenarioInstance",
+ "paramValue": "%Parent3%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "Phases",
+ "params": [
+ {
+ "paramName": "PhaseList",
+ "paramValue": "%Parent0%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScGrpScEnablePhase",
+ "params": [
+ {
+ "paramName": "ScenarioInstance",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Phase",
+ "paramValue": "%Parent4%"
+ }
+ ],
+ "filter": {
+ "request": {
+ "source": "DataSource",
+ "element": "dataElementPresent",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": {
+ "dataValue": "ExecCtrl"
+ }
+ },
+ {
+ "paramName": "Element",
+ "paramValue": {
+ "dataValue": "ScGrpScEnablePhase"
+ }
+ },
+ {
+ "paramName": "ParamName",
+ "paramValue": {
+ "dataValue": "ScenarioInstance"
+ }
+ },
+ {
+ "paramName": "ParamValue",
+ "paramValue": {
+ "dataValue": "%Parent3%"
+ }
+ },
+ {
+ "paramName": "ParamName",
+ "paramValue": {
+ "dataValue": "Phase"
+ }
+ },
+ {
+ "paramName": "ParamValue",
+ "paramValue": {
+ "dataValue": "%Parent4%"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "rangeFilter": {
+ "offset": 0,
+ "count": 20
+ }
+ }
+ }
+ ],
+ "selection": [
+ 0
+ ]
+ }
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/Setup.css b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/Setup.css
new file mode 100644
index 0000000..f91f2ce
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/Setup.css
@@ -0,0 +1,7 @@
+#EPTF_CLL_ExecCtrl_PhaseLists {
+ height: calc(100% - 40px);
+}
+
+#EPTF_CLL_ExecCtrl_CommonControls {
+ height: 40px;
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/Setup.html b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/Setup.html
new file mode 100644
index 0000000..4ad5cdd
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/Setup.html
@@ -0,0 +1,2 @@
+<div id="EPTF_CLL_ExecCtrl_PhaseLists"></div>
+<div id="EPTF_CLL_ExecCtrl_CommonControls"></div>
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/ViewInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/ViewInstances.json
new file mode 100644
index 0000000..4fe401f
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/ViewInstances.json
@@ -0,0 +1,135 @@
+[
+ {
+ "class": "CView_Table_Vertical",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "displayHeader": false,
+ "autoHeight": true,
+ "columns": [
+ {},
+ {
+ "subView": "CView_CheckboxOrSwitch"
+ }
+ ],
+ "processCss": {
+ "table td": {
+ "text-align": "center"
+ },
+ ".CheckBoxOrSwitch": {
+ "margin": "auto"
+ }
+ },
+ "class": "TableGray_Vertical"
+ },
+ "viewModelIndexes": [
+ 1
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_PhaseLists_CView_Aligner_1_CView_TabsWithData_0_CView_Aligner_0"
+ },
+ {
+ "class": "CView_TabsWithData",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ }
+ },
+ "viewModelIndexes": [
+ 2
+ ],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_PhaseLists_CView_Aligner_1_CView_TabsWithData_0"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_PhaseLists_CView_Aligner_1"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "orientation": "vertical"
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_PhaseLists_CView_Aligner_1_CView_TabsWithData_0_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_PhaseLists_CView_Aligner_1_CView_TabsWithData_0_CView_Aligner_1"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_PhaseLists_CView_Aligner_1_CView_TabsWithData_0"
+ },
+ {
+ "class": "CView_ElementTableForLargeData",
+ "customData": {
+ "class": "TableGray",
+ "displayName": false,
+ "autoHeight": true,
+ "columns": [
+ {},
+ {
+ "subView": "CView_Label"
+ },
+ {
+ "subView": "CView_Label"
+ },
+ {
+ "subView": "CView_StatusLED"
+ },
+ {
+ "subView": "CView_CheckboxOrSwitch"
+ },
+ {
+ "subView": "CView_CheckboxOrSwitch"
+ },
+ {},
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_StatusLED"
+ },
+ {
+ "subView": "CView_CheckboxOrSwitch"
+ }
+ ],
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "processCss": {
+ "INPUT": {
+ "width": "100%"
+ },
+ "DIV INPUT[type=checkbox]": {
+ "width": "auto"
+ }
+ }
+ },
+ "viewModelIndexes": [
+ 3,
+ 0
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_PhaseLists_CView_Aligner_1_CView_TabsWithData_0_CView_Aligner_1"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "orientation": "vertical",
+ "css": {
+ "overflow": "auto"
+ }
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_PhaseLists_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_PhaseLists_CView_Aligner_1",
+ "EPTF_CLL_ExecCtrl_PhaseLists_CView_Aligner_2"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_PhaseLists"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/ViewModelInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/ViewModelInstances.json
new file mode 100644
index 0000000..f5119a1
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_PhaseLists/ViewModelInstances.json
@@ -0,0 +1,154 @@
+[
+ {
+ "class": "CViewModel_FlexAligner",
+ "customData": {},
+ "dataPathStrList": [],
+ "dataPathList": [],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_DynamicTable",
+ "customData": {},
+ "dataPathStrList": [
+ "PhaseLists.Phases"
+ ],
+ "dataPathList": [
+ [
+ 1,
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "PhaseLists"
+ ],
+ "dataPathList": [
+ [
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [
+ "PhaseLists"
+ ],
+ "selectionToControlPathList": [
+ [
+ 1
+ ]
+ ]
+ },
+ {
+ "class": "CViewModel_TableForLargeData",
+ "customData": {
+ "header": [
+ "Group Name",
+ "Group Phase",
+ "Group Mode",
+ "Group Status",
+ "Start Current Phase",
+ "Group Reset",
+ "Scenario Name",
+ "LGens",
+ "Scenario Status"
+ ],
+ "iteratorColumnPosition": -1,
+ "allowScrollBelow": false,
+ "streamingThreshold": 20,
+ "separateBy": 0
+ },
+ "dataPathStrList": [
+ "PhaseLists.sizeOf",
+ "PhaseLists.ScenariosOfScenarioGroupsWithPhaseList",
+ "PhaseLists.ScenariosOfScenarioGroupsWithPhaseList.ScenarioGroupOfScenariosOfScenarioGroupsWithPhaseList",
+ "PhaseLists.ScenariosOfScenarioGroupsWithPhaseList.ScenarioGroupOfScenariosOfScenarioGroupsWithPhaseList.ScGrpCurrentPhase",
+ "PhaseLists.ScenariosOfScenarioGroupsWithPhaseList.ScenarioGroupOfScenariosOfScenarioGroupsWithPhaseList.ScGrpMode",
+ "PhaseLists.ScenariosOfScenarioGroupsWithPhaseList.ScenarioGroupOfScenariosOfScenarioGroupsWithPhaseList.ScGrpStatus",
+ "PhaseLists.ScenariosOfScenarioGroupsWithPhaseList.ScenarioGroupOfScenariosOfScenarioGroupsWithPhaseList.ScGrpStart",
+ "PhaseLists.ScenariosOfScenarioGroupsWithPhaseList.ScenarioGroupOfScenariosOfScenarioGroupsWithPhaseList.ScGrpReset",
+ "PhaseLists.ScenariosOfScenarioGroupsWithPhaseList.ScenarioGroupOfScenariosOfScenarioGroupsWithPhaseList.ScenarioOfScenariosOfScenarioGroupsWithPhaseList",
+ "PhaseLists.ScenariosOfScenarioGroupsWithPhaseList.ScenarioGroupOfScenariosOfScenarioGroupsWithPhaseList.ScenarioOfScenariosOfScenarioGroupsWithPhaseList.NofDeployedLGens",
+ "PhaseLists.ScenariosOfScenarioGroupsWithPhaseList.ScenarioGroupOfScenariosOfScenarioGroupsWithPhaseList.ScenarioOfScenariosOfScenarioGroupsWithPhaseList.ScGrpScStatus",
+ "PhaseLists.ScenariosOfScenarioGroupsWithPhaseList.ScenarioGroupOfScenariosOfScenarioGroupsWithPhaseList.ScenarioOfScenariosOfScenarioGroupsWithPhaseList.Phases.ScGrpScEnablePhase"
+ ],
+ "dataPathList": [
+ [
+ 1,
+ 1
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 1,
+ 2,
+ 0
+ ],
+ [
+ 1,
+ 2,
+ 0,
+ 0
+ ],
+ [
+ 1,
+ 2,
+ 0,
+ 1
+ ],
+ [
+ 1,
+ 2,
+ 0,
+ 2
+ ],
+ [
+ 1,
+ 2,
+ 0,
+ 3
+ ],
+ [
+ 1,
+ 2,
+ 0,
+ 4
+ ],
+ [
+ 1,
+ 2,
+ 0,
+ 5
+ ],
+ [
+ 1,
+ 2,
+ 0,
+ 5,
+ 0
+ ],
+ [
+ 1,
+ 2,
+ 0,
+ 5,
+ 1
+ ],
+ [
+ 1,
+ 2,
+ 0,
+ 5,
+ 2,
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/Desktop.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/Desktop.json
new file mode 100644
index 0000000..845e88a
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/Desktop.json
@@ -0,0 +1,79 @@
+{
+ "ViewmodelEditors": [
+ {
+ "pos": {
+ "top": 89,
+ "left": 510
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 17,
+ "left": 377
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 148,
+ "left": 414
+ },
+ "visible": false
+ }
+ ],
+ "ViewEditors": [
+ {
+ "pos": {
+ "top": 29,
+ "left": 804
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 147,
+ "left": 795
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 108,
+ "left": 1070
+ },
+ "visible": false
+ }
+ ],
+ "HtmlEditor": {
+ "pos": {
+ "top": 109,
+ "left": 1268
+ },
+ "visible": false
+ },
+ "RequestEditor": {},
+ "Imports": [
+ {
+ "pos": {
+ "top": 250,
+ "left": 760
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 227,
+ "left": 811
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 6,
+ "left": 897
+ },
+ "visible": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/Imports.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/Imports.json
new file mode 100644
index 0000000..4e2a0e9
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/Imports.json
@@ -0,0 +1,14 @@
+[
+ {
+ "setupName": "EPTF_CLL_ExecCtrl_CommonControls",
+ "parentID": "EPTF_CLL_ExecCtrl_CommonControls"
+ },
+ {
+ "setupName": "EPTF_CLL_ExecCtrl_Status",
+ "parentID": "EPTF_CLL_ExecCtrl_Regulator_CView_Aligner_3"
+ },
+ {
+ "setupName": "EPTF_CLL_SetupTabs",
+ "parentID": "EPTF_CLL_ExecCtrl_Regulator_CView_Aligner_0"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/Request.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/Request.json
new file mode 100644
index 0000000..186b574
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/Request.json
@@ -0,0 +1,134 @@
+[
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "sizeOf",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "ExecCtrl"
+ },
+ {
+ "paramName": "Element",
+ "paramValue": "RegulatedItems"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "RegulatedItems",
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "RegulatedItemType",
+ "params": [
+ {
+ "paramName": "RegulatedItemId",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "RegulatorName",
+ "params": [
+ {
+ "paramName": "RegulatedItemId",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "RegulatedItemWeight",
+ "params": [
+ {
+ "paramName": "RegulatedItemId",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "RegulatedItemEnabled",
+ "params": [
+ {
+ "paramName": "RegulatedItemId",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ }
+ ],
+ "rangeFilter": {
+ "offset": 0,
+ "count": 20
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "Regulators",
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "RegulatorTotalValue",
+ "params": [
+ {
+ "paramName": "RegulatorName",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "RegulatorTargetLoad",
+ "params": [
+ {
+ "paramName": "RegulatorName",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "RegulatorCurrentLoad",
+ "params": [
+ {
+ "paramName": "RegulatorName",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "RegulatorStatus",
+ "params": [
+ {
+ "paramName": "RegulatorName",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/Setup.css b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/Setup.css
new file mode 100644
index 0000000..52a7d15
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/Setup.css
@@ -0,0 +1,7 @@
+#EPTF_CLL_ExecCtrl_Regulator {
+ height: calc(100% - 40px);
+}
+
+#EPTF_CLL_ExecCtrl_CommonControls {
+ height: 40px;
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/Setup.html b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/Setup.html
new file mode 100644
index 0000000..7ca962a
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/Setup.html
@@ -0,0 +1,2 @@
+<div id="EPTF_CLL_ExecCtrl_Regulator"></div>
+<div id="EPTF_CLL_ExecCtrl_CommonControls"></div>
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/ViewInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/ViewInstances.json
new file mode 100644
index 0000000..7c2e7f6
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/ViewInstances.json
@@ -0,0 +1,110 @@
+[
+ {
+ "class": "CView_ElementTableForLargeData",
+ "customData": {
+ "class": "TableGray",
+ "autoHeight": true,
+ "columns": [
+ {
+ "flex": 4
+ },
+ {
+ "flex": 2
+ },
+ {
+ "subView": "CView_Label",
+ "flex": 2,
+ "processCss": {
+ "INPUT": {
+ "width": "100%"
+ }
+ }
+ },
+ {
+ "subView": "CView_Label",
+ "flex": 2,
+ "processCss": {
+ "INPUT": {
+ "width": "90%"
+ }
+ }
+ },
+ {
+ "subView": "CView_CheckboxOrSwitch",
+ "flex": 1
+ }
+ ],
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ }
+ },
+ "viewModelIndexes": [
+ 1,
+ 0
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Regulator_CView_Aligner_1"
+ },
+ {
+ "class": "CView_ElementTable",
+ "customData": {
+ "class": "TableGray",
+ "autoHeight": true,
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "columns": [
+ {},
+ {
+ "subView": "CView_Label",
+ "processCss": {
+ "INPUT": {
+ "width": "90%"
+ }
+ }
+ },
+ {
+ "subView": "CView_Label",
+ "processCss": {
+ "INPUT": {
+ "width": "90%"
+ }
+ }
+ },
+ {
+ "subView": ""
+ },
+ {
+ "subView": "CView_StatusLED"
+ }
+ ]
+ },
+ "viewModelIndexes": [
+ 2,
+ 0
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Regulator_CView_Aligner_2"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "orientation": "vertical",
+ "css": {
+ "overflow": "auto"
+ }
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Regulator_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_Regulator_CView_Aligner_1",
+ "EPTF_CLL_ExecCtrl_Regulator_CView_Aligner_2",
+ "EPTF_CLL_ExecCtrl_Regulator_CView_Aligner_3"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Regulator"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/ViewModelInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/ViewModelInstances.json
new file mode 100644
index 0000000..4a0fb0f
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Regulator/ViewModelInstances.json
@@ -0,0 +1,62 @@
+[
+ {
+ "class": "CViewModel_FlexAligner",
+ "customData": {},
+ "dataPathStrList": [],
+ "dataPathList": [],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_TableForLargeData",
+ "customData": {
+ "name": "List of regulated items",
+ "header": [
+ "Item Name",
+ "Item Type",
+ "Regulator Name",
+ "Weight",
+ "Enabled"
+ ],
+ "allowScrollBelow": false,
+ "streamingThreshold": 20
+ },
+ "dataPathStrList": [
+ "sizeOf",
+ "RegulatedItems"
+ ],
+ "dataPathList": [
+ [
+ 0
+ ],
+ [
+ 1
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_DynamicTable",
+ "customData": {
+ "header": [
+ "Regulator Name",
+ "Regulated Value",
+ "Target Load",
+ "Current Load",
+ "Status"
+ ],
+ "name": "List of regulators"
+ },
+ "dataPathStrList": [
+ "Regulators"
+ ],
+ "dataPathList": [
+ [
+ 2
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/Desktop.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/Desktop.json
new file mode 100644
index 0000000..2287c05
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/Desktop.json
@@ -0,0 +1,660 @@
+{
+ "ViewmodelEditors": [
+ {
+ "pos": {
+ "top": 136,
+ "left": 283
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 317,
+ "left": 250
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 343,
+ "left": 249
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 482,
+ "left": 250
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 700,
+ "left": 245
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 724,
+ "left": 246
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 748,
+ "left": 247
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 506,
+ "left": 251
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 531,
+ "left": 244
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 555,
+ "left": 241
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 577,
+ "left": 241
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 602,
+ "left": 241
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 628,
+ "left": 243
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 653,
+ "left": 246
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 403,
+ "left": 246
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 676,
+ "left": 247
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 433,
+ "left": 249
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1853,
+ "left": 316
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1733,
+ "left": 326
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 819,
+ "left": 340
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 844,
+ "left": 341
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 893,
+ "left": 309
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 916,
+ "left": 311
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 941,
+ "left": 264
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 963.9999694824219,
+ "left": 258
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 988,
+ "left": 252
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 870,
+ "left": 332
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1174,
+ "left": 290
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1638,
+ "left": 322
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1396,
+ "left": 263
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1517,
+ "left": 317
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 56,
+ "left": 284
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 191,
+ "left": 689
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 233,
+ "left": 287
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 772,
+ "left": 249
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 796,
+ "left": 588
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1023,
+ "left": 452
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 458,
+ "left": 247
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1684,
+ "left": 336
+ },
+ "visible": false
+ }
+ ],
+ "ViewEditors": [
+ {
+ "pos": {
+ "top": 133,
+ "left": 548
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 380,
+ "left": 1208
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 368,
+ "left": 612
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 318,
+ "left": 476
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 482,
+ "left": 482
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 346,
+ "left": 474
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 676,
+ "left": 654
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 701,
+ "left": 470
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 724,
+ "left": 466
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 524,
+ "left": 1066
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 749,
+ "left": 463
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 446,
+ "left": 681
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 505,
+ "left": 461
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 530,
+ "left": 463
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 555,
+ "left": 463
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 578,
+ "left": 461
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 602,
+ "left": 461
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 627,
+ "left": 463
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 652,
+ "left": 463
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 404,
+ "left": 466
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 777,
+ "left": 1003
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1853,
+ "left": 565
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 848,
+ "left": 836
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1731,
+ "left": 548
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 820,
+ "left": 564
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 842,
+ "left": 567
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 874,
+ "left": 667
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 893,
+ "left": 544
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 917,
+ "left": 546
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 939,
+ "left": 542
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 963,
+ "left": 540
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 988,
+ "left": 540
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1017,
+ "left": 764
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1044,
+ "left": 678
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1108,
+ "left": 520
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1081,
+ "left": 517
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1637,
+ "left": 552
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1394,
+ "left": 493
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1517.9999694824219,
+ "left": 543
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 53,
+ "left": 633
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 321,
+ "left": 1283
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 233,
+ "left": 612
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 436,
+ "left": 1134
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 772,
+ "left": 595
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 812,
+ "left": 909
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 264,
+ "left": 1359
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 426,
+ "left": 753
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 457,
+ "left": 481
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 1682,
+ "left": 593
+ },
+ "visible": false
+ }
+ ],
+ "HtmlEditor": {
+ "pos": {
+ "top": 341,
+ "left": 1519
+ },
+ "visible": false
+ },
+ "RequestEditor": {},
+ "Imports": [
+ {
+ "pos": {
+ "top": 582,
+ "left": 1134
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 555,
+ "left": 1185
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 59,
+ "left": 1117
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 37,
+ "left": 1165
+ },
+ "visible": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/Imports.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/Imports.json
new file mode 100644
index 0000000..d5b2896
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/Imports.json
@@ -0,0 +1,18 @@
+[
+ {
+ "setupName": "EPTF_CLL_ExecCtrl_CommonControls",
+ "parentID": "EPTF_CLL_ExecCtrl_CommonControls"
+ },
+ {
+ "setupName": "EPTF_CLL_ExecCtrl_Status",
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_3"
+ },
+ {
+ "setupName": "EPTF_CLL_ExecCtrl_GlobalStats",
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_1"
+ },
+ {
+ "setupName": "EPTF_CLL_SetupTabs",
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_0"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/Request.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/Request.json
new file mode 100644
index 0000000..4ca6577
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/Request.json
@@ -0,0 +1,1645 @@
+[
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "sizeOf",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "ExecCtrl"
+ },
+ {
+ "paramName": "Element",
+ "paramValue": "EntityGroups"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EntityGroups",
+ "children": [],
+ "rangeFilter": {
+ "offset": 0,
+ "count": 20
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EntityGroups",
+ "selection": [
+ 0
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EGrpType",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EGrpSize",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EGrpOffset",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "NofDeployedLGens",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EGrpLGenPool",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "sizeOf",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "ExecCtrl"
+ },
+ {
+ "paramName": "Element",
+ "paramValue": "Scenarios"
+ },
+ {
+ "paramName": "ParamName",
+ "paramValue": "EntityGroup"
+ },
+ {
+ "paramName": "ParamValue",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "Scenarios",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ }
+ ],
+ "rangeFilter": {
+ "offset": 0,
+ "count": 18
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "Scenarios",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ }
+ ],
+ "selection": [
+ 0
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScInstanceName",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScStatus",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScStartButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "writableInfo": true
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScStopButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "writableInfo": true
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScReset",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "writableInfo": true
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "IsInScGroup",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScScGrpName",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScPhaseListName",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "Phases",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScGrpCurrentPhase",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScGrpMode",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScGrpStatus",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScGrpStart",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScGrpTerminate",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "writableInfo": true
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScGrpReset",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScGrpScStatus",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ }
+ ],
+ "filter": {
+ "dataValue": "%Parent2%"
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "IsWeightedSc",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "CurrentCPS",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "filter": {
+ "dataValue": "%Parent2%"
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScTargetCPS",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "filter": {
+ "dataValue": "%Parent2%"
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScRegulatorName",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "filter": {
+ "dataValue": "%Parent2%"
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "sizeOf",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "ExecCtrl"
+ },
+ {
+ "paramName": "Element",
+ "paramValue": "TrafficCases"
+ },
+ {
+ "paramName": "ParamName",
+ "paramValue": "EntityGroup"
+ },
+ {
+ "paramName": "ParamValue",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "ParamName",
+ "paramValue": "Scenario"
+ },
+ {
+ "paramName": "ParamValue",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TrafficCases",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "rangeFilter": {
+ "offset": 0,
+ "count": 12
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TrafficCases",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "selection": [
+ 0
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStat",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "CurrentCPS"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcTargetCPSOrWeight",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcRegulator",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "filter": {
+ "request": {
+ "source": "DataSource",
+ "element": "not",
+ "params": [
+ {
+ "paramName": "Par1",
+ "paramValue": {
+ "dataValue": "%Parent2%"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcGroupFinishStatus",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStatus",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStartButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "writableInfo": true
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStopButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "writableInfo": true
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStat",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "Starts"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStat",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "Success"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStat",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "Fail"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStat",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "Timeout"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStat",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "Error"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStat",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "FinTraffic"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStat",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "RangeLoops"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcExecTime",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStat",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "Running"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStat",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "Available"
+ }
+ ],
+ "children": []
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStat",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "MaxBusy"
+ }
+ ],
+ "children": []
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStat",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "MaxRunning"
+ }
+ ],
+ "children": []
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStat",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "MinAvailable"
+ }
+ ],
+ "children": []
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStat",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "NotFinished"
+ }
+ ],
+ "children": []
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcGoS",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStatDelta",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "Starts"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStatDelta",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "Success"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStatDelta",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "Fail"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStatDelta",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "Timeout"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStatDelta",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "Error"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcGrpFinishStatus",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Condition",
+ "paramValue": "Starts"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcGrpFinishStatus",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Condition",
+ "paramValue": "Success"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcGrpFinishStatus",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Condition",
+ "paramValue": "Fail"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcGrpFinishStatus",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Condition",
+ "paramValue": "Timeout"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcGrpFinishStatus",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Condition",
+ "paramValue": "Error"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcGrpFinishStatus",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Condition",
+ "paramValue": "FinTraffic"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcGrpFinishStatus",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Condition",
+ "paramValue": "RangeLoops"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcGrpFinishStatus",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Condition",
+ "paramValue": "ExecTime"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "FsmStats",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "FSMStat",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "%Parent4%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStat",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "Statistic",
+ "paramValue": "CurrentCPS"
+ }
+ ],
+ "timeline": {
+ "maxpoints": 2047
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcTargetCPSOrWeight",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "timeline": {
+ "maxpoints": 2047
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcSingleShotEntityIdx",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcSingleShotEnableLog",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcSingleShotStart",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent3%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "Regulators"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TrafficCases",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStatus",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent2%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStartButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent2%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStopButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent2%"
+ }
+ ]
+ }
+ }
+ ],
+ "rangeFilter": {
+ "offset": 0,
+ "count": 10
+ }
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/Setup.css b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/Setup.css
new file mode 100644
index 0000000..cac40b5
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/Setup.css
@@ -0,0 +1,7 @@
+#EPTF_CLL_ExecCtrl_Statistics {
+ height: calc(100% - 40px);
+}
+
+#EPTF_CLL_ExecCtrl_CommonControls {
+ height: 40px;
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/Setup.html b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/Setup.html
new file mode 100644
index 0000000..f8b0b29
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/Setup.html
@@ -0,0 +1,2 @@
+<div id="EPTF_CLL_ExecCtrl_Statistics"></div>
+<div id="EPTF_CLL_ExecCtrl_CommonControls"></div>
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/ViewInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/ViewInstances.json
new file mode 100644
index 0000000..dcddee8
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/ViewInstances.json
@@ -0,0 +1,1184 @@
+[
+ {
+ "class": "CView_ElementAligner",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "2px",
+ "border": "1px solid gray"
+ },
+ "subviews": [
+ {
+ "subView": "CView_Label",
+ "disabled": true,
+ "isElementLabelPresent": true,
+ "elementText": "Entity type"
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true,
+ "isElementLabelPresent": true,
+ "elementText": "Group size"
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true,
+ "isElementLabelPresent": true,
+ "elementText": "First entity offset"
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true,
+ "isElementLabelPresent": true,
+ "elementText": "Number of LGens"
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true,
+ "isElementLabelPresent": true,
+ "elementText": "LGenPool"
+ }
+ ],
+ "flexCalculation": true
+ },
+ "viewModelIndexes": [
+ 0
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_0"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "2px",
+ "border": "1px solid gray"
+ },
+ "orientation": "vertical",
+ "flex": 8
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "flexCalculation": true
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_0_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_0_CView_Aligner_1",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_0_CView_Aligner_2"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_0"
+ },
+ {
+ "class": "CView_Label",
+ "customData": {
+ "disabled": true,
+ "isElementLabelPresent": true,
+ "elementText": "Scenario instance name"
+ },
+ "viewModelIndexes": [
+ 1
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_0_CView_Aligner_0"
+ },
+ {
+ "class": "CView_Label",
+ "customData": {
+ "disabled": true,
+ "elementText": "PhaseList",
+ "isElementLabelPresent": true
+ },
+ "viewModelIndexes": [
+ 16,
+ 3
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_0_CView_Aligner_1"
+ },
+ {
+ "class": "CView_StatusLED",
+ "customData": {
+ "isLabelPresent": true,
+ "isElementLabelPresent": true,
+ "elementText": "Sc Status"
+ },
+ "viewModelIndexes": [
+ 2
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_0_CView_Aligner_2"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "2px",
+ "border": "1px solid gray"
+ },
+ "flexCalculation": true
+ },
+ "viewModelIndexes": [
+ 15
+ ],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1"
+ },
+ {
+ "class": "CView_Label",
+ "customData": {
+ "disabled": true,
+ "isElementLabelPresent": true
+ },
+ "viewModelIndexes": [
+ 4
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0"
+ },
+ {
+ "class": "CView_Label",
+ "customData": {
+ "isElementLabelPresent": true,
+ "elementText": "Target CPS"
+ },
+ "viewModelIndexes": [
+ 5
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "orientation": "vertical",
+ "flex": 7
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1"
+ },
+ {
+ "class": "CView_ComboBox",
+ "customData": {
+ "isElementLabelPresent": true,
+ "defaultValue": ""
+ },
+ "viewModelIndexes": [
+ 6
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "2px",
+ "border": "1px solid gray"
+ },
+ "flexCalculation": true
+ },
+ "viewModelIndexes": [
+ 16
+ ],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_1",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_2",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_3",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_4",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_5",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_6",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_7"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2"
+ },
+ {
+ "class": "CView_ComboBox",
+ "customData": {
+ "isElementLabelPresent": true
+ },
+ "viewModelIndexes": [
+ 7
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_1"
+ },
+ {
+ "class": "CView_ComboBox",
+ "customData": {
+ "isElementLabelPresent": true,
+ "possibleValues": [
+ "AUTOMATIC",
+ "MANUAL"
+ ]
+ },
+ "viewModelIndexes": [
+ 8
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_2"
+ },
+ {
+ "class": "CView_StatusLED",
+ "customData": {
+ "isElementLabelPresent": true
+ },
+ "viewModelIndexes": [
+ 9
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_3"
+ },
+ {
+ "class": "CView_CheckboxOrSwitch",
+ "customData": {
+ "isLabelPresent": true,
+ "isElementLabelPresent": true,
+ "isSwitch": true
+ },
+ "viewModelIndexes": [
+ 10
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_4"
+ },
+ {
+ "class": "CView_CheckboxOrSwitch",
+ "customData": {
+ "isLabelPresent": true,
+ "isSwitch": false,
+ "isElementLabelPresent": true
+ },
+ "viewModelIndexes": [
+ 11
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_5"
+ },
+ {
+ "class": "CView_CheckboxOrSwitch",
+ "customData": {
+ "isLabelPresent": true,
+ "isElementLabelPresent": true
+ },
+ "viewModelIndexes": [
+ 12
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_6"
+ },
+ {
+ "class": "CView_StatusLED",
+ "customData": {
+ "isElementLabelPresent": true
+ },
+ "viewModelIndexes": [
+ 13
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_7"
+ },
+ {
+ "class": "CView_ElementAligner",
+ "customData": {
+ "processCss": {
+ ".Aligner_Horizontal_Content": {
+ "padding-right": "5px"
+ },
+ ".BasicButton > BUTTON": {
+ "width": "100%"
+ },
+ ".BasicButton": {
+ "width": "100%"
+ }
+ },
+ "subviews": [
+ {
+ "subView": "CView_BasicButton",
+ "text": "Start Scenario",
+ "img": "WebApplicationFramework/Res/starttest.png",
+ "imagePosition": "right"
+ },
+ {
+ "subView": "CView_BasicButton",
+ "text": "Stop Scenario",
+ "img": "WebApplicationFramework/Res/stoptest.png",
+ "imagePosition": "right"
+ },
+ {
+ "subView": "CView_BasicButton",
+ "text": "Reset Scenario",
+ "img": "WebApplicationFramework/Res/resettest.png",
+ "imagePosition": "right"
+ }
+ ],
+ "flexCalculation": true
+ },
+ "viewModelIndexes": [
+ 14
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_1"
+ },
+ {
+ "class": "CView_Tabs",
+ "customData": {
+ "namesCreating": [
+ "Traffic Case data",
+ "Traffic case states in Scenario"
+ ],
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "2px",
+ "border": "1px solid gray"
+ }
+ },
+ "viewModelIndexes": [
+ 35
+ ],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_1"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3"
+ },
+ {
+ "class": "CView_ElementTableForLargeData",
+ "customData": {
+ "class": "TableGray",
+ "displayName": true,
+ "displayHeader": true,
+ "name": "Traffic case states in scenario",
+ "columns": [
+ {},
+ {
+ "subView": "CView_StatusLED"
+ },
+ {
+ "subView": "CView_BasicButton"
+ },
+ {
+ "subView": "CView_BasicButton"
+ }
+ ],
+ "autoHeight": true
+ },
+ "viewModelIndexes": [
+ 17
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_1"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "orientation": "vertical",
+ "flex": 6
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_1",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_2"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1"
+ },
+ {
+ "class": "CView_ElementAligner",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "2px",
+ "border": "1px solid gray"
+ },
+ "processCss": {
+ ".Aligner_Horizontal_Content": {
+ "padding-right": "20px"
+ }
+ },
+ "subviews": [
+ {
+ "subView": "CView_Label",
+ "isElementLabelPresent": true,
+ "elementText": "Entity Index"
+ },
+ {
+ "subView": "CView_CheckboxOrSwitch",
+ "isElementLabelPresent": true,
+ "elementText": "Enable Log"
+ },
+ {
+ "subView": "CView_BasicButton",
+ "isElementLabelPresent": true,
+ "elementText": "Single shot",
+ "text": "Single shot",
+ "img": "WebApplicationFramework/Res/starttest.png",
+ "imagePosition": "right"
+ }
+ ]
+ },
+ "viewModelIndexes": [
+ 18
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_1"
+ },
+ {
+ "class": "CView_Label",
+ "customData": {
+ "disabled": true,
+ "isElementLabelPresent": true,
+ "elementText": "Current CPS"
+ },
+ "viewModelIndexes": [
+ 19
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_0_CView_Aligner_0"
+ },
+ {
+ "class": "CView_Label",
+ "customData": {
+ "isElementLabelPresent": true,
+ "elementText": "Target CPS or Weight"
+ },
+ "viewModelIndexes": [
+ 20
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_0_CView_Aligner_1"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "2px",
+ "border": "1px solid gray"
+ },
+ "flexCalculation": true
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_0_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_0_CView_Aligner_1",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_0_CView_Aligner_2",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_0_CView_Aligner_3",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_0_CView_Aligner_4",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_0_CView_Aligner_5",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_0_CView_Aligner_6"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_0"
+ },
+ {
+ "class": "CView_ComboBox",
+ "customData": {
+ "isElementLabelPresent": true,
+ "elementText": "Regulated By",
+ "defaultValue": ""
+ },
+ "viewModelIndexes": [
+ 26,
+ 21
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_0_CView_Aligner_2"
+ },
+ {
+ "class": "CView_StatusLED",
+ "customData": {
+ "elementText": "GroupFinish Status",
+ "isElementLabelPresent": true
+ },
+ "viewModelIndexes": [
+ 22
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_0_CView_Aligner_3"
+ },
+ {
+ "class": "CView_StatusLED",
+ "customData": {
+ "isElementLabelPresent": true,
+ "elementText": "Status"
+ },
+ "viewModelIndexes": [
+ 23
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_0_CView_Aligner_4"
+ },
+ {
+ "class": "CView_BasicButton",
+ "customData": {
+ "text": "Start",
+ "isElementLabelPresent": true,
+ "elementText": "Start"
+ },
+ "viewModelIndexes": [
+ 24
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_0_CView_Aligner_5"
+ },
+ {
+ "class": "CView_BasicButton",
+ "customData": {
+ "text": "Stop",
+ "isElementLabelPresent": true,
+ "elementText": "Stop"
+ },
+ "viewModelIndexes": [
+ 25
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_0_CView_Aligner_6"
+ },
+ {
+ "class": "CView_Tabs",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "2px",
+ "border": "1px solid gray"
+ },
+ "namesCreating": [
+ "Entity stats",
+ "FSM stats",
+ "CPS chart"
+ ]
+ },
+ "viewModelIndexes": [
+ 36
+ ],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_2_CView_Tabs_0",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_2_CView_Tabs_1",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_2_CView_Tabs_2"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_2"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "orientation": "vertical"
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_2_CView_Tabs_0_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_2_CView_Tabs_0_CView_Aligner_1",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_2_CView_Tabs_0_CView_Aligner_2",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_2_CView_Tabs_0_CView_Aligner_3"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_2_CView_Tabs_0"
+ },
+ {
+ "class": "CView_ElementAligner",
+ "customData": {
+ "subviews": [
+ {
+ "subView": "CView_Div",
+ "text": "Statistic",
+ "class": "HeaderLabel",
+ "css": {
+ "padding-top": "10px"
+ }
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ }
+ ],
+ "flexCalculation": true,
+ "css": {
+ "height": "35px"
+ },
+ "processCss": {
+ ".Aligner_Horizontal_Content > DIV": {
+ "padding-top": "5px"
+ }
+ }
+ },
+ "viewModelIndexes": [
+ 27
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_2_CView_Tabs_0_CView_Aligner_1"
+ },
+ {
+ "class": "CView_ElementAligner",
+ "customData": {
+ "subviews": [
+ {
+ "subView": "CView_Div",
+ "text": "Statistic<br/>name",
+ "class": "HeaderLabel"
+ },
+ {
+ "subView": "CView_Div",
+ "text": "Starts<br/> ",
+ "class": "HeaderLabel"
+ },
+ {
+ "subView": "CView_Div",
+ "text": "Success<br/> ",
+ "class": "HeaderLabel"
+ },
+ {
+ "subView": "CView_Div",
+ "text": "Fail<br/> ",
+ "class": "HeaderLabel"
+ },
+ {
+ "subView": "CView_Div",
+ "text": "Timeout<br/> ",
+ "class": "HeaderLabel"
+ },
+ {
+ "subView": "CView_Div",
+ "text": "Error<br/> ",
+ "class": "HeaderLabel"
+ },
+ {
+ "subView": "CView_Div",
+ "text": "Fin<br/>Traffic",
+ "class": "HeaderLabel"
+ },
+ {
+ "subView": "CView_Div",
+ "text": "Rangeloops<br/> ",
+ "class": "HeaderLabel"
+ },
+ {
+ "subView": "CView_Div",
+ "text": "Exec<br/>Time",
+ "class": "HeaderLabel"
+ },
+ {
+ "subView": "CView_Div",
+ "text": "Running<br/> ",
+ "class": "HeaderLabel"
+ },
+ {
+ "subView": "CView_Div",
+ "text": "Available<br/> ",
+ "class": "HeaderLabel"
+ },
+ {
+ "subView": "CView_Div",
+ "text": "Max<br/>Busy",
+ "class": "HeaderLabel"
+ },
+ {
+ "subView": "CView_Div",
+ "text": "Max<br/>Running",
+ "class": "HeaderLabel"
+ },
+ {
+ "subView": "CView_Div",
+ "text": "Min<br/>Available",
+ "class": "HeaderLabel"
+ },
+ {
+ "subView": "CView_Div",
+ "text": "Not<br/>Finished",
+ "class": "HeaderLabel"
+ },
+ {
+ "subView": "CView_Div",
+ "text": "GoS<br/> ",
+ "class": "HeaderLabel"
+ }
+ ],
+ "flexCalculation": true,
+ "css": {
+ "font-weight": "bold"
+ }
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_2_CView_Tabs_0_CView_Aligner_0"
+ },
+ {
+ "class": "CView_Table_Vertical",
+ "customData": {
+ "class": "TableGray_Vertical",
+ "displayName": false,
+ "filter": false,
+ "sort": false,
+ "autoHeight": true
+ },
+ "viewModelIndexes": [
+ 28
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_2_CView_Tabs_1"
+ },
+ {
+ "class": "CView_ElementAligner",
+ "customData": {
+ "subviews": [
+ {
+ "subView": "CView_Div",
+ "text": "Delta",
+ "class": "HeaderLabel",
+ "css": {
+ "padding-top": "10px"
+ }
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "text": "",
+ "class": "StripedLabel",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "text": "",
+ "class": "StripedLabel",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "text": "",
+ "class": "StripedLabel",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "text": "",
+ "class": "StripedLabel",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "text": "",
+ "class": "StripedLabel",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "text": "",
+ "class": "StripedLabel",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "text": "",
+ "class": "StripedLabel",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "text": "",
+ "class": "StripedLabel",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "text": "",
+ "class": "StripedLabel",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "text": "",
+ "class": "StripedLabel",
+ "disabled": true
+ }
+ ],
+ "flexCalculation": true,
+ "css": {
+ "height": "35px"
+ },
+ "processCss": {
+ ".Aligner_Horizontal_Content > DIV": {
+ "padding-top": "5px"
+ }
+ }
+ },
+ "viewModelIndexes": [
+ 29
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_2_CView_Tabs_0_CView_Aligner_2"
+ },
+ {
+ "class": "CView_ElementAligner",
+ "customData": {
+ "subviews": [
+ {
+ "subView": "CView_Div",
+ "text": "Group Finish<br/>Condition",
+ "class": "HeaderLabel",
+ "css": {
+ "padding-top": "0px"
+ }
+ },
+ {
+ "subView": "CView_StatusLED"
+ },
+ {
+ "subView": "CView_StatusLED"
+ },
+ {
+ "subView": "CView_StatusLED"
+ },
+ {
+ "subView": "CView_StatusLED"
+ },
+ {
+ "subView": "CView_StatusLED"
+ },
+ {
+ "subView": "CView_StatusLED"
+ },
+ {
+ "subView": "CView_StatusLED"
+ },
+ {
+ "subView": "CView_StatusLED"
+ },
+ {
+ "subView": "CView_Label",
+ "text": "",
+ "class": "StripedLabel",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "text": "",
+ "class": "StripedLabel",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "text": "",
+ "class": "StripedLabel",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "text": "",
+ "class": "StripedLabel",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "text": "",
+ "class": "StripedLabel",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "text": "",
+ "class": "StripedLabel",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "text": "",
+ "class": "StripedLabel",
+ "disabled": true
+ }
+ ],
+ "flexCalculation": true,
+ "css": {
+ "height": "35px"
+ },
+ "processCss": {
+ ".Aligner_Horizontal_Content > DIV": {
+ "padding-top": "5px"
+ }
+ }
+ },
+ "viewModelIndexes": [
+ 30
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_2_CView_Tabs_0_CView_Aligner_3"
+ },
+ {
+ "class": "CView_ElementTableForLargeData",
+ "customData": {
+ "class": "TableGray",
+ "displayName": true,
+ "displayHeader": false,
+ "flex": 1,
+ "css": {
+ "padding-right": "2px"
+ },
+ "processCss": {
+ ".TableGray table tr": {
+ "height": "26px"
+ }
+ },
+ "autoHeight": true
+ },
+ "viewModelIndexes": [
+ 31
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_0"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "flexCalculation": true,
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "2px",
+ "border": "1px solid gray"
+ },
+ "resizable": true
+ },
+ "viewModelIndexes": [
+ 32
+ ],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2"
+ },
+ {
+ "class": "CView_ElementTableForLargeData",
+ "customData": {
+ "class": "TableGray",
+ "displayName": true,
+ "displayHeader": false,
+ "flex": 1,
+ "css": {
+ "padding-right": "2px"
+ },
+ "processCss": {
+ ".TableGray table tr": {
+ "height": "26px"
+ }
+ },
+ "autoHeight": true
+ },
+ "viewModelIndexes": [
+ 33
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "flexCalculation": true,
+ "resizable": true
+ },
+ "viewModelIndexes": [
+ 32
+ ],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1"
+ },
+ {
+ "class": "CView_ElementTableForLargeData",
+ "customData": {
+ "class": "TableGray",
+ "displayName": true,
+ "displayHeader": false,
+ "flex": 1,
+ "css": {
+ "padding-right": "2px"
+ },
+ "processCss": {
+ ".TableGray table tr": {
+ "height": "26px"
+ }
+ },
+ "autoHeight": true
+ },
+ "viewModelIndexes": [
+ 34
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_0"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "flexCalculation": true,
+ "resizable": true
+ },
+ "viewModelIndexes": [
+ 32
+ ],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "orientation": "vertical",
+ "css": {
+ "overflow": "auto"
+ }
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_1",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_3"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "2px",
+ "border": "1px solid gray"
+ },
+ "flexCalculation": true,
+ "processCss": {
+ " > DIV > DIV": {
+ "vertical-align": "middle"
+ }
+ }
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_1"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0"
+ },
+ {
+ "class": "CView_Label",
+ "customData": {
+ "isElementLabelPresent": true,
+ "elementText": "Scenario is in scenario group",
+ "disabled": true
+ },
+ "viewModelIndexes": [
+ 37
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_0"
+ },
+ {
+ "class": "CView_Chart",
+ "customData": {
+ "width": "100%",
+ "height": "350px",
+ "type": "timeseries",
+ "title": "CPS Chart"
+ },
+ "viewModelIndexes": [
+ 38
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Statistics_CView_Aligner_2_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3_CView_Tabs_0_CView_Aligner_1_CView_Aligner_2_CView_Tabs_2"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/ViewModelInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/ViewModelInstances.json
new file mode 100644
index 0000000..e0ed444
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Statistics/ViewModelInstances.json
@@ -0,0 +1,1119 @@
+[
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.EGrpType",
+ "EntityGroups.EGrpSize",
+ "EntityGroups.EGrpOffset",
+ "EntityGroups.NofDeployedLGens",
+ "EntityGroups.EGrpLGenPool"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 0
+ ],
+ [
+ 2,
+ 1
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 2,
+ 3
+ ],
+ [
+ 2,
+ 4
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.ScInstanceName"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.ScStatus"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 1
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsInScGroup.ScPhaseListName"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 5,
+ 1
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.CurrentCPS"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.ScTargetCPS"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 1
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.ScRegulatorName",
+ "EntityGroups.Scenarios.IsWeightedSc.Regulators"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 2
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 6
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsInScGroup.ScGrpCurrentPhase",
+ "EntityGroups.Scenarios.IsInScGroup.Phases"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 5,
+ 3
+ ],
+ [
+ 2,
+ 7,
+ 5,
+ 2
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsInScGroup.ScGrpMode"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 5,
+ 4
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsInScGroup.ScGrpStatus"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 5,
+ 5
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsInScGroup.ScGrpStart"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 5,
+ 6
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsInScGroup.ScGrpTerminate"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 5,
+ 7
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsInScGroup.ScGrpReset"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 5,
+ 8
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsInScGroup.ScGrpScStatus"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 5,
+ 9
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.ScStartButton",
+ "EntityGroups.Scenarios.ScStopButton",
+ "EntityGroups.Scenarios.ScReset"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 2
+ ],
+ [
+ 2,
+ 7,
+ 3
+ ],
+ [
+ 2,
+ 7,
+ 4
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_Condition",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_Condition",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsInScGroup"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 5
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_TableForLargeData",
+ "customData": {
+ "header": [
+ "Traffic Case",
+ "Status",
+ "Start",
+ "Stop"
+ ],
+ "streamingThreshold": 10,
+ "rangeFilterCount": 10
+ },
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.sizeOf",
+ "EntityGroups.Scenarios.TrafficCases"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 3
+ ],
+ [
+ 2,
+ 7,
+ 7
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcSingleShotEntityIdx",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcSingleShotEnableLog",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcSingleShotStart"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 11
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 12
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 13
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcTargetCPSOrWeight"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 1
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcRegulator",
+ "EntityGroups.Scenarios.IsWeightedSc.Regulators"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 2
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 6
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcGroupFinishStatus"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 3
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStatus"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 4
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStartButton"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 5
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStopButton"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 6
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_Condition",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcRegulator"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 2
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStat",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStat",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStat",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStat",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStat",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStat",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcExecTime",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStat",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStat",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStat",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStat",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStat",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStat",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcGoS"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 0
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 1
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 2
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 3
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 4
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 5
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 6
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 7
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 8
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 9
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 10
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 11
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 12
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 13
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_DynamicTable",
+ "customData": {
+ "iteratorIsHeader": true,
+ "transposeTable": true
+ },
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.FsmStats"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 8
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStatDelta",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStatDelta",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStatDelta",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStatDelta",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStatDelta",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcStatDelta"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 14
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 14
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 15
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 16
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 17
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 18
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcGrpFinishStatus",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcGrpFinishStatus",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcGrpFinishStatus",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcGrpFinishStatus",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcGrpFinishStatus",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcGrpFinishStatus",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcGrpFinishStatus",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcGrpFinishStatus",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat.TcGrpFinishStatus"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 19
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 19
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 20
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 21
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 22
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 23
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 24
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 25
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7,
+ 26
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_TableForLargeData",
+ "customData": {
+ "allowScrollBelow": false,
+ "streamingThreshold": 20,
+ "rangeFilterCount": 20,
+ "name": "Select entitygroup"
+ },
+ "dataPathStrList": [
+ "sizeOf",
+ "EntityGroups"
+ ],
+ "dataPathList": [
+ [
+ 0
+ ],
+ [
+ 1
+ ]
+ ],
+ "selectionToControlPathStrList": [
+ "EntityGroups"
+ ],
+ "selectionToControlPathList": [
+ [
+ 2
+ ]
+ ]
+ },
+ {
+ "class": "CViewModel_FlexAligner",
+ "customData": {},
+ "dataPathStrList": [],
+ "dataPathList": [],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_TableForLargeData",
+ "customData": {
+ "name": "Select scenario",
+ "allowScrollBelow": false,
+ "streamingThreshold": 18,
+ "rangeFilterCount": 18
+ },
+ "dataPathStrList": [
+ "EntityGroups.sizeOf",
+ "EntityGroups.Scenarios"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 5
+ ],
+ [
+ 2,
+ 6
+ ]
+ ],
+ "selectionToControlPathStrList": [
+ "EntityGroups.Scenarios"
+ ],
+ "selectionToControlPathList": [
+ [
+ 2,
+ 7
+ ]
+ ]
+ },
+ {
+ "class": "CViewModel_TableForLargeData",
+ "customData": {
+ "name": "Select traffic case",
+ "streamingThreshold": 12,
+ "rangeFilterCount": 12,
+ "allowScrollBelow": false
+ },
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.sizeOf",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 3
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 4
+ ]
+ ],
+ "selectionToControlPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases"
+ ],
+ "selectionToControlPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 5
+ ]
+ ]
+ },
+ {
+ "class": "CViewModel_RequestToggle",
+ "customData": {
+ "toggleGroups": [
+ 0,
+ 2
+ ]
+ },
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases",
+ "EntityGroups.Scenarios.TrafficCases"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 4
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5
+ ],
+ [
+ 2,
+ 7,
+ 7
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_RequestToggle",
+ "customData": {
+ "toggleGroups": [
+ 0,
+ 1,
+ 2
+ ]
+ },
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.FsmStats",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcTargetCPSOrWeight"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 7
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 8
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 9
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 10
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsInScGroup.ScScGrpName"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 5,
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_Chart",
+ "customData": {
+ "dataSet": [
+ {
+ "label": "Current CPS",
+ "color": "#FF0000"
+ },
+ {
+ "label": "Target CPS",
+ "color": "#00FF00"
+ }
+ ]
+ },
+ "dataPathStrList": [
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcStat",
+ "EntityGroups.Scenarios.IsWeightedSc.TrafficCases.TcTargetCPSOrWeight"
+ ],
+ "dataPathList": [
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 9
+ ],
+ [
+ 2,
+ 7,
+ 6,
+ 5,
+ 10
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/Desktop.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/Desktop.json
new file mode 100644
index 0000000..0774e9a
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/Desktop.json
@@ -0,0 +1,29 @@
+{
+ "ViewmodelEditors": [
+ {
+ "pos": {
+ "top": 30,
+ "left": 201
+ },
+ "visible": false
+ }
+ ],
+ "ViewEditors": [
+ {
+ "pos": {
+ "top": 29.600006103515625,
+ "left": 426
+ },
+ "visible": false
+ }
+ ],
+ "HtmlEditor": {
+ "pos": {
+ "top": 30,
+ "left": 623
+ },
+ "visible": false
+ },
+ "RequestEditor": {},
+ "Imports": []
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/Imports.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/Imports.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/Imports.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/Request.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/Request.json
new file mode 100644
index 0000000..b08f27e
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/Request.json
@@ -0,0 +1,26 @@
+[
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EndOfConfig"
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ReadyToRun"
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "GUIDone"
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EndOfTest"
+ }
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/Setup.css b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/Setup.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/Setup.css
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/Setup.html b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/Setup.html
new file mode 100644
index 0000000..3706ff5
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/Setup.html
@@ -0,0 +1 @@
+<div id="EPTF_CLL_ExecCtrl_Status"></div>
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/ViewInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/ViewInstances.json
new file mode 100644
index 0000000..32094a8
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/ViewInstances.json
@@ -0,0 +1,51 @@
+[
+ {
+ "class": "CView_ElementAligner",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "subviews": [
+ {
+ "subView": "CView_StatusLED",
+ "isElementLabelPresent": true
+ },
+ {
+ "subView": "CView_StatusLED",
+ "isElementLabelPresent": true
+ },
+ {
+ "subView": "CView_StatusLED",
+ "isElementLabelPresent": true
+ },
+ {
+ "subView": "CView_StatusLED",
+ "isElementLabelPresent": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true,
+ "isElementLabelPresent": true,
+ "elementText": "ExecCtrl Status:",
+ "text": " "
+ }
+ ],
+ "processCss": {
+ ".Aligner_Horizontal_Content": {
+ "float": "right",
+ "padding": "0px 10px"
+ },
+ ".CustomizableApp_LabelAtTop": {
+ "font-weight": "bold"
+ }
+ }
+ },
+ "viewModelIndexes": [
+ 0
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Status"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/ViewModelInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/ViewModelInstances.json
new file mode 100644
index 0000000..5105438
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_Status/ViewModelInstances.json
@@ -0,0 +1,32 @@
+[
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "EndOfTest",
+ "GUIDone",
+ "ReadyToRun",
+ "EndOfConfig",
+ "EndOfConfig"
+ ],
+ "dataPathList": [
+ [
+ 3
+ ],
+ [
+ 2
+ ],
+ [
+ 1
+ ],
+ [
+ 0
+ ],
+ [
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/Desktop.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/Desktop.json
new file mode 100644
index 0000000..6d471c4
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/Desktop.json
@@ -0,0 +1,79 @@
+{
+ "ViewmodelEditors": [
+ {
+ "pos": {
+ "top": 124,
+ "left": 677
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 55,
+ "left": 482
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 184,
+ "left": 501
+ },
+ "visible": false
+ }
+ ],
+ "ViewEditors": [
+ {
+ "pos": {
+ "top": 85,
+ "left": 917
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 205,
+ "left": 1169
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 155,
+ "left": 925
+ },
+ "visible": false
+ }
+ ],
+ "HtmlEditor": {
+ "pos": {
+ "top": 225,
+ "left": 1323
+ },
+ "visible": false
+ },
+ "RequestEditor": {},
+ "Imports": [
+ {
+ "pos": {
+ "top": 291,
+ "left": 928
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 271,
+ "left": 981
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 58,
+ "left": 1007
+ },
+ "visible": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/Imports.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/Imports.json
new file mode 100644
index 0000000..b33258c
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/Imports.json
@@ -0,0 +1,14 @@
+[
+ {
+ "setupName": "EPTF_CLL_ExecCtrl_CommonControls",
+ "parentID": "EPTF_CLL_ExecCtrl_CommonControls"
+ },
+ {
+ "setupName": "EPTF_CLL_ExecCtrl_Status",
+ "parentID": "EPTF_CLL_ExecCtrl_TrafficCases_CView_Aligner_3"
+ },
+ {
+ "setupName": "EPTF_CLL_SetupTabs",
+ "parentID": "EPTF_CLL_ExecCtrl_TrafficCases_CView_Aligner_0"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/Request.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/Request.json
new file mode 100644
index 0000000..4660ef5
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/Request.json
@@ -0,0 +1,455 @@
+[
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "sizeOf",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "ExecCtrl"
+ },
+ {
+ "paramName": "Element",
+ "paramValue": "ScenariosOnClients"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScenariosOnClients",
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ClientOfScenariosOnClients",
+ "params": [
+ {
+ "paramName": "ScenarioOnClient",
+ "paramValue": "%Parent0%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EntityGroupOfScenariosOnClients",
+ "params": [
+ {
+ "paramName": "ScenarioOnClient",
+ "paramValue": "%Parent0%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScenarioOfScenariosOnClients",
+ "params": [
+ {
+ "paramName": "ScenarioOnClient",
+ "paramValue": "%Parent0%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScStatusForLGen",
+ "params": [
+ {
+ "paramName": "LGen",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "rangeFilter": {
+ "offset": 0,
+ "count": 10
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "sizeOf",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "ExecCtrl"
+ },
+ {
+ "paramName": "Element",
+ "paramValue": "TrafficCasesOfScenarios"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TrafficCasesOfScenarios",
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScenarioOfTrafficCasesOfScenarios",
+ "params": [
+ {
+ "paramName": "TrafficCaseOfScenario",
+ "paramValue": "%Parent0%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EntityGroupOfScenarioInstance",
+ "params": [
+ {
+ "paramName": "ScenarioInstance",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScenarioTypeNameOfScenarioInstance",
+ "params": [
+ {
+ "paramName": "ScenarioInstance",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "IsWeightedSc",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScIsWeighted",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScStatus",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScStartButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "writableInfo": true
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScStopButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "writableInfo": true
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ScCPS",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ }
+ ],
+ "filter": {
+ "dataValue": "%Parent4%"
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TrafficCaseOfTrafficCasesOfScenarios",
+ "params": [
+ {
+ "paramName": "TrafficCaseOfScenario",
+ "paramValue": "%Parent0%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStartButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent5%"
+ }
+ ],
+ "writableInfo": true
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStopButton",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent5%"
+ }
+ ],
+ "writableInfo": true
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcStartDelay",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent5%"
+ }
+ ],
+ "filter": {
+ "request": {
+ "source": "DataSource",
+ "element": "not",
+ "params": [
+ {
+ "paramName": "Par1",
+ "paramValue": {
+ "dataValue": "%Parent4%"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcTargetCPSOrWeight",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent5%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcTimeProfile",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent5%"
+ }
+ ],
+ "filter": {
+ "request": {
+ "source": "ExecCtrl",
+ "element": "TcHasTimeProfile",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": {
+ "dataValue": "%Parent2%"
+ }
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": {
+ "dataValue": "%Parent3%"
+ }
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": {
+ "dataValue": "%Parent5%"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "TcRegulator",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent2%"
+ },
+ {
+ "paramName": "Scenario",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "TrafficCase",
+ "paramValue": "%Parent5%"
+ }
+ ],
+ "filter": {
+ "request": {
+ "source": "DataSource",
+ "element": "not",
+ "params": [
+ {
+ "paramName": "Par1",
+ "paramValue": {
+ "dataValue": "%Parent4%"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "rangeFilter": {
+ "offset": 0,
+ "count": 10
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/Setup.css b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/Setup.css
new file mode 100644
index 0000000..3f78727
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/Setup.css
@@ -0,0 +1,7 @@
+#EPTF_CLL_ExecCtrl_TrafficCases {
+ height: calc(100% - 40px);
+}
+
+#EPTF_CLL_ExecCtrl_CommonControls {
+ height: 40px;
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/Setup.html b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/Setup.html
new file mode 100644
index 0000000..c56ba26
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/Setup.html
@@ -0,0 +1,2 @@
+<div id="EPTF_CLL_ExecCtrl_TrafficCases"></div>
+<div id="EPTF_CLL_ExecCtrl_CommonControls"></div>
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/ViewInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/ViewInstances.json
new file mode 100644
index 0000000..476a264
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/ViewInstances.json
@@ -0,0 +1,126 @@
+[
+ {
+ "class": "CView_ElementTableForLargeData",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "autoHeight": true,
+ "columns": [
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1,
+ "subView": "CView_StatusLED"
+ }
+ ],
+ "class": "TableGray"
+ },
+ "viewModelIndexes": [
+ 1,
+ 0
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_TrafficCases_CView_Aligner_1"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "orientation": "vertical",
+ "css": {
+ "overflow": "auto"
+ }
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_TrafficCases_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_TrafficCases_CView_Aligner_1",
+ "EPTF_CLL_ExecCtrl_TrafficCases_CView_Aligner_2",
+ "EPTF_CLL_ExecCtrl_TrafficCases_CView_Aligner_3"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_TrafficCases"
+ },
+ {
+ "class": "CView_ElementTableForLargeData",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "autoHeight": true,
+ "columns": [
+ {
+ "flex": 3
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 2,
+ "subView": "CView_StatusLED"
+ },
+ {
+ "flex": 1,
+ "subView": "CView_BasicButton"
+ },
+ {
+ "flex": 1,
+ "subView": "CView_BasicButton"
+ },
+ {
+ "flex": 2,
+ "subView": "CView_Label"
+ },
+ {
+ "flex": 3
+ },
+ {
+ "flex": 1,
+ "subView": "CView_BasicButton"
+ },
+ {
+ "flex": 1,
+ "subView": "CView_BasicButton"
+ },
+ {
+ "flex": 2,
+ "subView": "CView_Label"
+ },
+ {
+ "flex": 2,
+ "subView": "CView_Label"
+ },
+ {
+ "flex": 2,
+ "subView": "CView_Label"
+ },
+ {
+ "flex": 2,
+ "subView": "CView_Label"
+ }
+ ],
+ "class": "TableGray",
+ "processCss": {
+ "INPUT": {
+ "width": "100%"
+ }
+ }
+ },
+ "viewModelIndexes": [
+ 2,
+ 0
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_TrafficCases_CView_Aligner_2"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/ViewModelInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/ViewModelInstances.json
new file mode 100644
index 0000000..ffaa19c
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ExecCtrl_TrafficCases/ViewModelInstances.json
@@ -0,0 +1,222 @@
+[
+ {
+ "class": "CViewModel_FlexAligner",
+ "customData": {},
+ "dataPathStrList": [],
+ "dataPathList": [],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_TableForLargeData",
+ "customData": {
+ "name": "Scenario distribution overview",
+ "iteratorColumnPosition": -1,
+ "allowScrollBelow": false,
+ "streamingThreshold": 10,
+ "header": [
+ "Client name",
+ "Entity groups",
+ "Scenario name",
+ "Client status"
+ ]
+ },
+ "dataPathStrList": [
+ "sizeOf",
+ "ScenariosOnClients",
+ "ScenariosOnClients.ClientOfScenariosOnClients",
+ "ScenariosOnClients.ClientOfScenariosOnClients.EntityGroupOfScenariosOnClients",
+ "ScenariosOnClients.ClientOfScenariosOnClients.EntityGroupOfScenariosOnClients.ScenarioOfScenariosOnClients",
+ "ScenariosOnClients.ClientOfScenariosOnClients.EntityGroupOfScenariosOnClients.ScenarioOfScenariosOnClients.ScStatusForLGen"
+ ],
+ "dataPathList": [
+ [
+ 0
+ ],
+ [
+ 1
+ ],
+ [
+ 1,
+ 0
+ ],
+ [
+ 1,
+ 0,
+ 0
+ ],
+ [
+ 1,
+ 0,
+ 0,
+ 0
+ ],
+ [
+ 1,
+ 0,
+ 0,
+ 0,
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_TableForLargeData",
+ "customData": {
+ "name": "Traffic case overview",
+ "header": [
+ "Scenario name",
+ "Type",
+ "Status",
+ "Start",
+ "Stop",
+ "CPS",
+ "Traffic cases",
+ "StartTC",
+ "StopTC",
+ "Start delay",
+ "TargetCPS/Weight",
+ "TimeProfile",
+ "Regulator"
+ ],
+ "iteratorColumnPosition": -1,
+ "allowScrollBelow": false,
+ "streamingThreshold": 10
+ },
+ "dataPathStrList": [
+ "sizeOf",
+ "TrafficCasesOfScenarios",
+ "TrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios",
+ "TrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.EntityGroupOfScenarioInstance.ScenarioTypeNameOfScenarioInstance.IsWeightedSc.ScIsWeighted",
+ "TrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.EntityGroupOfScenarioInstance.ScenarioTypeNameOfScenarioInstance.IsWeightedSc.ScStatus",
+ "TrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.EntityGroupOfScenarioInstance.ScenarioTypeNameOfScenarioInstance.IsWeightedSc.ScStartButton",
+ "TrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.EntityGroupOfScenarioInstance.ScenarioTypeNameOfScenarioInstance.IsWeightedSc.ScStopButton",
+ "TrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.EntityGroupOfScenarioInstance.ScenarioTypeNameOfScenarioInstance.IsWeightedSc.ScCPS",
+ "TrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.EntityGroupOfScenarioInstance.ScenarioTypeNameOfScenarioInstance.IsWeightedSc.TrafficCaseOfTrafficCasesOfScenarios",
+ "TrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.EntityGroupOfScenarioInstance.ScenarioTypeNameOfScenarioInstance.IsWeightedSc.TrafficCaseOfTrafficCasesOfScenarios.TcStartButton",
+ "TrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.EntityGroupOfScenarioInstance.ScenarioTypeNameOfScenarioInstance.IsWeightedSc.TrafficCaseOfTrafficCasesOfScenarios.TcStopButton",
+ "TrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.EntityGroupOfScenarioInstance.ScenarioTypeNameOfScenarioInstance.IsWeightedSc.TrafficCaseOfTrafficCasesOfScenarios.TcStartDelay",
+ "TrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.EntityGroupOfScenarioInstance.ScenarioTypeNameOfScenarioInstance.IsWeightedSc.TrafficCaseOfTrafficCasesOfScenarios.TcTargetCPSOrWeight",
+ "TrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.EntityGroupOfScenarioInstance.ScenarioTypeNameOfScenarioInstance.IsWeightedSc.TrafficCaseOfTrafficCasesOfScenarios.TcTimeProfile",
+ "TrafficCasesOfScenarios.ScenarioOfTrafficCasesOfScenarios.EntityGroupOfScenarioInstance.ScenarioTypeNameOfScenarioInstance.IsWeightedSc.TrafficCaseOfTrafficCasesOfScenarios.TcRegulator"
+ ],
+ "dataPathList": [
+ [
+ 2
+ ],
+ [
+ 3
+ ],
+ [
+ 3,
+ 0
+ ],
+ [
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ ],
+ [
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2
+ ],
+ [
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 3
+ ],
+ [
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 4
+ ],
+ [
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 5
+ ],
+ [
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 5,
+ 0
+ ],
+ [
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 5,
+ 1
+ ],
+ [
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 5,
+ 2
+ ],
+ [
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 5,
+ 3
+ ],
+ [
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 5,
+ 4
+ ],
+ [
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 5,
+ 5
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/Desktop.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/Desktop.json
new file mode 100644
index 0000000..d891e3a
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/Desktop.json
@@ -0,0 +1,268 @@
+{
+ "ViewmodelEditors": [
+ {
+ "pos": {
+ "top": 130,
+ "left": 286
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 30,
+ "left": 293
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 106,
+ "left": 321
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 508,
+ "left": 313
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 311,
+ "left": 291
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 460,
+ "left": 307
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 270,
+ "left": 289
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 191,
+ "left": 293
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 216,
+ "left": 295
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 242,
+ "left": 295
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 9,
+ "left": 745
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 630,
+ "left": 350
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 679,
+ "left": 344
+ },
+ "visible": false
+ }
+ ],
+ "ViewEditors": [
+ {
+ "pos": {
+ "top": 134,
+ "left": 791
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 212,
+ "left": 1103
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 75,
+ "left": 564
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 508,
+ "left": 575
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 312,
+ "left": 590
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 335,
+ "left": 827
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 461,
+ "left": 583
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 341,
+ "left": 629
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 405,
+ "left": 741
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 269,
+ "left": 579
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 163,
+ "left": 714
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 190,
+ "left": 582
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 218,
+ "left": 582
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 243,
+ "left": 580
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 104,
+ "left": 578
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 249,
+ "left": 999
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 109,
+ "left": 1218
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 309,
+ "left": 1171
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 75,
+ "left": 1304
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 631,
+ "left": 819
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 677,
+ "left": 817
+ },
+ "visible": false
+ }
+ ],
+ "HtmlEditor": {
+ "pos": {
+ "top": 104,
+ "left": 1474
+ },
+ "visible": false
+ },
+ "RequestEditor": {},
+ "Imports": [
+ {
+ "pos": {
+ "top": 353,
+ "left": 1209
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 34,
+ "left": 1208
+ },
+ "visible": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/Imports.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/Imports.json
new file mode 100644
index 0000000..8be8689
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/Imports.json
@@ -0,0 +1,10 @@
+[
+ {
+ "setupName": "EPTF_CLL_ExecCtrl_CommonControls",
+ "parentID": "EPTF_CLL_CommonControls"
+ },
+ {
+ "setupName": "EPTF_CLL_SetupTabs",
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_0"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/Request.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/Request.json
new file mode 100644
index 0000000..9bddda7
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/Request.json
@@ -0,0 +1,418 @@
+[
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "dataElementPresent",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "HostAdminServer"
+ },
+ {
+ "paramName": "Element",
+ "paramValue": "Hosts"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "Hosts",
+ "children": [
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "CpuLoad",
+ "params": [
+ {
+ "paramName": "HostName",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "PhysicalMemHRF",
+ "params": [
+ {
+ "paramName": "HostName",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "FreeMemHRF",
+ "params": [
+ {
+ "paramName": "HostName",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "sizeOf",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "HostAdminServer"
+ },
+ {
+ "paramName": "Element",
+ "paramValue": "Hosts"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "Hosts",
+ "rangeFilter": {
+ "offset": 0,
+ "count": 30
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "Hosts",
+ "selection": [
+ 0
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "PhysicalMemHRF",
+ "params": [
+ {
+ "paramName": "HostName",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "FreeMemHRF",
+ "params": [
+ {
+ "paramName": "HostName",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "CpuLoad",
+ "params": [
+ {
+ "paramName": "HostName",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "CPUs",
+ "params": [
+ {
+ "paramName": "HostName",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "PerCpuLoad",
+ "params": [
+ {
+ "paramName": "HostName",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "CpuIdx",
+ "paramValue": "%Parent2%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "ProcessesOnHost",
+ "params": [
+ {
+ "paramName": "HostName",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "SelfName",
+ "params": [
+ {
+ "paramName": "HostName",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "ProcessIdx",
+ "paramValue": "%Parent2%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "PID",
+ "params": [
+ {
+ "paramName": "HostName",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "ProcessIdx",
+ "paramValue": "%Parent2%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "CpuLoad",
+ "params": [
+ {
+ "paramName": "HostName",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "ProcessIdx",
+ "paramValue": "%Parent2%"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "PTCs",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "DataSource"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "StatManager",
+ "element": "LEDlimit",
+ "params": [
+ {
+ "paramName": "greenLimit",
+ "paramValue": "0.0"
+ },
+ {
+ "paramName": "yellowLimit",
+ "paramValue": "80.0"
+ },
+ {
+ "paramName": "redLimit",
+ "paramValue": "95.0"
+ },
+ {
+ "paramName": "defaultColor",
+ "paramValue": "green"
+ },
+ {
+ "paramName": "enableValueInLEDText",
+ "paramValue": "yes"
+ },
+ {
+ "paramName": "value",
+ "paramValue": "%Parent3%"
+ },
+ {
+ "paramName": "refValue",
+ "paramValue": "100.0"
+ }
+ ],
+ "ptcname": "%Parent4%"
+ }
+ }
+ ],
+ "selection": [
+ 0
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "MemUsageHRF",
+ "params": [
+ {
+ "paramName": "HostName",
+ "paramValue": "%Parent1%"
+ },
+ {
+ "paramName": "ProcessIdx",
+ "paramValue": "%Parent2%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "ProcessSortOption"
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "ProcessSortOptionList"
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "ProcessNames",
+ "children": [
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "HostName",
+ "params": [
+ {
+ "paramName": "SelfName",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "PID",
+ "params": [
+ {
+ "paramName": "SelfName",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "CpuLoad",
+ "params": [
+ {
+ "paramName": "SelfName",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "MemUsageHRF",
+ "params": [
+ {
+ "paramName": "SelfName",
+ "paramValue": "%Parent1%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "ProcessNames",
+ "children": [
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "MemUsage",
+ "params": [
+ {
+ "paramName": "SelfName",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "timeline": {
+ "maxpoints": 31
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "ProcessNames",
+ "children": [
+ {
+ "getData": {
+ "source": "HostAdminServer",
+ "element": "CpuLoad",
+ "params": [
+ {
+ "paramName": "SelfName",
+ "paramValue": "%Parent1%"
+ }
+ ],
+ "timeline": {
+ "maxpoints": 31
+ }
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "filter": {
+ "dataValue": "%Parent0%"
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/Setup.css b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/Setup.css
new file mode 100644
index 0000000..e95cf0d
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/Setup.css
@@ -0,0 +1,7 @@
+#EPTF_CLL_HostAdminServer {
+ height: calc(100% - 40px);
+}
+
+#EPTF_CLL_CommonControls {
+ height: 40px;
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/Setup.html b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/Setup.html
new file mode 100644
index 0000000..54d5733
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/Setup.html
@@ -0,0 +1,2 @@
+<div id="EPTF_CLL_HostAdminServer"></div>
+<div id="EPTF_CLL_CommonControls"></div>
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/ViewInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/ViewInstances.json
new file mode 100644
index 0000000..8edd775
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/ViewInstances.json
@@ -0,0 +1,475 @@
+[
+ {
+ "class": "CView_ElementTableForLargeData",
+ "customData": {
+ "class": "TableGray",
+ "autoHeight": true,
+ "flex": 1,
+ "displayName": false
+ },
+ "viewModelIndexes": [
+ 0
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_0"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "orientation": "vertical"
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_0",
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1",
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_2",
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_3",
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_4"
+ ],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0"
+ },
+ {
+ "class": "CView_ElementTable",
+ "customData": {
+ "class": "TableGray",
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "displayName": false,
+ "columns": [
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ }
+ ]
+ },
+ "viewModelIndexes": [
+ 1,
+ 2
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_0"
+ },
+ {
+ "class": "CView_ElementTable",
+ "customData": {
+ "class": "TableGray",
+ "name": "All EPTF processes",
+ "columns": [
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ }
+ ],
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "autoHeight": true
+ },
+ "viewModelIndexes": [
+ 3,
+ 2
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_2"
+ },
+ {
+ "class": "CView_ElementTable",
+ "customData": {
+ "class": "TableGray",
+ "name": "Processes on this host",
+ "columns": [
+ {
+ "flex": 1
+ },
+ {
+ "flex": 1
+ },
+ {
+ "subView": "CView_StatusLED",
+ "flex": 1
+ },
+ {
+ "flex": 1
+ }
+ ],
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "autoHeight": true
+ },
+ "viewModelIndexes": [
+ 4,
+ 2
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "orientation": "vertical",
+ "processCss": {
+ "INPUT:disabled": {
+ "color": "black"
+ }
+ },
+ "flex": 9
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0",
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1",
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2",
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_3"
+ ],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1"
+ },
+ {
+ "class": "CView_ComboBox",
+ "customData": {},
+ "viewModelIndexes": [
+ 5
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_1"
+ },
+ {
+ "class": "CView_Label",
+ "customData": {
+ "text": "Sort processes by: ",
+ "disabled": true
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_0"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ }
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_0",
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2_CView_Aligner_1"
+ ],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_2"
+ },
+ {
+ "class": "CView_ElementTable",
+ "customData": {
+ "class": "TableGray",
+ "displayName": false,
+ "displayHeader": false,
+ "autoHeight": true,
+ "columns": [
+ {
+ "flex": 1,
+ "subView": "CView_Label",
+ "disabled": true
+ },
+ {
+ "flex": 1,
+ "subView": "CView_Label",
+ "disabled": true
+ }
+ ],
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "0px 4px 4px 4px",
+ "border-bottom": "1px solid gray",
+ "border-left": "1px solid gray",
+ "border-right": "1px solid gray"
+ }
+ },
+ "viewModelIndexes": [
+ 6,
+ 2
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_1"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "orientation": "vertical"
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_0",
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_1",
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_2",
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_3"
+ ],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0"
+ },
+ {
+ "class": "CView_ElementAligner",
+ "customData": {
+ "subviews": [
+ {
+ "subView": "CView_Label",
+ "text": "Physical memory",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ }
+ ],
+ "flexCalculation": true,
+ "css": {
+ "padding": "0px 4px 0px 4px",
+ "border-left": "1px solid gray",
+ "border-right": "1px solid gray"
+ },
+ "processCss": {
+ ".Aligner_Horizontal_Content": {
+ "background-color": "#d0d0d0"
+ }
+ }
+ },
+ "viewModelIndexes": [
+ 7,
+ 2
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_1"
+ },
+ {
+ "class": "CView_ElementAligner",
+ "customData": {
+ "subviews": [
+ {
+ "subView": "CView_Label",
+ "text": "Free memory",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ }
+ ],
+ "flexCalculation": true,
+ "css": {
+ "padding": "0px 4px",
+ "border-left": "1px solid gray",
+ "border-right": "1px solid gray"
+ },
+ "processCss": {
+ ".Aligner_Horizontal_Content": {
+ "background-color": "#d0d0d0"
+ }
+ }
+ },
+ "viewModelIndexes": [
+ 8,
+ 2
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_2"
+ },
+ {
+ "class": "CView_ElementAligner",
+ "customData": {
+ "subviews": [
+ {
+ "subView": "CView_Label",
+ "text": "CPU load [%]",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "disabled": true
+ }
+ ],
+ "flexCalculation": true,
+ "css": {
+ "padding": "0px 4px",
+ "border-left": "1px solid gray",
+ "border-right": "1px solid gray"
+ },
+ "processCss": {
+ ".Aligner_Horizontal_Content": {
+ "background-color": "#d0d0d0"
+ }
+ }
+ },
+ "viewModelIndexes": [
+ 9,
+ 2
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_3"
+ },
+ {
+ "class": "CView_ElementAligner",
+ "customData": {
+ "subviews": [
+ {
+ "subView": "CView_Label",
+ "text": "Host Statistics",
+ "disabled": true
+ },
+ {
+ "subView": "CView_Label",
+ "text": "Value",
+ "disabled": true
+ }
+ ],
+ "flexCalculation": true,
+ "css": {
+ "padding": "4px 4px 0px 4px",
+ "border-top": "1px solid gray",
+ "border-left": "1px solid gray",
+ "border-right": "1px solid gray"
+ },
+ "processCss": {
+ ".Aligner_Horizontal_Content": {
+ "background-color": "#8d8d8d",
+ "border-bottom": "1px solid black"
+ },
+ "INPUT": {
+ "font-size": "14px",
+ "font-weight": "bold"
+ }
+ }
+ },
+ "viewModelIndexes": [
+ 2
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1_CView_Aligner_0_CView_Aligner_0"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "flexCalculation": true,
+ "resizable": true
+ },
+ "viewModelIndexes": [
+ 2
+ ],
+ "idsCreating": [
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_0",
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1_CView_Aligner_1"
+ ],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_1"
+ },
+ {
+ "class": "CView_Condition",
+ "customData": {},
+ "viewModelIndexes": [
+ 10
+ ],
+ "idsCreating": [
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0",
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_1"
+ ],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1"
+ },
+ {
+ "class": "CView_Div",
+ "customData": {
+ "text": "HostAdminServer is disabled!",
+ "css": {
+ "font-size": "20px",
+ "font-weight": "bold",
+ "text-align": "center"
+ }
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_1"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "css": {
+ "overflow": "auto"
+ },
+ "orientation": "vertical"
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_HostAdminServer_CView_Aligner_0",
+ "EPTF_CLL_HostAdminServer_CView_Aligner_1"
+ ],
+ "parentID": "EPTF_CLL_HostAdminServer"
+ },
+ {
+ "class": "CView_Chart",
+ "customData": {
+ "width": "100%",
+ "type": "timeseries",
+ "yTicksFormat": "data",
+ "zoomAndPan": false,
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "title": "Memory Usage"
+ },
+ "viewModelIndexes": [
+ 11
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_3"
+ },
+ {
+ "class": "CView_Chart",
+ "customData": {
+ "width": "100%",
+ "type": "timeseries",
+ "yTicksFormat": "percent",
+ "zoomAndPan": false,
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "title": "CPU Load"
+ },
+ "viewModelIndexes": [
+ 12
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_HostAdminServer_CView_Aligner_1_CView_Condition_0_CView_Aligner_4"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/ViewModelInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/ViewModelInstances.json
new file mode 100644
index 0000000..2682a02
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_HostAdminServer/ViewModelInstances.json
@@ -0,0 +1,299 @@
+[
+ {
+ "class": "CViewModel_TableForLargeData",
+ "customData": {
+ "header": [],
+ "allowScrollBelow": false,
+ "streamingThreshold": 30
+ },
+ "dataPathStrList": [
+ "dataElementPresent.sizeOf",
+ "dataElementPresent.Hosts"
+ ],
+ "dataPathList": [
+ [
+ 0,
+ 1
+ ],
+ [
+ 0,
+ 2
+ ]
+ ],
+ "selectionToControlPathStrList": [
+ "dataElementPresent.Hosts"
+ ],
+ "selectionToControlPathList": [
+ [
+ 0,
+ 3
+ ]
+ ]
+ },
+ {
+ "class": "CViewModel_DynamicTable",
+ "customData": {
+ "header": [
+ "Host",
+ "CPU Load [%]",
+ "Physical Memory",
+ "Free Memory"
+ ]
+ },
+ "dataPathStrList": [
+ "dataElementPresent.Hosts"
+ ],
+ "dataPathList": [
+ [
+ 0,
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_FlexAligner",
+ "customData": {},
+ "dataPathStrList": [],
+ "dataPathList": [],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_DynamicTable",
+ "customData": {
+ "header": [
+ "EPTF Process",
+ "Host",
+ "PID",
+ "CPU Load [%]",
+ "Memory Usage"
+ ]
+ },
+ "dataPathStrList": [
+ "dataElementPresent.ProcessNames"
+ ],
+ "dataPathList": [
+ [
+ 0,
+ 6
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_DynamicTable",
+ "customData": {
+ "header": [
+ "EPTF Process",
+ "PID",
+ "CPU Load [%]",
+ "Memory Usage"
+ ],
+ "iteratorColumnPosition": -1
+ },
+ "dataPathStrList": [
+ "dataElementPresent.Hosts.ProcessesOnHost",
+ "dataElementPresent.Hosts.ProcessesOnHost.SelfName",
+ "dataElementPresent.Hosts.ProcessesOnHost.PID",
+ "dataElementPresent.Hosts.ProcessesOnHost.CpuLoad.PTCs.LEDlimit",
+ "dataElementPresent.Hosts.ProcessesOnHost.MemUsageHRF"
+ ],
+ "dataPathList": [
+ [
+ 0,
+ 3,
+ 4
+ ],
+ [
+ 0,
+ 3,
+ 4,
+ 0
+ ],
+ [
+ 0,
+ 3,
+ 4,
+ 1
+ ],
+ [
+ 0,
+ 3,
+ 4,
+ 2,
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 3,
+ 4,
+ 3
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "dataElementPresent.ProcessSortOption",
+ "dataElementPresent.ProcessSortOptionList"
+ ],
+ "dataPathList": [
+ [
+ 0,
+ 4
+ ],
+ [
+ 0,
+ 5
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_DynamicTable",
+ "customData": {
+ "dataManipulator": [
+ {
+ "text": "CPU # Load [%]"
+ }
+ ]
+ },
+ "dataPathStrList": [
+ "dataElementPresent.Hosts.CPUs",
+ "dataElementPresent.Hosts.CPUs.PerCpuLoad"
+ ],
+ "dataPathList": [
+ [
+ 0,
+ 3,
+ 3
+ ],
+ [
+ 0,
+ 3,
+ 3,
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "dataElementPresent.Hosts.PhysicalMemHRF",
+ "dataElementPresent.Hosts.PhysicalMemHRF"
+ ],
+ "dataPathList": [
+ [
+ 0,
+ 3,
+ 0
+ ],
+ [
+ 0,
+ 3,
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "dataElementPresent.Hosts.FreeMemHRF",
+ "dataElementPresent.Hosts.FreeMemHRF"
+ ],
+ "dataPathList": [
+ [
+ 0,
+ 3,
+ 1
+ ],
+ [
+ 0,
+ 3,
+ 1
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "dataElementPresent.Hosts.CpuLoad",
+ "dataElementPresent.Hosts.CpuLoad"
+ ],
+ "dataPathList": [
+ [
+ 0,
+ 3,
+ 2
+ ],
+ [
+ 0,
+ 3,
+ 2
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_Condition",
+ "customData": {},
+ "dataPathStrList": [
+ "dataElementPresent"
+ ],
+ "dataPathList": [
+ [
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_Chart",
+ "customData": {},
+ "dataPathStrList": [
+ "dataElementPresent.ProcessNames"
+ ],
+ "dataPathList": [
+ [
+ 0,
+ 7
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_Chart",
+ "customData": {},
+ "dataPathStrList": [
+ "dataElementPresent.ProcessNames"
+ ],
+ "dataPathList": [
+ [
+ 0,
+ 8
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/Desktop.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/Desktop.json
new file mode 100644
index 0000000..fb8a992
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/Desktop.json
@@ -0,0 +1,57 @@
+{
+ "ViewmodelEditors": [
+ {
+ "pos": {
+ "top": 27,
+ "left": 271
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 51,
+ "left": 271
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 3,
+ "left": 271
+ },
+ "visible": false
+ }
+ ],
+ "ViewEditors": [
+ {
+ "pos": {
+ "top": 51,
+ "left": 494
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 3,
+ "left": 604
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 73,
+ "left": 533
+ },
+ "visible": false
+ }
+ ],
+ "Imports": [],
+ "HtmlEditor": {
+ "pos": {
+ "top": 3,
+ "left": 773
+ },
+ "visible": false
+ },
+ "RequestEditor": {}
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/Imports.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/Imports.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/Imports.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/Request.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/Request.json
new file mode 100644
index 0000000..5a84d67
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/Request.json
@@ -0,0 +1,55 @@
+[
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "dataElementPresent",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "ExecCtrl"
+ },
+ {
+ "paramName": "Element",
+ "paramValue": "Progressbar"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "Progressbar",
+ "filter": {
+ "request": {
+ "source": "DataSource",
+ "element": "!=",
+ "params": [
+ {
+ "paramName": "Par1",
+ "paramValue": {
+ "dataValue": "%Parent1%"
+ }
+ },
+ {
+ "paramName": "Par2",
+ "paramValue": {
+ "dataValue": "100.0"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "ProgressbarText"
+ }
+ }
+ ],
+ "filter": {
+ "dataValue": "%Parent0%"
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/Setup.css b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/Setup.css
new file mode 100644
index 0000000..cfbe6ad
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/Setup.css
@@ -0,0 +1,4 @@
+#EPTF_CLL_ProgressBar {
+ height: 100%;
+ width: 100%;
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/Setup.html b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/Setup.html
new file mode 100644
index 0000000..34d83b8
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/Setup.html
@@ -0,0 +1 @@
+<div id="EPTF_CLL_ProgressBar"></div>
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/ViewInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/ViewInstances.json
new file mode 100644
index 0000000..6976d48
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/ViewInstances.json
@@ -0,0 +1,48 @@
+[
+ {
+ "class": "CView_ProgressBar",
+ "customData": {},
+ "viewModelIndexes": [
+ 1
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ProgressBar_CView_Condition_0"
+ },
+ {
+ "class": "CView_Condition",
+ "customData": {
+ "css": {
+ "height": "100%",
+ "width": "100%"
+ },
+ "processCss": {
+ "> div > div": {
+ "height": "100%",
+ "width": "100%"
+ }
+ }
+ },
+ "viewModelIndexes": [
+ 2
+ ],
+ "idsCreating": [
+ "EPTF_CLL_ProgressBar_CView_Condition_0",
+ "EPTF_CLL_ProgressBar_CView_Condition_1"
+ ],
+ "parentID": "EPTF_CLL_ProgressBar"
+ },
+ {
+ "class": "CView_Div",
+ "customData": {
+ "text": "Loading ExecCtrl...",
+ "css": {
+ "font-size": "20px",
+ "font-weight": "bold",
+ "text-align": "center"
+ }
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ProgressBar_CView_Condition_1"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/ViewModelInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/ViewModelInstances.json
new file mode 100644
index 0000000..c4a0057
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_ProgressBar/ViewModelInstances.json
@@ -0,0 +1,54 @@
+[
+ {
+ "class": "CViewModel_SetupLoaderBasedOnCondition",
+ "customData": {
+ "setupToLoad": "EPTF_CLL_ExecCtrl_Statistics",
+ "negate": true
+ },
+ "dataPathStrList": [
+ "dataElementPresent.Progressbar"
+ ],
+ "dataPathList": [
+ [
+ 0,
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "dataElementPresent.Progressbar",
+ "dataElementPresent.ProgressbarText"
+ ],
+ "dataPathList": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 1
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_Condition",
+ "customData": {},
+ "dataPathStrList": [
+ "dataElementPresent"
+ ],
+ "dataPathList": [
+ [
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/Desktop.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/Desktop.json
new file mode 100644
index 0000000..d0f5c40
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/Desktop.json
@@ -0,0 +1,29 @@
+{
+ "ViewmodelEditors": [
+ {
+ "pos": {
+ "top": 59,
+ "left": 331
+ },
+ "visible": true
+ }
+ ],
+ "ViewEditors": [
+ {
+ "pos": {
+ "top": 56,
+ "left": 662
+ },
+ "visible": true
+ }
+ ],
+ "Imports": [],
+ "HtmlEditor": {
+ "pos": {
+ "top": 0,
+ "left": 970
+ },
+ "visible": true
+ },
+ "RequestEditor": {}
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/Imports.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/Imports.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/Imports.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/Request.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/Request.json
new file mode 100644
index 0000000..8aca3c7
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/Request.json
@@ -0,0 +1,18 @@
+[
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "dataElementPresent",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "HostAdminServer"
+ },
+ {
+ "paramName": "Element",
+ "paramValue": "Hosts"
+ }
+ ]
+ }
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/Setup.css b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/Setup.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/Setup.css
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/Setup.html b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/Setup.html
new file mode 100644
index 0000000..0cd8298
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/Setup.html
@@ -0,0 +1 @@
+<div id="EPTF_CLL_SetupTabs"></div>
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/ViewInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/ViewInstances.json
new file mode 100644
index 0000000..e4bf476
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/ViewInstances.json
@@ -0,0 +1,11 @@
+[
+ {
+ "class": "CView_SetupTabs",
+ "customData": {},
+ "viewModelIndexes": [
+ 0
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_SetupTabs"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/ViewModelInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/ViewModelInstances.json
new file mode 100644
index 0000000..c2f62ac
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_SetupTabs/ViewModelInstances.json
@@ -0,0 +1,78 @@
+[
+ {
+ "class": "CViewModel_SetupTabs",
+ "customData": {
+ "hierarchy": {
+ "menuElements": [
+ {
+ "type": "organizer",
+ "displayName": "ExecCtrl",
+ "menuElements": [
+ {
+ "type": "setup",
+ "setupName": "EPTF_CLL_ExecCtrl_Statistics",
+ "displayName": "Statistics"
+ },
+ {
+ "type": "setup",
+ "setupName": "EPTF_CLL_ExecCtrl_EntityGroups",
+ "displayName": "Entity Groups"
+ },
+ {
+ "type": "setup",
+ "setupName": "EPTF_CLL_ExecCtrl_ClientResources",
+ "displayName": "Client Resources"
+ },
+ {
+ "type": "setup",
+ "setupName": "EPTF_CLL_ExecCtrl_TrafficCases",
+ "displayName": "Traffic Cases"
+ },
+ {
+ "type": "setup",
+ "setupName": "EPTF_CLL_ExecCtrl_PhaseLists",
+ "displayName": "Phase Lists"
+ },
+ {
+ "type": "setup",
+ "setupName": "EPTF_CLL_ExecCtrl_Regulator",
+ "displayName": "Regulator"
+ },
+ {
+ "type": "setup",
+ "setupName": "EPTF_CLL_ExecCtrl_Clients",
+ "displayName": "Clients"
+ }
+ ]
+ },
+ {
+ "type": "setup",
+ "setupName": "EPTF_CLL_StatHandler",
+ "displayName": "StatHandler"
+ },
+ {
+ "type": "setup",
+ "setupName": "EPTF_CLL_HostAdminServer",
+ "displayName": "HostAdminServer",
+ "isVisible": 0
+ },
+ {
+ "type": "setup",
+ "setupName": "Setup_IMSBasic",
+ "displayName": "Next Gen"
+ }
+ ]
+ }
+ },
+ "dataPathStrList": [
+ "dataElementPresent"
+ ],
+ "dataPathList": [
+ [
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/Desktop.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/Desktop.json
new file mode 100644
index 0000000..02e865b
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/Desktop.json
@@ -0,0 +1,72 @@
+{
+ "ViewmodelEditors": [
+ {
+ "pos": {
+ "top": 30,
+ "left": 214
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 5,
+ "left": 201
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 74,
+ "left": 203
+ },
+ "visible": false
+ }
+ ],
+ "ViewEditors": [
+ {
+ "pos": {
+ "top": 33,
+ "left": 424
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 74,
+ "left": 422
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 55,
+ "left": 551
+ },
+ "visible": false
+ }
+ ],
+ "HtmlEditor": {
+ "pos": {
+ "top": 85,
+ "left": 731
+ },
+ "visible": false
+ },
+ "RequestEditor": {},
+ "Imports": [
+ {
+ "pos": {
+ "top": 114,
+ "left": 467
+ },
+ "visible": false
+ },
+ {
+ "pos": {
+ "top": 10,
+ "left": 456
+ },
+ "visible": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/Imports.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/Imports.json
new file mode 100644
index 0000000..895d970
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/Imports.json
@@ -0,0 +1,10 @@
+[
+ {
+ "setupName": "EPTF_CLL_ExecCtrl_CommonControls",
+ "parentID": "EPTF_CLL_ExecCtrl_CommonControls"
+ },
+ {
+ "setupName": "EPTF_CLL_SetupTabs",
+ "parentID": "EPTF_CLL_ExecCtrl_Stathandler_CView_Aligner_0"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/Request.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/Request.json
new file mode 100644
index 0000000..97a56c8
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/Request.json
@@ -0,0 +1,47 @@
+[
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "PTCs",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "StatHandler"
+ }
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "StatHandler",
+ "element": "ResetComponent",
+ "ptcname": "%Parent0%"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "DataSource",
+ "element": "PTCs",
+ "params": [
+ {
+ "paramName": "Source",
+ "paramValue": "StatHandler"
+ }
+ ],
+ "selection": [
+ 0
+ ],
+ "children": [
+ {
+ "getData": {
+ "source": "StatHandler",
+ "element": "ResetAll",
+ "ptcname": "%Parent0%"
+ }
+ }
+ ]
+ }
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/Setup.css b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/Setup.css
new file mode 100644
index 0000000..cfb9618
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/Setup.css
@@ -0,0 +1,7 @@
+#EPTF_CLL_ExecCtrl_Stathandler {
+ height: calc(100% - 40px);
+}
+
+#EPTF_CLL_ExecCtrl_CommonControls {
+ height: 40px;
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/Setup.html b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/Setup.html
new file mode 100644
index 0000000..84fce79
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/Setup.html
@@ -0,0 +1,2 @@
+<div id="EPTF_CLL_ExecCtrl_Stathandler"></div>
+<div id="EPTF_CLL_ExecCtrl_CommonControls"></div>
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/ViewInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/ViewInstances.json
new file mode 100644
index 0000000..eb0a0d4
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/ViewInstances.json
@@ -0,0 +1,87 @@
+[
+ {
+ "class": "CView_ElementTable",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "class": "TableGray",
+ "displayName": false,
+ "autoHeight": true,
+ "columns": [
+ {
+ "flex": 1
+ },
+ {
+ "subView": "CView_BasicButton",
+ "flex": 1,
+ "css": {
+ "width": "100%"
+ },
+ "processCss": {
+ "BUTTON": {
+ "width": "100%"
+ }
+ }
+ }
+ ]
+ },
+ "viewModelIndexes": [
+ 1,
+ 0
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Stathandler_CView_Aligner_1"
+ },
+ {
+ "class": "CView_ElementAligner",
+ "customData": {
+ "css": {
+ "margin-bottom": "2px",
+ "padding": "4px",
+ "border": "1px solid gray"
+ },
+ "subviews": [
+ {
+ "subView": "CView_Div"
+ },
+ {
+ "subView": "CView_BasicButton",
+ "text": "Reset all statistics",
+ "css": {
+ "width": "100%"
+ },
+ "processCss": {
+ "BUTTON": {
+ "width": "100%"
+ }
+ }
+ }
+ ],
+ "flexCalculation": true
+ },
+ "viewModelIndexes": [
+ 2
+ ],
+ "idsCreating": [],
+ "parentID": "EPTF_CLL_ExecCtrl_Stathandler_CView_Aligner_2"
+ },
+ {
+ "class": "CView_Aligner",
+ "customData": {
+ "css": {
+ "overflow": "auto"
+ },
+ "orientation": "vertical"
+ },
+ "viewModelIndexes": [],
+ "idsCreating": [
+ "EPTF_CLL_ExecCtrl_Stathandler_CView_Aligner_0",
+ "EPTF_CLL_ExecCtrl_Stathandler_CView_Aligner_1",
+ "EPTF_CLL_ExecCtrl_Stathandler_CView_Aligner_2"
+ ],
+ "parentID": "EPTF_CLL_ExecCtrl_Stathandler"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/ViewModelInstances.json b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/ViewModelInstances.json
new file mode 100644
index 0000000..82cb282
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/EPTF_CLL_StatHandler/ViewModelInstances.json
@@ -0,0 +1,54 @@
+[
+ {
+ "class": "CViewModel_FlexAligner",
+ "customData": {},
+ "dataPathStrList": [],
+ "dataPathList": [],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_DynamicTable",
+ "customData": {
+ "header": [
+ "StatHandler Component",
+ "Reset"
+ ]
+ },
+ "dataPathStrList": [
+ "PTCs",
+ "PTCs.ResetComponent"
+ ],
+ "dataPathList": [
+ [
+ 0
+ ],
+ [
+ 0,
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ },
+ {
+ "class": "CViewModel_ElementRelay",
+ "customData": {},
+ "dataPathStrList": [
+ "PTCs.ResetAll",
+ "PTCs.ResetAll"
+ ],
+ "dataPathList": [
+ [
+ 1,
+ 0
+ ],
+ [
+ 1,
+ 0
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/Test1/Desktop.json b/test/TestContent/CustomizableApp/Setups/Test1/Desktop.json
new file mode 100644
index 0000000..338f32a
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/Test1/Desktop.json
@@ -0,0 +1,27 @@
+{
+ "ViewmodelEditors": [
+ {
+ "pos": {
+ "top": 0,
+ "left": 200
+ },
+ "visible": true
+ }
+ ],
+ "ViewEditors": [
+ {
+ "pos": {
+ "top": 0,
+ "left": 450
+ },
+ "visible": true
+ }
+ ],
+ "HtmlEditor": {
+ "pos": {
+ "top": 0,
+ "left": 700
+ },
+ "visible": true
+ }
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/Test1/Imports.json b/test/TestContent/CustomizableApp/Setups/Test1/Imports.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/Test1/Imports.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/Test1/Request.json b/test/TestContent/CustomizableApp/Setups/Test1/Request.json
new file mode 100644
index 0000000..5803bbe
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/Test1/Request.json
@@ -0,0 +1,40 @@
+[
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "Clients"
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EntityGroups",
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EGrpType",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EGrpSize",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/Test1/Setup.css b/test/TestContent/CustomizableApp/Setups/Test1/Setup.css
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/Test1/Setup.css
@@ -0,0 +1 @@
+
diff --git a/test/TestContent/CustomizableApp/Setups/Test1/Setup.html b/test/TestContent/CustomizableApp/Setups/Test1/Setup.html
new file mode 100644
index 0000000..338db46
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/Test1/Setup.html
@@ -0,0 +1 @@
+<div id="setuptabs"></div>
diff --git a/test/TestContent/CustomizableApp/Setups/Test1/ViewInstances.json b/test/TestContent/CustomizableApp/Setups/Test1/ViewInstances.json
new file mode 100644
index 0000000..6814823
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/Test1/ViewInstances.json
@@ -0,0 +1,12 @@
+[
+ {
+ "class": "CView_ElementTable",
+ "customData": {},
+ "viewModelIndexes": [
+ 0
+ ],
+ "idsCreating": [],
+ "parentId": "setuptabs",
+ "parentID": "setuptabs"
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/Test1/ViewModelInstances.json b/test/TestContent/CustomizableApp/Setups/Test1/ViewModelInstances.json
new file mode 100644
index 0000000..cea54ac
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/Test1/ViewModelInstances.json
@@ -0,0 +1,22 @@
+[
+ {
+ "class": "CViewModel_DynamicTable",
+ "customData": {
+ "header": [
+ "Name",
+ "Type",
+ "Size"
+ ]
+ },
+ "dataPathStrList": [
+ "EntityGroups"
+ ],
+ "dataPathList": [
+ [
+ 1
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/Test2/Desktop.json b/test/TestContent/CustomizableApp/Setups/Test2/Desktop.json
new file mode 100644
index 0000000..e8da49c
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/Test2/Desktop.json
@@ -0,0 +1,19 @@
+{
+ "ViewmodelEditors": [
+ {
+ "pos": {
+ "top": 0,
+ "left": 250
+ },
+ "visible": true
+ }
+ ],
+ "ViewEditors": [],
+ "HtmlEditor": {
+ "pos": {
+ "top": 0,
+ "left": 970
+ },
+ "visible": true
+ }
+}
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/Test2/Imports.json b/test/TestContent/CustomizableApp/Setups/Test2/Imports.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/Test2/Imports.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/Test2/Request.json b/test/TestContent/CustomizableApp/Setups/Test2/Request.json
new file mode 100644
index 0000000..5803bbe
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/Test2/Request.json
@@ -0,0 +1,40 @@
+[
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "Clients"
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EntityGroups",
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EGrpType",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ },
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EGrpSize",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/Test2/Setup.css b/test/TestContent/CustomizableApp/Setups/Test2/Setup.css
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/Test2/Setup.css
@@ -0,0 +1 @@
+
diff --git a/test/TestContent/CustomizableApp/Setups/Test2/Setup.html b/test/TestContent/CustomizableApp/Setups/Test2/Setup.html
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/Test2/Setup.html
@@ -0,0 +1 @@
+
diff --git a/test/TestContent/CustomizableApp/Setups/Test2/ViewInstances.json b/test/TestContent/CustomizableApp/Setups/Test2/ViewInstances.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/Test2/ViewInstances.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/Setups/Test2/ViewModelInstances.json b/test/TestContent/CustomizableApp/Setups/Test2/ViewModelInstances.json
new file mode 100644
index 0000000..beaff3d
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Setups/Test2/ViewModelInstances.json
@@ -0,0 +1,21 @@
+[
+ {
+ "class": "CViewModel_DynamicTable",
+ "customData": {
+ "header": [
+ "Entity type",
+ "Entity size"
+ ]
+ },
+ "dataPathStrList": [
+ "EntityGroups"
+ ],
+ "dataPathList": [
+ [
+ 1
+ ]
+ ],
+ "selectionToControlPathStrList": [],
+ "selectionToControlPathList": []
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/CustomizableApp/ViewModels/placeholder b/test/TestContent/CustomizableApp/ViewModels/placeholder
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/TestContent/CustomizableApp/ViewModels/placeholder
diff --git a/test/TestContent/CustomizableApp/Views/placeholder b/test/TestContent/CustomizableApp/Views/placeholder
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/TestContent/CustomizableApp/Views/placeholder
diff --git a/test/TestContent/GuiEditor/AppConfig.json b/test/TestContent/GuiEditor/AppConfig.json
new file mode 100644
index 0000000..b1f70ab
--- /dev/null
+++ b/test/TestContent/GuiEditor/AppConfig.json
@@ -0,0 +1,5 @@
+{
+ "lastEditedApp": "CustomizableContent/CustomizableApp",
+ "lastEditedSetup": "Test1",
+ "confirmExit": false
+}
\ No newline at end of file
diff --git a/test/TestContent/GuiEditor/AppConfigSchema.json b/test/TestContent/GuiEditor/AppConfigSchema.json
new file mode 120000
index 0000000..9b9aaa2
--- /dev/null
+++ b/test/TestContent/GuiEditor/AppConfigSchema.json
@@ -0,0 +1 @@
+../../../htdocs/CustomizableContent/GuiEditor/AppConfigSchema.json
\ No newline at end of file
diff --git a/test/TestContent/MainConfig.json b/test/TestContent/MainConfig.json
new file mode 100644
index 0000000..bbec976
--- /dev/null
+++ b/test/TestContent/MainConfig.json
@@ -0,0 +1,30 @@
+{
+ "availableApps": [
+ {
+ "directory": "WebApplications/CustomizableApp",
+ "name": "TitanSim",
+ "params": {
+ "customization": "CustomizableContent/CustomizableApp"
+ }
+ },
+ {
+ "directory": "WebApplications/GuiEditor"
+ },
+ {
+ "directory": "WebApplications/RequestConsole",
+ "params": {
+ "customization": "CustomizableContent/CustomizableApp"
+ }
+ },
+ {
+ "directory": "WebApplications/WebpageFrame",
+ "params": {
+ "location": "http://ttcn.ericsson.se/TitanSim/Help/"
+ },
+ "name": "Help"
+ },
+ {
+ "directory": "WebApplications/MockTest"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/TestContent/RequestConsole/AppConfig.json b/test/TestContent/RequestConsole/AppConfig.json
new file mode 100644
index 0000000..34a2755
--- /dev/null
+++ b/test/TestContent/RequestConsole/AppConfig.json
@@ -0,0 +1,6 @@
+{
+ "lastEditedApp": "CustomizableContent/CustomizableApp",
+ "confirmExit": false,
+ "lastEditedSetup": "Test1",
+ "appForListingSetups": "CustomizableContent/CustomizableApp"
+}
\ No newline at end of file
diff --git a/test/TestContent/RequestConsole/AppConfigSchema.json b/test/TestContent/RequestConsole/AppConfigSchema.json
new file mode 100644
index 0000000..6b88b24
--- /dev/null
+++ b/test/TestContent/RequestConsole/AppConfigSchema.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "title": "RequestConsole",
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "lastEditedApp": {
+ "description": "The last edited app.",
+ "type": "string"
+ },
+ "lastEditedSetup": {
+ "description": "The last edited setup.",
+ "type": "string"
+ },
+ "appForListingSetups": {
+ "description": "App path used to list setups to be loaded.",
+ "type": "string"
+ },
+ "confirmExit": {
+ "description": "Whether we ask if the setup is to be saved when trying to exit RequestConsole.",
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "required": ["lastEditedApp"]
+}
\ No newline at end of file
diff --git a/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/Desktop.json b/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/Desktop.json
new file mode 100644
index 0000000..07392e9
--- /dev/null
+++ b/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/Desktop.json
@@ -0,0 +1,19 @@
+{
+ "ViewmodelEditors": [],
+ "ViewEditors": [],
+ "Imports": [],
+ "HtmlEditor": {
+ "pos": {
+ "top": 0,
+ "left": 970
+ },
+ "visible": true
+ },
+ "RequestEditor": {
+ "openRequests": [
+ [
+ 0
+ ]
+ ]
+ }
+}
\ No newline at end of file
diff --git a/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/Imports.json b/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/Imports.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/Imports.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/Request.json b/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/Request.json
new file mode 100644
index 0000000..b0833a4
--- /dev/null
+++ b/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/Request.json
@@ -0,0 +1,33 @@
+[
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "EntityGroups",
+ "children": [
+ {
+ "getData": {
+ "source": "ExecCtrl",
+ "element": "Scenarios",
+ "params": [
+ {
+ "paramName": "EntityGroup",
+ "paramValue": "%Parent0%"
+ }
+ ]
+ }
+ }
+ ],
+ "selection": [
+ 0
+ ]
+ }
+ },
+ {
+ "setData": {
+ "source": "ExecCtrl",
+ "element": "Start",
+ "content": "1",
+ "tp": 1
+ }
+ }
+]
\ No newline at end of file
diff --git a/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/Setup.css b/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/Setup.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/Setup.css
diff --git a/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/Setup.html b/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/Setup.html
new file mode 100644
index 0000000..43ec6f0
--- /dev/null
+++ b/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/Setup.html
@@ -0,0 +1 @@
+<div id="div_id"></div>
\ No newline at end of file
diff --git a/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/ViewInstances.json b/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/ViewInstances.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/ViewInstances.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/ViewModelInstances.json b/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/ViewModelInstances.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/test/TestContent/RequestConsole/Setups/DsRestAPI_Console_Default/ViewModelInstances.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/test/createOfflineWebGUI.sh b/test/createOfflineWebGUI.sh
new file mode 100755
index 0000000..c408bc1
--- /dev/null
+++ b/test/createOfflineWebGUI.sh
@@ -0,0 +1,119 @@
+#!/bin/sh
+#///////////////////////////////////////////////////////////////////////////////
+#// Copyright (c) 2000-2017 Ericsson Telecom AB //
+#// //
+#// All rights reserved. This program and the accompanying materials //
+#// are made available under the terms of the Eclipse Public License v1.0 //
+#// which accompanies this distribution, and is available at //
+#// http://www.eclipse.org/legal/epl-v10.html //
+#///////////////////////////////////////////////////////////////////////////////
+
+CURRENT_DIR=`pwd`
+#---COPY_TO="."
+COPY_TO="./WebGUI"
+#---CLL_DIR=`readlink -f $0 | sed 's/\/test.*//g'`
+CLL_DIR="../"
+DO_ZIP=0
+
+showUsage()
+{
+ echo "Usage: $0 <options>"
+ echo "The script will create the offline version of WebGUI."
+ echo "Options:"
+ echo " -t [directory]: target directory to create the package in, default: $COPY_TO"
+ echo " -c [directory]: the CLL respository, default: $CLL_DIR"
+ echo " -z : enable zip output, default: disabled"
+}
+
+while getopts t:c:z o
+do
+ case "$o" in
+ t) COPY_TO=$OPTARG;;
+ c) CLL_DIR=$OPTARG;;
+ z) DO_ZIP=1;;
+ [?]) showUsage; exit 1;;
+ esac
+done
+
+WEBGUI_SRC=$CLL_DIR/htdocs
+API_DIR=$CLL_DIR/htdocs/Utils/DsRestAPI/
+CUST_DIR=$CLL_DIR/test/TestContent
+TESTCASES_DIR=$CLL_DIR/test/DsRestAPI/JSON_reqResp
+
+MOCK_SERVER_DIR=$CLL_DIR/test/MockedServer
+MOCKTEST_DIR=$CLL_DIR/test/MockTest
+MOCKTEST_DSSERVERDESCRIPTOR=$CLL_DIR/test/DsRestAPI/DsRestAPITestConfig.json
+SELENIUM_DIR=$CLL_DIR/test/Selenium
+
+API_LOC=$COPY_TO/htdocs/Utils/DsRestAPI
+CUST_LOC=$COPY_TO/htdocs/CustomizableContent
+WEBAPP_LOC=$COPY_TO/htdocs/WebApplications
+TESTCASES_LOC=$WEBAPP_LOC/MockTest/Testcases
+SELENIUM_LOC=$COPY_TO/htdocs/Selenium
+
+MAIN_HTML=$COPY_TO/htdocs/Main.html
+TEST_HETML=$COPY_TO/htdocs/Test.html
+
+# create target directory if it does not exist
+if [ ! -d $COPY_TO ]; then
+ mkdir $COPY_TO
+fi
+
+# check if offline WebGui already exists and delete it if it does
+if [ -e $COPY_TO/deleteOfflineWebGUI.sh ]; then
+ cd $COPY_TO
+ ./deleteOfflineWebGUI.sh
+ cd $CURRENT_DIR
+fi
+
+cp -arL $WEBGUI_SRC $COPY_TO
+
+# check if the symbolic link to the js API exists and delete it if necessary
+if [ -e $API_LOC ]; then
+ rm -rf $API_LOC
+fi
+cp -arL $API_DIR $API_LOC
+
+# check if the directory exsits (it usually does, not only when the server is running) and delete it
+if [ -e $COPY_TO/htdocs/CustomizableContent ]; then
+ rm -rf $COPY_TO/htdocs/CustomizableContent
+fi
+cp -arL $CUST_DIR $CUST_LOC
+
+cp -arL $MOCK_SERVER_DIR $API_LOC
+cp -arL $MOCKTEST_DIR $WEBAPP_LOC
+
+cp -arL $SELENIUM_DIR $SELENIUM_LOC
+
+cp -arL $TESTCASES_DIR/* $TESTCASES_LOC
+
+cp -arL $MOCKTEST_DSSERVERDESCRIPTOR $WEBAPP_LOC/MockTest/DsRestAPITestConfig.js
+
+awk '{
+ if ($0 ~ /FileHandler.js/) {
+ sub("FileHandler.js", "DsRestAPI/MockedServer/FileHandler.js");
+ print $0;
+ } else {
+ print $0
+ }
+}' $MAIN_HTML > $TEST_HETML
+
+cd $COPY_TO/htdocs
+listOfFiles=`find | cut -b3- | awk '{if(NR>1){if(NR!=2){print ", "}print "\""$0"\""}}'`
+# this will replace \n-s with spaces, so sed will work
+listOfFiles=`echo $listOfFiles`
+cd $CURRENT_DIR
+
+sed -i "s|REPLACETHIS|$listOfFiles|g" $API_LOC/MockedServer/FileHandler.js
+
+if [ $DO_ZIP == 1 ]; then
+ cd $COPY_TO
+ tar -czvf WebGUI.tgz htdocs >> /dev/null
+ rm -rf WebGUI
+ cd $CURRENT_DIR
+fi
+
+cd $CURRENT_DIR
+
+echo "rm -rf htdocs; rm -f WebGUI.tgz; rm -f deleteOfflineWebGUI.sh" > $COPY_TO/deleteOfflineWebGUI.sh
+chmod u+x $COPY_TO/deleteOfflineWebGUI.sh
diff --git a/test/nightlytest_webGUI_git.py b/test/nightlytest_webGUI_git.py
new file mode 100644
index 0000000..2bf05e3
--- /dev/null
+++ b/test/nightlytest_webGUI_git.py
@@ -0,0 +1,11 @@
+#// Copyright (c) 2000-2017 Ericsson Telecom AB //
+#// All rights reserved. This program and the accompanying materials are made available under the //
+#// terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at //
+#// http://www.eclipse.org/legal/epl-v10.html //
+#///////////////////////////////////////////////////////////////////////////////////////////////////////
+
+import sys, os
+
+os.system('./createOfflineWebGUI.sh');
+os.system('cd WebGUI/htdocs/Selenium; ./runTestsWithXvfb.sh');
+os.system('cd WebGUI; ./deleteOfflineWebGUI.sh');