aboutsummaryrefslogtreecommitdiffstats
path: root/gui-clamp/ui-react/src/components/dialogs/ACM/utils/InstantiationUtils.js
diff options
context:
space:
mode:
Diffstat (limited to 'gui-clamp/ui-react/src/components/dialogs/ACM/utils/InstantiationUtils.js')
-rw-r--r--gui-clamp/ui-react/src/components/dialogs/ACM/utils/InstantiationUtils.js176
1 files changed, 176 insertions, 0 deletions
diff --git a/gui-clamp/ui-react/src/components/dialogs/ACM/utils/InstantiationUtils.js b/gui-clamp/ui-react/src/components/dialogs/ACM/utils/InstantiationUtils.js
new file mode 100644
index 0000000..aaaa1bd
--- /dev/null
+++ b/gui-clamp/ui-react/src/components/dialogs/ACM/utils/InstantiationUtils.js
@@ -0,0 +1,176 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 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=========================================================
+ *
+ *
+ */
+
+import { JSONEditor } from "@json-editor/json-editor";
+
+const InstantiationUtils = {
+
+ parseInstantiationList: (acmList) => {
+ console.log(acmList);
+ const parsedAcmList = [];
+
+ acmList.map((instance, index) => {
+
+ const acmObj = {
+ index,
+ name: instance['name'],
+ version: instance['version'],
+ orderedState: instance['orderedState'],
+ currentState: instance['state'],
+ disableDelete: instance['state'] !== 'UNINITIALISED'
+ }
+
+ parsedAcmList.push(acmObj);
+ });
+
+ return parsedAcmList;
+ },
+
+ makeSchemaForInstanceProperties: (instanceProps) => {
+ const instancePropsArray = Object.entries(instanceProps);
+
+ const newSchemaObject = {};
+
+ newSchemaObject.title = "InstanceProperties";
+ newSchemaObject.type = "object";
+ newSchemaObject.properties = {};
+
+ instancePropsArray.forEach(([key, value]) => {
+
+ const propertiesObject = {};
+
+ Object.entries(value.properties).forEach(([pKey, pValue]) => {
+ propertiesObject[pKey] = {
+ type: InstantiationUtils.getType(pValue.type)
+ }
+ });
+
+ newSchemaObject.properties[key] = {
+ options: {
+ "collapsed": true
+ },
+ properties: propertiesObject
+ }
+ });
+
+ return newSchemaObject;
+ },
+
+ parseJsonSchema: async (template, instanceProperties) => {
+ const fullTemplate = await template.json();
+
+ const filteredInitialValues = {};
+
+ const allInstanceProperties = await instanceProperties.json().then(properties => {
+ const filteredTemplateObj = {};
+ const propertiesTemplateArray = Object.entries(properties);
+
+ propertiesTemplateArray.forEach(([key, value]) => {
+ const propertiesObj = {
+ properties: value.properties
+ }
+
+ const propValues = {};
+ filteredTemplateObj[key] = propertiesObj;
+
+ const jsonNodeSchemaKey = fullTemplate.topology_template.node_templates[key]
+
+ Object.entries(propertiesObj.properties).forEach(([pKey, pValue]) => {
+ propValues[pKey] = jsonNodeSchemaKey.properties[pKey];
+ });
+
+ filteredInitialValues[key] = propValues;
+ });
+
+ return filteredTemplateObj;
+ });
+
+ const propertySchema = InstantiationUtils.makeSchemaForInstanceProperties(allInstanceProperties);
+
+ const jsonEditor = InstantiationUtils.createJsonEditor(propertySchema, filteredInitialValues);
+
+ return {
+ fullTemplate: fullTemplate,
+ jsonEditor: jsonEditor
+ }
+ },
+
+ getType: (pType) => {
+ switch (pType) {
+ case "map":
+ return "string";
+ case "string":
+ return "string";
+ case "integer":
+ return "integer";
+ case "list":
+ return "array";
+ case "object":
+ return "object";
+ default:
+ return "object";
+ }
+ },
+
+ createJsonEditor: (fullSchema, instanceProperties) => {
+ JSONEditor.defaults.options.collapse = true;
+
+ return new JSONEditor(document.getElementById("editor"),
+ {
+ schema: fullSchema,
+ startval: instanceProperties,
+ theme: 'bootstrap4',
+ iconlib: 'fontawesome5',
+ object_layout: 'normal',
+ disable_properties: false,
+ disable_edit_json: false,
+ disable_array_reorder: true,
+ disable_array_delete_last_row: true,
+ disable_array_delete_all_rows: false,
+ array_controls_top: true,
+ keep_oneof_values: false,
+ collapsed: true,
+ show_errors: 'always',
+ display_required_only: false,
+ show_opt_in: false,
+ prompt_before_delete: true,
+ required_by_default: false,
+ });
+ },
+
+ updateTemplate: (jsonEditorValues, fullTemplate) => {
+ const nodeTemplates = fullTemplate.topology_template.node_templates;
+ const instanceDataProperties = Object.entries(jsonEditorValues);
+
+ instanceDataProperties.forEach(([key, value]) => {
+ const nodeTemplatesKey = nodeTemplates[key]
+ Object.entries(value).forEach(([pKey, pValue]) => {
+ nodeTemplatesKey.properties[pKey] = pValue
+ });
+ });
+
+ fullTemplate.topology_template.node_templates = nodeTemplates;
+
+ return fullTemplate;
+ }
+}
+
+export default InstantiationUtils; \ No newline at end of file