From d4dd779aa66be0e046ecb1938fb532312cfe7680 Mon Sep 17 00:00:00 2001 From: "andre.schmid" Date: Mon, 20 Jul 2020 17:48:48 +0100 Subject: 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 Change-Id: I5e8e91616a7d4dc69e6739604fcd36528cce0028 --- .../main/resources/webapp/css/upload/dialog.css | 56 +++++++++++++++++++ .../src/main/resources/webapp/index.html | 9 ++- .../src/main/resources/webapp/js/ApexConfig.js | 58 ++++++++++++++++++++ .../src/main/resources/webapp/js/ApexMain.js | 4 +- .../main/resources/webapp/js/ApexPageControl.js | 2 + .../src/main/resources/webapp/js/ApexUpload.js | 61 +++++++++++++++++++++ .../webapp/js/lib/pubsub/ba-tiny-pubsub.min.js | 4 ++ .../src/main/resources/webapp/upload/dialog.html | 64 ++++++++++++++++++++++ 8 files changed, 256 insertions(+), 2 deletions(-) create mode 100644 gui-editors/gui-editor-apex/src/main/resources/webapp/css/upload/dialog.css create mode 100644 gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexConfig.js create mode 100644 gui-editors/gui-editor-apex/src/main/resources/webapp/js/ApexUpload.js create mode 100644 gui-editors/gui-editor-apex/src/main/resources/webapp/js/lib/pubsub/ba-tiny-pubsub.min.js create mode 100644 gui-editors/gui-editor-apex/src/main/resources/webapp/upload/dialog.html (limited to 'gui-editors/gui-editor-apex/src/main/resources') 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 @@ + + @@ -82,6 +84,7 @@ +
  • @@ -172,6 +175,7 @@ +
    @@ -212,7 +216,8 @@ - + + @@ -234,6 +239,8 @@ + + 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 @@ + + + + + + + Upload Policy + + + +
    +

    Provide the following files to compose the policy TOSCA

    +
    +
    +
    +
    + +
    +
    + + \ No newline at end of file -- cgit 1.2.3-korg