diff options
author | andre.schmid <andre.schmid@est.tech> | 2020-07-20 17:48:48 +0100 |
---|---|---|
committer | andre.schmid <andre.schmid@est.tech> | 2020-08-07 18:39:06 +0100 |
commit | d4dd779aa66be0e046ecb1938fb532312cfe7680 (patch) | |
tree | 55dd7fede3fcaf372a6fe4061b0e69fb5c05632c /gui-editors/gui-editor-apex/src/main/resources | |
parent | 76102da29a02f918d6c61e03cea4da2fd1fdcd92 (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')
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 |