aboutsummaryrefslogtreecommitdiffstats
path: root/gui-editors/gui-editor-apex/src/main/resources
diff options
context:
space:
mode:
authorandre.schmid <andre.schmid@est.tech>2020-07-20 17:48:48 +0100
committerandre.schmid <andre.schmid@est.tech>2020-08-07 18:39:06 +0100
commitd4dd779aa66be0e046ecb1938fb532312cfe7680 (patch)
tree55dd7fede3fcaf372a6fe4061b0e69fb5c05632c /gui-editors/gui-editor-apex/src/main/resources
parent76102da29a02f918d6c61e03cea4da2fd1fdcd92 (diff)
Upload policy feature
Implements an upload feature that can be enable/disabled through configuration properties. An upload endpoint must be provided also by configuration. The upload has similar feature as the download, but it sends the file to the provided endpoint instead, converting it to TOSCA YAML. Creates an configuration endpoint so the front-end can read it. Introduces a pub/sub feature in the front-end so it can asynchronous read configuration information and send configuration ready message to components that depends on it. Issue-ID: POLICY-2751 Signed-off-by: andre.schmid <andre.schmid@est.tech> Change-Id: I5e8e91616a7d4dc69e6739604fcd36528cce0028
Diffstat (limited to 'gui-editors/gui-editor-apex/src/main/resources')
-rw-r--r--gui-editors/gui-editor-apex/src/main/resources/webapp/css/upload/dialog.css56
-rw-r--r--gui-editors/gui-editor-apex/src/main/resources/webapp/index.html9
-rw-r--r--gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexConfig.js58
-rw-r--r--gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexMain.js4
-rw-r--r--gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexPageControl.js2
-rw-r--r--gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexUpload.js61
-rw-r--r--gui-editors/gui-editor-apex/src/main/resources/webapp/js/lib/pubsub/ba-tiny-pubsub.min.js4
-rw-r--r--gui-editors/gui-editor-apex/src/main/resources/webapp/upload/dialog.html64
8 files changed, 256 insertions, 2 deletions
diff --git a/gui-editors/gui-editor-apex/src/main/resources/webapp/css/upload/dialog.css b/gui-editors/gui-editor-apex/src/main/resources/webapp/css/upload/dialog.css
new file mode 100644
index 0000000..95f29b1
--- /dev/null
+++ b/gui-editors/gui-editor-apex/src/main/resources/webapp/css/upload/dialog.css
@@ -0,0 +1,56 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Nordix Foundation
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+.upload-dialog {
+ font-size: 16px;
+ line-height: 19px;
+}
+
+.upload-dialog .ui-button {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ color: #333333;
+ background-color: #ffffff;
+ border: none;
+ min-width: 60px;
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2);
+ border-radius: 3px;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ background-image: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.1) 100%);
+ padding: 0 8px;
+ height: 2.4rem;
+ font-size: 1.2rem;
+ white-space: nowrap;
+ text-decoration: none;
+ text-align: center;
+ cursor: pointer;
+}
+
+.upload-dialog #upload-form {
+ width: 100%;
+ font-size: 16px;
+ line-height: 19px;
+}
+
+.upload-dialog #upload-form input {
+ width: 100%;
+} \ No newline at end of file
diff --git a/gui-editors/gui-editor-apex/src/main/resources/webapp/index.html b/gui-editors/gui-editor-apex/src/main/resources/webapp/index.html
index 20a15ff..53e205e 100644
--- a/gui-editors/gui-editor-apex/src/main/resources/webapp/index.html
+++ b/gui-editors/gui-editor-apex/src/main/resources/webapp/index.html
@@ -43,6 +43,8 @@
<!-- interface style -->
<link rel="stylesheet" type="text/css" href="css/interfaceAssets.css">
+<link rel="stylesheet" type="text/css" href="css/upload/dialog.css" />
+
<!-- JQuery style -->
<link rel="stylesheet" href="js/jquery-ui-1.12.1/jquery-ui.css">
@@ -82,6 +84,7 @@
<li id="menuFileNew">New <kbd>Ctrl+N</kbd></li>
<li id="menuFileOpen">Open... <kbd>Ctrl+O</kbd></li>
<li id="menuFileDownload">Download <kbd>Ctrl+S</kbd></li>
+ <li id="menuFileUpload">Upload <kbd>Ctrl+U</kbd></li>
<li id="menuFileClear">Clear<kbd>Ctrl+D</kbd></li>
<li class="divider"></li>
<li id="menuFileNewSession">New Session<kbd>Ctrl+R</kbd></li>
@@ -172,6 +175,7 @@
<!-- Dynamically created form goes here-->
</div>
</div>
+ <div id="main-dialog"></div>
</div>
<div class="placeholder">
@@ -212,7 +216,8 @@
<!-- edit area JS file -->
<script language="javascript" type="text/javascript"
src="js/edit_area/edit_area_full.js"></script>
-
+ <!-- simple jquery pub/sub library -->
+ <script type="text/javascript" src="js/lib/pubsub/ba-tiny-pubsub.min.js"></script>
<!-- Apex JS files -->
<script type="text/javascript" src="js/ApexTable.js"></script>
<script type="text/javascript" src="js/ApexContextSchemaTab.js"></script>
@@ -234,6 +239,8 @@
<script type="text/javascript" src="js/ApexNewModelForm.js"></script>
<script type="text/javascript" src="js/ApexResultForm.js"></script>
<script type="text/javascript" src="js/ApexModelHandling.js"></script>
+ <script type="text/javascript" src="js/ApexConfig.js"></script>
+ <script type="text/javascript" src="js/ApexUpload.js"></script>
<script type="text/javascript" src="js/ApexMain.js"></script>
</body>
diff --git a/gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexConfig.js b/gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexConfig.js
new file mode 100644
index 0000000..a7f41d2
--- /dev/null
+++ b/gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexConfig.js
@@ -0,0 +1,58 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Nordix Foundation
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+const configObj = {
+ configMap: {},
+ getConfig: function (configKey) {
+ return this.configMap[configKey];
+ },
+ setConfig: function (configKey, configValue) {
+ return this.configMap[configKey] = configValue;
+ },
+ readySignal: function () {
+ $.publish("/config/ready");
+ }
+}
+
+$(document).ready(function () {
+ $("#menuFileUpload").hide();
+
+ const rootUrl = location.protocol
+ + "//"
+ + window.location.hostname
+ + (location.port ? ':' + location.port : '');
+
+ const configUrl = rootUrl + "/apexservices/editor/config";
+
+ function loadConfiguration() {
+ ajax_get(configUrl, function (data) {
+ for (let i = 0; i < data.messages.message.length; i++) {
+ const configEntry = JSON.parse(data.messages.message[i]);
+ Object.keys(configEntry).forEach(key => {
+ configObj.setConfig(key, configEntry[key]);
+ });
+ }
+ configObj.readySignal();
+ });
+ }
+
+ loadConfiguration();
+});
+
+
diff --git a/gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexMain.js b/gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexMain.js
index e8ad0de..57433d6 100644
--- a/gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexMain.js
+++ b/gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexMain.js
@@ -40,10 +40,12 @@ $("#menu li").not(".emptyMessage").click(function() {
case "menuFileOpen":
files_fileOpen();
break;
-
case "menuFileDownload":
files_fileDownload();
break;
+ case "menuFileUpload":
+ uploadPlugin.openDialog();
+ break;
case "menuFileClear":
if (confirm("Clear the current model?")) {
diff --git a/gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexPageControl.js b/gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexPageControl.js
index 4904f30..c2cb45c 100644
--- a/gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexPageControl.js
+++ b/gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexPageControl.js
@@ -27,6 +27,7 @@ function pageControl_modelMode(name, version, fileName) {
$("#menuFileNew").addClass("disabled");
$("#menuFileOpen").addClass("disabled");
$("#menuFileDownload").removeClass("disabled");
+ $("#menuFileUpload").removeClass("disabled");
$("#menuFileClear").removeClass("disabled");
$("#menuModelAnalyse").removeClass("disabled");
$("#menuModelValidate").removeClass("disabled");
@@ -77,6 +78,7 @@ function pageControl_noModelMode() {
$("#menuFileNew").removeClass("disabled");
$("#menuFileOpen").removeClass("disabled");
$("#menuFileDownload").addClass("disabled");
+ $("#menuFileUpload").addClass("disabled");
$("#menuFileClear").addClass("disabled");
$("#menuModelAnalyse").addClass("disabled");
$("#menuModelValidate").addClass("disabled");
diff --git a/gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexUpload.js b/gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexUpload.js
new file mode 100644
index 0000000..a71853c
--- /dev/null
+++ b/gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexUpload.js
@@ -0,0 +1,61 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Nordix Foundation
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+$(document).ready(function () {
+ $.subscribe("/config/ready", enableUpload);
+
+ function enableUpload() {
+ const menuFileUpload = $('#menuFileUpload');
+ const isUploadEnabled = configObj.getConfig("plugin.policy.upload.enable");
+ if (isUploadEnabled === "true" || isUploadEnabled === true) {
+ menuFileUpload.show();
+ } else {
+ menuFileUpload.hide();
+ }
+ }
+
+});
+
+const uploadPlugin = {
+ dialogDiv: $('#main-dialog'),
+ openDialog: function () {
+ this.dialogDiv.load('../upload/dialog.html');
+ },
+
+ upload: function (data, successCallback, errorCallback) {
+ const requestURL = restRootURL + "/Model/Upload";
+ $.ajax({
+ type: 'POST',
+ url: requestURL,
+ data: data,
+ contentType: false,
+ processData: false
+ }).done(function (data) {
+ pageControl_successStatus(data);
+ if (typeof successCallback === typeof Function) {
+ successCallback(data);
+ }
+ }).fail(function (jqXHR, textStatus, errorThrown) {
+ pageControl_restError(requestURL, jqXHR, textStatus, errorThrown);
+ if (typeof errorCallback === typeof Function) {
+ errorCallback(jqXHR, textStatus, errorThrown);
+ }
+ });
+ }
+}
diff --git a/gui-editors/gui-editor-apex/src/main/resources/webapp/js/lib/pubsub/ba-tiny-pubsub.min.js b/gui-editors/gui-editor-apex/src/main/resources/webapp/js/lib/pubsub/ba-tiny-pubsub.min.js
new file mode 100644
index 0000000..635ab34
--- /dev/null
+++ b/gui-editors/gui-editor-apex/src/main/resources/webapp/js/lib/pubsub/ba-tiny-pubsub.min.js
@@ -0,0 +1,4 @@
+/*! Tiny Pub/Sub - v0.7.0 - 2013-01-29
+* https://github.com/cowboy/jquery-tiny-pubsub
+* Copyright (c) 2013 "Cowboy" Ben Alman; Licensed MIT */
+(function(n){var u=n({});n.subscribe=function(){u.on.apply(u,arguments)},n.unsubscribe=function(){u.off.apply(u,arguments)},n.publish=function(){u.trigger.apply(u,arguments)}})(jQuery); \ No newline at end of file
diff --git a/gui-editors/gui-editor-apex/src/main/resources/webapp/upload/dialog.html b/gui-editors/gui-editor-apex/src/main/resources/webapp/upload/dialog.html
new file mode 100644
index 0000000..aac7762
--- /dev/null
+++ b/gui-editors/gui-editor-apex/src/main/resources/webapp/upload/dialog.html
@@ -0,0 +1,64 @@
+<!--
+ ~ ============LICENSE_START=======================================================
+ ~ Copyright (C) 2020 Nordix Foundation
+ ~ ================================================================================
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ ~
+ ~ SPDX-License-Identifier: Apache-2.0
+ ~ ============LICENSE_END=========================================================
+ -->
+
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <title>Upload Policy</title>
+ <script>
+ $(document).ready(function () {
+ function upload() {
+ const data = new FormData();
+ const apexConfigFile = $('#apex-config-file')[0].files[0];
+ const toscaTemplateFile = $('#tosca-template-file')[0].files[0];
+ data.append('apex-config-file', apexConfigFile);
+ data.append('tosca-template-file', toscaTemplateFile);
+ uploadPlugin.upload(data, function () {
+ dialog.dialog("close");
+ });
+ }
+
+ const dialog = $('#inner-dialog').dialog({
+ height: 300,
+ width: 435,
+ modal: true,
+ dialogClass: 'upload-dialog',
+ buttons: {
+ "Upload": upload,
+ Cancel: function() {
+ dialog.dialog("close");
+ }
+ }
+ });
+ });
+ </script>
+</head>
+<body>
+<div id="inner-dialog" title="Upload Policy" class="upload-dialog">
+ <p>Provide the following files to compose the policy TOSCA</p>
+ <div id="upload-form">
+ <label for="apex-config-file">Apex Config</label> <br/>
+ <input id="apex-config-file" type="file" required="required" accept="application/json" class="ui-widget-content ui-corner-all"/> <br/>
+ <label for="tosca-template-file">Tosca Template</label> <br/>
+ <input id="tosca-template-file" type="file" required="required" accept="application/json" class="ui-widget-content ui-corner-all"/>
+ </div>
+</div>
+</body>
+</html> \ No newline at end of file