diff --git a/src/test/resources/data/foret/multiyaml/configuration.yaml b/src/test/resources/data/foret/multiyaml/configuration.yaml index 0b6ba88572ac9f43490140297f8abcb85361b8ad..e05d84efad45336610cffd445fb21e5f21fc9b2b 100644 --- a/src/test/resources/data/foret/multiyaml/configuration.yaml +++ b/src/test/resources/data/foret/multiyaml/configuration.yaml @@ -225,455 +225,4 @@ dataTypes: - header: Time boundTo: variable: date - component: time - internationalizationName: - fr: Tension de l'eau infra-journalière - en: Infra-daily tension water - repository: - toto: test - template: - SMP_([0-9]*)_([0-9]*): - variables: - - variable - - profondeur - - répétition - boundToComponent : value - dataGroups: - SMP: - label: "variables" - data: - - ${variable} - data: - ${variable}: - components: - variable: - defaultValue: return "SMP" - checker: - name: Reference - params: - refType: variables - required: true - codify: true - value: - checker: - name: Float - params: - required: false - unit: - defaultValue: return "kilopascal" - checker: - name: Reference - params: - refType: unites - required: true - codify: true - profondeur: - defaultValue: return "${profondeur}" - checker: - name: Float - params: - required: false - repetition: - defaultValue: return "${répétition}" - checker: - name: Integer - params: - required: false - authorization: - authorizationScopes: - localization: - variable: localization - component: zones_etudes - timeScope: - variable: date - component: datetime - dataGroups: - informations: - label: "Informations" - data: - - informations - referentiel: - label: "Référentiel" - data: - - localization - date: - label: "date" - data: - - date - data: - localization: - components: - zones_etudes_parent: - checker: - name: Reference - params: - codify: true - refType: zones_etudes - required: false - zones_etudes: - checker: - name: Reference - params: - groovy: > - String parent = datumByVariableAndComponent.localization.zones_etudes_parent; - String nom = datumByVariableAndComponent.localization.zones_etudes; - String hierarchicalKey = ""; - if ("".equals(nom)){ - hierarchicalKey = fr.inra.oresing.rest.OreSiService.escapeKeyComponent(parent); - }else{ - parent = fr.inra.oresing.rest.OreSiService.escapeKeyComponent(parent) - nom = fr.inra.oresing.rest.OreSiService.escapeKeyComponent(nom) - hierarchicalKey = String.format("%s.%s__%s", parent, parent, nom) - } - - return references - .find{it.key.equals("zones_etudes")}.value - .find {it.hierarchicalKey.equals(hierarchicalKey)} .hierarchicalKey - references: zones_etudes - codify: true - refType: zones_etudes - required: true - informations: - components: - thematic: - defaultValue: return "climat du sol" - checker: - name: Reference - params: - refType: themes - codify: true - frequency: - checker: - name: RegularExpression - params: - pattern: infrajournalier - required: true - codify: true - start date: - checker: - name: Date - params: - pattern: dd/MM/yyyy - end date: - checker: - name: Date - params: - pattern: dd/MM/yyyy - comment: null - profondeur max: - checker: - name: Float - params: - required: true - nombre de repetition max: - checker: - name: Integer - params: - required: true - date: - components: - day: - checker: - name: Date - params: - pattern: dd/MM/yyyy - time: - checker: - name: Date - params: - pattern: HH:mm - datetime: - defaultValue: > - return datumByVariableAndComponent.get("date").get("day") +" " +datumByVariableAndComponent.get("date").get("time")+ ":00" - checker: - name: Date - params: - pattern: "dd/MM/yyyy HH:mm:ss" - duration: "1 MINUTES" - format: - constants: - - rowNumber: 1 - columnNumber: 2 - boundTo: - variable: localization - component: zones_etudes_parent - exportHeader: zones_etudes_parent - - rowNumber: 1 - columnNumber: 3 - boundTo: - variable: localization - component: zones_etudes - exportHeader: zones_etudes - - rowNumber: 3 - columnNumber: 2 - boundTo: - variable: informations - component: frequency - exportHeader: frequency - - rowNumber: 4 - columnNumber: 2 - boundTo: - variable: informations - component: start date - exportHeader: start date - - rowNumber: 5 - columnNumber: 2 - boundTo: - variable: informations - component: end date - exportHeader: end date - - rowNumber: 6 - columnNumber: 2 - boundTo: - variable: informations - component: comment - exportHeader: comment - - rowNumber: 7 - columnNumber: 2 - boundTo: - variable: informations - component: "profondeur max" - exportHeader: "profondeur max" - - rowNumber: 8 - columnNumber: 2 - boundTo: - variable: informations - component: "nombre de repetition max" - exportHeader: "nombre de repetition max" - headerLine: 10 - firstRowLine: 13 - columns: - - header: Date - boundTo: - variable: date - component: day - - header: Time - boundTo: - variable: date - component: time - gwd_infraj: - internationalizationName: - fr: Profondeur de la nappe infra-journalière - en: Infra-daily depth of the groundwater - repository: - toto: test - template: - GWD_([0-9]*)_([0-9]*): - variables: - - variable - - profondeur - - répétition - boundToComponent : value - dataGroups: - GWD: - label: "variables" - data: - - ${variable} - data: - ${variable}: - components: - variable: - defaultValue: return "GWD" - checker: - name: Reference - params: - refType: variables - required: true - codify: true - value: - checker: - name: Float - params: - required: false - unit: - defaultValue: return "degre celcius" - checker: - name: Reference - params: - refType: unites - required: true - codify: true - profondeur: - defaultValue: return "${profondeur}" - checker: - name: Float - params: - required: false - repetition: - defaultValue: return "${répétition}" - checker: - name: Integer - params: - required: false - authorization: - authorizationScopes: - localization: - variable: localization - component: zones_etudes - timeScope: - variable: date - component: datetime - dataGroups: - informations: - label: "Informations" - data: - - informations - referentiel: - label: "Référentiel" - data: - - localization - date: - label: "date" - data: - - date - data: - localization: - components: - zones_etudes_parent: - checker: - name: Reference - params: - codify: true - refType: zones_etudes - required: false - zones_etudes: - checker: - name: Reference - params: - groovy: > - String parent = datumByVariableAndComponent.localization.zones_etudes_parent; - String nom = datumByVariableAndComponent.localization.zones_etudes; - String hierarchicalKey = ""; - if ("".equals(nom)){ - hierarchicalKey = fr.inra.oresing.rest.OreSiService.escapeKeyComponent(parent); - }else{ - parent = fr.inra.oresing.rest.OreSiService.escapeKeyComponent(parent) - nom = fr.inra.oresing.rest.OreSiService.escapeKeyComponent(nom) - hierarchicalKey = String.format("%s.%s__%s", parent, parent, nom) - } - - return references - .find{it.key.equals("zones_etudes")}.value - .find {it.hierarchicalKey.equals(hierarchicalKey)} .hierarchicalKey - references: zones_etudes - codify: true - refType: zones_etudes - required: true - informations: - components: - thematic: - defaultValue: return "climat du sol" - checker: - name: Reference - params: - refType: themes - codify: true - frequency: - checker: - name: RegularExpression - params: - pattern: infrajournalier - required: true - codify: true - start date: - checker: - name: Date - params: - pattern: dd/MM/yyyy - end date: - checker: - name: Date - params: - pattern: dd/MM/yyyy - comment: null - profondeur max: - checker: - name: Float - params: - required: true - nombre de repetition max: - checker: - name: Integer - params: - required: true - date: - components: - day: - checker: - name: Date - params: - pattern: dd/MM/yyyy - time: - checker: - name: Date - params: - pattern: HH:mm - datetime: - defaultValue: > - return datumByVariableAndComponent.get("date").get("day") +" " +datumByVariableAndComponent.get("date").get("time")+ ":00" - checker: - name: Date - params: - pattern: "dd/MM/yyyy HH:mm:ss" - duration: "1 MINUTES" - format: - constants: - - rowNumber: 1 - columnNumber: 2 - boundTo: - variable: localization - component: zones_etudes_parent - exportHeader: zones_etudes_parent - - rowNumber: 1 - columnNumber: 3 - boundTo: - variable: localization - component: zones_etudes - exportHeader: zones_etudes - - rowNumber: 3 - columnNumber: 2 - boundTo: - variable: informations - component: frequency - exportHeader: frequency - - rowNumber: 4 - columnNumber: 2 - boundTo: - variable: informations - component: start date - exportHeader: start date - - rowNumber: 5 - columnNumber: 2 - boundTo: - variable: informations - component: end date - exportHeader: end date - - rowNumber: 6 - columnNumber: 2 - boundTo: - variable: informations - component: comment - exportHeader: comment - - rowNumber: 7 - columnNumber: 2 - boundTo: - variable: informations - component: "profondeur max" - exportHeader: "profondeur max" - - rowNumber: 8 - columnNumber: 2 - boundTo: - variable: informations - component: "nombre de repetition max" - exportHeader: "nombre de repetition max" - headerLine: 10 - firstRowLine: 13 - columns: - - header: Date - boundTo: - variable: date - component: day - - header: Time - boundTo: - variable: date - component: time \ No newline at end of file + component: tim \ No newline at end of file diff --git a/src/test/resources/data/foret/multiyaml/multiyaml.zip b/src/test/resources/data/foret/multiyaml/multiyaml.zip index 7b5fb00fc71904e025e08c53f6d218cf73ffbada..454a52b3462bd9c3e43d0f42e7252914a0cd581e 100644 Binary files a/src/test/resources/data/foret/multiyaml/multiyaml.zip and b/src/test/resources/data/foret/multiyaml/multiyaml.zip differ diff --git a/ui/package-lock.json b/ui/package-lock.json index 12ac7cb4e7320ba108cf05c595a65f81e6aabd7b..ae3ffdb40605e16bd76a563cb9dd334e7843e509 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -15,6 +15,8 @@ "chart.js": "^2.9.4", "core-js": "^3.17.1", "husky": "^6.0.0", + "js-yaml": "^4.1.0", + "jszip": "^3.7.1", "sortablejs": "^1.14.0", "vee-validate": "^3.4.12", "vue": "^2.6.14", @@ -3848,8 +3850,7 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/arr-diff": { "version": "4.0.0", @@ -6044,8 +6045,7 @@ "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cosmiconfig": { "version": "5.2.1", @@ -9871,6 +9871,11 @@ "node": ">= 4" } }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, "node_modules/import-cwd": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", @@ -10025,8 +10030,7 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "2.0.0", @@ -10717,8 +10721,7 @@ "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "node_modules/isexe": { "version": "2.0.0", @@ -10784,7 +10787,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -10931,6 +10933,17 @@ "verror": "1.10.0" } }, + "node_modules/jszip": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", + "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, "node_modules/killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -11002,6 +11015,14 @@ "node": ">= 0.8.0" } }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -12933,8 +12954,7 @@ "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "node_modules/parallel-transform": { "version": "1.2.0", @@ -13990,8 +14010,7 @@ "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/progress": { "version": "2.0.3", @@ -14319,7 +14338,6 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -14886,8 +14904,7 @@ "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safe-regex": { "version": "1.1.0", @@ -15387,6 +15404,14 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, + "node_modules/set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -16187,7 +16212,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -17420,8 +17444,7 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "node_modules/util.promisify": { "version": "1.0.0", @@ -22304,8 +22327,7 @@ "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "arr-diff": { "version": "4.0.0", @@ -24062,8 +24084,7 @@ "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cosmiconfig": { "version": "5.2.1", @@ -27052,6 +27073,11 @@ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, "import-cwd": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", @@ -27172,8 +27198,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "2.0.0", @@ -27668,8 +27693,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", @@ -27726,7 +27750,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "requires": { "argparse": "^2.0.1" } @@ -27845,6 +27868,17 @@ "verror": "1.10.0" } }, + "jszip": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", + "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -27906,6 +27940,14 @@ "type-check": "~0.3.2" } }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "requires": { + "immediate": "~3.0.5" + } + }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -29420,8 +29462,7 @@ "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "parallel-transform": { "version": "1.2.0", @@ -30317,8 +30358,7 @@ "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "progress": { "version": "2.0.3", @@ -30595,7 +30635,6 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -31051,8 +31090,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex": { "version": "1.1.0", @@ -31462,6 +31500,11 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -32145,7 +32188,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -33133,8 +33175,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util.promisify": { "version": "1.0.0", @@ -34686,4 +34727,4 @@ } } } -} \ No newline at end of file +} diff --git a/ui/package.json b/ui/package.json index bf80a685ce366f0a375601ca6e855b4a17677efe..4576dfc4541de1ca956eb6632202970a9e080f55 100644 --- a/ui/package.json +++ b/ui/package.json @@ -17,6 +17,8 @@ "chart.js": "^2.9.4", "core-js": "^3.17.1", "husky": "^6.0.0", + "js-yaml": "^4.1.0", + "jszip": "^3.7.1", "sortablejs": "^1.14.0", "vee-validate": "^3.4.12", "vue": "^2.6.14", @@ -59,4 +61,4 @@ "prettier --list-different" ] } -} \ No newline at end of file +} diff --git a/ui/src/views/application/ApplicationCreationView.vue b/ui/src/views/application/ApplicationCreationView.vue index 00581b88d811925fdea4fbac7006fb62ec76478d..ab438d634f581df8dbf2a8a2137e001fa29aa6f1 100644 --- a/ui/src/views/application/ApplicationCreationView.vue +++ b/ui/src/views/application/ApplicationCreationView.vue @@ -44,7 +44,9 @@ 'is-success': valid, }" > - <b-upload v-model="applicationConfig.file" class="file-label" accept=".yaml, .zip"> + <b-upload v-model="applicationConfig.file" class="file-label" accept=".yaml, .zip" + @input="loadingFile" + > <span class="file-cta"> <b-icon class="file-icon" icon="upload"></b-icon> <span class="file-label">{{ $t("applications.chose-config") }}</span> @@ -52,6 +54,10 @@ <span class="file-name" v-if="applicationConfig.file"> {{ applicationConfig.file.name }} </span> + <span class="file-name" v-if="currentYaml.application"> + Version : {{ currentYaml.application.version }} + Name : {{ currentYaml.application.name }} + </span> </b-upload> </b-field> </ValidationProvider> @@ -99,6 +105,9 @@ import { ApplicationService } from "@/services/rest/ApplicationService"; import { AlertService } from "@/services/AlertService"; import { ErrorsService } from "@/services/ErrorsService"; import { HttpStatusCodes } from "@/utils/HttpUtils"; +import JSYaml from "js-yaml"; +var JSZip = require("jszip"); + @Component({ components: { PageView, ValidationObserver, ValidationProvider }, @@ -111,7 +120,9 @@ export default class ApplicationCreationView extends Vue { applicationConfig = new ApplicationConfig(); errorsMessages = []; comment = ""; - + currentYaml=""; + completeFile = {}; + JSZip = new JSZip(); async createApplication() { this.errorsMessages = []; try { @@ -157,5 +168,75 @@ export default class ApplicationCreationView extends Vue { this.alertService.toastServerError(error); } } + loadingFile(inputfile){ + var zip = this.JSZip; + if(inputfile.type=="application/zip"){ + zip.loadAsync(inputfile); + zip.loadAsync( inputfile /* = file blob */) + .then(zipFiles=>this.compile(zipFiles )); + }else { + inputfile.text().then(this.readFile) + } + } + + compile(zipFiles){ + this.currentYaml = {}; + for (const filePath in zipFiles.files) { + this.readNode(filePath, zipFiles.files[filePath]) + } + } + readNode(filePath, unzippedFile) { + var name = unzippedFile.name + if (name.match('.*.yaml')) { + this.JSZip.file(name).async('blob').then(node => this.addZipNode(node, name)); + } + } + readBlob(file, name){ + var split = name.split('/'); + try { + var yaml = JSYaml.load(file); + var obj = split + .reverse() + .map(s=>s.replace('.yaml', '')) + .reduce((acc, pathName)=>{ + var obj = {}; + obj[pathName] = acc + return "configuration.yaml"==name?acc:obj + }, yaml) + this.mergeDeep(obj, this.currentYaml) + this.currentYaml = obj + }catch (e) { + console.log(e) + } + } + isObject(item) { + return (item && typeof item === 'object' && !Array.isArray(item)); + } + mergeDeep(target, ...sources) { + if (!sources.length) return target; + const source = sources.shift(); + + if (this.isObject(target) && this.isObject(source)) { + for (const key in source) { + if (this.isObject(source[key])) { + if (!target[key]) Object.assign(target, {[key]: {}}); + this.mergeDeep(target[key], source[key]); + } else { + Object.assign(target, {[key]: source[key]}); + } + } + } + } + addZipNode( blob, name){ + blob.text().then((file)=>this.readBlob(file, name)); + } + readFile(file){ + try { + var yaml = JSYaml.load(file) + this.currentYaml = yaml + } catch (e) { + console.log( e); + } + } } -</script> +</script> \ No newline at end of file