summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md43
-rw-r--r--cds-ui/designer-client/package-lock.json508
-rw-r--r--cds-ui/designer-client/package.json2
-rw-r--r--cds-ui/designer-client/src/app/modules/feature-modules/packages/configuration-dashboard/configuration-dashboard.component.html535
-rw-r--r--cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/scripts-tab/scripts-tab.component.html3
-rw-r--r--cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-creation/templ-mapp-creation.component.css5
-rw-r--r--cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-creation/templ-mapp-creation.component.html19
-rw-r--r--cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-creation/templ-mapp-creation.component.ts40
-rw-r--r--cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-listing/templ-mapp-listing.component.html7
-rw-r--r--cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-listing/templ-mapp-listing.component.ts14
-rw-r--r--cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/template-mapping.component.html8
-rw-r--r--cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/template-mapping.component.ts11
-rw-r--r--cds-ui/designer-client/src/app/modules/feature-modules/packages/packages-api.service.ts9
-rw-r--r--cds-ui/designer-client/src/app/modules/feature-modules/packages/packages-dashboard/package-list/package-list.component.html4
-rwxr-xr-xcds-ui/designer-client/src/assets/icomoon/fonts/icomoon.eotbin22112 -> 22348 bytes
-rwxr-xr-xcds-ui/designer-client/src/assets/icomoon/fonts/icomoon.svg2
-rwxr-xr-xcds-ui/designer-client/src/assets/icomoon/fonts/icomoon.ttfbin21948 -> 22184 bytes
-rwxr-xr-xcds-ui/designer-client/src/assets/icomoon/fonts/icomoon.woffbin22028 -> 22264 bytes
-rwxr-xr-xcds-ui/designer-client/src/assets/icomoon/style.css18
-rw-r--r--cds-ui/designer-client/src/assets/img/icon-action-custom-hover.svg27
-rw-r--r--cds-ui/designer-client/src/assets/img/icon-action-custom.svg27
-rw-r--r--cds-ui/designer-client/src/assets/img/icon-action-default-hover.svg92
-rw-r--r--cds-ui/designer-client/src/assets/img/icon-action-default.svg92
-rw-r--r--cds-ui/designer-client/src/assets/img/icon-action-import-hover.svg78
-rw-r--r--cds-ui/designer-client/src/assets/img/icon-action-import.svg78
-rw-r--r--cds-ui/designer-client/src/assets/img/icon-action-recent-hover.svg52
-rw-r--r--cds-ui/designer-client/src/assets/img/icon-action-recent.svg52
-rw-r--r--cds-ui/designer-client/src/styles.css272
-rw-r--r--cds-ui/server/src/controllers/blueprint-rest.controller.ts34
-rw-r--r--cds-ui/server/src/datasources/blueprint.datasource-template.ts8
-rw-r--r--cds-ui/server/src/services/blueprint.service.ts4
-rw-r--r--docs/conf.py2
-rw-r--r--docs/datadictionary/complexResponse.rst24
-rw-r--r--docs/datadictionary/create_netbox_ip_address.rst8
-rw-r--r--docs/datadictionary/dbsystemcode.rst16
-rw-r--r--docs/datadictionary/resourcedefinitioncodesnip.rst80
-rw-r--r--docs/datadictionary/resourcesource.rst33
-rw-r--r--docs/datadictionary/restauth.rst54
-rw-r--r--docs/datadictionary/restsourcecode.rst162
-rw-r--r--docs/datadictionary/sourcecapabilitycode.rst64
-rw-r--r--docs/datadictionary/sourcedefaultcode.rst10
-rw-r--r--docs/datadictionary/sourceinputcode.rst10
-rw-r--r--docs/datadictionary/sourceprimarydbcode.rst92
-rw-r--r--docs/designtime.rst2
-rw-r--r--docs/installation.rst4
-rw-r--r--docs/media/CDS.pngbin0 -> 23391 bytes
-rw-r--r--docs/microservices/workflow.rst78
-rwxr-xr-xms/blueprintsprocessor/application/src/main/resources/application-dev.properties16
-rw-r--r--ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutor.kt97
-rw-r--r--ms/blueprintsprocessor/functions/python-executor/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutorTest.kt11
-rw-r--r--ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/BluePrintMessageLibData.kt6
-rw-r--r--ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/service/KafkaMessageProducerService.kt52
-rw-r--r--ms/blueprintsprocessor/modules/commons/message-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/service/BlueprintMessageConsumerServiceTest.kt2
-rw-r--r--ms/blueprintsprocessor/modules/commons/message-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/service/BlueprintMessageProducerServiceTest.kt2
-rw-r--r--ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/BlueprintModelController.kt12
-rw-r--r--ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/BluePrintProcessingKafkaConsumer.kt25
-rw-r--r--ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/KafkaPublishAuditService.kt10
-rw-r--r--ms/command-executor/src/main/docker/Dockerfile2
-rw-r--r--ms/command-executor/src/main/python/command_executor_handler.py72
-rw-r--r--ms/command-executor/src/main/python/command_executor_server.py31
-rw-r--r--ms/command-executor/src/main/python/utils.py52
61 files changed, 2551 insertions, 522 deletions
diff --git a/README.md b/README.md
index 5c7ef103a..ba9c29357 100644
--- a/README.md
+++ b/README.md
@@ -5,3 +5,46 @@
## Reference
https://github.com/pinterest/ktlint
+
+## Getting started
+
+![Basic_Architecture](./docs/media/CDS.png)
+
+## Basic Requirements
+Before you can build this project, you must install and configure the following dependencies on your machine:
+
+ 1- Java 8 SDK
+
+ 2- Node and npm installed
+
+ 3- Angular CLI & Angular v8
+
+ 4- MySQL Database
+
+ 5- maven
+
+## Running in Development Mode
+
+* In the main project folder run `mvn clean install` command to install all libraries and dependencies for maven and npm.
+
+ 1- Back-end MS
+
+ * create `sdnctl` table in MySQL
+ * (Optional) You could run the project in a specific profile(dev, local) by adding `-Dspring.profiles.active=profile-name`
+
+2- Loop-back server: that allow your request to reach the backend from cds-ui
+ * move to `./cds-ui/server/` folder and run the command `npm start`
+
+ 3- cds-ui
+
+ * move to `./cds-ui/designer-client/` folder and run the command `npm start`, This command will make sure all the files follow the linting rules and then connect to the loopback server.
+
+## Using an IDE
+
+**Front-end** you could use `vscode` or `webstorm`.
+
+**Back-end** `Intellij` with kotlin plugin or any other editor
+
+
+---
+For more information check the `docs` folder. \ No newline at end of file
diff --git a/cds-ui/designer-client/package-lock.json b/cds-ui/designer-client/package-lock.json
index 89d9c064c..c46ca55c7 100644
--- a/cds-ui/designer-client/package-lock.json
+++ b/cds-ui/designer-client/package-lock.json
@@ -8,6 +8,7 @@
"version": "0.803.25",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.803.25.tgz",
"integrity": "sha512-usV/zEncKCKQuF6AD3pRU6N5i5fbaAux/qZb+nbOz9/2G5jrXwe5sH+y3vxbgqB83e3LqusEQCTu7/tfg6LwZg==",
+ "dev": true,
"requires": {
"@angular-devkit/core": "8.3.25",
"rxjs": "6.4.0"
@@ -167,6 +168,7 @@
"version": "8.3.25",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-8.3.25.tgz",
"integrity": "sha512-l7Gqy1tMrTpRmPVlovcFX8UA3mtXRlgO8kcSsbJ9MKRKNTCcxlfsWEYY5igyDBUVh6ADkgSIu0nuk31ZGTe0lw==",
+ "dev": true,
"requires": {
"ajv": "6.10.2",
"fast-json-stable-stringify": "2.0.0",
@@ -179,6 +181,7 @@
"version": "8.3.25",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-8.3.25.tgz",
"integrity": "sha512-/p1MkfursfLy+JRGXlJGPEmX55lrFCsR/2khWAVXZcMaFR3QlR/b6/zvB8I2pHFfr0/XWnYTT/BsF7rJjO3RmA==",
+ "dev": true,
"requires": {
"@angular-devkit/core": "8.3.25",
"rxjs": "6.4.0"
@@ -205,6 +208,7 @@
"version": "8.3.25",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-8.3.25.tgz",
"integrity": "sha512-CPJI5nnbBvvyBUFwOHfRXy/KVwsiYlcbDAeIk1klcjQjbVFYZbnY0iAhNupy9j7rPQhb7jle5oslU3TLfbqOTQ==",
+ "dev": true,
"requires": {
"@angular-devkit/architect": "0.803.25",
"@angular-devkit/core": "8.3.25",
@@ -2071,6 +2075,7 @@
"version": "8.3.25",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-8.3.25.tgz",
"integrity": "sha512-/vEPtE+fvgsWPml/MVqzmlGPBujadPPNwaTuuj5Uz1aVcKeEYzLkbN8YQOpml4vxZHCF8RDwNdGiU4SZg63Jfg==",
+ "dev": true,
"requires": {
"@angular-devkit/core": "8.3.25",
"@angular-devkit/schematics": "8.3.25"
@@ -2080,6 +2085,7 @@
"version": "0.803.25",
"resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.803.25.tgz",
"integrity": "sha512-VIlqhJsCStA3aO4llxZ7lAOvQUqppyZdrEO7f/ApIJmuofPQTkO5Hx21tnv0dyExwoqPCSIHzEu4Tmc0/TWM1A==",
+ "dev": true,
"requires": {
"@angular-devkit/core": "8.3.25",
"@angular-devkit/schematics": "8.3.25",
@@ -2101,6 +2107,11 @@
"@types/underscore": "*"
}
},
+ "@types/color-name": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
+ },
"@types/datatables.net": {
"version": "1.10.18",
"resolved": "https://registry.npmjs.org/@types/datatables.net/-/datatables.net-1.10.18.tgz",
@@ -2516,11 +2527,346 @@
}
},
"angular-datatables": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/angular-datatables/-/angular-datatables-8.1.0.tgz",
- "integrity": "sha512-UJmF8qLdxIALyabwslvMvJ8zjkJWIfn/IfzEKO1vv6z+DhwfHlTS7oFOF40x0ZbSGfq0E1Yyscl7MOl71AulHw==",
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/angular-datatables/-/angular-datatables-9.0.1.tgz",
+ "integrity": "sha512-F3mieJK0qkxGaX+uoKD2kVLDGM8HR2ZmLboN5vWAu4yKAOYI7x3NFfC+patBt39RZyEC2ajzKitOMyYKm6KUgA==",
"requires": {
- "@angular/cli": "^8.0.2"
+ "@angular/cli": "^9.0.6"
+ },
+ "dependencies": {
+ "@angular-devkit/architect": {
+ "version": "0.901.4",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.4.tgz",
+ "integrity": "sha512-w4RMj7eLhUSh70HUy5tW4EXjLQFXk0Lfr9WiSy5gvPGp+zzYxknI+Wn4Xid1wU/WS+4tuMv5nJIaNaH2sABESQ==",
+ "requires": {
+ "@angular-devkit/core": "9.1.4",
+ "rxjs": "6.5.4"
+ }
+ },
+ "@angular-devkit/core": {
+ "version": "9.1.4",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.4.tgz",
+ "integrity": "sha512-OPFQDmT4XabLMSRDgmnzedlOrc83DzQIgLcfoh/UhZ7aJKf/2Vq4l09p/DkMNI36vN5BRL0zDZt7TjvKNgyYgA==",
+ "requires": {
+ "ajv": "6.12.0",
+ "fast-json-stable-stringify": "2.1.0",
+ "magic-string": "0.25.7",
+ "rxjs": "6.5.4",
+ "source-map": "0.7.3"
+ }
+ },
+ "@angular-devkit/schematics": {
+ "version": "9.1.4",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-9.1.4.tgz",
+ "integrity": "sha512-RAbdnUEZ3JTLmWSBiXT5trsVx8Fi72fxN9CiRaluM09Cytg6BUc1wC5XCO0YPvhI400+3Ro1nwjPXezjg7LXzQ==",
+ "requires": {
+ "@angular-devkit/core": "9.1.4",
+ "ora": "4.0.3",
+ "rxjs": "6.5.4"
+ }
+ },
+ "@angular/cli": {
+ "version": "9.1.4",
+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-9.1.4.tgz",
+ "integrity": "sha512-H9MqoT4zyIv+Yo3cvRVkzafWGHsqt7jUvtvGwMHIDMTfEX+Q8yiYlDLL6WM3Eb6/hDmLcRGC/GI495sKS1z5qA==",
+ "requires": {
+ "@angular-devkit/architect": "0.901.4",
+ "@angular-devkit/core": "9.1.4",
+ "@angular-devkit/schematics": "9.1.4",
+ "@schematics/angular": "9.1.4",
+ "@schematics/update": "0.901.4",
+ "@yarnpkg/lockfile": "1.1.0",
+ "ansi-colors": "4.1.1",
+ "debug": "4.1.1",
+ "ini": "1.3.5",
+ "inquirer": "7.1.0",
+ "npm-package-arg": "8.0.1",
+ "npm-pick-manifest": "6.0.0",
+ "open": "7.0.3",
+ "pacote": "9.5.12",
+ "read-package-tree": "5.3.1",
+ "rimraf": "3.0.2",
+ "semver": "7.1.3",
+ "symbol-observable": "1.2.0",
+ "universal-analytics": "0.4.20",
+ "uuid": "7.0.2"
+ }
+ },
+ "@schematics/angular": {
+ "version": "9.1.4",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-9.1.4.tgz",
+ "integrity": "sha512-7nbiYBRgXc+f0sa5iXTcF6/VMy/Xq0wyKKnDFiLCb2aFYR7EXRHWF2GuwDIg2bvFugLuCBDoNnXeddLE1TXGWg==",
+ "requires": {
+ "@angular-devkit/core": "9.1.4",
+ "@angular-devkit/schematics": "9.1.4"
+ }
+ },
+ "@schematics/update": {
+ "version": "0.901.4",
+ "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.901.4.tgz",
+ "integrity": "sha512-jCtZY2Fbj502gKN5gdu1brnRy/ssyzTrWm69Ty73V+t8uL7nLr+/hny/VBJ8CiQnKQvxcgVl1xgvI1cXzpysVA==",
+ "requires": {
+ "@angular-devkit/core": "9.1.4",
+ "@angular-devkit/schematics": "9.1.4",
+ "@yarnpkg/lockfile": "1.1.0",
+ "ini": "1.3.5",
+ "npm-package-arg": "^8.0.0",
+ "pacote": "9.5.12",
+ "rxjs": "6.5.4",
+ "semver": "7.1.3",
+ "semver-intersect": "1.4.0"
+ }
+ },
+ "ajv": {
+ "version": "6.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz",
+ "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "fast-deep-equal": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "hosted-git-info": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.4.tgz",
+ "integrity": "sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ==",
+ "requires": {
+ "lru-cache": "^5.1.1"
+ }
+ },
+ "inquirer": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz",
+ "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==",
+ "requires": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^3.0.0",
+ "cli-cursor": "^3.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^3.0.0",
+ "lodash": "^4.17.15",
+ "mute-stream": "0.0.8",
+ "run-async": "^2.4.0",
+ "rxjs": "^6.5.3",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "through": "^2.3.6"
+ }
+ },
+ "is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "requires": {
+ "is-docker": "^2.0.0"
+ }
+ },
+ "magic-string": {
+ "version": "0.25.7",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
+ "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
+ "requires": {
+ "sourcemap-codec": "^1.4.4"
+ }
+ },
+ "npm-package-arg": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.0.1.tgz",
+ "integrity": "sha512-/h5Fm6a/exByzFSTm7jAyHbgOqErl9qSNJDQF32Si/ZzgwT2TERVxRxn3Jurw1wflgyVVAxnFR4fRHPM7y1ClQ==",
+ "requires": {
+ "hosted-git-info": "^3.0.2",
+ "semver": "^7.0.0",
+ "validate-npm-package-name": "^3.0.0"
+ }
+ },
+ "npm-pick-manifest": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.0.0.tgz",
+ "integrity": "sha512-PdJpXMvjqt4nftNEDpCgjBUF8yI3Q3MyuAmVB9nemnnCg32F4BPL/JFBfdj8DubgHCYUFQhtLWmBPvdsFtjWMg==",
+ "requires": {
+ "npm-install-checks": "^4.0.0",
+ "npm-package-arg": "^8.0.0",
+ "semver": "^7.0.0"
+ }
+ },
+ "open": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/open/-/open-7.0.3.tgz",
+ "integrity": "sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA==",
+ "requires": {
+ "is-docker": "^2.0.0",
+ "is-wsl": "^2.1.1"
+ }
+ },
+ "pacote": {
+ "version": "9.5.12",
+ "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.12.tgz",
+ "integrity": "sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ==",
+ "requires": {
+ "bluebird": "^3.5.3",
+ "cacache": "^12.0.2",
+ "chownr": "^1.1.2",
+ "figgy-pudding": "^3.5.1",
+ "get-stream": "^4.1.0",
+ "glob": "^7.1.3",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^5.1.1",
+ "make-fetch-happen": "^5.0.0",
+ "minimatch": "^3.0.4",
+ "minipass": "^2.3.5",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "normalize-package-data": "^2.4.0",
+ "npm-normalize-package-bin": "^1.0.0",
+ "npm-package-arg": "^6.1.0",
+ "npm-packlist": "^1.1.12",
+ "npm-pick-manifest": "^3.0.0",
+ "npm-registry-fetch": "^4.0.0",
+ "osenv": "^0.1.5",
+ "promise-inflight": "^1.0.1",
+ "promise-retry": "^1.1.1",
+ "protoduck": "^5.0.1",
+ "rimraf": "^2.6.2",
+ "safe-buffer": "^5.1.2",
+ "semver": "^5.6.0",
+ "ssri": "^6.0.1",
+ "tar": "^4.4.10",
+ "unique-filename": "^1.1.1",
+ "which": "^1.3.1"
+ },
+ "dependencies": {
+ "hosted-git-info": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
+ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg=="
+ },
+ "npm-package-arg": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz",
+ "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==",
+ "requires": {
+ "hosted-git-info": "^2.7.1",
+ "osenv": "^0.1.5",
+ "semver": "^5.6.0",
+ "validate-npm-package-name": "^3.0.0"
+ }
+ },
+ "npm-pick-manifest": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz",
+ "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==",
+ "requires": {
+ "figgy-pudding": "^3.5.1",
+ "npm-package-arg": "^6.0.0",
+ "semver": "^5.4.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ }
+ }
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "rxjs": {
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz",
+ "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==",
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "semver": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.3.tgz",
+ "integrity": "sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA=="
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "uuid": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.2.tgz",
+ "integrity": "sha512-vy9V/+pKG+5ZTYKf+VcphF5Oc6EFiu3W8Nv3P3zIh0EqVI80ZxOzuPfe9EHjkFNvf8+xuTHVeei4Drydlx4zjw=="
+ }
}
},
"angular-font-awesome": {
@@ -3517,6 +3863,11 @@
"restore-cursor": "^3.1.0"
}
},
+ "cli-spinners": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.3.0.tgz",
+ "integrity": "sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w=="
+ },
"cli-width": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
@@ -4225,6 +4576,21 @@
"strip-bom": "^3.0.0"
}
},
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "requires": {
+ "clone": "^1.0.2"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
+ }
+ }
+ },
"define-properties": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@@ -5988,6 +6354,7 @@
"version": "6.5.1",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.1.tgz",
"integrity": "sha512-uxNHBeQhRXIoHWTSNYUFhQVrHYFThIt6IVo2fFmSe8aBwdR3/w6b58hJpiL/fMukFkvGzjg+hSxFtwvVmKZmXw==",
+ "dev": true,
"requires": {
"ansi-escapes": "^4.2.1",
"chalk": "^2.4.2",
@@ -6154,6 +6521,11 @@
"integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
"dev": true
},
+ "is-docker": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz",
+ "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ=="
+ },
"is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
@@ -6180,6 +6552,11 @@
"is-extglob": "^2.1.1"
}
},
+ "is-interactive": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
+ "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="
+ },
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -6266,7 +6643,8 @@
"is-wsl": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
},
"isarray": {
"version": "1.0.0",
@@ -7559,6 +7937,14 @@
"integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
"dev": true
},
+ "log-symbols": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
+ "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
+ "requires": {
+ "chalk": "^2.4.2"
+ }
+ },
"log4js": {
"version": "4.5.1",
"resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz",
@@ -7599,6 +7985,7 @@
"version": "0.25.3",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.3.tgz",
"integrity": "sha512-6QK0OpF/phMz0Q2AxILkX2mFhi7m+WMwTRg0LQKq/WBB0cDP4rYH3Wp4/d3OTXlrPLVJT/RFqj8tFeAR4nk8AA==",
+ "dev": true,
"requires": {
"sourcemap-codec": "^1.4.4"
}
@@ -8229,6 +8616,21 @@
"npm-normalize-package-bin": "^1.0.1"
}
},
+ "npm-install-checks": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz",
+ "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==",
+ "requires": {
+ "semver": "^7.1.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+ "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ=="
+ }
+ }
+ },
"npm-normalize-package-bin": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
@@ -8266,6 +8668,7 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz",
"integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==",
+ "dev": true,
"requires": {
"figgy-pudding": "^3.5.1",
"npm-package-arg": "^6.0.0",
@@ -8275,7 +8678,8 @@
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
}
}
},
@@ -8463,6 +8867,7 @@
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz",
"integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==",
+ "dev": true,
"requires": {
"is-wsl": "^1.1.0"
}
@@ -8494,6 +8899,75 @@
}
}
},
+ "ora": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.3.tgz",
+ "integrity": "sha512-fnDebVFyz309A73cqCipVL1fBZewq4vwgSHfxh43vVy31mbyoQ8sCH3Oeaog/owYOs/lLlGVPCISQonTneg6Pg==",
+ "requires": {
+ "chalk": "^3.0.0",
+ "cli-cursor": "^3.1.0",
+ "cli-spinners": "^2.2.0",
+ "is-interactive": "^1.0.0",
+ "log-symbols": "^3.0.0",
+ "mute-stream": "0.0.8",
+ "strip-ansi": "^6.0.0",
+ "wcwidth": "^1.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
"original": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
@@ -8608,6 +9082,7 @@
"version": "9.5.5",
"resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.5.tgz",
"integrity": "sha512-jAEP+Nqj4kyMWyNpfTU/Whx1jA7jEc5cCOlurm0/0oL+v8TAp1QSsK83N7bYe+2bEdFzMAtPG5TBebjzzGV0cA==",
+ "dev": true,
"requires": {
"bluebird": "^3.5.3",
"cacache": "^12.0.2",
@@ -8643,6 +9118,7 @@
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz",
"integrity": "sha512-+IluBC5K201+gRU85vFlUwX3PFShZAbAgDNp2ewJdWMVSppdo/Zih0ul2Ecky/X7b51J7LrrUAP+XOmOCvYZqA==",
+ "dev": true,
"requires": {
"figgy-pudding": "^3.5.1",
"npm-package-arg": "^6.0.0",
@@ -8653,6 +9129,7 @@
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
"requires": {
"glob": "^7.1.3"
}
@@ -8660,7 +9137,8 @@
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
}
}
},
@@ -9700,6 +10178,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz",
"integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==",
+ "dev": true,
"requires": {
"glob": "^7.1.3"
}
@@ -9863,7 +10342,8 @@
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
},
"semver-dsl": {
"version": "1.0.1",
@@ -10783,6 +11263,7 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
"requires": {
"ansi-regex": "^4.1.0"
},
@@ -10790,7 +11271,8 @@
"ansi-regex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
}
}
},
@@ -12219,6 +12701,14 @@
"minimalistic-assert": "^1.0.0"
}
},
+ "wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "requires": {
+ "defaults": "^1.0.3"
+ }
+ },
"webdriver-js-extender": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz",
diff --git a/cds-ui/designer-client/package.json b/cds-ui/designer-client/package.json
index 1e5128111..a8427ee9e 100644
--- a/cds-ui/designer-client/package.json
+++ b/cds-ui/designer-client/package.json
@@ -24,7 +24,7 @@
"@angular/router": "~8.2.9",
"@ng-bootstrap/ng-bootstrap": "^5.1.1",
"angular-animations": "0.0.10",
- "angular-datatables": "^8.0.0",
+ "angular-datatables": "^9.0.1",
"angular-font-awesome": "^3.1.2",
"angular-material-expansion-panel": "^0.7.2",
"backbone": "^1.4.0",
diff --git a/cds-ui/designer-client/src/app/modules/feature-modules/packages/configuration-dashboard/configuration-dashboard.component.html b/cds-ui/designer-client/src/app/modules/feature-modules/packages/configuration-dashboard/configuration-dashboard.component.html
index 6c7e1efc6..9e1c9b709 100644
--- a/cds-ui/designer-client/src/app/modules/feature-modules/packages/configuration-dashboard/configuration-dashboard.component.html
+++ b/cds-ui/designer-client/src/app/modules/feature-modules/packages/configuration-dashboard/configuration-dashboard.component.html
@@ -107,9 +107,542 @@
</div>
</div>
<div class="col-2 package-view-button pt-3">
- <button class="btn btn-sm btn-primary mb-2" (click)="goToDesignerMode()">Designer
+ <!-- <button class="btn btn-sm btn-primary mb-2" (click)="goToDesignerMode()">Designer
Mode
+ </button> -->
+ <!-- Button trigger modal - 1st Action -->
+ <button type="button" class="btn btn-sm btn-primary mb-2" data-toggle="modal"
+ data-target="#exampleModalLong">
+ Designer Mode
</button>
+ <!-- Modal -->
+ <div class="modal fade createActionModal" id="exampleModalLong" tabindex="-1" role="dialog"
+ aria-labelledby="exampleModalLongTitle" aria-hidden="true">
+ <div class="modal-dialog" role="document">
+ <div class="modal-content">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h5 class="modal-title" id="exampleModalLongTitle"></h5>
+ <button type="button" class="close" data-dismiss="modal"
+ aria-label="Close" title="Close">
+ <i class="icon-action-close"></i>
+ </button>
+ </div>
+ <div class="modal-body">
+ <div id="carouselExampleIndicators" class="carousel slide"
+ data-ride="carousel" data-interval="false">
+ <div class="carousel-inner" style="height: 450px">
+ <!--OPTIONS SLIDE-->
+ <div class="carousel-item active">
+ <h1>Let’s create the 1st Action</h1>
+ <div class="row">
+ <!--Custom Action-->
+ <div class="col-3 d-flex">
+ <a class="d-flex" data-target="#carouselExampleIndicators"
+ data-slide-to="1">
+ <div class="card actionType custom">
+ <div class="card-body">
+ <h3>Custom</h3>
+ <p>Start with your own settings</p>
+ <button
+ data-target="#carouselExampleIndicators"
+ data-slide-to="1" class="btn">
+ Create
+ </button>
+ </div>
+ </div>
+ </a>
+ </div>
+ <!--Default Action-->
+ <div class="col-3 d-flex">
+ <a class="d-flex" data-target="#carouselExampleIndicators"
+ data-slide-to="2">
+ <div class="card actionType default">
+ <div class="card-body">
+ <h3>Default</h3>
+ <p>Explore preset actions from CDS
+ Action Catalog</p>
+ <button
+ data-target="#carouselExampleIndicators"
+ data-slide-to="2" class="btn">
+ Select
+ </button>
+ </div>
+ </div>
+ </a>
+ </div>
+ <!--Recent Action-->
+ <div class="col-3 d-flex">
+ <a class="d-flex" data-target="#carouselExampleIndicators"
+ data-slide-to="3">
+ <div class="card actionType recent">
+ <div class="card-body">
+ <h3>Recent</h3>
+ <p>Re-use recent actions of your
+ recent
+ packages</p>
+ <button
+ data-target="#carouselExampleIndicators"
+ data-slide-to="3" class="btn">
+ Select
+ </button>
+ </div>
+ </div>
+ </a>
+ </div>
+ <!--Import Action-->
+ <div class="col-3 d-flex">
+ <a class="d-flex" data-target="#carouselExampleIndicators"
+ data-slide-to="4">
+ <div class="card actionType import">
+ <div class="card-body">
+ <h3>Import</h3>
+ <p>Import your own action files</p>
+ <button
+ data-target="#carouselExampleIndicators"
+ data-slide-to="4" class="btn">
+ Browse</button>
+ </div>
+ </div>
+ </a>
+ </div>
+ </div>
+ </div>
+ <!--Custom Action Form-->
+ <div class="carousel-item">
+ <button data-target="#carouselExampleIndicators"
+ data-slide-to="0" title="Back" class="btn back"><i
+ class="icon-action-back"></i></button>
+ <h1>Create Custom Action</h1>
+ <div class="form-group text-center">
+ <input type="text" class="form-control customAction"
+ placeholder="Type Action Name" autofocus>
+ <button type="button" class="btn submit">Start</button>
+ </div>
+
+ </div>
+ <!--Default Actions Form-->
+ <div class="carousel-item">
+ <button data-target="#carouselExampleIndicators"
+ data-slide-to="0" title="Back" class="btn back"><i
+ class="icon-action-back"></i></button>
+ <h1>Choose Action(s) from CDS Default Package </h1>
+ <div class="actionFormWrapper">
+ <div class="row mb-3">
+ <div class="col sort-packages">
+ <label class="actionlabel">Version</label>
+ <div class="dropdown" style="width: 90px">
+ <input class="dropdown-toggle" type="text">
+ <div class="dropdown-text">1.6.2</div>
+ <ul class="dropdown-content">
+ <li>
+ <a>1.1.8</a>
+ </li>
+ <li>
+ <a>2.1.8</a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="col">
+ <input type="text"
+ class="form-control searchInput"
+ placeholder="Search">
+ </div>
+ </div>
+ <div class="row actionsListScroll">
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation1"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation1">config-assign</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation2"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation2">config-assign-test</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation3"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation3">config-deploy</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation4"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation4">config-modify</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation5"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation5">config-assign1</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation5"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation5">config-assign1</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation5"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation5">config-assign1</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation5"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation5">config-assign1</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation5"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation5">config-assign1</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation5"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation5">config-assign1</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation5"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation5">config-assign1</label>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col text-center">
+ <p class="selectedActions">0 selected</p>
+ <button type="button"
+ class="btn submit">Start</button>
+ </div>
+ </div>
+ </div>
+ </div>
+ <!--Recent Actions Form-->
+ <div class="carousel-item">
+ <button data-target="#carouselExampleIndicators"
+ data-slide-to="0" title="Back" class="btn back"><i
+ class="icon-action-back"></i></button>
+ <h1>Choose Action(s) from Recent Packages</h1>
+ <div class="actionFormWrapper">
+ <div class="row mb-3">
+ <div class="col sort-packages">
+ <label class="actionlabel">Package
+ Name</label>
+ <div class="dropdown">
+ <input class="dropdown-toggle" type="text">
+ <div class="dropdown-text">CDS (v 1.0.0)
+ </div>
+ <ul class="dropdown-content">
+ <li>
+ <a>Test Package (v 1.1.8)</a>
+ </li>
+ <li>
+ <a>Test Package (v 1.1.8)</a>
+ </li>
+ <li>
+ <a>Test Package (v 1.1.8)</a>
+ </li>
+ <li>
+ <a>Test Package (v 1.1.8)</a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="col">
+ <input type="text"
+ class="form-control searchInput"
+ placeholder="Search">
+ </div>
+ </div>
+ <div class="row actionsListScroll">
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation1"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation1">config-assign</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation2"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation2">config-assign-test</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation3"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation3">config-deploy</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation4"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation4">config-modify</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation5"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation5">config-assign1</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation5"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation5">config-assign1</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation5"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation5">config-assign1</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation5"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation5">config-assign1</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation5"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation5">config-assign1</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation5"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation5">config-assign1</label>
+ </div>
+ </div>
+ </div>
+ <div class="col-6">
+ <div class="actionName">
+ <div class="custom-control custom-checkbox">
+ <input type="checkbox"
+ class="custom-control-input"
+ id="customControlValidation5"
+ required>
+ <label class="custom-control-label"
+ for="customControlValidation5">config-assign1</label>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col text-center">
+ <p class="selectedActions">0 selected</p>
+ <button type="button"
+ class="btn submit">Start</button>
+ </div>
+ </div>
+ </div>
+ </div>
+ <!--Import Actions Form-->
+ <div class="carousel-item">
+ <button data-target="#carouselExampleIndicators"
+ data-slide-to="0" title="Back" class="btn back"><i
+ class="icon-action-back"></i></button>
+ <h1>Import Action(s)</h1>
+ <div class="actionFormWrapper">
+ <div class="row">
+ <div class="col">
+ <ngx-file-drop accept=".json"
+ dropZoneLabel="Drop files here"
+ (onFileDrop)="dropped($event)"
+ (onFileOver)="fileOver($event)"
+ (onFileLeave)="fileLeave($event)">
+ <ng-template ngx-file-drop-content-tmp
+ let-openFileSelector="openFileSelector">
+ <div class="folder-upload">
+ <img
+ src="assets/img/folder-upload.svg" />
+ </div>
+ <div class="folder-upload-text">
+ Drag & Drop file
+ </div>
+ <div class="folder-upload-text">or
+ <button type="button"
+ class="btn btn-sm btn-primary"
+ (click)="openFileSelector()">Browse
+ Files
+ </button>
+ </div>
+ <div class="folder-upload-type">
+ Allowed file
+ type: json</div>
+ </ng-template>
+ </ngx-file-drop>
+ <div class="upload-table">
+ <table class="table">
+ <thead>
+ <tr
+ *ngFor="let item of uploadedFiles; let i=index">
+ <th width="40"><img
+ src="assets/img/icon-file-code.svg" />
+ </th>
+ <th>{{ item.name }}</th>
+ <th width="40"
+ class="text-right">
+ <img
+ src="assets/img/icon-remove-file.svg" />
+ </th>
+ </tr>
+ </thead>
+ </table>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col text-center">
+ <button type="button"
+ class="btn submit mt-4">Import</button>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
<button class="btn btn-sm btn-outline-secondary" (click)="deployCurrentPackage()"><i
class="fa fa-play-circle"></i> Deploy
</button>
diff --git a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/scripts-tab/scripts-tab.component.html b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/scripts-tab/scripts-tab.component.html
index 159f7aec4..1ecf2985e 100644
--- a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/scripts-tab/scripts-tab.component.html
+++ b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/scripts-tab/scripts-tab.component.html
@@ -116,8 +116,7 @@
<button (click)="resetTheUploadedFiles()" class="btn btn-sm btn-secondary" data-dismiss="modal"
type="button">Cancel
</button>
- <button (click)="setFilesToStore()" [disabled]="uploadedFiles?.length<=0" class="btn btn-sm btn-primary"
- data-dismiss="modal" type="button">
+ <button (click)="setFilesToStore()" class="btn btn-sm btn-primary" data-dismiss="modal" type="button">
Import
</button>
</div>
diff --git a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-creation/templ-mapp-creation.component.css b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-creation/templ-mapp-creation.component.css
index 7273b9c27..3a0d9461c 100644
--- a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-creation/templ-mapp-creation.component.css
+++ b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-creation/templ-mapp-creation.component.css
@@ -1,4 +1,9 @@
.accordian-title {
color: #a09e9e;
font-size: .9em;
+}
+
+.mapping-source-load {
+ background-color: white;
+ border: 0
} \ No newline at end of file
diff --git a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-creation/templ-mapp-creation.component.html b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-creation/templ-mapp-creation.component.html
index e6149c883..4f9b2709a 100644
--- a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-creation/templ-mapp-creation.component.html
+++ b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-creation/templ-mapp-creation.component.html
@@ -6,7 +6,8 @@
</label>
<div class="label-input">
- <input type="input" [(ngModel)]="fileName" placeholder="Template name">
+ <input type="input" [(ngModel)]="fileName" placeholder="Template name" name="templateName" autofocus
+ [autofocus]="true">
</div>
</div>
</div>
@@ -79,11 +80,13 @@
<div class="card-body">
<p class="text-center"><b>Select a source to load config parameters</b></p>
<div class="text-center">
- <a href="#" (click)="getMappingTableFromTemplate($event)" class="mapping-source-load">
+ <button [disabled]="!(variables?.length>0 && templateFileContent?.trim()?.length > 0)"
+ (click)="getMappingTableFromTemplate($event)" class="mapping-source-load" [ngClass]="variables?.length>0 && templateFileContent?.trim()?.length > 0
+ ?'hover-enable':'hover-disable'">
<i class="icon-use-attributes"></i>
<br />
<span>Use Current Template Instance</span>
- </a>
+ </button>
<a href="#" (click)="allowedExt=['.csv']" data-toggle="modal" data-target="#templateModal"
class="mapping-source-load">
<i class="icon-upload-attributes"></i>
@@ -199,8 +202,9 @@
</div>
<div class="template-mapping-action">
- <button (click)="cancel()" class="btn btn-outline-secondary">Cancel</button>
- <button (click)="saveToStore()" class="btn btn-primary">Submit</button>
+ <button (click)="cancel()" [disabled]="fileName?.length <=0"
+ class="btn btn-outline-secondary">Cancel</button>
+ <button (click)="saveToStore()" [disabled]="fileName?.length <=0" class="btn btn-primary">Submit</button>
</div>
</div>
</div>
@@ -253,8 +257,9 @@
<button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal"
(click)="resetTheUploadedFiles()">Cancel
</button>
- <button type="button" class="btn btn-sm btn-primary" data-dismiss="modal"
- (click)="uploadFile();openListView()">
+
+ <button (click)="uploadFile();openListView()" class="btn btn-sm btn-primary" data-dismiss="modal"
+ type="button">
Import
</button>
</div>
diff --git a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-creation/templ-mapp-creation.component.ts b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-creation/templ-mapp-creation.component.ts
index 7d4705d69..4601880f8 100644
--- a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-creation/templ-mapp-creation.component.ts
+++ b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-creation/templ-mapp-creation.component.ts
@@ -1,4 +1,4 @@
-import { Component, EventEmitter, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';
+import { Component, EventEmitter, OnDestroy, OnInit, Output, ViewChild, AfterViewInit, ElementRef } from '@angular/core';
import { FileSystemFileEntry, NgxFileDropEntry } from 'ngx-file-drop';
import { PackageCreationStore } from '../../package-creation.store';
import { TemplateInfo, TemplateStore } from '../../template.store';
@@ -17,14 +17,14 @@ import { ToastrService } from 'ngx-toastr';
})
export class TemplMappCreationComponent implements OnInit, OnDestroy {
@Output() showListViewParent = new EventEmitter<any>();
-
+ @Output() openList = new EventEmitter<any>();
public uploadedFiles: FileSystemFileEntry[] = [];
private fileNames: Set<string> = new Set();
private jsonConvert = new JsonConvert();
public files: NgxFileDropEntry[] = [];
fileName: any;
templateInfo = new TemplateInfo();
- private variables: string[] = [];
+ variables: string[] = [];
dtOptions: DataTables.Settings = {};
// We use this trigger because fetching the list of persons can be quite long,
// thus we ensure the data is fetched before rendering
@@ -44,8 +44,6 @@ export class TemplMappCreationComponent implements OnInit, OnDestroy {
currentTemplate: any;
currentMapping: any;
-
-
constructor(
private packageCreationStore: PackageCreationStore,
private templateStore: TemplateStore,
@@ -56,6 +54,7 @@ export class TemplMappCreationComponent implements OnInit, OnDestroy {
ngOnInit() {
this.templateStore.state$.subscribe(templateInfo => {
+ // init Template&mapping vars
console.log('----------');
console.log(templateInfo);
this.templateInfo = templateInfo;
@@ -63,21 +62,29 @@ export class TemplMappCreationComponent implements OnInit, OnDestroy {
if (this.fileName) {
this.fileName = this.fileName.split('-')[0];
}
- if (templateInfo.type === 'mapping') {
+ if (templateInfo.type === 'mapping' || templateInfo.type.includes('mapping')) {
this.mappingRes = templateInfo.mapping;
- this.currentMapping = templateInfo;
+ this.currentMapping = Object.assign({}, templateInfo);
this.resourceDictionaryRes = [];
this.resTableDtTrigger.next();
} else {
+ this.mappingRes = [];
+ this.currentMapping = Any;
+ }
+ this.templateFileContent = templateInfo.fileContent;
+ this.currentTemplate = Object.assign({}, templateInfo);
- this.templateFileContent = templateInfo.fileContent;
- this.currentTemplate = templateInfo;
+ if (templateInfo.type === 'template' || templateInfo.type.includes('template')) {
+ this.currentTemplate.fileName = 'Templates/' + this.fileName + '-template.vtl';
+ } else {
+ this.currentTemplate = Any;
}
+
});
this.dtOptions = {
pagingType: 'full_numbers',
- pageLength: 10,
+ pageLength: 25,
destroy: true,
retrieve: true,
};
@@ -211,7 +218,12 @@ export class TemplMappCreationComponent implements OnInit, OnDestroy {
this.showListViewParent.emit('tell parent to open create views');
}
+ closeCreationForm() {
+ this.openList.emit('close create form and open list');
+ }
+
getMappingTableFromTemplate(e) {
+ console.log('-' + this.templateFileContent + '-');
this.resourceDictionaryRes = [];
if (e) {
e.preventDefault();
@@ -219,10 +231,17 @@ export class TemplMappCreationComponent implements OnInit, OnDestroy {
if (this.variables && this.variables.length > 0) {
console.log('base');
this.packageCreationStore.getTemplateAndMapping(this.variables).subscribe(res => {
+ let message = 'Attributes are Fetched';
this.mappingRes = [];
this.resourceDictionaryRes = res;
console.log(this.resourceDictionaryRes);
this.rerender();
+ if (this.resourceDictionaryRes && this.resourceDictionaryRes.length <= 0) {
+ message = 'No values for those attributes';
+ }
+ this.toastr.success(message, 'Success');
+ }, err => {
+ this.toastr.error('Error');
});
}
}
@@ -261,6 +280,7 @@ export class TemplMappCreationComponent implements OnInit, OnDestroy {
}
this.fileName = '';
this.toastr.success('File is created', 'success');
+ this.closeCreationForm();
} else {
console.log('this file already exist');
this.toastr.error('File name already exist', 'Error');
diff --git a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-listing/templ-mapp-listing.component.html b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-listing/templ-mapp-listing.component.html
index a47963a72..8c92f0dc2 100644
--- a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-listing/templ-mapp-listing.component.html
+++ b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-listing/templ-mapp-listing.component.html
@@ -1,9 +1,9 @@
-<a *ngIf="isCreate" (click)="openCreationView()" class="create-template-mapping-button">
+<a (click)="openCreationView()" class="create-template-mapping-button">
<i class="fa fa-plus"></i> <span>Create</span>
</a>
-<div class="template-mapping-accordion">
+<div class="template-mapping-accordion" [hidden]="templateAndMappingMap?.size <= 0">
<div class="accordion" id="listAccordion">
<div class="card">
<div class="card-header" id="headingThree">
@@ -21,7 +21,8 @@
<div class="row">
<!-- <div class="col-4" style="color:white" *ngFor="let file of templates.files | keyvalue; let mapIndex = index">-->
<div class="col-4" *ngFor="let file of getKeys(templateAndMappingMap)">
- <a (click)="setSourceCodeEditor(file)" class="template-mapping-list" [ngClass]="{'active':currentFile == file}">{{file}}
+ <a (click)="setSourceCodeEditor(file)" class="template-mapping-list"
+ [ngClass]="{'active':currentFile == file}">{{file}}
<span *ngIf="getValue(file).isMapping">Mapping</span>
<span *ngIf="getValue(file).isTemplate">Template</span>
</a>
diff --git a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-listing/templ-mapp-listing.component.ts b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-listing/templ-mapp-listing.component.ts
index 448899019..ed9f3eeb3 100644
--- a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-listing/templ-mapp-listing.component.ts
+++ b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/templ-mapp-listing/templ-mapp-listing.component.ts
@@ -13,6 +13,7 @@ import { ActivatedRoute } from '@angular/router';
})
export class TemplMappListingComponent implements OnInit {
@Output() showCreationViewParentNotification = new EventEmitter<any>();
+ @Output() showFullView = new EventEmitter<any>();
private templateAndMappingMap = new Map<string, TemplateAndMapping>();
private templates: Template;
private mapping: Mapping;
@@ -71,6 +72,9 @@ export class TemplMappListingComponent implements OnInit {
openCreationView() {
this.showCreationViewParentNotification.emit('tell parent to open create views');
}
+ FullView() {
+ this.showFullView.emit('show full view');
+ }
setSourceCodeEditor(key: string) {
this.currentFile = key;
@@ -80,23 +84,23 @@ export class TemplMappListingComponent implements OnInit {
console.log(cba);
console.log(key);
console.log(this.templateAndMappingMap);
+ const templateInfo = new TemplateInfo();
if (cba.templates && cba.templates.files.has(templateKey)) {
const fileContent = cba.templates.getValue(templateKey.trim());
console.log(fileContent);
- const templateInfo = new TemplateInfo();
templateInfo.fileContent = fileContent;
templateInfo.fileName = templateKey;
- this.templateStore.changeTemplateInfo(templateInfo);
+ templateInfo.type = 'template';
}
const mappingKey = 'Templates/' + key + '-mapping.json';
if (cba.mapping && cba.mapping.files.has(mappingKey)) {
const obj = JSON.parse(cba.mapping.getValue(mappingKey));
- const templateInfo = new TemplateInfo();
templateInfo.mapping = obj;
templateInfo.fileName = mappingKey;
- templateInfo.type = 'mapping';
- this.templateStore.changeTemplateInfo(templateInfo);
+ templateInfo.type += 'mapping';
}
+ this.templateStore.changeTemplateInfo(templateInfo);
+ this.FullView();
});
}
diff --git a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/template-mapping.component.html b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/template-mapping.component.html
index f8cfe7a6a..8fd97d71d 100644
--- a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/template-mapping.component.html
+++ b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/template-mapping.component.html
@@ -1,9 +1,9 @@
<div *ngIf="!listView">
- <app-templ-mapp-listing
- (showCreationViewParentNotification)="openCreationView($event)">
+ <app-templ-mapp-listing (showCreationViewParentNotification)="openCreationView($event)" (showFullView)="openListView($event)">
</app-templ-mapp-listing>
</div>
<div *ngIf="!creationView">
- <app-templ-mapp-creation (showListViewParent)="openListView($event)"></app-templ-mapp-creation>
-</div>
+ <app-templ-mapp-creation (showListViewParent)="openListView($event)" (openList)="closeCreationView()">
+ </app-templ-mapp-creation>
+</div> \ No newline at end of file
diff --git a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/template-mapping.component.ts b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/template-mapping.component.ts
index 106765834..d2e25ef6f 100644
--- a/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/template-mapping.component.ts
+++ b/cds-ui/designer-client/src/app/modules/feature-modules/packages/package-creation/template-mapping/template-mapping.component.ts
@@ -8,8 +8,8 @@ import { PackageCreationStore } from '../package-creation.store';
styleUrls: ['./template-mapping.component.css']
})
export class TemplateMappingComponent implements OnInit {
- creationView = true;
- listView = false;
+ creationView = false;
+ listView = true;
constructor(private route: ActivatedRoute, private pakcageStore: PackageCreationStore) {
}
@@ -17,7 +17,7 @@ export class TemplateMappingComponent implements OnInit {
ngOnInit() {
if (this.route.snapshot.paramMap.has('id')) {
console.log('Edit mode');
- this.creationView = false;
+ this.creationView = true;
this.listView = false;
} else {
console.log('Create mode');
@@ -34,4 +34,9 @@ export class TemplateMappingComponent implements OnInit {
this.creationView = false;
}
+ closeCreationView() {
+ this.creationView = true;
+ this.listView = false;
+ }
+
}
diff --git a/cds-ui/designer-client/src/app/modules/feature-modules/packages/packages-api.service.ts b/cds-ui/designer-client/src/app/modules/feature-modules/packages/packages-api.service.ts
index 2332d8e53..8275f8c6c 100644
--- a/cds-ui/designer-client/src/app/modules/feature-modules/packages/packages-api.service.ts
+++ b/cds-ui/designer-client/src/app/modules/feature-modules/packages/packages-api.service.ts
@@ -37,10 +37,12 @@ export class PackagesApiService {
}
getPagedPackages(pageNumber: number, pageSize: number, sortBy: string): Observable<BluePrintPage[]> {
+ const sortType = sortBy.includes('DATE') ? 'DESC' : 'ASC';
return this.api.get(BlueprintURLs.getPagedBlueprints, {
offset: pageNumber,
limit: pageSize,
- sort: sortBy
+ sort: sortBy,
+ sortType
});
}
@@ -56,11 +58,12 @@ export class PackagesApiService {
}
getPagedPackagesByKeyWord(keyWord: string, pageNumber: number, pageSize: number, sortBy: string) {
-
+ const sortType = sortBy.includes('DATE') ? 'DESC' : 'ASC';
return this.api.get(BlueprintURLs.getMetaDatePageable + '/' + keyWord, {
offset: pageNumber,
limit: pageSize,
- sort: sortBy
+ sort: sortBy,
+ sortType
});
}
}
diff --git a/cds-ui/designer-client/src/app/modules/feature-modules/packages/packages-dashboard/package-list/package-list.component.html b/cds-ui/designer-client/src/app/modules/feature-modules/packages/packages-dashboard/package-list/package-list.component.html
index 9db3ce110..c2bfd9779 100644
--- a/cds-ui/designer-client/src/app/modules/feature-modules/packages/packages-dashboard/package-list/package-list.component.html
+++ b/cds-ui/designer-client/src/app/modules/feature-modules/packages/packages-dashboard/package-list/package-list.component.html
@@ -3,7 +3,7 @@
<!--Add Package Card-->
<div class="card addPaackage-card">
<div class="card-body text-center">
- <img src="/assets/img/icon-addPackage.svg" width="40%">
+ <img src="/assets/img/icon-addPackage.svg" width="30%">
</div>
<div class="card-footer row">
<div class="col text-center">
@@ -12,7 +12,7 @@
Package
</a>
<br />
- <a href="#" role="button" aria-pressed="true" class="btn-import-package float mb-3"><i
+ <a href="#" role="button" aria-pressed="true" class="btn-import-package float"><i
class="icon-import-blue" aria-hidden="true"></i>Import Package
</a>
</div>
diff --git a/cds-ui/designer-client/src/assets/icomoon/fonts/icomoon.eot b/cds-ui/designer-client/src/assets/icomoon/fonts/icomoon.eot
index 3f1e99995..01dd66cf8 100755
--- a/cds-ui/designer-client/src/assets/icomoon/fonts/icomoon.eot
+++ b/cds-ui/designer-client/src/assets/icomoon/fonts/icomoon.eot
Binary files differ
diff --git a/cds-ui/designer-client/src/assets/icomoon/fonts/icomoon.svg b/cds-ui/designer-client/src/assets/icomoon/fonts/icomoon.svg
index 456e5d20d..6d0d75fd1 100755
--- a/cds-ui/designer-client/src/assets/icomoon/fonts/icomoon.svg
+++ b/cds-ui/designer-client/src/assets/icomoon/fonts/icomoon.svg
@@ -10,6 +10,8 @@
<glyph unicode="&#xe900;" glyph-name="icon-use-attributes" horiz-adv-x="1317" d="M503.303 834.341l-16.724 93.659h-468.293v-967.805h1280v874.146h-794.983zM611.456 459.707v-249.756h-93.659v249.756h93.659zM424.139 553.366v-343.415h-93.659v343.415h93.659zM798.774 209.951h-93.659v374.634h93.659v-374.634zM986.091 209.951h-93.659v312.195h93.659v-312.195z" />
<glyph unicode="&#xe901;" glyph-name="icon-upload-attributes" horiz-adv-x="922" d="M529.527 737.239h109.614l-167.773 176.492v-118.106c0-31.992 25.947-58.386 58.159-58.386zM347.671 292.095h-194.394c-9.841 0-17.894 8.045-17.894 17.894 0 9.841 8.053 17.894 17.894 17.894h206.25c11.402 29.076 26.614 53.689 45.409 78.295h-251.659c-9.841 0-17.894 8.045-17.894 17.894 0 9.841 8.053 17.894 17.894 17.894h285.659c53.682 46.977 124.818 76.947 202.439 76.947 7.379 0 13.424-0.667 22.371-1.341v183.879h-134.22c-51.894 0-93.947 42.5-93.947 94.174v145.174h-343.144c-44.295 0-79.636-36.235-79.636-80.75v-682.712c0-44.515 35.341-79.856 79.636-79.856h269.545c-15.432 35.788-23.932 76.053-23.932 118.106-0.227 26.394 3.356 51.902 9.621 76.508zM153.277 553.815h226.606c9.841 0 17.894-8.053 17.894-17.902 0-9.841-8.053-17.894-17.894-17.894h-226.606c-9.841 0-17.894 8.053-17.894 17.894 0 9.848 8.053 17.902 17.894 17.902zM641.148 482.452c-147.409 0-267.311-119.894-267.311-267.311 0-147.409 119.902-267.311 267.311-267.311 147.417 0 267.318 119.902 267.318 267.311 0 147.417-119.902 267.311-267.318 267.311zM784.095 211.118c-3.356-3.136-7.833-4.705-12.083-4.705-4.697 0-9.394 2.015-12.977 5.598l-99.765 107.371v-255.455c0-9.848-8.053-17.902-17.894-17.902s-17.894 8.053-17.894 17.902v255.674l-100.212-107.371c-6.712-7.159-18.348-7.606-25.508-0.894-7.152 6.712-7.606 18.121-0.894 25.28l131.083 140.705c3.356 3.576 8.053 5.591 13.197 5.591 5.152 0 9.621-2.015 13.205-5.591l131.083-140.705c6.265-7.386 5.811-18.795-1.341-25.5z" />
<glyph unicode="&#xe902;" glyph-name="icon-enter-link" d="M677.571 421.241h-644.248c-18.395 0-33.323 14.929-33.323 33.323s14.929 33.323 33.323 33.323h644.248c18.395 0 33.323-14.929 33.323-33.323s-14.929-33.323-33.323-33.323zM499.849 243.519c-8.534 0-17.060 3.238-23.552 9.771-13.017 13.017-13.017 34.121 0 47.146l154.177 154.169-154.177 154.177c-13.017 13.017-13.017 34.129 0 47.146 13.025 13.017 34.129 13.017 47.146 0l177.722-177.73c13.017-13.017 13.017-34.121 0-47.137l-177.722-177.722c-6.533-6.582-15.059-9.82-23.593-9.82v0zM533.173-34.18c-202.21 0-380.728 121.651-454.884 309.957-6.753 17.060 1.684 36.431 18.793 43.184 17.060 6.663 36.48-1.643 43.232-18.842 64.027-162.573 218.245-267.652 392.859-267.652 232.726 0 422.098 189.372 422.098 422.098s-189.372 422.098-422.098 422.098c-174.614 0-328.832-105.079-392.859-267.652-6.801-17.199-26.172-25.505-43.232-18.842-17.109 6.753-25.546 26.123-18.793 43.184 74.156 188.306 252.675 309.957 454.884 309.957 269.475 0 488.744-219.27 488.744-488.744s-219.27-488.744-488.744-488.744z" />
+<glyph unicode="&#xe903;" glyph-name="icon-action-close" d="M1011.886 947.884c-16.154 16.154-42.344 16.154-58.498 0l-941.272-941.27c-16.154-16.154-16.154-42.344 0-58.498 8.076-8.080 18.664-12.116 29.25-12.116s21.172 4.039 29.25 12.119l941.27 941.27c16.152 16.152 16.152 42.342 0 58.496zM1011.884 6.612l-941.272 941.27c-16.152 16.154-42.344 16.154-58.496 0-16.154-16.152-16.154-42.342 0-58.496l941.272-941.272c8.076-8.078 18.664-12.117 29.25-12.117s21.174 4.039 29.248 12.115c16.15 16.156 16.15 42.346-0.002 58.5z" />
+<glyph unicode="&#xe904;" glyph-name="icon-action-back" horiz-adv-x="1422" d="M479.778 915.244c19.067 19.733 50.8 19.733 70.533 0 19.067-19.067 19.067-50.8 0-69.822l-357.644-357.644h1180.178c27.511-0.044 49.378-21.911 49.378-49.422s-21.867-50.089-49.378-50.089h-1180.178l357.644-356.978c19.067-19.733 19.067-51.511 0-70.533-19.733-19.733-51.511-19.733-70.533 0l-442.311 442.311c-19.733 19.067-19.733 50.8 0 69.822l442.311 442.356z" />
<glyph unicode="&#xe915;" glyph-name="icon-add" d="M512 960c-282.785 0-512-229.215-512-512s229.215-512 512-512c282.785 0 512 229.249 512 512s-229.215 512-512 512zM512 0c-247.425 0-448 200.575-448 448s200.575 448 448 448c247.425 0 448-200.575 448-448s-200.575-448-448-448zM704 480h-160v160c0 17.664-14.336 32-32 32s-32-14.336-32-32v-160h-160c-17.664 0-32-14.336-32-32s14.336-32 32-32h160v-160c0-17.664 14.336-32 32-32s32 14.336 32 32v160h160c17.664 0 32 14.336 32 32s-14.336 32-32 32z" />
<glyph unicode="&#xe952;" glyph-name="icon-archive-sm" d="M943.405 684.258h-864.783c-10.653 0-19.867-3.887-27.644-11.668-7.781-7.777-11.668-16.991-11.668-27.637v-589.626c0-10.644 3.887-19.863 11.668-27.637 7.777-7.781 16.991-11.677 27.644-11.677h864.783c10.647 0 19.854 3.896 27.637 11.677 7.775 7.773 11.662 16.991 11.662 27.637v589.626c0 10.653-3.872 19.858-11.662 27.637-7.775 7.781-16.991 11.668-27.637 11.668zM617.255 499.387c-7.773-7.779-16.991-11.668-27.637-11.668h-157.233c-10.64 0-19.854 3.892-27.637 11.668-7.777 7.781-11.668 16.991-11.668 27.644 0 10.644 3.892 19.858 11.668 27.637 7.781 7.781 16.995 11.673 27.637 11.673h157.249c10.638 0 19.85-3.892 27.637-11.673 7.775-7.777 11.662-16.991 11.662-27.637 0-10.651-3.896-19.863-11.677-27.644zM1010.357 947.749c-7.783 7.781-16.991 11.668-27.639 11.668h-943.409c-10.644 0-19.858-3.887-27.637-11.668-7.779-7.777-11.671-16.991-11.671-27.637v-157.233c0-10.644 3.892-19.854 11.673-27.637 7.779-7.781 16.991-11.668 27.637-11.668h943.394c10.644 0 19.863 3.887 27.652 11.668 7.773 7.781 11.66 16.991 11.66 27.637v157.233c0 10.653-3.887 19.86-11.66 27.637z" />
<glyph unicode="&#xe953;" glyph-name="icon-btn-card-config" d="M971.283 561.778h-95.801c-15.398 0-28.084 8.476-33.982 22.699s-2.901 29.203 7.964 40.088l67.736 67.717c9.956 9.956 15.436 23.211 15.436 37.281 0 14.089-5.48 27.326-15.436 37.3l-86.338 86.338c-19.911 19.911-54.632 19.949-74.581 0l-67.717-67.717c-10.885-10.866-25.903-13.9-40.088-7.983-14.222 5.897-22.699 18.584-22.699 33.982v95.801c0 29.070-23.647 52.717-52.717 52.717h-122.121c-29.070 0-52.717-23.647-52.717-52.717v-95.801c0-15.398-8.476-28.084-22.699-33.982-14.184-5.935-29.203-2.882-40.088 7.983l-67.717 67.717c-19.949 19.949-54.67 19.911-74.581 0l-86.338-86.338c-9.956-9.956-15.436-23.211-15.436-37.3 0-14.071 5.48-27.307 15.436-37.281l67.736-67.717c10.866-10.885 13.843-25.865 7.964-40.088s-18.584-22.699-33.982-22.699h-95.801c-29.070 0-52.717-23.647-52.717-52.717v-122.103c0-29.089 23.647-52.736 52.717-52.736h95.801c15.398 0 28.084-8.476 33.982-22.699s2.901-29.203-7.964-40.088l-67.736-67.717c-9.956-9.956-15.436-23.211-15.436-37.281 0-14.089 5.48-27.326 15.436-37.3l86.338-86.338c19.93-19.93 54.632-19.968 74.581 0l67.717 67.736c10.885 10.866 25.847 13.862 40.088 7.964 14.222-5.897 22.699-18.584 22.699-33.982v-95.801c0-29.070 23.647-52.717 52.717-52.717h122.103c29.070 0 52.717 23.647 52.717 52.717v95.801c0 15.398 8.476 28.084 22.699 33.982 14.241 5.916 29.203 2.901 40.088-7.964l67.717-67.736c19.949-19.949 54.67-19.911 74.581 0l86.338 86.338c9.956 9.956 15.436 23.211 15.436 37.3 0 14.071-5.48 27.307-15.436 37.281l-67.736 67.717c-10.866 10.885-13.843 25.865-7.964 40.088s18.603 22.699 34.001 22.699h95.801c29.070 0 52.717 23.647 52.717 52.717v122.121c0 29.070-23.647 52.717-52.717 52.717zM986.074 386.939c0-8.154-6.637-14.791-14.791-14.791h-95.801c-30.796 0-57.249-17.673-69.025-46.118-11.795-28.444-5.594-59.657 16.194-81.427l67.736-67.717c5.784-5.784 5.784-15.17 0-20.935l-86.338-86.338c-5.765-5.765-15.151-5.803-20.935 0l-67.717 67.736c-21.788 21.788-52.983 27.951-81.427 16.194-28.444-11.776-46.118-38.229-46.118-69.025v-95.801c0-8.154-6.637-14.791-14.791-14.791h-122.121c-8.154 0-14.791 6.637-14.791 14.791v95.801c0 30.796-17.673 57.249-46.118 69.025-9.538 3.963-19.361 5.897-29.070 5.897-19.228 0-37.869-7.585-52.357-22.073l-67.717-67.736c-5.803-5.803-15.189-5.765-20.935 0l-86.338 86.338c-5.784 5.784-5.784 15.17 0 20.935l67.736 67.717c21.769 21.769 27.989 52.983 16.194 81.427-11.776 28.425-38.229 46.099-69.025 46.099h-95.801c-8.154 0-14.791 6.637-14.791 14.791v122.121c0 8.154 6.637 14.791 14.791 14.791h95.801c30.796 0 57.249 17.673 69.025 46.118 11.795 28.444 5.594 59.657-16.194 81.427l-67.736 67.717c-5.784 5.784-5.784 15.17 0 20.935l86.338 86.338c5.765 5.784 15.151 5.784 20.935 0l67.717-67.717c21.751-21.751 52.945-27.989 81.427-16.194 28.444 11.757 46.118 38.21 46.118 69.006v95.801c0 8.154 6.637 14.791 14.791 14.791h122.103c8.173 0 14.81-6.637 14.81-14.791v-95.801c0-30.796 17.673-57.249 46.118-69.025 28.482-11.795 59.657-5.575 81.427 16.194l67.717 67.717c5.803 5.784 15.189 5.784 20.935 0l86.338-86.338c5.784-5.784 5.784-15.17 0-20.935l-67.736-67.717c-21.769-21.769-27.989-52.983-16.194-81.427 11.776-28.444 38.229-46.118 69.025-46.118h95.801c8.154 0.019 14.791-6.618 14.791-14.772v-122.121zM512 618.667c-94.113 0-170.667-76.553-170.667-170.667s76.553-170.667 170.667-170.667c94.113 0 170.667 76.553 170.667 170.667s-76.553 170.667-170.667 170.667zM512 315.259c-73.178 0-132.741 59.563-132.741 132.741s59.563 132.741 132.741 132.741c73.178 0 132.741-59.563 132.741-132.741s-59.563-132.741-132.741-132.741z" />
diff --git a/cds-ui/designer-client/src/assets/icomoon/fonts/icomoon.ttf b/cds-ui/designer-client/src/assets/icomoon/fonts/icomoon.ttf
index 85433c9af..d08d2740b 100755
--- a/cds-ui/designer-client/src/assets/icomoon/fonts/icomoon.ttf
+++ b/cds-ui/designer-client/src/assets/icomoon/fonts/icomoon.ttf
Binary files differ
diff --git a/cds-ui/designer-client/src/assets/icomoon/fonts/icomoon.woff b/cds-ui/designer-client/src/assets/icomoon/fonts/icomoon.woff
index 7062f6c01..b6d35bcac 100755
--- a/cds-ui/designer-client/src/assets/icomoon/fonts/icomoon.woff
+++ b/cds-ui/designer-client/src/assets/icomoon/fonts/icomoon.woff
Binary files differ
diff --git a/cds-ui/designer-client/src/assets/icomoon/style.css b/cds-ui/designer-client/src/assets/icomoon/style.css
index 4e99ab416..dc7de38e5 100755
--- a/cds-ui/designer-client/src/assets/icomoon/style.css
+++ b/cds-ui/designer-client/src/assets/icomoon/style.css
@@ -1,10 +1,10 @@
@font-face {
font-family: 'icomoon';
- src: url('fonts/icomoon.eot?njx1om');
- src: url('fonts/icomoon.eot?njx1om#iefix') format('embedded-opentype'),
- url('fonts/icomoon.ttf?njx1om') format('truetype'),
- url('fonts/icomoon.woff?njx1om') format('woff'),
- url('fonts/icomoon.svg?njx1om#icomoon') format('svg');
+ src: url('fonts/icomoon.eot?hdnbak');
+ src: url('fonts/icomoon.eot?hdnbak#iefix') format('embedded-opentype'),
+ url('fonts/icomoon.ttf?hdnbak') format('truetype'),
+ url('fonts/icomoon.woff?hdnbak') format('woff'),
+ url('fonts/icomoon.svg?hdnbak#icomoon') format('svg');
font-weight: normal;
font-style: normal;
font-display: block;
@@ -35,6 +35,14 @@
-moz-osx-font-smoothing: grayscale;
}
+.icon-action-back:before {
+ content: "\e904";
+ color: #1b3e6f;
+}
+.icon-action-close:before {
+ content: "\e903";
+ color: #1b3e6f;
+}
.icon-enter-link:before {
content: "\e902";
}
diff --git a/cds-ui/designer-client/src/assets/img/icon-action-custom-hover.svg b/cds-ui/designer-client/src/assets/img/icon-action-custom-hover.svg
new file mode 100644
index 000000000..593fc5cc7
--- /dev/null
+++ b/cds-ui/designer-client/src/assets/img/icon-action-custom-hover.svg
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="131px" height="157px" viewBox="0 0 131 157" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Generator: Sketch 61.2 (89653) - https://sketch.com -->
+ <title>icon+hover</title>
+ <desc>Created with Sketch.</desc>
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+ <g id="7.1.1-Designer---Blank-action" transform="translate(-280.000000, -393.000000)" fill-rule="nonzero">
+ <g id="modal-new" transform="translate(120.000000, 222.000000)">
+ <g id="options" transform="translate(100.000000, 132.000000)">
+ <g id="custom">
+ <g id="icon+text" transform="translate(30.000000, 40.000000)">
+ <g id="icon+hover" transform="translate(30.000000, 0.000000)">
+ <g id="Group" transform="translate(-0.000000, 7.222222)">
+ <polygon id="Path" fill="#E0E8F2" points="113.218678 86.6995804 11.9100839 86.3986545 11.6173865 11.7737269 11.9100839 11.7737269 11.9100839 7.25043403 0 7.25043403 0 98.6096644 115.480324 98.6096644 115.480324 86.6995804"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="21.5585214 0.0141059028 26.3827402 0.0141059028 26.3827402 4.53739873 21.5585214 4.53739873"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="31.2069589 0.0141059028 36.0311777 0.0141059028 36.0311777 4.53739873 31.2069589 4.53739873"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="40.8553964 0.0141059028 45.6796152 0.0141059028 45.6796152 4.53739873 40.8553964 4.53739873"></polygon>
+ </g>
+ <path d="M125.279225,-3.83693077e-13 L14.3221933,-3.83693077e-13 C11.7443396,-3.83693077e-13 9.6484375,2.09590213 9.6484375,4.67375579 L9.6484375,96.1834491 L120.455006,96.1834491 L120.455006,91.6601562 L14.1717303,91.6601562 L14.1717303,18.9959491 L125.429687,18.9959491 L125.429687,110.806568 C125.429687,110.890028 125.362685,110.957031 125.279225,110.957031 L96.333912,110.957031 C93.7572338,110.957031 91.6601562,113.054109 91.6601562,115.630787 L91.6601562,120.605469 L12.0605469,120.605469 L12.0605469,154.074074 L117.892433,154.074074 L117.892433,120.605469 L96.1834491,120.605469 L96.1834491,115.630787 C96.1834491,115.547327 96.2516275,115.480324 96.333912,115.480324 L125.279225,115.480324 C127.855903,115.480324 129.95298,113.383247 129.95298,110.806568 L129.95298,4.67375579 C129.95298,2.09590213 127.855903,-3.83693077e-13 125.279225,-3.83693077e-13 Z M60.0018084,125.128762 L69.9511719,125.128762 L69.9511719,130.253906 L60.0018084,130.253906 L60.0018084,125.128762 Z M60.0018084,134.777199 L69.9511719,134.777199 L69.9511719,139.902344 L60.0018084,139.902344 L60.0018084,134.777199 Z M45.5291522,125.128762 L55.4785156,125.128762 L55.4785156,130.253906 L45.5291522,130.253906 L45.5291522,125.128762 Z M45.5291522,134.777199 L55.4785156,134.777199 L55.4785156,139.902344 L45.5291522,139.902344 L45.5291522,134.777199 Z M26.5332031,149.550781 L16.5838397,149.550781 L16.5838397,144.425637 L26.5332031,144.425637 L26.5332031,149.550781 Z M26.5332031,139.902344 L16.5838397,139.902344 L16.5838397,134.777199 L26.5332031,134.777199 L26.5332031,139.902344 Z M26.5332031,130.253906 L16.5838397,130.253906 L16.5838397,125.128762 L26.5332031,125.128762 L26.5332031,130.253906 Z M41.0058594,149.550781 L31.0564959,149.550781 L31.0564959,144.425637 L41.0058594,144.425637 L41.0058594,149.550781 Z M41.0058594,139.902344 L31.0564959,139.902344 L31.0564959,134.777199 L41.0058594,134.777199 L41.0058594,139.902344 Z M41.0058594,130.253906 L31.0564959,130.253906 L31.0564959,125.128762 L41.0058594,125.128762 L41.0058594,130.253906 Z M84.4238281,149.550781 L45.5291522,149.550781 L45.5291522,144.425637 L84.4238281,144.425637 L84.4238281,149.550781 Z M84.4238281,139.902344 L74.4744647,139.902344 L74.4744647,134.777199 L84.4238281,134.777199 L84.4238281,139.902344 Z M84.4238281,130.253906 L74.4744647,130.253906 L74.4744647,125.128762 L84.4238281,125.128762 L84.4238281,130.253906 Z M98.8964844,149.550781 L88.9471209,149.550781 L88.9471209,144.425637 L98.8964844,144.425637 L98.8964844,149.550781 Z M98.8964844,139.902344 L88.9471209,139.902344 L88.9471209,134.777199 L98.8964844,134.777199 L98.8964844,139.902344 Z M103.419777,125.128762 L113.369141,125.128762 L113.369141,130.253906 L103.419777,130.253906 L103.419777,125.128762 Z M103.419777,134.777199 L113.369141,134.777199 L113.369141,139.902344 L103.419777,139.902344 L103.419777,134.777199 Z M103.419777,144.425637 L113.369141,144.425637 L113.369141,149.550781 L103.419777,149.550781 L103.419777,144.425637 Z M98.8964844,130.253906 L88.9471209,130.253906 L88.9471209,125.128762 L98.8964844,125.128762 L98.8964844,130.253906 Z M14.1717303,14.4726562 L14.1717303,4.67375579 C14.1717303,4.59029579 14.2387333,4.52329282 14.3221933,4.52329282 L125.279225,4.52329282 C125.362685,4.52329282 125.429688,4.59029579 125.429688,4.67375579 L125.429688,14.4726562 L14.1717303,14.4726562 Z" id="Shape" stroke="#FFFFFF" stroke-width="2" fill="#1B3E6F"></path>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/cds-ui/designer-client/src/assets/img/icon-action-custom.svg b/cds-ui/designer-client/src/assets/img/icon-action-custom.svg
new file mode 100644
index 000000000..2ecdf204c
--- /dev/null
+++ b/cds-ui/designer-client/src/assets/img/icon-action-custom.svg
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="131px" height="157px" viewBox="0 0 131 157" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Generator: Sketch 61.2 (89653) - https://sketch.com -->
+ <title>icon</title>
+ <desc>Created with Sketch.</desc>
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+ <g id="7.0-Designer---First-action-options" transform="translate(-280.000000, -393.000000)" fill-rule="nonzero">
+ <g id="modal-new" transform="translate(120.000000, 222.000000)">
+ <g id="options" transform="translate(100.000000, 132.000000)">
+ <g id="custom">
+ <g id="icon+text" transform="translate(30.000000, 40.000000)">
+ <g id="icon" transform="translate(30.000000, 0.000000)">
+ <g id="Group" transform="translate(-0.000000, 7.222222)" fill="#E0E8F2">
+ <polygon id="Path" points="113.218678 86.6995804 11.9100839 86.3986545 11.6173865 11.7737269 11.9100839 11.7737269 11.9100839 7.25043403 0 7.25043403 0 98.6096644 115.480324 98.6096644 115.480324 86.6995804"></polygon>
+ <polygon id="Path" points="21.5585214 0.0141059028 26.3827402 0.0141059028 26.3827402 4.53739873 21.5585214 4.53739873"></polygon>
+ <polygon id="Path" points="31.2069589 0.0141059028 36.0311777 0.0141059028 36.0311777 4.53739873 31.2069589 4.53739873"></polygon>
+ <polygon id="Path" points="40.8553964 0.0141059028 45.6796152 0.0141059028 45.6796152 4.53739873 40.8553964 4.53739873"></polygon>
+ </g>
+ <path d="M125.279225,-3.83693077e-13 L14.3221933,-3.83693077e-13 C11.7443396,-3.83693077e-13 9.6484375,2.09590213 9.6484375,4.67375579 L9.6484375,96.1834491 L120.455006,96.1834491 L120.455006,91.6601562 L14.1717303,91.6601562 L14.1717303,18.9959491 L125.429687,18.9959491 L125.429687,110.806568 C125.429687,110.890028 125.362685,110.957031 125.279225,110.957031 L96.333912,110.957031 C93.7572338,110.957031 91.6601562,113.054109 91.6601562,115.630787 L91.6601562,120.605469 L12.0605469,120.605469 L12.0605469,154.074074 L117.892433,154.074074 L117.892433,120.605469 L96.1834491,120.605469 L96.1834491,115.630787 C96.1834491,115.547327 96.2516275,115.480324 96.333912,115.480324 L125.279225,115.480324 C127.855903,115.480324 129.95298,113.383247 129.95298,110.806568 L129.95298,4.67375579 C129.95298,2.09590213 127.855903,-3.83693077e-13 125.279225,-3.83693077e-13 Z M60.0018084,125.128762 L69.9511719,125.128762 L69.9511719,130.253906 L60.0018084,130.253906 L60.0018084,125.128762 Z M60.0018084,134.777199 L69.9511719,134.777199 L69.9511719,139.902344 L60.0018084,139.902344 L60.0018084,134.777199 Z M45.5291522,125.128762 L55.4785156,125.128762 L55.4785156,130.253906 L45.5291522,130.253906 L45.5291522,125.128762 Z M45.5291522,134.777199 L55.4785156,134.777199 L55.4785156,139.902344 L45.5291522,139.902344 L45.5291522,134.777199 Z M26.5332031,149.550781 L16.5838397,149.550781 L16.5838397,144.425637 L26.5332031,144.425637 L26.5332031,149.550781 Z M26.5332031,139.902344 L16.5838397,139.902344 L16.5838397,134.777199 L26.5332031,134.777199 L26.5332031,139.902344 Z M26.5332031,130.253906 L16.5838397,130.253906 L16.5838397,125.128762 L26.5332031,125.128762 L26.5332031,130.253906 Z M41.0058594,149.550781 L31.0564959,149.550781 L31.0564959,144.425637 L41.0058594,144.425637 L41.0058594,149.550781 Z M41.0058594,139.902344 L31.0564959,139.902344 L31.0564959,134.777199 L41.0058594,134.777199 L41.0058594,139.902344 Z M41.0058594,130.253906 L31.0564959,130.253906 L31.0564959,125.128762 L41.0058594,125.128762 L41.0058594,130.253906 Z M84.4238281,149.550781 L45.5291522,149.550781 L45.5291522,144.425637 L84.4238281,144.425637 L84.4238281,149.550781 Z M84.4238281,139.902344 L74.4744647,139.902344 L74.4744647,134.777199 L84.4238281,134.777199 L84.4238281,139.902344 Z M84.4238281,130.253906 L74.4744647,130.253906 L74.4744647,125.128762 L84.4238281,125.128762 L84.4238281,130.253906 Z M98.8964844,149.550781 L88.9471209,149.550781 L88.9471209,144.425637 L98.8964844,144.425637 L98.8964844,149.550781 Z M98.8964844,139.902344 L88.9471209,139.902344 L88.9471209,134.777199 L98.8964844,134.777199 L98.8964844,139.902344 Z M103.419777,125.128762 L113.369141,125.128762 L113.369141,130.253906 L103.419777,130.253906 L103.419777,125.128762 Z M103.419777,134.777199 L113.369141,134.777199 L113.369141,139.902344 L103.419777,139.902344 L103.419777,134.777199 Z M103.419777,144.425637 L113.369141,144.425637 L113.369141,149.550781 L103.419777,149.550781 L103.419777,144.425637 Z M98.8964844,130.253906 L88.9471209,130.253906 L88.9471209,125.128762 L98.8964844,125.128762 L98.8964844,130.253906 Z M14.1717303,14.4726562 L14.1717303,4.67375579 C14.1717303,4.59029579 14.2387333,4.52329282 14.3221933,4.52329282 L125.279225,4.52329282 C125.362685,4.52329282 125.429688,4.59029579 125.429688,4.67375579 L125.429688,14.4726562 L14.1717303,14.4726562 Z" id="Shape" stroke="#FFFFFF" stroke-width="2" fill="#1B3E6F"></path>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/cds-ui/designer-client/src/assets/img/icon-action-default-hover.svg b/cds-ui/designer-client/src/assets/img/icon-action-default-hover.svg
new file mode 100644
index 000000000..22959e9f0
--- /dev/null
+++ b/cds-ui/designer-client/src/assets/img/icon-action-default-hover.svg
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="131px" height="157px" viewBox="0 0 131 157" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Generator: Sketch 61.2 (89653) - https://sketch.com -->
+ <title>icon-hover</title>
+ <desc>Created with Sketch.</desc>
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+ <g id="7.2.1-Designer---Default-action" transform="translate(-530.000000, -393.000000)" fill-rule="nonzero">
+ <g id="modal-new" transform="translate(120.000000, 222.000000)">
+ <g id="options" transform="translate(130.000000, 132.000000)">
+ <g id="default" transform="translate(220.000000, 0.000000)">
+ <g id="icon+text" transform="translate(30.000000, 40.000000)">
+ <g id="icon-hover" transform="translate(30.000000, 0.000000)">
+ <g id="Group" transform="translate(0.000000, 7.222222)">
+ <polygon id="Path" fill="#E0E8F2" points="110.957031 86.6995804 110.957031 86.8406395 12.0605469 86.3986545 11.4751518 11.7737269 11.9100839 11.7737269 11.9100839 7.25043403 0 7.25043403 0 98.6096644 115.480324 98.6096644 115.480324 86.6995804"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="21.5585214 0.0141059028 26.3827402 0.0141059028 26.3827402 4.53739873 21.5585214 4.53739873"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="31.2069589 0.0141059028 36.0311777 0.0141059028 36.0311777 4.53739873 31.2069589 4.53739873"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="40.8553964 0.0141059028 45.6796152 0.0141059028 45.6796152 4.53739873 40.8553964 4.53739873"></polygon>
+ </g>
+ <path d="M129.95298,38.443287 C129.95298,29.2156758 122.446289,21.7089844 113.218678,21.7089844 C103.991066,21.7089844 96.484375,29.2156758 96.484375,38.443287 C96.484375,46.9033022 102.796766,53.9127604 110.957031,55.0200739 L110.957031,62.5643808 L115.480324,62.5643808 L115.480324,55.0200739 C123.641764,53.9127604 129.95298,46.9033022 129.95298,38.443287 Z M113.218678,50.6542969 C106.48546,50.6542969 101.007668,45.1765046 101.007668,38.443287 C101.007668,31.7100694 106.48546,26.2322772 113.218678,26.2322772 C119.951895,26.2322772 125.429688,31.7100694 125.429688,38.443287 C125.429688,45.1765046 119.951895,50.6542969 113.218678,50.6542969 Z" id="Shape" stroke="#FFFFFF" stroke-width="2" fill="#1B3E6F"></path>
+ <path d="M106.132812,60.3027344 L106.132812,79.4491464 C106.132812,82.0258247 108.22989,84.1229022 110.806568,84.1229022 L115.630787,84.1229022 C118.207465,84.1229022 120.304543,82.0258247 120.304543,79.4491464 L120.304543,60.3027344 L106.132812,60.3027344 Z" id="Path" fill="#E0E8F2"></path>
+ <path d="M125.279225,-5.40012479e-13 L14.3221933,-5.40012479e-13 C11.7443396,-5.40012479e-13 9.6484375,2.09590213 9.6484375,4.67375579 L9.6484375,96.1834491 L120.455006,96.1834491 L120.455006,91.6601562 L14.1717303,91.6601562 L14.1717303,18.9959491 L125.429688,18.9959491 L125.429688,23.9706308 L129.95298,23.9706308 L129.95298,4.67375579 C129.95298,2.09590213 127.855903,-5.40012479e-13 125.279225,-5.40012479e-13 Z M14.1717303,14.4726562 L14.1717303,4.67375579 C14.1717303,4.59029579 14.2387333,4.52329282 14.3221933,4.52329282 L125.279225,4.52329282 C125.362685,4.52329282 125.429688,4.59029579 125.429688,4.67375579 L125.429688,14.4726562 L14.1717303,14.4726562 Z" id="Shape" stroke="#FFFFFF" stroke-width="2" fill="#1B3E6F"></path>
+ <path d="M125.429688,110.806568 C125.429688,110.890028 125.362685,110.957031 125.279225,110.957031 L96.333912,110.957031 C93.7572338,110.957031 91.6601563,113.054109 91.6601563,115.630787 L91.6601563,120.605469 L12.0605469,120.605469 L12.0605469,154.074074 L117.892433,154.074074 L117.892433,120.605469 L96.1834491,120.605469 L96.1834491,115.630787 C96.1834491,115.548502 96.250452,115.480324 96.333912,115.480324 L125.279225,115.480324 C127.855903,115.480324 129.95298,113.383247 129.95298,110.806568 L129.95298,52.9159433 L125.429688,52.9159433 L125.429688,110.806568 Z M60.0018084,125.128762 L69.9511719,125.128762 L69.9511719,130.253906 L60.0018084,130.253906 L60.0018084,125.128762 Z M60.0018084,134.777199 L69.9511719,134.777199 L69.9511719,139.902344 L60.0018084,139.902344 L60.0018084,134.777199 Z M45.5291522,125.128762 L55.4785156,125.128762 L55.4785156,130.253906 L45.5291522,130.253906 L45.5291522,125.128762 Z M45.5291522,134.777199 L55.4785156,134.777199 L55.4785156,139.902344 L45.5291522,139.902344 L45.5291522,134.777199 Z M26.5332031,149.550781 L16.5838397,149.550781 L16.5838397,144.425637 L26.5332031,144.425637 L26.5332031,149.550781 Z M26.5332031,139.902344 L16.5838397,139.902344 L16.5838397,134.777199 L26.5332031,134.777199 L26.5332031,139.902344 Z M26.5332031,130.253906 L16.5838397,130.253906 L16.5838397,125.128762 L26.5332031,125.128762 L26.5332031,130.253906 Z M41.0058594,149.550781 L31.0564959,149.550781 L31.0564959,144.425637 L41.0058594,144.425637 L41.0058594,149.550781 Z M41.0058594,139.902344 L31.0564959,139.902344 L31.0564959,134.777199 L41.0058594,134.777199 L41.0058594,139.902344 Z M41.0058594,130.253906 L31.0564959,130.253906 L31.0564959,125.128762 L41.0058594,125.128762 L41.0058594,130.253906 Z M84.4238281,149.550781 L45.5291522,149.550781 L45.5291522,144.425637 L84.4238281,144.425637 L84.4238281,149.550781 Z M84.4238281,139.902344 L74.4744647,139.902344 L74.4744647,134.777199 L84.4238281,134.777199 L84.4238281,139.902344 Z M84.4238281,130.253906 L74.4744647,130.253906 L74.4744647,125.128762 L84.4238281,125.128762 L84.4238281,130.253906 Z M98.8964844,149.550781 L88.9471209,149.550781 L88.9471209,144.425637 L98.8964844,144.425637 L98.8964844,149.550781 Z M98.8964844,139.902344 L88.9471209,139.902344 L88.9471209,134.777199 L98.8964844,134.777199 L98.8964844,139.902344 Z M103.419777,125.128762 L113.369141,125.128762 L113.369141,130.253906 L103.419777,130.253906 L103.419777,125.128762 Z M103.419777,134.777199 L113.369141,134.777199 L113.369141,139.902344 L103.419777,139.902344 L103.419777,134.777199 Z M103.419777,144.425637 L113.369141,144.425637 L113.369141,149.550781 L103.419777,149.550781 L103.419777,144.425637 Z M98.8964844,125.128762 L98.8964844,130.253906 L88.9471209,130.253906 L88.9471209,125.128762 L98.8964844,125.128762 Z" id="Shape" stroke="#FFFFFF" stroke-width="2" fill="#1B3E6F"></path>
+ <g id="action" transform="translate(34.000000, 35.000000)">
+ <g id="1">
+ <g id="Group" transform="translate(2.836930, 2.684715)" fill="#E0E8F2">
+ <polygon id="Path" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#5DBDBA"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#5DBDBA"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#5DBDBA"></path>
+ </g>
+ <g id="2" transform="translate(21.000000, 0.000000)">
+ <g id="Group" transform="translate(2.836930, 2.684715)" fill="#E0E8F2">
+ <polygon id="Path" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#5DBDBA"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#5DBDBA"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#5DBDBA"></path>
+ </g>
+ <g id="3" transform="translate(41.000000, 0.000000)">
+ <g id="Group" transform="translate(2.836930, 2.684715)" fill="#E0E8F2">
+ <polygon id="Path" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#5DBDBA"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#5DBDBA"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#5DBDBA"></path>
+ </g>
+ <g id="4" transform="translate(0.000000, 25.000000)">
+ <g id="Group" transform="translate(2.836930, 2.684715)" fill="#E0E8F2">
+ <polygon id="Path" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#5DBDBA"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#5DBDBA"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#5DBDBA"></path>
+ </g>
+ <g id="5" transform="translate(21.000000, 25.000000)">
+ <g id="Group" transform="translate(2.836930, 2.684715)" fill="#E0E8F2">
+ <polygon id="Path" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#5DBDBA"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#5DBDBA"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#5DBDBA"></path>
+ </g>
+ <g id="6" transform="translate(41.000000, 25.000000)">
+ <g id="Group" transform="translate(2.836930, 2.684715)" fill="#E0E8F2">
+ <polygon id="Path" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#5DBDBA"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#5DBDBA"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#5DBDBA"></path>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/cds-ui/designer-client/src/assets/img/icon-action-default.svg b/cds-ui/designer-client/src/assets/img/icon-action-default.svg
new file mode 100644
index 000000000..98c1e2bd3
--- /dev/null
+++ b/cds-ui/designer-client/src/assets/img/icon-action-default.svg
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="131px" height="157px" viewBox="0 0 131 157" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Generator: Sketch 61.2 (89653) - https://sketch.com -->
+ <title>icon</title>
+ <desc>Created with Sketch.</desc>
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+ <g id="7.0-Designer---First-action-options" transform="translate(-530.000000, -393.000000)" fill-rule="nonzero">
+ <g id="modal-new" transform="translate(120.000000, 222.000000)">
+ <g id="options" transform="translate(100.000000, 132.000000)">
+ <g id="default" transform="translate(250.000000, 0.000000)">
+ <g id="icon+text" transform="translate(30.000000, 40.000000)">
+ <g id="icon" transform="translate(30.000000, 0.000000)">
+ <g id="Group" transform="translate(0.000000, 7.222222)" fill="#E0E8F2">
+ <polygon id="Path" points="110.957031 86.6995804 110.957031 86.8406395 12.0605469 86.3986545 11.4751518 11.7737269 11.9100839 11.7737269 11.9100839 7.25043403 0 7.25043403 0 98.6096644 115.480324 98.6096644 115.480324 86.6995804"></polygon>
+ <polygon id="Path" points="21.5585214 0.0141059028 26.3827402 0.0141059028 26.3827402 4.53739873 21.5585214 4.53739873"></polygon>
+ <polygon id="Path" points="31.2069589 0.0141059028 36.0311777 0.0141059028 36.0311777 4.53739873 31.2069589 4.53739873"></polygon>
+ <polygon id="Path" points="40.8553964 0.0141059028 45.6796152 0.0141059028 45.6796152 4.53739873 40.8553964 4.53739873"></polygon>
+ </g>
+ <path d="M129.95298,38.443287 C129.95298,29.2156758 122.446289,21.7089844 113.218678,21.7089844 C103.991066,21.7089844 96.484375,29.2156758 96.484375,38.443287 C96.484375,46.9033022 102.796766,53.9127604 110.957031,55.0200739 L110.957031,62.5643808 L115.480324,62.5643808 L115.480324,55.0200739 C123.641764,53.9127604 129.95298,46.9033022 129.95298,38.443287 Z M113.218678,50.6542969 C106.48546,50.6542969 101.007668,45.1765046 101.007668,38.443287 C101.007668,31.7100694 106.48546,26.2322772 113.218678,26.2322772 C119.951895,26.2322772 125.429688,31.7100694 125.429688,38.443287 C125.429688,45.1765046 119.951895,50.6542969 113.218678,50.6542969 Z" id="Shape" stroke="#FFFFFF" stroke-width="2" fill="#1B3E6F"></path>
+ <path d="M106.132812,60.3027344 L106.132812,79.4491464 C106.132812,82.0258247 108.22989,84.1229022 110.806568,84.1229022 L115.630787,84.1229022 C118.207465,84.1229022 120.304543,82.0258247 120.304543,79.4491464 L120.304543,60.3027344 L106.132812,60.3027344 Z" id="Path" fill="#E0E8F2"></path>
+ <path d="M125.279225,-5.40012479e-13 L14.3221933,-5.40012479e-13 C11.7443396,-5.40012479e-13 9.6484375,2.09590213 9.6484375,4.67375579 L9.6484375,96.1834491 L120.455006,96.1834491 L120.455006,91.6601562 L14.1717303,91.6601562 L14.1717303,18.9959491 L125.429688,18.9959491 L125.429688,23.9706308 L129.95298,23.9706308 L129.95298,4.67375579 C129.95298,2.09590213 127.855903,-5.40012479e-13 125.279225,-5.40012479e-13 Z M14.1717303,14.4726562 L14.1717303,4.67375579 C14.1717303,4.59029579 14.2387333,4.52329282 14.3221933,4.52329282 L125.279225,4.52329282 C125.362685,4.52329282 125.429688,4.59029579 125.429688,4.67375579 L125.429688,14.4726562 L14.1717303,14.4726562 Z" id="Shape" stroke="#FFFFFF" stroke-width="2" fill="#1B3E6F"></path>
+ <path d="M125.429688,110.806568 C125.429688,110.890028 125.362685,110.957031 125.279225,110.957031 L96.333912,110.957031 C93.7572338,110.957031 91.6601563,113.054109 91.6601563,115.630787 L91.6601563,120.605469 L12.0605469,120.605469 L12.0605469,154.074074 L117.892433,154.074074 L117.892433,120.605469 L96.1834491,120.605469 L96.1834491,115.630787 C96.1834491,115.548502 96.250452,115.480324 96.333912,115.480324 L125.279225,115.480324 C127.855903,115.480324 129.95298,113.383247 129.95298,110.806568 L129.95298,52.9159433 L125.429688,52.9159433 L125.429688,110.806568 Z M60.0018084,125.128762 L69.9511719,125.128762 L69.9511719,130.253906 L60.0018084,130.253906 L60.0018084,125.128762 Z M60.0018084,134.777199 L69.9511719,134.777199 L69.9511719,139.902344 L60.0018084,139.902344 L60.0018084,134.777199 Z M45.5291522,125.128762 L55.4785156,125.128762 L55.4785156,130.253906 L45.5291522,130.253906 L45.5291522,125.128762 Z M45.5291522,134.777199 L55.4785156,134.777199 L55.4785156,139.902344 L45.5291522,139.902344 L45.5291522,134.777199 Z M26.5332031,149.550781 L16.5838397,149.550781 L16.5838397,144.425637 L26.5332031,144.425637 L26.5332031,149.550781 Z M26.5332031,139.902344 L16.5838397,139.902344 L16.5838397,134.777199 L26.5332031,134.777199 L26.5332031,139.902344 Z M26.5332031,130.253906 L16.5838397,130.253906 L16.5838397,125.128762 L26.5332031,125.128762 L26.5332031,130.253906 Z M41.0058594,149.550781 L31.0564959,149.550781 L31.0564959,144.425637 L41.0058594,144.425637 L41.0058594,149.550781 Z M41.0058594,139.902344 L31.0564959,139.902344 L31.0564959,134.777199 L41.0058594,134.777199 L41.0058594,139.902344 Z M41.0058594,130.253906 L31.0564959,130.253906 L31.0564959,125.128762 L41.0058594,125.128762 L41.0058594,130.253906 Z M84.4238281,149.550781 L45.5291522,149.550781 L45.5291522,144.425637 L84.4238281,144.425637 L84.4238281,149.550781 Z M84.4238281,139.902344 L74.4744647,139.902344 L74.4744647,134.777199 L84.4238281,134.777199 L84.4238281,139.902344 Z M84.4238281,130.253906 L74.4744647,130.253906 L74.4744647,125.128762 L84.4238281,125.128762 L84.4238281,130.253906 Z M98.8964844,149.550781 L88.9471209,149.550781 L88.9471209,144.425637 L98.8964844,144.425637 L98.8964844,149.550781 Z M98.8964844,139.902344 L88.9471209,139.902344 L88.9471209,134.777199 L98.8964844,134.777199 L98.8964844,139.902344 Z M103.419777,125.128762 L113.369141,125.128762 L113.369141,130.253906 L103.419777,130.253906 L103.419777,125.128762 Z M103.419777,134.777199 L113.369141,134.777199 L113.369141,139.902344 L103.419777,139.902344 L103.419777,134.777199 Z M103.419777,144.425637 L113.369141,144.425637 L113.369141,149.550781 L103.419777,149.550781 L103.419777,144.425637 Z M98.8964844,125.128762 L98.8964844,130.253906 L88.9471209,130.253906 L88.9471209,125.128762 L98.8964844,125.128762 Z" id="Shape" stroke="#FFFFFF" stroke-width="2" fill="#1B3E6F"></path>
+ <g id="action" transform="translate(34.000000, 35.000000)">
+ <g id="1">
+ <g id="Group" transform="translate(2.836930, 2.684715)" fill="#E0E8F2">
+ <polygon id="Path" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#1B3E6F"></path>
+ </g>
+ <g id="2" transform="translate(21.000000, 0.000000)">
+ <g id="Group" transform="translate(2.836930, 2.684715)" fill="#E0E8F2">
+ <polygon id="Path" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#1B3E6F"></path>
+ </g>
+ <g id="3" transform="translate(41.000000, 0.000000)">
+ <g id="Group" transform="translate(2.836930, 2.684715)" fill="#E0E8F2">
+ <polygon id="Path" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#1B3E6F"></path>
+ </g>
+ <g id="4" transform="translate(0.000000, 25.000000)">
+ <g id="Group" transform="translate(2.836930, 2.684715)" fill="#E0E8F2">
+ <polygon id="Path" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#1B3E6F"></path>
+ </g>
+ <g id="5" transform="translate(21.000000, 25.000000)">
+ <g id="Group" transform="translate(2.836930, 2.684715)" fill="#E0E8F2">
+ <polygon id="Path" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#1B3E6F"></path>
+ </g>
+ <g id="6" transform="translate(41.000000, 25.000000)">
+ <g id="Group" transform="translate(2.836930, 2.684715)" fill="#E0E8F2">
+ <polygon id="Path" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#1B3E6F"></path>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/cds-ui/designer-client/src/assets/img/icon-action-import-hover.svg b/cds-ui/designer-client/src/assets/img/icon-action-import-hover.svg
new file mode 100644
index 000000000..4d5a11202
--- /dev/null
+++ b/cds-ui/designer-client/src/assets/img/icon-action-import-hover.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="131px" height="173px" viewBox="0 0 131 173" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Generator: Sketch 61.2 (89653) - https://sketch.com -->
+ <title>icon-hover</title>
+ <desc>Created with Sketch.</desc>
+ <defs>
+ <rect id="path-1" x="0" y="0" width="40.5" height="47"></rect>
+ </defs>
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+ <g id="7.4.1-Designer---Import-action" transform="translate(-1030.000000, -377.000000)">
+ <g id="modal-new" transform="translate(120.000000, 222.000000)">
+ <g id="options" transform="translate(100.000000, 132.000000)">
+ <g id="import" transform="translate(750.000000, 0.000000)">
+ <g id="icon+text" transform="translate(30.000000, 23.000000)">
+ <g id="icon-hover" transform="translate(30.000000, 0.000000)">
+ <g id="Group" transform="translate(0.000000, 24.222222)" fill-rule="nonzero">
+ <polygon id="Path" fill="#E0E8F2" points="113.218678 86.6995804 11.9100839 86.3986545 11.6173865 11.7737269 11.9100839 11.7737269 11.9100839 7.25043403 0 7.25043403 0 98.6096644 115.480324 98.6096644 115.480324 86.6995804"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="21.5585214 0.0141059028 26.3827402 0.0141059028 26.3827402 4.53739873 21.5585214 4.53739873"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="31.2069589 0.0141059028 36.0311777 0.0141059028 36.0311777 4.53739873 31.2069589 4.53739873"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="40.8553964 0.0141059028 45.6796152 0.0141059028 45.6796152 4.53739873 40.8553964 4.53739873"></polygon>
+ </g>
+ <path d="M125.279225,17 L14.3221933,17 C11.7443396,17 9.6484375,19.0959021 9.6484375,21.6737558 L9.6484375,113.183449 L120.455006,113.183449 L120.455006,108.660156 L14.1717303,108.660156 L14.1717303,35.9959491 L125.429687,35.9959491 L125.429687,127.806568 C125.429687,127.890028 125.362685,127.957031 125.279225,127.957031 L96.333912,127.957031 C93.7572338,127.957031 91.6601562,130.054109 91.6601562,132.630787 L91.6601562,137.605469 L12.0605469,137.605469 L12.0605469,171.074074 L117.892433,171.074074 L117.892433,137.605469 L96.1834491,137.605469 L96.1834491,132.630787 C96.1834491,132.547327 96.2516275,132.480324 96.333912,132.480324 L125.279225,132.480324 C127.855903,132.480324 129.95298,130.383247 129.95298,127.806568 L129.95298,21.6737558 C129.95298,19.0959021 127.855903,17 125.279225,17 Z M60.0018084,142.128762 L69.9511719,142.128762 L69.9511719,147.253906 L60.0018084,147.253906 L60.0018084,142.128762 Z M60.0018084,151.777199 L69.9511719,151.777199 L69.9511719,156.902344 L60.0018084,156.902344 L60.0018084,151.777199 Z M45.5291522,142.128762 L55.4785156,142.128762 L55.4785156,147.253906 L45.5291522,147.253906 L45.5291522,142.128762 Z M45.5291522,151.777199 L55.4785156,151.777199 L55.4785156,156.902344 L45.5291522,156.902344 L45.5291522,151.777199 Z M26.5332031,166.550781 L16.5838397,166.550781 L16.5838397,161.425637 L26.5332031,161.425637 L26.5332031,166.550781 Z M26.5332031,156.902344 L16.5838397,156.902344 L16.5838397,151.777199 L26.5332031,151.777199 L26.5332031,156.902344 Z M26.5332031,147.253906 L16.5838397,147.253906 L16.5838397,142.128762 L26.5332031,142.128762 L26.5332031,147.253906 Z M41.0058594,166.550781 L31.0564959,166.550781 L31.0564959,161.425637 L41.0058594,161.425637 L41.0058594,166.550781 Z M41.0058594,156.902344 L31.0564959,156.902344 L31.0564959,151.777199 L41.0058594,151.777199 L41.0058594,156.902344 Z M41.0058594,147.253906 L31.0564959,147.253906 L31.0564959,142.128762 L41.0058594,142.128762 L41.0058594,147.253906 Z M84.4238281,166.550781 L45.5291522,166.550781 L45.5291522,161.425637 L84.4238281,161.425637 L84.4238281,166.550781 Z M84.4238281,156.902344 L74.4744647,156.902344 L74.4744647,151.777199 L84.4238281,151.777199 L84.4238281,156.902344 Z M84.4238281,147.253906 L74.4744647,147.253906 L74.4744647,142.128762 L84.4238281,142.128762 L84.4238281,147.253906 Z M98.8964844,166.550781 L88.9471209,166.550781 L88.9471209,161.425637 L98.8964844,161.425637 L98.8964844,166.550781 Z M98.8964844,156.902344 L88.9471209,156.902344 L88.9471209,151.777199 L98.8964844,151.777199 L98.8964844,156.902344 Z M103.419777,142.128762 L113.369141,142.128762 L113.369141,147.253906 L103.419777,147.253906 L103.419777,142.128762 Z M103.419777,151.777199 L113.369141,151.777199 L113.369141,156.902344 L103.419777,156.902344 L103.419777,151.777199 Z M103.419777,161.425637 L113.369141,161.425637 L113.369141,166.550781 L103.419777,166.550781 L103.419777,161.425637 Z M98.8964844,147.253906 L88.9471209,147.253906 L88.9471209,142.128762 L98.8964844,142.128762 L98.8964844,147.253906 Z M14.1717303,31.4726562 L14.1717303,21.6737558 C14.1717303,21.5902958 14.2387333,21.5232928 14.3221933,21.5232928 L125.279225,21.5232928 C125.362685,21.5232928 125.429688,21.5902958 125.429688,21.6737558 L125.429688,31.4726562 L14.1717303,31.4726562 Z" id="Shape" stroke="#FFFFFF" stroke-width="2" fill="#1B3E6F" fill-rule="nonzero"></path>
+ <polygon id="Path" stroke="#FFFFFF" fill="#1B3E6F" fill-rule="nonzero" points="96.7252852 92.4505702 92.6085365 96.5673189 92.6085365 73 89.3914635 73 89.3914635 96.5673189 85.2747148 92.4505702 83 94.7252853 90.9999999 102.725285 99 94.7252853"></polygon>
+ <g id="action" transform="translate(64.000000, 0.000000)">
+ <g id="Group" transform="translate(0.000000, 4.959849)" fill-rule="nonzero">
+ <polygon id="Path" fill="#E0E8F2" points="43.7054389 57.9271781 5.84230707 57.9271781 5.84230707 0.0230647733 0 0.0230647733 0 63.7694851 44.8148545 63.7694851 44.8148545 57.9271781"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="11.7584214 50.9016481 14.1248671 50.9016481 14.1248671 53.1204793 11.7584214 53.1204793"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="16.4913129 50.9016481 18.8577586 50.9016481 18.8577586 53.1204793 16.4913129 53.1204793"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="21.2242044 50.9016481 23.5906501 50.9016481 23.5906501 53.1204793 21.2242044 53.1204793"></polygon>
+ </g>
+ <path d="M49.8148545,12.4820787 L37.3327757,0 L5,0 L5,63.7464203 L49.8148545,63.7464203 L49.8148545,17.6745358 L47.5960233,17.6745358 L47.5960233,61.5275892 L7.21883119,61.5275892 L7.21883119,2.21883119 L35.7637946,2.21883119 L35.7637946,15.2342827 L49.8148545,15.2342827 L49.8148545,12.4820787 Z M37.9826258,13.0154516 L37.9826258,3.78723577 L47.2108416,13.0154516 L37.9826258,13.0154516 Z" id="Shape" fill="#1B3E6F" fill-rule="nonzero"></path>
+ <g id="3" transform="translate(7.000000, 15.000000)">
+ <mask id="mask-2" fill="white">
+ <use xlink:href="#path-1"></use>
+ </mask>
+ <use id="Mask" fill="#FFFFFF" xlink:href="#path-1"></use>
+ <g mask="url(#mask-2)">
+ <g transform="translate(2.000000, 31.000000)">
+ <g id="Group" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(2.836930, 2.684715)">
+ <polygon id="Path" fill="#E0E8F2" fill-rule="nonzero" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" fill="#E0E8F2" fill-rule="nonzero" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F" fill-rule="nonzero"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#5DBDBA" fill-rule="nonzero"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#5DBDBA" fill-rule="nonzero"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#5DBDBA" fill-rule="nonzero"></path>
+ </g>
+ </g>
+ </g>
+ <g id="1" transform="translate(9.000000, 15.000000)" fill-rule="nonzero">
+ <g id="Group" transform="translate(2.836930, 2.684715)" fill="#E0E8F2">
+ <polygon id="Path" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#5DBDBA"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#5DBDBA"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#5DBDBA"></path>
+ </g>
+ <g id="2" transform="translate(29.000000, 24.000000)" fill-rule="nonzero">
+ <g id="Group" transform="translate(2.836930, 2.684715)" fill="#E0E8F2">
+ <polygon id="Path" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#5DBDBA"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#5DBDBA"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#5DBDBA"></path>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/cds-ui/designer-client/src/assets/img/icon-action-import.svg b/cds-ui/designer-client/src/assets/img/icon-action-import.svg
new file mode 100644
index 000000000..1c7fd6b1b
--- /dev/null
+++ b/cds-ui/designer-client/src/assets/img/icon-action-import.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="131px" height="173px" viewBox="0 0 131 173" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Generator: Sketch 61.2 (89653) - https://sketch.com -->
+ <title>icon</title>
+ <desc>Created with Sketch.</desc>
+ <defs>
+ <rect id="path-1" x="0" y="0" width="40.5" height="47"></rect>
+ </defs>
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+ <g id="7.0-Designer---First-action-options" transform="translate(-1030.000000, -377.000000)">
+ <g id="modal-new" transform="translate(120.000000, 222.000000)">
+ <g id="options" transform="translate(100.000000, 132.000000)">
+ <g id="import" transform="translate(750.000000, 0.000000)">
+ <g id="icon+text" transform="translate(30.000000, 23.000000)">
+ <g id="icon" transform="translate(30.000000, 0.000000)">
+ <g id="Group" transform="translate(0.000000, 24.222222)" fill="#E0E8F2" fill-rule="nonzero">
+ <polygon id="Path" points="113.218678 86.6995804 11.9100839 86.3986545 11.6173865 11.7737269 11.9100839 11.7737269 11.9100839 7.25043403 0 7.25043403 0 98.6096644 115.480324 98.6096644 115.480324 86.6995804"></polygon>
+ <polygon id="Path" points="21.5585214 0.0141059028 26.3827402 0.0141059028 26.3827402 4.53739873 21.5585214 4.53739873"></polygon>
+ <polygon id="Path" points="31.2069589 0.0141059028 36.0311777 0.0141059028 36.0311777 4.53739873 31.2069589 4.53739873"></polygon>
+ <polygon id="Path" points="40.8553964 0.0141059028 45.6796152 0.0141059028 45.6796152 4.53739873 40.8553964 4.53739873"></polygon>
+ </g>
+ <path d="M125.279225,17 L14.3221933,17 C11.7443396,17 9.6484375,19.0959021 9.6484375,21.6737558 L9.6484375,113.183449 L120.455006,113.183449 L120.455006,108.660156 L14.1717303,108.660156 L14.1717303,35.9959491 L125.429687,35.9959491 L125.429687,127.806568 C125.429687,127.890028 125.362685,127.957031 125.279225,127.957031 L96.333912,127.957031 C93.7572338,127.957031 91.6601562,130.054109 91.6601562,132.630787 L91.6601562,137.605469 L12.0605469,137.605469 L12.0605469,171.074074 L117.892433,171.074074 L117.892433,137.605469 L96.1834491,137.605469 L96.1834491,132.630787 C96.1834491,132.547327 96.2516275,132.480324 96.333912,132.480324 L125.279225,132.480324 C127.855903,132.480324 129.95298,130.383247 129.95298,127.806568 L129.95298,21.6737558 C129.95298,19.0959021 127.855903,17 125.279225,17 Z M60.0018084,142.128762 L69.9511719,142.128762 L69.9511719,147.253906 L60.0018084,147.253906 L60.0018084,142.128762 Z M60.0018084,151.777199 L69.9511719,151.777199 L69.9511719,156.902344 L60.0018084,156.902344 L60.0018084,151.777199 Z M45.5291522,142.128762 L55.4785156,142.128762 L55.4785156,147.253906 L45.5291522,147.253906 L45.5291522,142.128762 Z M45.5291522,151.777199 L55.4785156,151.777199 L55.4785156,156.902344 L45.5291522,156.902344 L45.5291522,151.777199 Z M26.5332031,166.550781 L16.5838397,166.550781 L16.5838397,161.425637 L26.5332031,161.425637 L26.5332031,166.550781 Z M26.5332031,156.902344 L16.5838397,156.902344 L16.5838397,151.777199 L26.5332031,151.777199 L26.5332031,156.902344 Z M26.5332031,147.253906 L16.5838397,147.253906 L16.5838397,142.128762 L26.5332031,142.128762 L26.5332031,147.253906 Z M41.0058594,166.550781 L31.0564959,166.550781 L31.0564959,161.425637 L41.0058594,161.425637 L41.0058594,166.550781 Z M41.0058594,156.902344 L31.0564959,156.902344 L31.0564959,151.777199 L41.0058594,151.777199 L41.0058594,156.902344 Z M41.0058594,147.253906 L31.0564959,147.253906 L31.0564959,142.128762 L41.0058594,142.128762 L41.0058594,147.253906 Z M84.4238281,166.550781 L45.5291522,166.550781 L45.5291522,161.425637 L84.4238281,161.425637 L84.4238281,166.550781 Z M84.4238281,156.902344 L74.4744647,156.902344 L74.4744647,151.777199 L84.4238281,151.777199 L84.4238281,156.902344 Z M84.4238281,147.253906 L74.4744647,147.253906 L74.4744647,142.128762 L84.4238281,142.128762 L84.4238281,147.253906 Z M98.8964844,166.550781 L88.9471209,166.550781 L88.9471209,161.425637 L98.8964844,161.425637 L98.8964844,166.550781 Z M98.8964844,156.902344 L88.9471209,156.902344 L88.9471209,151.777199 L98.8964844,151.777199 L98.8964844,156.902344 Z M103.419777,142.128762 L113.369141,142.128762 L113.369141,147.253906 L103.419777,147.253906 L103.419777,142.128762 Z M103.419777,151.777199 L113.369141,151.777199 L113.369141,156.902344 L103.419777,156.902344 L103.419777,151.777199 Z M103.419777,161.425637 L113.369141,161.425637 L113.369141,166.550781 L103.419777,166.550781 L103.419777,161.425637 Z M98.8964844,147.253906 L88.9471209,147.253906 L88.9471209,142.128762 L98.8964844,142.128762 L98.8964844,147.253906 Z M14.1717303,31.4726562 L14.1717303,21.6737558 C14.1717303,21.5902958 14.2387333,21.5232928 14.3221933,21.5232928 L125.279225,21.5232928 C125.362685,21.5232928 125.429688,21.5902958 125.429688,21.6737558 L125.429688,31.4726562 L14.1717303,31.4726562 Z" id="Shape" stroke="#FFFFFF" stroke-width="2" fill="#1B3E6F" fill-rule="nonzero"></path>
+ <polygon id="Path" stroke="#FFFFFF" fill="#1B3E6F" fill-rule="nonzero" points="96.7252852 92.4505702 92.6085365 96.5673189 92.6085365 73 89.3914635 73 89.3914635 96.5673189 85.2747148 92.4505702 83 94.7252853 90.9999999 102.725285 99 94.7252853"></polygon>
+ <g id="action" transform="translate(64.000000, 0.000000)">
+ <g id="Group" transform="translate(0.000000, 4.959849)" fill-rule="nonzero">
+ <polygon id="Path" fill="#E0E8F2" points="43.7054389 57.9271781 5.84230707 57.9271781 5.84230707 0.0230647733 0 0.0230647733 0 63.7694851 44.8148545 63.7694851 44.8148545 57.9271781"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="11.7584214 50.9016481 14.1248671 50.9016481 14.1248671 53.1204793 11.7584214 53.1204793"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="16.4913129 50.9016481 18.8577586 50.9016481 18.8577586 53.1204793 16.4913129 53.1204793"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="21.2242044 50.9016481 23.5906501 50.9016481 23.5906501 53.1204793 21.2242044 53.1204793"></polygon>
+ </g>
+ <path d="M49.8148545,12.4820787 L37.3327757,0 L5,0 L5,63.7464203 L49.8148545,63.7464203 L49.8148545,17.6745358 L47.5960233,17.6745358 L47.5960233,61.5275892 L7.21883119,61.5275892 L7.21883119,2.21883119 L35.7637946,2.21883119 L35.7637946,15.2342827 L49.8148545,15.2342827 L49.8148545,12.4820787 Z M37.9826258,13.0154516 L37.9826258,3.78723577 L47.2108416,13.0154516 L37.9826258,13.0154516 Z" id="Shape" fill="#1B3E6F" fill-rule="nonzero"></path>
+ <g id="3" transform="translate(7.000000, 15.000000)">
+ <mask id="mask-2" fill="white">
+ <use xlink:href="#path-1"></use>
+ </mask>
+ <use id="Mask" fill="#FFFFFF" xlink:href="#path-1"></use>
+ <g mask="url(#mask-2)">
+ <g transform="translate(2.000000, 31.000000)">
+ <g id="Group" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(2.836930, 2.684715)">
+ <polygon id="Path" fill="#E0E8F2" fill-rule="nonzero" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" fill="#E0E8F2" fill-rule="nonzero" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F" fill-rule="nonzero"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#1B3E6F" fill-rule="nonzero"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#1B3E6F" fill-rule="nonzero"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#1B3E6F" fill-rule="nonzero"></path>
+ </g>
+ </g>
+ </g>
+ <g id="1" transform="translate(9.000000, 15.000000)" fill-rule="nonzero">
+ <g id="Group" transform="translate(2.836930, 2.684715)" fill="#E0E8F2">
+ <polygon id="Path" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#1B3E6F"></path>
+ </g>
+ <g id="2" transform="translate(29.000000, 24.000000)" fill-rule="nonzero">
+ <g id="Group" transform="translate(2.836930, 2.684715)" fill="#E0E8F2">
+ <polygon id="Path" points="0.349703874 0.411818739 9.98166155 0.411818739 9.98166155 5.18449572 0.349703874 5.18449572"></polygon>
+ <polygon id="Path" points="5.90316753 12.212929 9.98166155 12.212929 9.98166155 16.291423 5.90316753 16.291423"></polygon>
+ </g>
+ <path d="M0.40990173,21.7528702 L15.5953231,21.7528702 L15.5953231,0.319802285 L0.40990173,0.319802285 L0.40990173,21.7528702 Z M1.71166392,1.62156448 L14.2935609,1.62156448 L14.2935609,20.451108 L1.71166392,20.451108 L1.71166392,1.62156448 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M8.74009721,13.4226747 L12.8185912,13.4226747 L12.8185912,9.34418073 L8.74009721,9.34418073 L8.74009721,13.4226747 Z M10.0418594,10.6459429 L11.516829,10.6459429 L11.516829,12.1209126 L10.0418594,12.1209126 L10.0418594,10.6459429 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M3.18663356,18.9761384 L7.26512758,18.9761384 L7.26512758,14.8976444 L3.18663356,14.8976444 L3.18663356,18.9761384 Z M4.48839575,16.1994066 L5.96336539,16.1994066 L5.96336539,17.6743762 L4.48839575,17.6743762 L4.48839575,16.1994066 Z" id="Shape" fill="#1B3E6F"></path>
+ <path d="M3.18663356,13.4226747 L7.26512758,13.4226747 L7.26512758,9.34418073 L3.18663356,9.34418073 L3.18663356,13.4226747 Z M4.48839575,10.6459429 L5.96336539,10.6459429 L5.96336539,12.1209126 L4.48839575,12.1209126 L4.48839575,10.6459429 Z" id="Shape" fill="#1B3E6F"></path>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/cds-ui/designer-client/src/assets/img/icon-action-recent-hover.svg b/cds-ui/designer-client/src/assets/img/icon-action-recent-hover.svg
new file mode 100644
index 000000000..193961656
--- /dev/null
+++ b/cds-ui/designer-client/src/assets/img/icon-action-recent-hover.svg
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="144px" height="157px" viewBox="0 0 144 157" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Generator: Sketch 61.2 (89653) - https://sketch.com -->
+ <title>icon-hover</title>
+ <desc>Created with Sketch.</desc>
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+ <g id="7.3.1-Designer---Recent-action" transform="translate(-780.000000, -393.000000)" fill-rule="nonzero">
+ <g id="modal-new" transform="translate(120.000000, 222.000000)">
+ <g id="options" transform="translate(100.000000, 132.000000)">
+ <g id="recent" transform="translate(500.000000, 0.000000)">
+ <g id="icon+text" transform="translate(30.000000, 40.000000)">
+ <g id="icon-hover" transform="translate(30.000000, 0.000000)">
+ <g id="Group" transform="translate(-0.000000, 7.222222)">
+ <polygon id="Path" fill="#E0E8F2" points="113.218678 86.6995804 11.9100839 86.3986545 11.6173865 11.7737269 11.9100839 11.7737269 11.9100839 7.25043403 0 7.25043403 0 98.6096644 115.480324 98.6096644 115.480324 86.6995804"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="21.5585214 0.0141059028 26.3827402 0.0141059028 26.3827402 4.53739873 21.5585214 4.53739873"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="31.2069589 0.0141059028 36.0311777 0.0141059028 36.0311777 4.53739873 31.2069589 4.53739873"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="40.8553964 0.0141059028 45.6796152 0.0141059028 45.6796152 4.53739873 40.8553964 4.53739873"></polygon>
+ </g>
+ <path d="M125.279225,-3.83693077e-13 L14.3221933,-3.83693077e-13 C11.7443396,-3.83693077e-13 9.6484375,2.09590213 9.6484375,4.67375579 L9.6484375,96.1834491 L120.455006,96.1834491 L120.455006,91.6601562 L14.1717303,91.6601562 L14.1717303,18.9959491 L125.429687,18.9959491 L125.429687,110.806568 C125.429687,110.890028 125.362685,110.957031 125.279225,110.957031 L96.333912,110.957031 C93.7572338,110.957031 91.6601562,113.054109 91.6601562,115.630787 L91.6601562,120.605469 L12.0605469,120.605469 L12.0605469,154.074074 L117.892433,154.074074 L117.892433,120.605469 L96.1834491,120.605469 L96.1834491,115.630787 C96.1834491,115.547327 96.2516275,115.480324 96.333912,115.480324 L125.279225,115.480324 C127.855903,115.480324 129.95298,113.383247 129.95298,110.806568 L129.95298,4.67375579 C129.95298,2.09590213 127.855903,-3.83693077e-13 125.279225,-3.83693077e-13 Z M60.0018084,125.128762 L69.9511719,125.128762 L69.9511719,130.253906 L60.0018084,130.253906 L60.0018084,125.128762 Z M60.0018084,134.777199 L69.9511719,134.777199 L69.9511719,139.902344 L60.0018084,139.902344 L60.0018084,134.777199 Z M45.5291522,125.128762 L55.4785156,125.128762 L55.4785156,130.253906 L45.5291522,130.253906 L45.5291522,125.128762 Z M45.5291522,134.777199 L55.4785156,134.777199 L55.4785156,139.902344 L45.5291522,139.902344 L45.5291522,134.777199 Z M26.5332031,149.550781 L16.5838397,149.550781 L16.5838397,144.425637 L26.5332031,144.425637 L26.5332031,149.550781 Z M26.5332031,139.902344 L16.5838397,139.902344 L16.5838397,134.777199 L26.5332031,134.777199 L26.5332031,139.902344 Z M26.5332031,130.253906 L16.5838397,130.253906 L16.5838397,125.128762 L26.5332031,125.128762 L26.5332031,130.253906 Z M41.0058594,149.550781 L31.0564959,149.550781 L31.0564959,144.425637 L41.0058594,144.425637 L41.0058594,149.550781 Z M41.0058594,139.902344 L31.0564959,139.902344 L31.0564959,134.777199 L41.0058594,134.777199 L41.0058594,139.902344 Z M41.0058594,130.253906 L31.0564959,130.253906 L31.0564959,125.128762 L41.0058594,125.128762 L41.0058594,130.253906 Z M84.4238281,149.550781 L45.5291522,149.550781 L45.5291522,144.425637 L84.4238281,144.425637 L84.4238281,149.550781 Z M84.4238281,139.902344 L74.4744647,139.902344 L74.4744647,134.777199 L84.4238281,134.777199 L84.4238281,139.902344 Z M84.4238281,130.253906 L74.4744647,130.253906 L74.4744647,125.128762 L84.4238281,125.128762 L84.4238281,130.253906 Z M98.8964844,149.550781 L88.9471209,149.550781 L88.9471209,144.425637 L98.8964844,144.425637 L98.8964844,149.550781 Z M98.8964844,139.902344 L88.9471209,139.902344 L88.9471209,134.777199 L98.8964844,134.777199 L98.8964844,139.902344 Z M103.419777,125.128762 L113.369141,125.128762 L113.369141,130.253906 L103.419777,130.253906 L103.419777,125.128762 Z M103.419777,134.777199 L113.369141,134.777199 L113.369141,139.902344 L103.419777,139.902344 L103.419777,134.777199 Z M103.419777,144.425637 L113.369141,144.425637 L113.369141,149.550781 L103.419777,149.550781 L103.419777,144.425637 Z M98.8964844,130.253906 L88.9471209,130.253906 L88.9471209,125.128762 L98.8964844,125.128762 L98.8964844,130.253906 Z M14.1717303,14.4726562 L14.1717303,4.67375579 C14.1717303,4.59029579 14.2387333,4.52329282 14.3221933,4.52329282 L125.279225,4.52329282 C125.362685,4.52329282 125.429688,4.59029579 125.429688,4.67375579 L125.429688,14.4726562 L14.1717303,14.4726562 Z" id="Shape" stroke="#FFFFFF" stroke-width="2" fill="#1B3E6F"></path>
+ <g id="list" transform="translate(29.000000, 31.000000)">
+ <g>
+ <g id="Group" transform="translate(0.000000, -0.000000)">
+ <polygon id="Path" fill="#E0E8F2" points="0.134469486 0.0137213762 2.95009588 0.0137213762 2.95009588 2.65371415 0.134469486 2.65371415"></polygon>
+ <polygon id="Path" fill="#E0E8F2" points="5.76572227 0.0137213762 8.58134865 0.0137213762 8.58134865 2.65371415 5.76572227 2.65371415"></polygon>
+ <polygon id="Path" fill="#E0E8F2" points="11.396975 0.0137213762 14.2126014 0.0137213762 14.2126014 2.65371415 11.396975 2.65371415"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="0.222286294 14.0918533 8.49353185 14.0918533 8.49353185 22.3630989 0.222286294 22.3630989"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="0.222286294 26.7621721 8.49353185 26.7621721 8.49353185 35.0334176 0.222286294 35.0334176"></polygon>
+ <polygon id="Path" fill="#5DBDBA" points="0.222286294 39.4324908 8.49353185 39.4324908 8.49353185 47.7037364 0.222286294 47.7037364"></polygon>
+ </g>
+ <polygon id="Path" fill="#1B3E6F" points="11.396975 14.0918533 39.5532389 14.0918533 39.5532389 16.7318461 11.396975 16.7318461"></polygon>
+ <polygon id="Path" fill="#1B3E6F" points="11.396975 7.05278735 26.8829202 7.05278735 26.8829202 9.69278012 11.396975 9.69278012"></polygon>
+ <polygon id="Path" fill="#1B3E6F" points="0.134469486 7.05278735 8.58134865 7.05278735 8.58134865 9.69278012 0.134469486 9.69278012"></polygon>
+ <polygon id="Path" fill="#1B3E6F" points="11.396975 19.7231061 26.8829202 19.7231061 26.8829202 22.3630989 11.396975 22.3630989"></polygon>
+ <polygon id="Path" fill="#1B3E6F" points="11.396975 26.7621721 39.5532389 26.7621721 39.5532389 29.4021649 11.396975 29.4021649"></polygon>
+ <polygon id="Path" fill="#1B3E6F" points="11.396975 32.3934249 26.8829202 32.3934249 26.8829202 35.0334176 11.396975 35.0334176"></polygon>
+ <polygon id="Path" fill="#1B3E6F" points="11.396975 39.4324908 39.5532389 39.4324908 39.5532389 42.0724836 11.396975 42.0724836"></polygon>
+ <polygon id="Path" fill="#1B3E6F" points="11.396975 45.0637436 26.8829202 45.0637436 26.8829202 47.7037364 11.396975 47.7037364"></polygon>
+ </g>
+ <g id="recent" transform="translate(77.722272, 34.733652)">
+ <path d="M18.5231598,0 C8.3091772,0 0,8.31000246 0,18.5231598 C0,28.7371424 8.3091772,37.0463197 18.5231598,37.0463197 C28.7371424,37.0463197 37.0463197,28.7371424 37.0463197,18.5231598 C37.0463197,8.31000246 28.7371424,0 18.5231598,0 Z" id="Path" fill="#E0E8F2"></path>
+ <path d="M18.5231598,30.2722109 C12.0445104,30.2722109 6.77410871,25.0018092 6.77410871,18.5231598 C6.77410871,12.0445104 12.0445104,6.77410871 18.5231598,6.77410871 C25.0018092,6.77410871 30.2722109,12.0445104 30.2722109,18.5231598 C30.2722109,25.0018092 25.0018092,30.2722109 18.5231598,30.2722109 Z M18.5231598,9.94988482 C13.7958091,9.94988482 9.94988482,13.7958091 9.94988482,18.5231598 C9.94988482,23.2505105 13.7958091,27.0964348 18.5231598,27.0964348 C23.2505105,27.0964348 27.0964348,23.2505105 27.0964348,18.5231598 C27.0964348,13.7958091 23.2505105,9.94988482 18.5231598,9.94988482 Z" id="Shape" fill="#1B3E6F"></path>
+ <polygon id="Path" fill="#1B3E6F" points="16.2593464 23.0334551 14.0136898 20.7877985 16.9352718 17.8653913 16.9352718 13.4425783 20.1110479 13.4425783 20.1110479 19.1809284"></polygon>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/cds-ui/designer-client/src/assets/img/icon-action-recent.svg b/cds-ui/designer-client/src/assets/img/icon-action-recent.svg
new file mode 100644
index 000000000..da6ecf742
--- /dev/null
+++ b/cds-ui/designer-client/src/assets/img/icon-action-recent.svg
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="144px" height="157px" viewBox="0 0 144 157" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Generator: Sketch 61.2 (89653) - https://sketch.com -->
+ <title>icon</title>
+ <desc>Created with Sketch.</desc>
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+ <g id="7.0-Designer---First-action-options" transform="translate(-780.000000, -393.000000)" fill-rule="nonzero">
+ <g id="modal-new" transform="translate(120.000000, 222.000000)">
+ <g id="options" transform="translate(100.000000, 132.000000)">
+ <g id="recent" transform="translate(500.000000, 0.000000)">
+ <g id="icon+text" transform="translate(30.000000, 40.000000)">
+ <g id="icon" transform="translate(30.000000, 0.000000)">
+ <g id="Group" transform="translate(-0.000000, 7.222222)" fill="#E0E8F2">
+ <polygon id="Path" points="113.218678 86.6995804 11.9100839 86.3986545 11.6173865 11.7737269 11.9100839 11.7737269 11.9100839 7.25043403 0 7.25043403 0 98.6096644 115.480324 98.6096644 115.480324 86.6995804"></polygon>
+ <polygon id="Path" points="21.5585214 0.0141059028 26.3827402 0.0141059028 26.3827402 4.53739873 21.5585214 4.53739873"></polygon>
+ <polygon id="Path" points="31.2069589 0.0141059028 36.0311777 0.0141059028 36.0311777 4.53739873 31.2069589 4.53739873"></polygon>
+ <polygon id="Path" points="40.8553964 0.0141059028 45.6796152 0.0141059028 45.6796152 4.53739873 40.8553964 4.53739873"></polygon>
+ </g>
+ <path d="M125.279225,-3.83693077e-13 L14.3221933,-3.83693077e-13 C11.7443396,-3.83693077e-13 9.6484375,2.09590213 9.6484375,4.67375579 L9.6484375,96.1834491 L120.455006,96.1834491 L120.455006,91.6601562 L14.1717303,91.6601562 L14.1717303,18.9959491 L125.429687,18.9959491 L125.429687,110.806568 C125.429687,110.890028 125.362685,110.957031 125.279225,110.957031 L96.333912,110.957031 C93.7572338,110.957031 91.6601562,113.054109 91.6601562,115.630787 L91.6601562,120.605469 L12.0605469,120.605469 L12.0605469,154.074074 L117.892433,154.074074 L117.892433,120.605469 L96.1834491,120.605469 L96.1834491,115.630787 C96.1834491,115.547327 96.2516275,115.480324 96.333912,115.480324 L125.279225,115.480324 C127.855903,115.480324 129.95298,113.383247 129.95298,110.806568 L129.95298,4.67375579 C129.95298,2.09590213 127.855903,-3.83693077e-13 125.279225,-3.83693077e-13 Z M60.0018084,125.128762 L69.9511719,125.128762 L69.9511719,130.253906 L60.0018084,130.253906 L60.0018084,125.128762 Z M60.0018084,134.777199 L69.9511719,134.777199 L69.9511719,139.902344 L60.0018084,139.902344 L60.0018084,134.777199 Z M45.5291522,125.128762 L55.4785156,125.128762 L55.4785156,130.253906 L45.5291522,130.253906 L45.5291522,125.128762 Z M45.5291522,134.777199 L55.4785156,134.777199 L55.4785156,139.902344 L45.5291522,139.902344 L45.5291522,134.777199 Z M26.5332031,149.550781 L16.5838397,149.550781 L16.5838397,144.425637 L26.5332031,144.425637 L26.5332031,149.550781 Z M26.5332031,139.902344 L16.5838397,139.902344 L16.5838397,134.777199 L26.5332031,134.777199 L26.5332031,139.902344 Z M26.5332031,130.253906 L16.5838397,130.253906 L16.5838397,125.128762 L26.5332031,125.128762 L26.5332031,130.253906 Z M41.0058594,149.550781 L31.0564959,149.550781 L31.0564959,144.425637 L41.0058594,144.425637 L41.0058594,149.550781 Z M41.0058594,139.902344 L31.0564959,139.902344 L31.0564959,134.777199 L41.0058594,134.777199 L41.0058594,139.902344 Z M41.0058594,130.253906 L31.0564959,130.253906 L31.0564959,125.128762 L41.0058594,125.128762 L41.0058594,130.253906 Z M84.4238281,149.550781 L45.5291522,149.550781 L45.5291522,144.425637 L84.4238281,144.425637 L84.4238281,149.550781 Z M84.4238281,139.902344 L74.4744647,139.902344 L74.4744647,134.777199 L84.4238281,134.777199 L84.4238281,139.902344 Z M84.4238281,130.253906 L74.4744647,130.253906 L74.4744647,125.128762 L84.4238281,125.128762 L84.4238281,130.253906 Z M98.8964844,149.550781 L88.9471209,149.550781 L88.9471209,144.425637 L98.8964844,144.425637 L98.8964844,149.550781 Z M98.8964844,139.902344 L88.9471209,139.902344 L88.9471209,134.777199 L98.8964844,134.777199 L98.8964844,139.902344 Z M103.419777,125.128762 L113.369141,125.128762 L113.369141,130.253906 L103.419777,130.253906 L103.419777,125.128762 Z M103.419777,134.777199 L113.369141,134.777199 L113.369141,139.902344 L103.419777,139.902344 L103.419777,134.777199 Z M103.419777,144.425637 L113.369141,144.425637 L113.369141,149.550781 L103.419777,149.550781 L103.419777,144.425637 Z M98.8964844,130.253906 L88.9471209,130.253906 L88.9471209,125.128762 L98.8964844,125.128762 L98.8964844,130.253906 Z M14.1717303,14.4726562 L14.1717303,4.67375579 C14.1717303,4.59029579 14.2387333,4.52329282 14.3221933,4.52329282 L125.279225,4.52329282 C125.362685,4.52329282 125.429688,4.59029579 125.429688,4.67375579 L125.429688,14.4726562 L14.1717303,14.4726562 Z" id="Shape" stroke="#FFFFFF" stroke-width="2" fill="#1B3E6F"></path>
+ <g id="list" transform="translate(29.000000, 31.000000)">
+ <g>
+ <g id="Group" transform="translate(0.000000, -0.000000)" fill="#E0E8F2">
+ <polygon id="Path" points="0.134469486 0.0137213762 2.95009588 0.0137213762 2.95009588 2.65371415 0.134469486 2.65371415"></polygon>
+ <polygon id="Path" points="5.76572227 0.0137213762 8.58134865 0.0137213762 8.58134865 2.65371415 5.76572227 2.65371415"></polygon>
+ <polygon id="Path" points="11.396975 0.0137213762 14.2126014 0.0137213762 14.2126014 2.65371415 11.396975 2.65371415"></polygon>
+ <polygon id="Path" points="0.222286294 14.0918533 8.49353185 14.0918533 8.49353185 22.3630989 0.222286294 22.3630989"></polygon>
+ <polygon id="Path" points="0.222286294 26.7621721 8.49353185 26.7621721 8.49353185 35.0334176 0.222286294 35.0334176"></polygon>
+ <polygon id="Path" points="0.222286294 39.4324908 8.49353185 39.4324908 8.49353185 47.7037364 0.222286294 47.7037364"></polygon>
+ </g>
+ <polygon id="Path" fill="#1B3E6F" points="11.396975 14.0918533 39.5532389 14.0918533 39.5532389 16.7318461 11.396975 16.7318461"></polygon>
+ <polygon id="Path" fill="#1B3E6F" points="11.396975 7.05278735 26.8829202 7.05278735 26.8829202 9.69278012 11.396975 9.69278012"></polygon>
+ <polygon id="Path" fill="#1B3E6F" points="0.134469486 7.05278735 8.58134865 7.05278735 8.58134865 9.69278012 0.134469486 9.69278012"></polygon>
+ <polygon id="Path" fill="#1B3E6F" points="11.396975 19.7231061 26.8829202 19.7231061 26.8829202 22.3630989 11.396975 22.3630989"></polygon>
+ <polygon id="Path" fill="#1B3E6F" points="11.396975 26.7621721 39.5532389 26.7621721 39.5532389 29.4021649 11.396975 29.4021649"></polygon>
+ <polygon id="Path" fill="#1B3E6F" points="11.396975 32.3934249 26.8829202 32.3934249 26.8829202 35.0334176 11.396975 35.0334176"></polygon>
+ <polygon id="Path" fill="#1B3E6F" points="11.396975 39.4324908 39.5532389 39.4324908 39.5532389 42.0724836 11.396975 42.0724836"></polygon>
+ <polygon id="Path" fill="#1B3E6F" points="11.396975 45.0637436 26.8829202 45.0637436 26.8829202 47.7037364 11.396975 47.7037364"></polygon>
+ </g>
+ <g id="recent" transform="translate(77.722272, 34.733652)">
+ <path d="M18.5231598,0 C8.3091772,0 0,8.31000246 0,18.5231598 C0,28.7371424 8.3091772,37.0463197 18.5231598,37.0463197 C28.7371424,37.0463197 37.0463197,28.7371424 37.0463197,18.5231598 C37.0463197,8.31000246 28.7371424,0 18.5231598,0 Z" id="Path" fill="#E0E8F2"></path>
+ <path d="M18.5231598,30.2722109 C12.0445104,30.2722109 6.77410871,25.0018092 6.77410871,18.5231598 C6.77410871,12.0445104 12.0445104,6.77410871 18.5231598,6.77410871 C25.0018092,6.77410871 30.2722109,12.0445104 30.2722109,18.5231598 C30.2722109,25.0018092 25.0018092,30.2722109 18.5231598,30.2722109 Z M18.5231598,9.94988482 C13.7958091,9.94988482 9.94988482,13.7958091 9.94988482,18.5231598 C9.94988482,23.2505105 13.7958091,27.0964348 18.5231598,27.0964348 C23.2505105,27.0964348 27.0964348,23.2505105 27.0964348,18.5231598 C27.0964348,13.7958091 23.2505105,9.94988482 18.5231598,9.94988482 Z" id="Shape" fill="#1B3E6F"></path>
+ <polygon id="Path" fill="#1B3E6F" points="16.2593464 23.0334551 14.0136898 20.7877985 16.9352718 17.8653913 16.9352718 13.4425783 20.1110479 13.4425783 20.1110479 19.1809284"></polygon>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/cds-ui/designer-client/src/styles.css b/cds-ui/designer-client/src/styles.css
index 3c0a049bf..1996baa5a 100644
--- a/cds-ui/designer-client/src/styles.css
+++ b/cds-ui/designer-client/src/styles.css
@@ -658,6 +658,9 @@ height: 40px;
}
.searchBox > .searchInput:focus{
border-bottom: solid 1px #1B3E6F !important;
+ -webkit-box-shadow: 0 4px 6px -6px rgba(18, 115, 235, .6);
+ -moz-box-shadow: 0 4px 6px -6px rgba(18, 115, 235, .6);
+ box-shadow: 0 4px 6px -6px rgba(18, 115, 235, .6);
}
.searchBox:hover > .searchButton{
color: #1B3E6F;
@@ -1097,10 +1100,12 @@ height: 40px;
.addPaackage-card .card-footer .col:last-child{
text-align: left;
}
-.btn-create-package,
-.btn-import-package{
+.btn-create-package{
margin-bottom: 9px !important;
}
+.btn-import-package{
+ margin-bottom: 4px !important;
+}
.btn-create-package,
.btn-create-package:hover{
background-color: #1B3E6F;
@@ -1303,13 +1308,243 @@ ul.package-contributers{
}
+/*CREATE NEW ACTION MODAL*/
+.createActionModal .modal-dialog{
+ max-width: 85%;
+}
+.createActionModal .modal-header{
+ padding-top: 21px !important;
+ padding-bottom: 0 !important;
+ border-bottom: 0;
+}
+.createActionModal .close{
+ margin: 0 !important;
+ padding: 6px 13px 10px !important;
+ width: auto;
+ opacity: 1 !important;
+ border-radius: 100%;
+}
+.createActionModal .close:hover{
+ background-color: #E0E8F2;
+}
+.createActionModal .icon-action-close{
+ font-size: 14px;
+ font-weight: bold;
+}
+.createActionModal .modal-body{
+ padding-top: 0 !important;
+ padding-bottom: 10px !important;
+}
+.createActionModal .modal-body .carousel-item{
+ padding-left: 20px;
+ padding-right: 10px;
+}
+@keyframes fadeInScale {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale(0) translateY(50%);
+ transform: scale(0) translateY(50%);
+ }
+ 90% {
+ -webkit-transform: scale(1.05);
+ transform: scale(1.05);
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: scale(1) translateY(0);
+ transform: scale(1) translateY(0);
+ }
+}
+.card.actionType{
+ margin-bottom: 25px !important;
+ padding: 220px 25px 50px;
+ box-shadow: none;
+ border-radius: 0;
+ -webkit-transition: all 0.3s ease-in-out;
+ transition: all 0.3s ease-in-out;
+}
+.card.actionType:hover{
+ box-shadow: 0 10px 20px 0 rgba(27,62,111,.1);
+ transition: 0.3s !important;
+}
+.createActionModal h1{
+ margin-bottom: 21px;
+ font-size: 22px;
+ text-align: center;
+ font-weight: normal;
+}
+.actionType,
+.actionType:hover{
+ text-align: center;
+ line-height: 40px;
+ background-position: center 40px;
+ background-repeat: no-repeat;
+ background-size: 144px 172px;
+}
+.actionType h3,
+.actionType p{
+ margin: 0;
+}
+.actionType h3{
+ text-transform: uppercase;
+ font-size: 14px;
+ font-weight: bold;
+}
+.actionType p{
+ font-size: 13px !important;
+ line-height: 24px;
+}
+.actionType .btn,
+.actionType:hover .btn{
+ opacity: 0;
+ position: absolute;
+ bottom: 0;
+ left: 30% !important;
+ margin-bottom: 26px;
+ width: 100px;
+ height: 30px;
+ background: #1B3E6F;
+ color: #fff;
+ font-size: 12px;
+ font-weight: bold;
+ border-radius: 15px !important;
+ -webkit-transform: translateY(-20%);
+ transform: translateY(-20%);
+ -webkit-transition: all 0.3s ease-in-out;
+ transition: all 0.3s ease-in-out;
+}
+.actionType:hover .btn{
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+}
+.actionType.custom{
+ background-image: url(/assets/img/icon-action-custom.svg);
+}
+.actionType.custom:hover{
+ cursor: pointer;
+ background-image: url(/assets/img/icon-action-custom-hover.svg);
+}
+.actionType.default{
+ background-image: url(/assets/img/icon-action-default.svg);
+}
+.actionType.default:hover{
+ cursor: pointer;
+ background-image: url(/assets/img/icon-action-default-hover.svg);
+}
+.actionType.recent{
+ background-image: url(/assets/img/icon-action-recent.svg);
+}
+.actionType.recent:hover{
+ cursor: pointer;
+ background-image: url(/assets/img/icon-action-recent-hover.svg);
+}
+.actionType.import{
+ background-image: url(/assets/img/icon-action-import.svg);
+}
+.actionType.import:hover{
+ cursor: pointer;
+ background-image: url(/assets/img/icon-action-import-hover.svg);
+}
+.createActionModal .carousel-indicators{
+ margin: 0;
+}
+.createActionModal .carousel-indicators li{
+ margin: 0;
+ padding: 0;
+ text-indent: 0;
+ border: 0;
+}
+.createActionModal .back{
+ position: fixed !important;
+ top: 83px;
+ width: auto;
+ padding:0 !important;
+}
-
-
-
-
-
-
+.actionFormWrapper{
+ width: 60%;
+ margin: 0 auto;
+}
+.createActionModal .form-control.customAction{
+ width: 55%;
+ margin: 70px auto;
+ padding-left: 0;
+ border-radius: 0;
+ border: 0;
+ border-bottom: solid 1px #E0E8F2;
+ color: #1B3E6F !important;
+ font-size: 14px;
+}
+.createActionModal .form-control:focus{
+ border-bottom: solid 1px #1B3E6F;
+ background: transparent !important;
+ -webkit-box-shadow: 0 4px 6px -6px rgba(18, 115, 235, .8);
+ -moz-box-shadow: 0 4px 6px -6px rgba(18, 115, 235, .8);
+ box-shadow: 0 4px 6px -6px rgba(18, 115, 235, .8);
+ text-shadow: none;
+}
+.createActionModal .form-control::placeholder{
+ color: #C3CDDB;
+
+}
+.createActionModal .submit,
+.createActionModal .submit:hover{
+ float: unset;
+ width: 100px;
+ height: 30px;
+ background: #1B3E6F;
+ color: #fff;
+ font-size: 12px;
+ font-weight: bold;
+ border-radius: 15px !important;
+}
+.actionlabel{
+ margin-right: 2px;
+ color: #C3CDDB;
+ font-size: 11px;
+ font-weight: bold;
+}
+.form-control.searchInput,
+.form-control.searchInput:focus{
+ float: right;
+ width: 250px !important;
+ height: 30px !important;
+ padding-left: 32px !important;
+ border: solid 1px #E0E8F2 !important;
+ border-radius: 2px !important;
+ background: url(../src/assets/img/icon-search-light.svg) 9px center no-repeat !important;
+ font-size: 13px !important;
+ color: #1B3E6F;
+}
+.actionsListScroll{
+ height: 228px;
+ max-height: 228px;
+ overflow: auto;
+}
+.createActionModal .actionName{
+ margin-bottom: 15px;
+ padding: 9px 18px;
+ box-shadow: 0 2px 6px rgba(47,83,151,0.15);
+}
+.createActionModal p.selectedActions{
+ margin-top: 20px;
+ margin-bottom: 10px;
+ color: #8D9FB7;
+ font-size: 13px;
+}
+.createActionModal .sort-packages .dropdown{
+ width: 60%;
+}
+.createActionModal .sort-packages .dropdown-text::after {
+ right: 6px;
+}
+.createActionModal .sort-packages .dropdown-content{
+ width: 100%;
+}
+.createActionModal .folder-upload-text button{
+ float: unset;
+}
/* Border Fade */
.border-fade {
display: inline-block;
@@ -1729,6 +1964,9 @@ padding-left: 20px !important;
.single-line-model input:focus,
.single-line-custom-key input:focus{
border-bottom-color: #1B3E6F !important;
+ -webkit-box-shadow: 0 4px 6px -6px rgba(18, 115, 235, .6);
+ -moz-box-shadow: 0 4px 6px -6px rgba(18, 115, 235, .6);
+ box-shadow: 0 4px 6px -6px rgba(18, 115, 235, .6);
}
.model-note-container{
width: calc(100% - 325px);
@@ -1929,7 +2167,7 @@ hr{
.action-button{
margin-bottom: 12px;
padding: 3px 30px;
- color: #BABBC3;
+ color: #BABBC3 !important;
font-size: 10px;
font-weight: bold;
display: inline-block;
@@ -1949,6 +2187,9 @@ hr{
font-size: 17px;
display: inline-block;
}
+.action-button i:hover{
+ background: #dee2e6;
+}
.action-button i.icon-save-sm{
background: #1273EB;
color: #fff;
@@ -1959,10 +2200,7 @@ hr{
color: #C3CDDB;
}
.action-button.save{
- color: #1273EB;
-}
-.action-button.delete{
- color: #BABBC3;
+ color: #1273EB !important;
}
.action-button.delete i{
color: #BABBC3;
@@ -2687,6 +2925,14 @@ table.dataTable.no-footer{
background: transparent;
color: #1B3E6F;
}
+
+/* Windows View as 150% */
+@media (resolution: 150dpi) {
+ /* @media (-webkit-device-pixel-ratio: 1.5) { */
+ .body-container > .container{
+ max-width: 960px !important;
+ }
+}
/* Extra small devices (portrait phones, less than 576px) */
@media (max-width: 575.98px) {
.page-title{
diff --git a/cds-ui/server/src/controllers/blueprint-rest.controller.ts b/cds-ui/server/src/controllers/blueprint-rest.controller.ts
index 7b2c78329..2319e0a5e 100644
--- a/cds-ui/server/src/controllers/blueprint-rest.controller.ts
+++ b/cds-ui/server/src/controllers/blueprint-rest.controller.ts
@@ -20,34 +20,14 @@ limitations under the License.
*/
-import {
- Count,
- CountSchema,
- Filter,
- repository,
- Where,
-} from '@loopback/repository';
-import {
- post,
- param,
- get,
- getFilterSchemaFor,
- getWhereSchemaFor,
- patch,
- put,
- del,
- requestBody,
- Request,
- Response,
- RestBindings,
-} from '@loopback/rest';
+import {get, param, post, Request, requestBody, Response, RestBindings} from '@loopback/rest';
import {Blueprint} from '../models';
import {inject} from '@loopback/core';
import {BlueprintService} from '../services';
import * as fs from 'fs';
import * as multiparty from 'multiparty';
import * as request_lib from 'request';
-import {processorApiConfig, appConfig} from '../config/app-config';
+import {appConfig, processorApiConfig} from '../config/app-config';
import {bluePrintManagementServiceGrpcClient} from '../clients/blueprint-management-service-grpc-client';
import {BlueprintDetail} from '../models/blueprint.detail.model';
@@ -94,8 +74,9 @@ export class BlueprintRestController {
async getPagedBlueprints(
@param.query.number('limit') limit: number,
@param.query.number('offset') offset: number,
- @param.query.string('sort') sort: string) {
- return await this.bpservice.getPagedBueprints(limit, offset, sort);
+ @param.query.string('sort') sort: string,
+ @param.query.string('sortType') sortType: string) {
+ return await this.bpservice.getPagedBueprints(limit, offset, sort, sortType);
}
@get('/controllerblueprint/metadata/paged/{keyword}', {
@@ -110,8 +91,9 @@ export class BlueprintRestController {
@param.path.string('keyword') keyword: string,
@param.query.number('limit') limit: number,
@param.query.number('offset') offset: number,
- @param.query.string('sort') sort: string) {
- return await this.bpservice.getMetaDataPagedBlueprints(limit, offset, sort, keyword);
+ @param.query.string('sort') sort: string,
+ @param.query.string('sortType') sortType: string) {
+ return await this.bpservice.getMetaDataPagedBlueprints(limit, offset, sort, keyword, sortType);
}
@get('/controllerblueprint/meta-data/{keyword}', {
diff --git a/cds-ui/server/src/datasources/blueprint.datasource-template.ts b/cds-ui/server/src/datasources/blueprint.datasource-template.ts
index d7ac14b26..9b8e06a13 100644
--- a/cds-ui/server/src/datasources/blueprint.datasource-template.ts
+++ b/cds-ui/server/src/datasources/blueprint.datasource-template.ts
@@ -73,7 +73,7 @@ export default {
{
"template": {
"method": "GET",
- "url": processorApiConfig.http.url + "/blueprint-model/paged?limit={limit}&offset={offset}&sort={sort}",
+ "url": processorApiConfig.http.url + "/blueprint-model/paged?limit={limit}&offset={offset}&sort={sort}&sortType={sortType}",
"headers": {
"accepts": "application/json",
"content-type": "application/json",
@@ -82,13 +82,13 @@ export default {
"responsePath": "$",
},
"functions": {
- "getPagedBueprints": ["limit", "offset", "sort"],
+ "getPagedBueprints": ["limit", "offset", "sort","sortType"],
}
},
{
"template": {
"method": "GET",
- "url": processorApiConfig.http.url + "/blueprint-model/paged/meta-data/{keyword}?limit={limit}&offset={offset}&sort={sort}",
+ "url": processorApiConfig.http.url + "/blueprint-model/paged/meta-data/{keyword}?limit={limit}&offset={offset}&sort={sort}&sortType={sortType}",
"headers": {
"accepts": "application/json",
"content-type": "application/json",
@@ -97,7 +97,7 @@ export default {
"responsePath": "$",
},
"functions": {
- "getMetaDataPagedBlueprints": ["limit", "offset", "sort", "keyword"],
+ "getMetaDataPagedBlueprints": ["limit", "offset", "sort", "keyword","sortType"],
}
},
{
diff --git a/cds-ui/server/src/services/blueprint.service.ts b/cds-ui/server/src/services/blueprint.service.ts
index cb601f3cf..2680e105a 100644
--- a/cds-ui/server/src/services/blueprint.service.ts
+++ b/cds-ui/server/src/services/blueprint.service.ts
@@ -7,8 +7,8 @@ export interface BlueprintService {
getAllblueprints(): Promise<any>;
getBlueprintsByKeyword(keyword: string): Promise<any>;
getByTags(tags: string): Promise<JSON>;
- getPagedBueprints(limit: number, offset: number , sort: string): Promise<any>;
- getMetaDataPagedBlueprints(limit: number, offset: number, sort: string, keyword: string): Promise<any>;
+ getPagedBueprints(limit: number, offset: number , sort: string,sortType: String): Promise<any>;
+ getMetaDataPagedBlueprints(limit: number, offset: number, sort: string, keyword: string,sortType: String): Promise<any>;
getBlueprintByNameAndVersion(name:string, version:string): Promise<any>;
diff --git a/docs/conf.py b/docs/conf.py
index 8f40e8b81..3b28eb74a 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -12,4 +12,4 @@ intersphinx_mapping = {}
html_last_updated_fmt = '%d-%b-%y %H:%M'
def setup(app):
- app.add_stylesheet("css/ribbon_onap.css")
+ app.add_css_file("css/ribbon_onap.css")
diff --git a/docs/datadictionary/complexResponse.rst b/docs/datadictionary/complexResponse.rst
index d32d13de5..3864c48e2 100644
--- a/docs/datadictionary/complexResponse.rst
+++ b/docs/datadictionary/complexResponse.rst
@@ -8,14 +8,16 @@ complex Response code
.. code-block:: json
:linenos:
- "id": 4,
- "address": "192.168.10.2/32",
- "vrf": null,
- "tenant": null,
- "status": 1,
- "role": null,
- "interface": null,
- "description": "",
- "nat_inside": null,
- "created": "2018-08-30",
- "last_updated": "2018-08-30T14:59:05.277820Z" \ No newline at end of file
+ {
+ "id": 4,
+ "address": "192.168.10.2/32",
+ "vrf": null,
+ "tenant": null,
+ "status": 1,
+ "role": null,
+ "interface": null,
+ "description": "",
+ "nat_inside": null,
+ "created": "2018-08-30",
+ "last_updated": "2018-08-30T14:59:05.277820Z"
+ }
diff --git a/docs/datadictionary/create_netbox_ip_address.rst b/docs/datadictionary/create_netbox_ip_address.rst
index f6d83c500..3ba733a18 100644
--- a/docs/datadictionary/create_netbox_ip_address.rst
+++ b/docs/datadictionary/create_netbox_ip_address.rst
@@ -3,9 +3,11 @@
.. Copyright (C) 2019 IBM.
create_netbox_ip_address code
-=============================
+=============================
-{
+.. code-block:: json
+
+ {
"tags" : "oam-local-ipv4-address",
"name" : "create_netbox_ip",
"property" : {
@@ -33,4 +35,4 @@ create_netbox_ip_address code
}
}
}
- }
+ }
diff --git a/docs/datadictionary/dbsystemcode.rst b/docs/datadictionary/dbsystemcode.rst
index d6cda5b6c..22bdb9732 100644
--- a/docs/datadictionary/dbsystemcode.rst
+++ b/docs/datadictionary/dbsystemcode.rst
@@ -7,11 +7,13 @@ Dbsystemcode
.. code-block:: json
:linenos:
- "dsl_definitions": {
- "dynamic-db-source": {
- "type": "maria-db",
- "url": "jdbc:mysql://localhost:3306/sdnctl",
- "username": <username>,
- "password": <password>
+ {
+ "dsl_definitions": {
+ "dynamic-db-source": {
+ "type": "maria-db",
+ "url": "jdbc:mysql://localhost:3306/sdnctl",
+ "username": "<username>",
+ "password": "<password>"
+ }
+ }
}
- } \ No newline at end of file
diff --git a/docs/datadictionary/resourcedefinitioncodesnip.rst b/docs/datadictionary/resourcedefinitioncodesnip.rst
index 6504a07c3..785614bc5 100644
--- a/docs/datadictionary/resourcedefinitioncodesnip.rst
+++ b/docs/datadictionary/resourcedefinitioncodesnip.rst
@@ -8,42 +8,44 @@ Source Capability Code
.. code-block:: json
:linenos:
- "description": "This is Component Resource Source Node Type",
- "version": "1.0.0",
- "properties": {
- "script-type": {
- "required": true,
- "type": "string",
- "default": "kotlin",
- "constraints": [
- {
- "valid_values": [
- "kotlin",
- "jython"
- ]
- }
- ]
- },
- "script-class-reference": {
- "description": "Capability reference name for internal and kotlin, for jython script file path",
- "required": true,
- "type": "string"
- },
- "instance-dependencies": {
- "required": false,
- "description": "Instance dependency Names to Inject to Kotlin / Jython Script.",
- "type": "list",
- "entry_schema": {
- "type": "string"
- }
- },
- "key-dependencies": {
- "description": "Resource Resolution dependency dictionary names.",
- "required": true,
- "type": "list",
- "entry_schema": {
- "type": "string"
- }
- }
- },
- "derived_from": "tosca.nodes.ResourceSource" \ No newline at end of file
+ {
+ "description": "This is Component Resource Source Node Type",
+ "version": "1.0.0",
+ "properties": {
+ "script-type": {
+ "required": true,
+ "type": "string",
+ "default": "kotlin",
+ "constraints": [
+ {
+ "valid_values": [
+ "kotlin",
+ "jython"
+ ]
+ }
+ ]
+ },
+ "script-class-reference": {
+ "description": "Capability reference name for internal and kotlin, for jython script file path",
+ "required": true,
+ "type": "string"
+ },
+ "instance-dependencies": {
+ "required": false,
+ "description": "Instance dependency Names to Inject to Kotlin / Jython Script.",
+ "type": "list",
+ "entry_schema": {
+ "type": "string"
+ }
+ },
+ "key-dependencies": {
+ "description": "Resource Resolution dependency dictionary names.",
+ "required": true,
+ "type": "list",
+ "entry_schema": {
+ "type": "string"
+ }
+ }
+ },
+ "derived_from": "tosca.nodes.ResourceSource"
+ }
diff --git a/docs/datadictionary/resourcesource.rst b/docs/datadictionary/resourcesource.rst
index 49ef6a1a3..4d4619a0e 100644
--- a/docs/datadictionary/resourcesource.rst
+++ b/docs/datadictionary/resourcesource.rst
@@ -2,7 +2,7 @@
.. http://creativecommons.org/licenses/by/4.0
.. Copyright (C) 2019 IBM.
-Resource Source
+Resource Source
---------------
Input:
@@ -10,32 +10,37 @@ Input:
Expects the value to be provided as input to the request.
-
.. code-block:: json
:linenos:
-
- source-input
+
{
- "description": "This is Input Resource Source Node Type",
- "version": "1.0.0",
- "properties": {},
- "derived_from": "tosca.nodes.ResourceSource"
+ "source-input" :
+ {
+ "description": "This is Input Resource Source Node Type",
+ "version": "1.0.0",
+ "properties": {},
+ "derived_from": "tosca.nodes.ResourceSource"
+ }
}
+
Default:
========
Expects the value to be defaulted in the model itself.
+
.. code-block:: json
:linenos:
-
- source-default
+
{
- "description": "This is Default Resource Source Node Type",
- "version": "1.0.0",
- "properties": {},
- "derived_from": "tosca.nodes.ResourceSource"
+ "source-default" :
+ {
+ "description": "This is Default Resource Source Node Type",
+ "version": "1.0.0",
+ "properties": {},
+ "derived_from": "tosca.nodes.ResourceSource"
+ }
}
diff --git a/docs/datadictionary/restauth.rst b/docs/datadictionary/restauth.rst
index 9f628696c..8051a6ae2 100644
--- a/docs/datadictionary/restauth.rst
+++ b/docs/datadictionary/restauth.rst
@@ -12,12 +12,14 @@ token-auth:
.. code-block:: json
:linenos:
- "dsl_definitions": {
- "dynamic-rest-source": {
- "type" : "token-auth",
- "url" : "http://localhost:32778",
- "token" : <token>
- }
+ {
+ "dsl_definitions": {
+ "dynamic-rest-source": {
+ "type" : "token-auth",
+ "url" : "http://localhost:32778",
+ "token" : "<token>"
+ }
+ }
}
basic-auth:
@@ -26,13 +28,15 @@ basic-auth:
.. code-block:: json
:linenos:
- "dsl_definitions": {
- "dynamic-rest-source": {
- "type" : "basic-auth",
- "url" : "http://localhost:32778",
- "username" : <username>,
- "password": <password>
- }
+ {
+ "dsl_definitions": {
+ "dynamic-rest-source": {
+ "type" : "basic-auth",
+ "url" : "http://localhost:32778",
+ "username" : "<username>",
+ "password": "<password>"
+ }
+ }
}
ssl-basic-auth:
@@ -41,14 +45,16 @@ ssl-basic-auth:
.. code-block:: json
:linenos:
- "dsl_definitions": {
- "dynamic-rest-source": {
- "type" : "ssl-basic-auth",
- "url" : "http://localhost:32778",
- "keyStoreInstance": "JKS or PKCS12",
- "sslTrust": "trusture",
- "sslTrustPassword": <password>,
- "sslKey": "keystore",
- "sslKeyPassword: <password>
- }
- } \ No newline at end of file
+ {
+ "dsl_definitions": {
+ "dynamic-rest-source": {
+ "type" : "ssl-basic-auth",
+ "url" : "http://localhost:32778",
+ "keyStoreInstance": "JKS or PKCS12",
+ "sslTrust": "trusture",
+ "sslTrustPassword": "<password>",
+ "sslKey": "keystore",
+ "sslKeyPassword": "<password>"
+ }
+ }
+ }
diff --git a/docs/datadictionary/restsourcecode.rst b/docs/datadictionary/restsourcecode.rst
index 243a65ce9..c59bcd23a 100644
--- a/docs/datadictionary/restsourcecode.rst
+++ b/docs/datadictionary/restsourcecode.rst
@@ -8,83 +8,85 @@ Rest Source Code:
.. code-block:: json
:linenos:
- "description": "This is Rest Resource Source Node Type",
- "version": "1.0.0",
- "properties": {
- "type": {
- "required": false,
- "type": "string",
- "default": "JSON",
- "constraints": [
- {
- "valid_values": [
- "JSON"
- ]
- }
- ]
- },
- "verb": {
- "required": false,
- "type": "string",
- "default": "GET",
- "constraints": [
- {
- "valid_values": [
- "GET", "POST", "DELETE", "PUT"
- ]
- }
- ]
- },
- "payload": {
- "required": false,
- "type": "string",
- "default": ""
- },
- "endpoint-selector": {
- "required": false,
- "type": "string"
- },
- "url-path": {
- "required": true,
- "type": "string"
- },
- "path": {
- "required": true,
- "type": "string"
- },
- "expression-type": {
- "required": false,
- "type": "string",
- "default": "JSON_PATH",
- "constraints": [
- {
- "valid_values": [
- "JSON_PATH",
- "JSON_POINTER"
- ]
- }
- ]
- },
- "input-key-mapping": {
- "required": false,
- "type": "map",
- "entry_schema": {
- "type": "string"
- }
- },
- "output-key-mapping": {
- "required": false,
- "type": "map",
- "entry_schema": {
- "type": "string"
- }
- },
- "key-dependencies": {
- "required": true,
- "type": "list",
- "entry_schema": {
- "type": "string"
- }
- }
- },
- "derived_from": "tosca.nodes.ResourceSource" \ No newline at end of file
+ {
+ "description": "This is Rest Resource Source Node Type",
+ "version": "1.0.0",
+ "properties": {
+ "type": {
+ "required": false,
+ "type": "string",
+ "default": "JSON",
+ "constraints": [
+ {
+ "valid_values": [
+ "JSON"
+ ]
+ }
+ ]
+ },
+ "verb": {
+ "required": false,
+ "type": "string",
+ "default": "GET",
+ "constraints": [
+ {
+ "valid_values": [
+ "GET", "POST", "DELETE", "PUT"
+ ]
+ }
+ ]
+ },
+ "payload": {
+ "required": false,
+ "type": "string",
+ "default": ""
+ },
+ "endpoint-selector": {
+ "required": false,
+ "type": "string"
+ },
+ "url-path": {
+ "required": true,
+ "type": "string"
+ },
+ "path": {
+ "required": true,
+ "type": "string"
+ },
+ "expression-type": {
+ "required": false,
+ "type": "string",
+ "default": "JSON_PATH",
+ "constraints": [
+ {
+ "valid_values": [
+ "JSON_PATH",
+ "JSON_POINTER"
+ ]
+ }
+ ]
+ },
+ "input-key-mapping": {
+ "required": false,
+ "type": "map",
+ "entry_schema": {
+ "type": "string"
+ }
+ },
+ "output-key-mapping": {
+ "required": false,
+ "type": "map",
+ "entry_schema": {
+ "type": "string"
+ }
+ },
+ "key-dependencies": {
+ "required": true,
+ "type": "list",
+ "entry_schema": {
+ "type": "string"
+ }
+ }
+ },
+ "derived_from": "tosca.nodes.ResourceSource"
+ }
diff --git a/docs/datadictionary/sourcecapabilitycode.rst b/docs/datadictionary/sourcecapabilitycode.rst
index 145bab738..d2f66c7e0 100644
--- a/docs/datadictionary/sourcecapabilitycode.rst
+++ b/docs/datadictionary/sourcecapabilitycode.rst
@@ -8,35 +8,37 @@ Source Capability Code
.. code-block:: json
:linenos:
- "description": "This is Component Resource Source Node Type",
- "version": "1.0.0",
- "properties": {
- "script-type": {
- "required": true,
- "type": "string",
- "default": "kotlin",
- "constraints": [
- {
- "valid_values": [
- "kotlin",
- "jython"
- ]
- }
- ]
- },
- "script-class-reference": {
- "description": "Capability reference name for internal and kotlin, for jython script file path",
- "required": true,
- "type": "string"
- },
- "key-dependencies": {
- "description": "Resource Resolution dependency dictionary names.",
- "required": true,
- "type": "list",
- "entry_schema": {
- "type": "string"
- }
- }
- },
- "derived_from": "tosca.nodes.ResourceSource"
+ {
+ "description": "This is Component Resource Source Node Type",
+ "version": "1.0.0",
+ "properties": {
+ "script-type": {
+ "required": true,
+ "type": "string",
+ "default": "kotlin",
+ "constraints": [
+ {
+ "valid_values": [
+ "kotlin",
+ "jython"
+ ]
+ }
+ ]
+ },
+ "script-class-reference": {
+ "description": "Capability reference name for internal and kotlin, for jython script file path",
+ "required": true,
+ "type": "string"
+ },
+ "key-dependencies": {
+ "description": "Resource Resolution dependency dictionary names.",
+ "required": true,
+ "type": "list",
+ "entry_schema": {
+ "type": "string"
+ }
+ }
+ },
+ "derived_from": "tosca.nodes.ResourceSource"
+ }
diff --git a/docs/datadictionary/sourcedefaultcode.rst b/docs/datadictionary/sourcedefaultcode.rst
index 89c5c2c7d..41c19336c 100644
--- a/docs/datadictionary/sourcedefaultcode.rst
+++ b/docs/datadictionary/sourcedefaultcode.rst
@@ -8,7 +8,9 @@ Source Default code
.. code-block:: json
:linenos:
- "description": "This is Default Resource Source Node Type",
- "version": "1.0.0",
- "properties": {},
- "derived_from": "tosca.nodes.ResourceSource"
+ {
+ "description": "This is Default Resource Source Node Type",
+ "version": "1.0.0",
+ "properties": {},
+ "derived_from": "tosca.nodes.ResourceSource"
+ }
diff --git a/docs/datadictionary/sourceinputcode.rst b/docs/datadictionary/sourceinputcode.rst
index c400a8c4c..a70ff6ab9 100644
--- a/docs/datadictionary/sourceinputcode.rst
+++ b/docs/datadictionary/sourceinputcode.rst
@@ -8,7 +8,9 @@ Source Input code
.. code-block:: json
:linenos:
- "description": "This is Input Resource Source Node Type",
- "version": "1.0.0",
- "properties": {},
- "derived_from": "tosca.nodes.ResourceSource"
+ {
+ "description": "This is Input Resource Source Node Type",
+ "version": "1.0.0",
+ "properties": {},
+ "derived_from": "tosca.nodes.ResourceSource"
+ }
diff --git a/docs/datadictionary/sourceprimarydbcode.rst b/docs/datadictionary/sourceprimarydbcode.rst
index 949dee071..2243e0ce0 100644
--- a/docs/datadictionary/sourceprimarydbcode.rst
+++ b/docs/datadictionary/sourceprimarydbcode.rst
@@ -8,48 +8,50 @@ Source Primary DB Code:
.. code-block:: json
:linenos:
- "description": "This is Database Resource Source Node Type",
- "version": "1.0.0",
- "properties": {
- "type": {
- "required": true,
- "type": "string",
- "constraints": [
- {
- "valid_values": [
- "SQL"
- ]
- }
- ]
- },
- "endpoint-selector": {
- "required": false,
- "type": "string"
- },
- "query": {
- "required": true,
- "type": "string"
- },
- "input-key-mapping": {
- "required": false,
- "type": "map",
- "entry_schema": {
- "type": "string"
- }
- },
- "output-key-mapping": {
- "required": false,
- "type": "map",
- "entry_schema": {
- "type": "string"
- }
- },
- "key-dependencies": {
- "required": true,
- "type": "list",
- "entry_schema": {
- "type": "string"
- }
- }
- },
- "derived_from": "tosca.nodes.ResourceSource" \ No newline at end of file
+ {
+ "description": "This is Database Resource Source Node Type",
+ "version": "1.0.0",
+ "properties": {
+ "type": {
+ "required": true,
+ "type": "string",
+ "constraints": [
+ {
+ "valid_values": [
+ "SQL"
+ ]
+ }
+ ]
+ },
+ "endpoint-selector": {
+ "required": false,
+ "type": "string"
+ },
+ "query": {
+ "required": true,
+ "type": "string"
+ },
+ "input-key-mapping": {
+ "required": false,
+ "type": "map",
+ "entry_schema": {
+ "type": "string"
+ }
+ },
+ "output-key-mapping": {
+ "required": false,
+ "type": "map",
+ "entry_schema": {
+ "type": "string"
+ }
+ },
+ "key-dependencies": {
+ "required": true,
+ "type": "list",
+ "entry_schema": {
+ "type": "string"
+ }
+ }
+ },
+ "derived_from": "tosca.nodes.ResourceSource"
+ }
diff --git a/docs/designtime.rst b/docs/designtime.rst
index ac0af5132..250640b8c 100644
--- a/docs/designtime.rst
+++ b/docs/designtime.rst
@@ -40,7 +40,7 @@ While doing so, identify the resources using the same process to be resolved; fo
Services:
---------
+---------
.. toctree::
:maxdepth: 1
diff --git a/docs/installation.rst b/docs/installation.rst
index ef51fa034..6d3f0695c 100644
--- a/docs/installation.rst
+++ b/docs/installation.rst
@@ -44,7 +44,7 @@ helm install --name cds cds
Result
------
-.. code-block:: json
+.. code-block:: bash
:linenos:
$ kubectl get all --selector=release=cds
@@ -85,4 +85,4 @@ Loopback Server:
~~~~~~~~~~~~~~~~
npm install in the directory cds/cds-ui/server
-npm start should bring you the CDS UI page in your local machine with the link https://127.0.0.1:3000/ \ No newline at end of file
+npm start should bring you the CDS UI page in your local machine with the link https://127.0.0.1:3000/
diff --git a/docs/media/CDS.png b/docs/media/CDS.png
new file mode 100644
index 000000000..65f4115f8
--- /dev/null
+++ b/docs/media/CDS.png
Binary files differ
diff --git a/docs/microservices/workflow.rst b/docs/microservices/workflow.rst
index b74a49d2b..b6ea1e6fd 100644
--- a/docs/microservices/workflow.rst
+++ b/docs/microservices/workflow.rst
@@ -31,43 +31,41 @@ Below the properties of a workflow:
Workflow Example
----------------
-.. code:: json
-
-print("
-{
- "workflow": {
- "resource-assignment": { <- workflow-name
- "inputs": {
- "vnf-id": { <- static inputs
- "required": true,
- "type": "string"
- },
- "resource-assignment-properties": { <- dynamic inputs
- "required": true,
- "type": "dt-resource-assignment-properties"
- }
- },
- "steps": {
- "call-resource-assignment": { <- step-name
- "description": "Resource Assignment Workflow",
- "target": "resource-assignment-process" <- node_template targeted by the step
- }
- },
- "outputs": {
- "template-properties": { <- output
- "type": "json", <- complex type
- "value": {
- "get_attribute": [ <- uses expression to retrieve attribute from context
- "resource-assignment",
- "assignment-params"
- ]
- }
- }
- }
- }
- }
-}
-")
-
-
-TOSCA definition: http://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.2/csd01/TOSCA-Simple-Profile-YAML-v1.2-csd01.html#_Toc494454203 \ No newline at end of file
+::
+
+ {
+ "workflow": {
+ "resource-assignment": { <- workflow-name
+ "inputs": {
+ "vnf-id": { <- static inputs
+ "required": true,
+ "type": "string"
+ },
+ "resource-assignment-properties": { <- dynamic inputs
+ "required": true,
+ "type": "dt-resource-assignment-properties"
+ }
+ },
+ "steps": {
+ "call-resource-assignment": { <- step-name
+ "description": "Resource Assignment Workflow",
+ "target": "resource-assignment-process" <- node_template targeted by the step
+ }
+ },
+ "outputs": {
+ "template-properties": { <- output
+ "type": "json", <- complex type
+ "value": {
+ "get_attribute": [ <- uses expression to retrieve attribute from context
+ "resource-assignment",
+ "assignment-params"
+ ]
+ }
+ }
+ }
+ }
+ }
+ }
+
+
+TOSCA definition: http://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.2/csd01/TOSCA-Simple-Profile-YAML-v1.2-csd01.html#_Toc494454203
diff --git a/ms/blueprintsprocessor/application/src/main/resources/application-dev.properties b/ms/blueprintsprocessor/application/src/main/resources/application-dev.properties
index bf5e23bc9..fb32d9afc 100755
--- a/ms/blueprintsprocessor/application/src/main/resources/application-dev.properties
+++ b/ms/blueprintsprocessor/application/src/main/resources/application-dev.properties
@@ -69,9 +69,9 @@ blueprintsprocessor.grpcclient.py-executor.trustCertCollection=src/main/resource
# Blueprint Processor File Execution and Handling Properties
### use absolute paths if testing inside docker
-### blueprintsprocessor.blueprintDeployPath=/opt/app/onap/blueprints/deploy
-### blueprintsprocessor.blueprintArchivePath=/opt/app/onap/blueprints/archive
-### blueprintsprocessor.blueprintWorkingPath=/opt/app/onap/blueprints/working
+#blueprintsprocessor.blueprintDeployPath=/opt/app/onap/blueprints/deploy
+#blueprintsprocessor.blueprintArchivePath=/opt/app/onap/blueprints/archive
+#blueprintsprocessor.blueprintWorkingPath=/opt/app/onap/blueprints/working
# db
@@ -120,10 +120,12 @@ blueprintsprocessor.netconfExecutor.enabled=true
blueprintsprocessor.restConfExecutor.enabled=true
blueprintsprocessor.cliExecutor.enabled=true
### If enabling remote python executor, set this value to true
-### blueprintsprocessor.remoteScriptCommand.enabled=true
+#blueprintsprocessor.remoteScriptCommand.enabled=true
blueprintsprocessor.remoteScriptCommand.enabled=false
+blueprintsprocessor.remote-script-command.response.log.enabled=false
# Kafka-message-lib Configurations
+## Request consumer
blueprintsprocessor.messageconsumer.self-service-api.kafkaEnable=false
blueprintsprocessor.messageconsumer.self-service-api.type=kafka-basic-auth
blueprintsprocessor.messageconsumer.self-service-api.bootstrapServers=127.0.0.1:9092
@@ -141,6 +143,12 @@ blueprintsprocessor.messageconsumer.self-service-api.pollMillSec=1000
#blueprintsprocessor.messageconsumer.self-service-api.scramUsername=test-user
#blueprintsprocessor.messageconsumer.self-service-api.scramPassword=testUserPassword
+## Response producer
+blueprintsprocessor.messageproducer.self-service-api.type=kafka-basic-auth
+blueprintsprocessor.messageproducer.self-service-api.bootstrapServers=127.0.0.1:9092
+blueprintsprocessor.messageproducer.self-service-api.clientId=producer-id
+blueprintsprocessor.messageproducer.self-service-api.topic=producer.t
+
# Kafka audit service Configurations
## Audit request
blueprintsprocessor.messageproducer.self-service-api.audit.kafkaEnable=false
diff --git a/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutor.kt b/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutor.kt
index d66e8b374..d4c8841a8 100644
--- a/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutor.kt
+++ b/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutor.kt
@@ -21,6 +21,7 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.TimeoutCancellationException
import kotlinx.coroutines.async
import kotlinx.coroutines.withTimeout
+import org.onap.ccsdk.cds.blueprintsprocessor.core.BluePrintPropertiesService
import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInput
import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.PrepareRemoteEnvInput
import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.RemoteIdentifier
@@ -47,11 +48,15 @@ import org.springframework.stereotype.Component
@ConditionalOnBean(name = [ExecutionServiceConstant.SERVICE_GRPC_REMOTE_SCRIPT_EXECUTION])
@Component("component-remote-python-executor")
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-open class ComponentRemotePythonExecutor(private val remoteScriptExecutionService: RemoteScriptExecutionService) : AbstractComponentFunction() {
+open class ComponentRemotePythonExecutor(
+ private val remoteScriptExecutionService: RemoteScriptExecutionService,
+ private var bluePrintPropertiesService: BluePrintPropertiesService
+) : AbstractComponentFunction() {
private val log = LoggerFactory.getLogger(ComponentRemotePythonExecutor::class.java)!!
companion object {
+ const val SELECTOR_CMD_EXEC = "blueprintsprocessor.remote-script-command"
const val INPUT_ENDPOINT_SELECTOR = "endpoint-selector"
const val INPUT_DYNAMIC_PROPERTIES = "dynamic-properties"
const val INPUT_ARGUMENT_PROPERTIES = "argument-properties"
@@ -62,6 +67,8 @@ open class ComponentRemotePythonExecutor(private val remoteScriptExecutionServic
const val INPUT_ENV_PREPARE_TIMEOUT = "env-prepare-timeout"
const val INPUT_EXECUTE_TIMEOUT = "execution-timeout"
+ const val STEP_PREPARE_ENV = "prepare-env"
+ const val STEP_EXEC_CMD = "execute-command"
const val ATTRIBUTE_EXEC_CMD_STATUS = "status"
const val ATTRIBUTE_PREPARE_ENV_LOG = "prepare-environment-logs"
const val ATTRIBUTE_EXEC_CMD_LOG = "execute-command-logs"
@@ -74,6 +81,8 @@ open class ComponentRemotePythonExecutor(private val remoteScriptExecutionServic
log.debug("Processing : $operationInputs")
+ val isLogResponseEnabled = bluePrintPropertiesService.propertyBeanType("$SELECTOR_CMD_EXEC.response.log.enabled", Boolean::class.java)
+
val bluePrintContext = bluePrintRuntimeService.bluePrintContext()
val blueprintName = bluePrintContext.name()
val blueprintVersion = bluePrintContext.version()
@@ -142,15 +151,25 @@ open class ComponentRemotePythonExecutor(private val remoteScriptExecutionServic
)
val prepareEnvOutput = remoteScriptExecutionService.prepareEnv(prepareEnvInput)
log.info("$ATTRIBUTE_PREPARE_ENV_LOG - ${prepareEnvOutput.response}")
- val logs = prepareEnvOutput.response
+ val logs = JacksonUtils.jsonNodeFromObject(prepareEnvOutput.response)
val logsEnv = logs.toString().asJsonPrimitive()
setAttribute(ATTRIBUTE_PREPARE_ENV_LOG, logsEnv)
if (prepareEnvOutput.status != StatusType.SUCCESS) {
- setAttribute(ATTRIBUTE_EXEC_CMD_LOG, "N/A".asJsonPrimitive())
- setNodeOutputErrors(prepareEnvOutput.status.name, logsEnv)
+ val errorMessage = prepareEnvOutput.payload
+ setNodeOutputErrors(prepareEnvOutput.status.name,
+ STEP_PREPARE_ENV,
+ logs,
+ errorMessage,
+ isLogResponseEnabled
+ )
} else {
- setNodeOutputProperties(prepareEnvOutput.status.name.asJsonPrimitive(), logsEnv, "".asJsonPrimitive())
+ setNodeOutputProperties(prepareEnvOutput.status.name.asJsonPrimitive(),
+ STEP_PREPARE_ENV,
+ logsEnv,
+ "".asJsonPrimitive(),
+ isLogResponseEnabled
+ )
}
} else {
// set env preparation log to empty...
@@ -159,13 +178,13 @@ open class ComponentRemotePythonExecutor(private val remoteScriptExecutionServic
} catch (grpcEx: io.grpc.StatusRuntimeException) {
val grpcErrMsg = "Command failed during env. preparation... timeout($envPrepTimeout) requestId ($processId)."
setAttribute(ATTRIBUTE_PREPARE_ENV_LOG, grpcErrMsg.asJsonPrimitive())
- setNodeOutputErrors(status = grpcErrMsg, message = "${grpcEx.status}".asJsonPrimitive())
+ setNodeOutputErrors(status = grpcErrMsg, step = STEP_PREPARE_ENV, error = "${grpcEx.status}".asJsonPrimitive(), logging = isLogResponseEnabled)
log.error(grpcErrMsg, grpcEx)
addError(grpcErrMsg)
} catch (e: Exception) {
val timeoutErrMsg = "Command executor failed during env. preparation.. timeout($envPrepTimeout) requestId ($processId)."
setAttribute(ATTRIBUTE_PREPARE_ENV_LOG, e.message.asJsonPrimitive())
- setNodeOutputErrors(status = timeoutErrMsg, message = "${e.message}".asJsonPrimitive())
+ setNodeOutputErrors(status = timeoutErrMsg, step = STEP_PREPARE_ENV, error = "${e.message}".asJsonPrimitive(), logging = isLogResponseEnabled)
log.error("Failed to process on remote executor requestId ($processId)", e)
addError(timeoutErrMsg)
}
@@ -195,18 +214,37 @@ open class ComponentRemotePythonExecutor(private val remoteScriptExecutionServic
}
val logs = JacksonUtils.jsonNodeFromObject(remoteExecutionOutput.response)
if (remoteExecutionOutput.status != StatusType.SUCCESS) {
- setNodeOutputErrors(remoteExecutionOutput.status.name, logs, remoteExecutionOutput.payload)
+ setNodeOutputErrors(remoteExecutionOutput.status.name,
+ STEP_EXEC_CMD,
+ logs,
+ remoteExecutionOutput.payload,
+ isLogResponseEnabled
+ )
} else {
- setNodeOutputProperties(remoteExecutionOutput.status.name.asJsonPrimitive(), logs,
- remoteExecutionOutput.payload)
+ setNodeOutputProperties(remoteExecutionOutput.status.name.asJsonPrimitive(),
+ STEP_EXEC_CMD,
+ logs,
+ remoteExecutionOutput.payload,
+ isLogResponseEnabled
+ )
}
} catch (timeoutEx: TimeoutCancellationException) {
val timeoutErrMsg = "Command executor timed out executing after $executionTimeout seconds requestId ($processId)"
- setNodeOutputErrors(status = timeoutErrMsg, message = "".asJsonPrimitive())
+ setNodeOutputErrors(status = timeoutErrMsg,
+ step = STEP_EXEC_CMD,
+ logs = "".asJsonPrimitive(),
+ error = "".asJsonPrimitive(),
+ logging = isLogResponseEnabled
+ )
log.error(timeoutErrMsg, timeoutEx)
} catch (grpcEx: io.grpc.StatusRuntimeException) {
val timeoutErrMsg = "Command executor timed out executing after $executionTimeout seconds requestId ($processId)"
- setNodeOutputErrors(status = timeoutErrMsg, message = "".asJsonPrimitive())
+ setNodeOutputErrors(status = timeoutErrMsg,
+ step = STEP_EXEC_CMD,
+ logs = "".asJsonPrimitive(),
+ error = "".asJsonPrimitive(),
+ logging = isLogResponseEnabled
+ )
log.error("Command executor time out during GRPC call", grpcEx)
} catch (e: Exception) {
log.error("Failed to process on remote executor requestId ($processId)", e)
@@ -234,25 +272,38 @@ open class ComponentRemotePythonExecutor(private val remoteScriptExecutionServic
/**
* Utility function to set the output properties of the executor node
*/
- private fun setNodeOutputProperties(status: JsonNode, message: JsonNode, artifacts: JsonNode) {
+ private fun setNodeOutputProperties(status: JsonNode, step: String, message: JsonNode, artifacts: JsonNode, logging: Boolean = true) {
setAttribute(ATTRIBUTE_EXEC_CMD_STATUS, status)
- log.info("Executor status : $status")
setAttribute(ATTRIBUTE_RESPONSE_DATA, artifacts)
- log.info("Executor artifacts: $artifacts")
setAttribute(ATTRIBUTE_EXEC_CMD_LOG, message)
- log.info("Executor message : $message")
+
+ if (logging) {
+ log.info("Executor status : $step : $status")
+ log.info("Executor artifacts: $step : $artifacts")
+ log.info("Executor message : $step : $message")
+ }
}
/**
* Utility function to set the output properties and errors of the executor node, in cas of errors
*/
- private fun setNodeOutputErrors(status: String, message: JsonNode, artifacts: JsonNode = "".asJsonPrimitive()) {
+ private fun setNodeOutputErrors(
+ status: String,
+ step: String,
+ logs: JsonNode = "N/A".asJsonPrimitive(),
+ error: JsonNode,
+ logging: Boolean = true
+ ) {
setAttribute(ATTRIBUTE_EXEC_CMD_STATUS, status.asJsonPrimitive())
- log.info("Executor status : $status")
- setAttribute(ATTRIBUTE_EXEC_CMD_LOG, message)
- log.info("Executor message : $message")
- setAttribute(ATTRIBUTE_RESPONSE_DATA, artifacts)
- log.info("Executor artifacts: $artifacts")
- addError(status, ATTRIBUTE_EXEC_CMD_LOG, message.toString())
+ setAttribute(ATTRIBUTE_EXEC_CMD_LOG, logs)
+ setAttribute(ATTRIBUTE_RESPONSE_DATA, "N/A".asJsonPrimitive())
+
+ if (logging) {
+ log.info("Executor status : $step : $status")
+ log.info("Executor message : $step : $error")
+ log.info("Executor logs : $step : $logs")
+ }
+
+ addError(status, step, error.toString())
}
}
diff --git a/ms/blueprintsprocessor/functions/python-executor/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutorTest.kt b/ms/blueprintsprocessor/functions/python-executor/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutorTest.kt
index 5e57b9eb7..d4edf4bb2 100644
--- a/ms/blueprintsprocessor/functions/python-executor/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutorTest.kt
+++ b/ms/blueprintsprocessor/functions/python-executor/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutorTest.kt
@@ -22,6 +22,7 @@ import io.mockk.every
import io.mockk.mockk
import kotlinx.coroutines.runBlocking
import org.junit.Test
+import org.onap.ccsdk.cds.blueprintsprocessor.core.BluePrintPropertiesService
import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInput
import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.PrepareRemoteEnvInput
import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.RemoteScriptExecutionInput
@@ -47,7 +48,10 @@ class ComponentRemotePythonExecutorTest {
runBlocking {
val remoteScriptExecutionService = MockRemoteScriptExecutionService()
- val componentRemotePythonExecutor = ComponentRemotePythonExecutor(remoteScriptExecutionService)
+ val componentRemotePythonExecutor = ComponentRemotePythonExecutor(
+ remoteScriptExecutionService,
+ mockk<BluePrintPropertiesService>()
+ )
val executionServiceInput =
JacksonUtils.readValueFromClassPathFile(
@@ -88,7 +92,10 @@ class ComponentRemotePythonExecutorTest {
fun testComponentRemotePythonExecutorProcessNB() {
runBlocking {
val remoteScriptExecutionService = MockRemoteScriptExecutionService()
- val componentRemotePythonExecutor = ComponentRemotePythonExecutor(remoteScriptExecutionService)
+ val componentRemotePythonExecutor = ComponentRemotePythonExecutor(
+ remoteScriptExecutionService,
+ mockk<BluePrintPropertiesService>()
+ )
val bluePrintRuntime = mockk<DefaultBluePrintRuntimeService>("123456-1000")
every { bluePrintRuntime.getBluePrintError() } answers { BluePrintError() } // successful case.
diff --git a/ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/BluePrintMessageLibData.kt b/ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/BluePrintMessageLibData.kt
index ac35fbf2c..b07d64388 100644
--- a/ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/BluePrintMessageLibData.kt
+++ b/ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/BluePrintMessageLibData.kt
@@ -78,7 +78,7 @@ open class KafkaSslAuthMessageProducerProperties : KafkaBasicAuthMessageProducer
var keystore: String? = null
var keystorePassword: String? = null
var keystoreType: String = SslConfigs.DEFAULT_SSL_KEYSTORE_TYPE
- var sslEndpointIdentificationAlgorithm: String = ""
+ var sslEndpointIdentificationAlgorithm: String = SslConfigs.DEFAULT_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM
override fun getConfig(): HashMap<String, Any> {
val configProps = super.getConfig()
@@ -142,7 +142,7 @@ open class KafkaStreamsSslAuthConsumerProperties : KafkaStreamsBasicAuthConsumer
var keystore: String? = null
var keystorePassword: String? = null
var keystoreType: String = SslConfigs.DEFAULT_SSL_KEYSTORE_TYPE
- var sslEndpointIdentificationAlgorithm: String = ""
+ var sslEndpointIdentificationAlgorithm: String = SslConfigs.DEFAULT_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM
override fun getConfig(): HashMap<String, Any> {
val configProps = super.getConfig()
@@ -218,7 +218,7 @@ open class KafkaSslAuthMessageConsumerProperties : KafkaBasicAuthMessageConsumer
var keystore: String? = null
var keystorePassword: String? = null
var keystoreType: String = SslConfigs.DEFAULT_SSL_KEYSTORE_TYPE
- var sslEndpointIdentificationAlgorithm: String = ""
+ var sslEndpointIdentificationAlgorithm: String = SslConfigs.DEFAULT_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM
override fun getConfig(): HashMap<String, Any> {
val configProps = super.getConfig()
diff --git a/ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/service/KafkaMessageProducerService.kt b/ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/service/KafkaMessageProducerService.kt
index 931f052ed..e4991d2d8 100644
--- a/ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/service/KafkaMessageProducerService.kt
+++ b/ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/service/KafkaMessageProducerService.kt
@@ -17,12 +17,16 @@
package org.onap.ccsdk.cds.blueprintsprocessor.message.service
+import com.fasterxml.jackson.databind.node.ObjectNode
import org.apache.commons.lang.builder.ToStringBuilder
import org.apache.kafka.clients.producer.Callback
import org.apache.kafka.clients.producer.KafkaProducer
import org.apache.kafka.clients.producer.ProducerRecord
import org.apache.kafka.common.header.internals.RecordHeader
+import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceOutput
+import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.Status
import org.onap.ccsdk.cds.blueprintsprocessor.message.MessageProducerProperties
+import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive
import org.onap.ccsdk.cds.controllerblueprints.core.asJsonString
import org.onap.ccsdk.cds.controllerblueprints.core.defaultToUUID
import org.slf4j.LoggerFactory
@@ -39,6 +43,10 @@ class KafkaMessageProducerService(
private val messageLoggerService = MessageLoggerService()
+ companion object {
+ const val MAX_ERR_MSG_LEN = 128
+ }
+
override suspend fun sendMessageNB(message: Any): Boolean {
checkNotNull(messageProducerProperties.topic) { "default topic is not configured" }
return sendMessageNB(messageProducerProperties.topic!!, message)
@@ -54,9 +62,14 @@ class KafkaMessageProducerService(
message: Any,
headers: MutableMap<String, String>?
): Boolean {
- val byteArrayMessage = when (message) {
- is String -> message.toByteArray(Charset.defaultCharset())
- else -> message.asJsonString().toByteArray(Charset.defaultCharset())
+ var clonedMessage = message
+ if (clonedMessage is ExecutionServiceOutput) {
+ clonedMessage = truncateResponse(clonedMessage)
+ }
+
+ val byteArrayMessage = when (clonedMessage) {
+ is String -> clonedMessage.toByteArray(Charset.defaultCharset())
+ else -> clonedMessage.asJsonString().toByteArray(Charset.defaultCharset())
}
val record = ProducerRecord<String, ByteArray>(topic, defaultToUUID(), byteArrayMessage)
@@ -85,4 +98,37 @@ class KafkaMessageProducerService(
return kafkaProducer!!
}
+
+ /**
+ * Truncation of BP responses
+ */
+ private fun truncateResponse(executionServiceOutput: ExecutionServiceOutput): ExecutionServiceOutput {
+ /** Truncation of error messages */
+ var truncErrMsg = executionServiceOutput.status.errorMessage
+ if (truncErrMsg != null && truncErrMsg.length > MAX_ERR_MSG_LEN) {
+ truncErrMsg = "${truncErrMsg.substring(0,MAX_ERR_MSG_LEN)}" +
+ " [...]. Check Blueprint Processor logs for more information."
+ }
+ /** Truncation for Command Executor responses */
+ var truncPayload = executionServiceOutput.payload.deepCopy()
+ val workflowName = executionServiceOutput.actionIdentifiers.actionName
+ if (truncPayload.path("$workflowName-response").has("execute-command-logs")) {
+ var cmdExecLogNode = truncPayload.path("$workflowName-response") as ObjectNode
+ cmdExecLogNode.replace("execute-command-logs", "Check Command Executor logs for more information.".asJsonPrimitive())
+ }
+ return ExecutionServiceOutput().apply {
+ correlationUUID = executionServiceOutput.correlationUUID
+ commonHeader = executionServiceOutput.commonHeader
+ actionIdentifiers = executionServiceOutput.actionIdentifiers
+ status = Status().apply {
+ code = executionServiceOutput.status.code
+ eventType = executionServiceOutput.status.eventType
+ timestamp = executionServiceOutput.status.timestamp
+ errorMessage = truncErrMsg
+ message = executionServiceOutput.status.message
+ }
+ payload = truncPayload
+ stepData = executionServiceOutput.stepData
+ }
+ }
}
diff --git a/ms/blueprintsprocessor/modules/commons/message-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/service/BlueprintMessageConsumerServiceTest.kt b/ms/blueprintsprocessor/modules/commons/message-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/service/BlueprintMessageConsumerServiceTest.kt
index ac08dc7b7..fdf6e48e7 100644
--- a/ms/blueprintsprocessor/modules/commons/message-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/service/BlueprintMessageConsumerServiceTest.kt
+++ b/ms/blueprintsprocessor/modules/commons/message-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/service/BlueprintMessageConsumerServiceTest.kt
@@ -214,7 +214,7 @@ open class BlueprintMessageConsumerServiceTest {
SslConfigs.SSL_KEYSTORE_LOCATION_CONFIG to "/path/to/keystore.jks",
SslConfigs.SSL_KEYSTORE_TYPE_CONFIG to "JKS",
SslConfigs.SSL_KEYSTORE_PASSWORD_CONFIG to "secretpassword",
- SslConfigs.SSL_ENDPOINT_IDENTIFICATION_ALGORITHM_CONFIG to "",
+ SslConfigs.SSL_ENDPOINT_IDENTIFICATION_ALGORITHM_CONFIG to SslConfigs.DEFAULT_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM,
SaslConfigs.SASL_MECHANISM to "SCRAM-SHA-512",
SaslConfigs.SASL_JAAS_CONFIG to "${ScramLoginModule::class.java.canonicalName} required " +
"username=\"sample-user\" " +
diff --git a/ms/blueprintsprocessor/modules/commons/message-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/service/BlueprintMessageProducerServiceTest.kt b/ms/blueprintsprocessor/modules/commons/message-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/service/BlueprintMessageProducerServiceTest.kt
index 72a47ed56..da7394998 100644
--- a/ms/blueprintsprocessor/modules/commons/message-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/service/BlueprintMessageProducerServiceTest.kt
+++ b/ms/blueprintsprocessor/modules/commons/message-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/service/BlueprintMessageProducerServiceTest.kt
@@ -109,7 +109,7 @@ open class BlueprintMessageProducerServiceTest {
SslConfigs.SSL_KEYSTORE_LOCATION_CONFIG to "/path/to/keystore.jks",
SslConfigs.SSL_KEYSTORE_TYPE_CONFIG to "JKS",
SslConfigs.SSL_KEYSTORE_PASSWORD_CONFIG to "secretpassword",
- SslConfigs.SSL_ENDPOINT_IDENTIFICATION_ALGORITHM_CONFIG to "",
+ SslConfigs.SSL_ENDPOINT_IDENTIFICATION_ALGORITHM_CONFIG to SslConfigs.DEFAULT_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM,
SaslConfigs.SASL_MECHANISM to "SCRAM-SHA-512",
SaslConfigs.SASL_JAAS_CONFIG to "${ScramLoginModule::class.java.canonicalName} required " +
"username=\"sample-user\" " +
diff --git a/ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/BlueprintModelController.kt b/ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/BlueprintModelController.kt
index 1f01d1ce3..3973f3620 100644
--- a/ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/BlueprintModelController.kt
+++ b/ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/BlueprintModelController.kt
@@ -89,9 +89,11 @@ open class BlueprintModelController(private val bluePrintModelHandler: BluePrint
fun allBlueprintModel(
@RequestParam(defaultValue = "20") limit: Int,
@RequestParam(defaultValue = "0") offset: Int,
- @RequestParam(defaultValue = "DATE") sort: BlueprintSortByOption
+ @RequestParam(defaultValue = "DATE") sort: BlueprintSortByOption,
+ @RequestParam(defaultValue = "ASC") sortType: String
): Page<BlueprintModelSearch> {
- val pageRequest = PageRequest.of(offset, limit, Sort.Direction.ASC, sort.columnName)
+ val pageRequest = PageRequest.of(offset, limit,
+ Sort.Direction.fromString(sortType), sort.columnName)
return this.bluePrintModelHandler.allBlueprintModel(pageRequest)
}
@@ -110,9 +112,11 @@ open class BlueprintModelController(private val bluePrintModelHandler: BluePrint
@NotNull @PathVariable(value = "keyword") keyWord: String,
@RequestParam(defaultValue = "20") limit: Int,
@RequestParam(defaultValue = "0") offset: Int,
- @RequestParam(defaultValue = "DATE") sort: BlueprintSortByOption
+ @RequestParam(defaultValue = "DATE") sort: BlueprintSortByOption,
+ @RequestParam(defaultValue = "ASC") sortType: String
): Page<BlueprintModelSearch> {
- val pageRequest = PageRequest.of(offset, limit, Sort.Direction.ASC, sort.columnName)
+ val pageRequest = PageRequest.of(offset, limit,
+ Sort.Direction.fromString(sortType), sort.columnName)
return this.bluePrintModelHandler.searchBluePrintModelsByKeyWordPaged(keyWord, pageRequest)
}
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/BluePrintProcessingKafkaConsumer.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/BluePrintProcessingKafkaConsumer.kt
index 49f2a50d5..a95af8123 100644
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/BluePrintProcessingKafkaConsumer.kt
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/BluePrintProcessingKafkaConsumer.kt
@@ -51,13 +51,15 @@ open class BluePrintProcessingKafkaConsumer(
companion object {
const val CONSUMER_SELECTOR = "self-service-api"
+ const val PRODUCER_SELECTOR = "self-service-api"
}
@EventListener(ApplicationReadyEvent::class)
fun setupMessageListener() = runBlocking {
try {
log.info(
- "Setting up message consumer($CONSUMER_SELECTOR)"
+ "Setting up message consumer($CONSUMER_SELECTOR)" +
+ "message producer($PRODUCER_SELECTOR)..."
)
/** Get the Message Consumer Service **/
@@ -72,6 +74,18 @@ open class BluePrintProcessingKafkaConsumer(
throw BluePrintProcessorException("failed to create consumer service ${e.message}")
}
+ /** Get the Message Producer Service **/
+ val blueprintMessageProducerService = try {
+ bluePrintMessageLibPropertyService
+ .blueprintMessageProducerService(PRODUCER_SELECTOR)
+ } catch (e: BluePrintProcessorException) {
+ val errorMsg = "Failed creating Kafka producer message service."
+ throw e.updateErrorMessage(SelfServiceApiDomains.SELF_SERVICE_API, errorMsg,
+ "Wrong Kafka selector provided or internal error in Kafka service.")
+ } catch (e: Exception) {
+ throw BluePrintProcessorException("failed to create producer service ${e.message}")
+ }
+
launch {
/** Subscribe to the consumer topics */
val additionalConfig: MutableMap<String, Any> = hashMapOf()
@@ -82,7 +96,8 @@ open class BluePrintProcessingKafkaConsumer(
ph.register()
log.trace("Consumed Message : $message")
val executionServiceInput = message.jsonAsType<ExecutionServiceInput>()
- executionServiceHandler.doProcess(executionServiceInput)
+ val executionServiceOutput = executionServiceHandler.doProcess(executionServiceInput)
+ blueprintMessageProducerService.sendMessage(executionServiceOutput)
} catch (e: Exception) {
log.error("failed in processing the consumed message : $message", e)
} finally {
@@ -93,7 +108,8 @@ open class BluePrintProcessingKafkaConsumer(
}
} catch (e: Exception) {
log.error(
- "failed to start message consumer($CONSUMER_SELECTOR) ", e
+ "failed to start message consumer($CONSUMER_SELECTOR) " +
+ "message producer($PRODUCER_SELECTOR) ", e
)
}
}
@@ -102,7 +118,8 @@ open class BluePrintProcessingKafkaConsumer(
fun shutdownMessageListener() = runBlocking {
try {
log.info(
- "Shutting down message consumer($CONSUMER_SELECTOR)"
+ "Shutting down message consumer($CONSUMER_SELECTOR)" +
+ "message producer($PRODUCER_SELECTOR)..."
)
blueprintMessageConsumerService.shutDown()
ph.arriveAndAwaitAdvance()
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/KafkaPublishAuditService.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/KafkaPublishAuditService.kt
index 129e7a54d..1c5d47c27 100644
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/KafkaPublishAuditService.kt
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/KafkaPublishAuditService.kt
@@ -24,6 +24,7 @@ import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.Reso
import org.onap.ccsdk.cds.blueprintsprocessor.message.service.BluePrintMessageLibPropertyService
import org.onap.ccsdk.cds.blueprintsprocessor.message.service.BlueprintMessageProducerService
import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException
+import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive
import org.onap.ccsdk.cds.controllerblueprints.core.common.ApplicationConstants
import org.onap.ccsdk.cds.controllerblueprints.core.interfaces.BluePrintCatalogService
import org.onap.ccsdk.cds.controllerblueprints.core.utils.BluePrintMetadataUtils
@@ -48,12 +49,9 @@ class KafkaPublishAuditService(
private val bluePrintMessageLibPropertyService: BluePrintMessageLibPropertyService,
private val blueprintsProcessorCatalogService: BluePrintCatalogService
) : PublishAuditService {
-
private var inputInstance: BlueprintMessageProducerService? = null
private var outputInstance: BlueprintMessageProducerService? = null
-
private lateinit var correlationUUID: String
-
private val log = LoggerFactory.getLogger(KafkaPublishAuditService::class.toString())
companion object {
@@ -127,7 +125,8 @@ class KafkaPublishAuditService(
correlationUUID = executionServiceInput.correlationUUID
commonHeader = executionServiceInput.commonHeader
actionIdentifiers = executionServiceInput.actionIdentifiers
- payload = executionServiceInput.payload
+ payload = executionServiceInput.payload.deepCopy()
+ stepData = executionServiceInput.stepData
}
val blueprintName = clonedExecutionServiceInput.actionIdentifiers.blueprintName
@@ -173,8 +172,7 @@ class KafkaPublishAuditService(
sensitiveParameters.forEach { sensitiveParameter ->
if (workflowProperties.has(sensitiveParameter)) {
- workflowProperties.remove(sensitiveParameter)
- workflowProperties.put(sensitiveParameter, ApplicationConstants.LOG_REDACTED)
+ workflowProperties.replace(sensitiveParameter, ApplicationConstants.LOG_REDACTED.asJsonPrimitive())
}
}
}
diff --git a/ms/command-executor/src/main/docker/Dockerfile b/ms/command-executor/src/main/docker/Dockerfile
index e91265b56..e84d5531b 100644
--- a/ms/command-executor/src/main/docker/Dockerfile
+++ b/ms/command-executor/src/main/docker/Dockerfile
@@ -3,7 +3,7 @@ FROM python:3.6-slim
ENV GRPC_PYTHON_VERSION 1.20.0
RUN python -m pip install --upgrade pip
RUN pip install grpcio==${GRPC_PYTHON_VERSION} grpcio-tools==${GRPC_PYTHON_VERSION}
-RUN pip install virtualenv==16.7.9
+RUN pip install virtualenv==16.7.9 pympler==0.8
RUN groupadd -r onap && useradd -r -g onap onap
diff --git a/ms/command-executor/src/main/python/command_executor_handler.py b/ms/command-executor/src/main/python/command_executor_handler.py
index 1e6f03b81..0c476b23e 100644
--- a/ms/command-executor/src/main/python/command_executor_handler.py
+++ b/ms/command-executor/src/main/python/command_executor_handler.py
@@ -43,43 +43,48 @@ class CommandExecutorHandler():
def is_installed(self):
return os.path.exists(self.installed)
- def prepare_env(self, request, results):
+ def prepare_env(self, request):
+ results_log = []
if not self.is_installed():
create_venv_status = self.create_venv()
- if not create_venv_status["cds_is_successful"]:
- err_msg = "ERROR: failed to prepare environment for request {} due to error in creating virtual Python env. Original error {}".format(self.blueprint_id, create_venv_status["err_msg"])
+ if not create_venv_status[utils.CDS_IS_SUCCESSFUL_KEY]:
+ err_msg = "ERROR: failed to prepare environment for request {} due to error in creating virtual Python env. Original error {}".format(self.blueprint_id, create_venv_status[utils.ERR_MSG_KEY])
self.logger.error(err_msg)
- return utils.build_ret_data(False, err_msg)
+ return utils.build_ret_data(False, error=err_msg)
activate_venv_status = self.activate_venv()
- if not activate_venv_status["cds_is_successful"]:
- err_msg = "ERROR: failed to prepare environment for request {} due Python venv_activation. Original error {}".format(self.blueprint_id, activate_venv_status["err_msg"])
+ if not activate_venv_status[utils.CDS_IS_SUCCESSFUL_KEY]:
+ err_msg = "ERROR: failed to prepare environment for request {} due Python venv_activation. Original error {}".format(self.blueprint_id, activate_venv_status[utils.ERR_MSG_KEY])
self.logger.error(err_msg)
- return utils.build_ret_data(False, err_msg)
+ return utils.build_ret_data(False, error=err_msg)
try:
with open(self.installed, "w+") as f:
- if not self.install_packages(request, CommandExecutor_pb2.pip, f, results):
- return utils.build_ret_data(False, "ERROR: failed to prepare environment for request {} during pip package install.".format(self.blueprint_id))
+ if not self.install_packages(request, CommandExecutor_pb2.pip, f, results_log):
+ err_msg = "ERROR: failed to prepare environment for request {} during pip package install.".format(self.blueprint_id)
+ return utils.build_ret_data(False, results_log=results_log, error=err_msg)
f.write("\r\n") # TODO: is \r needed?
- results.append("\n")
- if not self.install_packages(request, CommandExecutor_pb2.ansible_galaxy, f, results):
- return utils.build_ret_data(False, "ERROR: failed to prepare environment for request {} during Ansible install.".format(self.blueprint_id))
+ results_log.append("\n")
+ if not self.install_packages(request, CommandExecutor_pb2.ansible_galaxy, f, results_log):
+ err_msg = "ERROR: failed to prepare environment for request {} during Ansible install.".format(self.blueprint_id)
+ return utils.build_ret_data(False, results_log=results_log, error=err_msg)
except Exception as ex:
err_msg = "ERROR: failed to prepare environment for request {} during installing packages. Exception: {}".format(self.blueprint_id, ex)
self.logger.error(err_msg)
- return utils.build_ret_data(False, err_msg)
+ return utils.build_ret_data(False, error=err_msg)
else:
try:
with open(self.installed, "r") as f:
- results.append(f.read())
+ results_log.append(f.read())
except Exception as ex:
- return utils.build_ret_data(False, "ERROR: failed to prepare environment during reading 'installed' file {}. Exception: {}".format(self.installed, ex))
+ err_msg="ERROR: failed to prepare environment during reading 'installed' file {}. Exception: {}".format(self.installed, ex)
+ return utils.build_ret_data(False, error=err_msg)
# deactivate_venv(blueprint_id)
- return utils.build_ret_data(True, "")
+ return utils.build_ret_data(True, results_log=results_log)
- def execute_command(self, request, results):
- payload_result = {}
+ def execute_command(self, request):
+ results_log = []
+ result = {}
# workaround for when packages are not specified, we may not want to go through the install step
# can just call create_venv from here.
if not self.is_installed():
@@ -87,16 +92,14 @@ class CommandExecutorHandler():
try:
if not self.is_installed():
create_venv_status = self.create_venv
- if not create_venv_status["cds_is_successful"]:
- err_msg = "{} - Failed to execute command during venv creation. Original error: {}".format(self.blueprint_id, create_venv_status["err_msg"])
- results.append(err_msg)
- return utils.build_ret_data(False, err_msg)
+ if not create_venv_status[utils.CDS_IS_SUCCESSFUL_KEY]:
+ err_msg = "{} - Failed to execute command during venv creation. Original error: {}".format(self.blueprint_id, create_venv_status[utils.ERR_MSG_KEY])
+ return utils.build_ret_data(False, error=err_msg)
activate_response = self.activate_venv()
- if not activate_response["cds_is_successful"]:
- orig_error = activate_response["err_msg"]
+ if not activate_response[utils.CDS_IS_SUCCESSFUL_KEY]:
+ orig_error = activate_response[utils.ERR_MSG_KEY]
err_msg = "{} - Failed to execute command during environment activation. Original error: {}".format(self.blueprint_id, orig_error)
- results.append(err_msg) #TODO: get rid of results and just rely on the return data struct.
- return utils.build_ret_data(False, err_msg)
+ return utils.build_ret_data(False, error=err_msg)
cmd = "cd " + self.venv_home
@@ -131,26 +134,25 @@ class CommandExecutorHandler():
payload = '\n'.join(payload_section)
msg = email.parser.Parser().parsestr(payload)
for part in msg.get_payload():
- payload_result = json.loads(part.get_payload())
+ result = json.loads(part.get_payload())
if output and not is_payload_section:
self.logger.info(output.strip())
- results.append(output.strip())
+ results_log.append(output.strip())
else:
payload_section.append(output.strip())
rc = newProcess.poll()
except Exception as e:
err_msg = "{} - Failed to execute command. Error: {}".format(self.blueprint_id, e)
- self.logger.info(err_msg)
- results.append(e)
- payload_result.update(utils.build_ret_data(False, err_msg))
- return payload_result
+ return utils.build_ret_data(False, results=result, results_log=results_log, error=err_msg)
# deactivate_venv(blueprint_id)
#Since return code is only used to check if it's zero (success), we can just return success flag instead.
self.logger.debug("python return_code : {}".format(rc))
- is_execution_successful = rc == 0
- payload_result.update(utils.build_ret_data(is_execution_successful, ""))
- return payload_result
+ if rc == 0:
+ return utils.build_ret_data(True, results=result, results_log=results_log)
+ else:
+ err_msg = "{} - Something wrong happened during command execution. See execute command logs for more information.".format(self.blueprint_id)
+ return utils.build_ret_data(False, results=result, results_log=results_log, error=err_msg)
def install_packages(self, request, type, f, results):
success = self.install_python_packages('UTILITY', results)
diff --git a/ms/command-executor/src/main/python/command_executor_server.py b/ms/command-executor/src/main/python/command_executor_server.py
index 3435e2272..207097605 100644
--- a/ms/command-executor/src/main/python/command_executor_server.py
+++ b/ms/command-executor/src/main/python/command_executor_server.py
@@ -22,9 +22,6 @@ import proto.CommandExecutor_pb2_grpc as CommandExecutor_pb2_grpc
from command_executor_handler import CommandExecutorHandler
import utils
-_ONE_DAY_IN_SECONDS = 60 * 60 * 24
-
-
class CommandExecutorServer(CommandExecutor_pb2_grpc.CommandExecutorServiceServicer):
def __init__(self):
@@ -35,14 +32,14 @@ class CommandExecutorServer(CommandExecutor_pb2_grpc.CommandExecutorServiceServi
self.logger.info("{} - Received prepareEnv request".format(blueprint_id))
self.logger.info(request)
- results = []
handler = CommandExecutorHandler(request)
- prepare_env_response = handler.prepare_env(request, results)
- if not prepare_env_response["cds_is_successful"]:
- self.logger.info("{} - Failed to prepare python environment. {}".format(blueprint_id, results))
- return utils.build_grpc_response(request, results, {}, False)
- self.logger.info("{} - Package installation logs {}".format(blueprint_id, results))
- return utils.build_grpc_response(request, results, {}, True)
+ prepare_env_response = handler.prepare_env(request)
+ if prepare_env_response[utils.CDS_IS_SUCCESSFUL_KEY]:
+ self.logger.info("{} - Package installation logs {}".format(blueprint_id, prepare_env_response[utils.RESULTS_LOG_KEY]))
+ else:
+ self.logger.info("{} - Failed to prepare python environment. {}".format(blueprint_id, prepare_env_response[utils.ERR_MSG_KEY]))
+ self.logger.info("Prepare Env Response returned : %s" % prepare_env_response)
+ return utils.build_grpc_response(request.requestId, prepare_env_response)
def executeCommand(self, request, context):
blueprint_id = utils.get_blueprint_id(request)
@@ -53,13 +50,15 @@ class CommandExecutorServer(CommandExecutor_pb2_grpc.CommandExecutorServiceServi
log_results = []
payload_result = {}
handler = CommandExecutorHandler(request)
- payload_result = handler.execute_command(request, log_results)
- if not payload_result["cds_is_successful"]:
- self.logger.info("{} - Failed to executeCommand. {}".format(blueprint_id, log_results))
- else:
+ exec_cmd_response = handler.execute_command(request)
+ if exec_cmd_response[utils.CDS_IS_SUCCESSFUL_KEY]:
self.logger.info("{} - Execution finished successfully.".format(blueprint_id))
+ self.logger.info("{} - Log Results {}: ".format(blueprint_id, exec_cmd_response[utils.RESULTS_LOG_KEY]))
+ self.logger.info("{} - Results : {}".format(blueprint_id, exec_cmd_response[utils.RESULTS_KEY]))
+ else:
+ self.logger.info("{} - Failed to executeCommand. {}".format(blueprint_id, exec_cmd_response[utils.ERR_MSG_KEY]))
- ret = utils.build_grpc_response(request, log_results, payload_result, payload_result["cds_is_successful"])
- self.logger.info("Payload returned %s" % payload_result)
+ ret = utils.build_grpc_response(request.requestId, exec_cmd_response)
+ self.logger.info("Response returned : {}".format(exec_cmd_response))
return ret \ No newline at end of file
diff --git a/ms/command-executor/src/main/python/utils.py b/ms/command-executor/src/main/python/utils.py
index 574be51db..b98241629 100644
--- a/ms/command-executor/src/main/python/utils.py
+++ b/ms/command-executor/src/main/python/utils.py
@@ -17,7 +17,13 @@ from google.protobuf.timestamp_pb2 import Timestamp
import proto.CommandExecutor_pb2 as CommandExecutor_pb2
import json
+from pympler import asizeof
+CDS_IS_SUCCESSFUL_KEY = "cds_is_successful"
+ERR_MSG_KEY = "err_msg"
+RESULTS_KEY = "results"
+RESULTS_LOG_KEY = "results_log"
+TRUNC_MSG_LEN = 3 * 1024 * 1024
def get_blueprint_id(request):
blueprint_name = request.identifiers.blueprintName
@@ -25,27 +31,47 @@ def get_blueprint_id(request):
return blueprint_name + '/' + blueprint_version
# Create a response for grpc. Fills in the timestamp as well as removes cds_is_successful element
-def build_grpc_response(request, log_results, payload_return, is_success=False):
- if is_success:
+def build_grpc_response(request_id, response):
+ if response[CDS_IS_SUCCESSFUL_KEY]:
status = CommandExecutor_pb2.SUCCESS
+ payload = json.dumps(response[RESULTS_KEY])
else:
status = CommandExecutor_pb2.FAILURE
+ # truncate error message if too heavy
+ if asizeof.asizeof(response[ERR_MSG_KEY]) > TRUNC_MSG_LEN:
+ response[ERR_MSG_KEY] = "{} [...]. Check command executor logs for more information.".format(response[ERR_MSG_KEY][:TRUNC_MSG_LEN])
+ payload = json.dumps(response[ERR_MSG_KEY])
+
+ # truncate cmd-exec logs if too heavy
+ response[RESULTS_LOG_KEY] = truncate_cmd_exec_logs(response[RESULTS_LOG_KEY])
timestamp = Timestamp()
timestamp.GetCurrentTime()
- if "cds_is_successful" in payload_return:
- payload_return.pop('cds_is_successful')
- payload_str = json.dumps(payload_return)
- return CommandExecutor_pb2.ExecutionOutput(requestId=request.requestId,
- response=log_results,
+ return CommandExecutor_pb2.ExecutionOutput(requestId=request_id,
+ response=response[RESULTS_LOG_KEY],
status=status,
- payload=payload_str,
+ payload=payload,
timestamp=timestamp)
-# build a return data structure which may contain an error message
-def build_ret_data(cds_is_successful, err_msg):
- ret_data = {"cds_is_successful": cds_is_successful }
- if err_msg != "":
- ret_data["err_msg"] = err_msg
+# build a ret data structure
+def build_ret_data(cds_is_successful, results={}, results_log=[], error=None):
+ ret_data = {
+ CDS_IS_SUCCESSFUL_KEY: cds_is_successful,
+ RESULTS_KEY: results,
+ RESULTS_LOG_KEY: results_log
+ }
+ if error:
+ ret_data[ERR_MSG_KEY] = error
return ret_data
+
+def truncate_cmd_exec_logs(logs):
+ truncated_logs = []
+ truncated_logs_memsize = 0
+ for log in logs:
+ truncated_logs_memsize += asizeof.asizeof(log)
+ if truncated_logs_memsize > TRUNC_MSG_LEN:
+ truncated_logs.append("Execution logs exceeds the maximum size allowed. Check command executor logs to view the execute-command-logs.")
+ break
+ truncated_logs.append(log)
+ return truncated_logs \ No newline at end of file