From 93cfdf8876be9ad2c0249b11378fcbc016d17d80 Mon Sep 17 00:00:00 2001 From: Richard Killen Date: Fri, 3 Jun 2022 17:58:05 -0500 Subject: [PATCH 1/6] Add remote discovery switch to online dialog, disable domain home on change --- electron/app/locales/en/webui.json | 3 ++ webui/src/js/viewModels/discover-dialog.js | 9 +++- webui/src/js/views/discover-dialog.html | 56 +++++++++++++--------- 3 files changed, 43 insertions(+), 25 deletions(-) diff --git a/electron/app/locales/en/webui.json b/electron/app/locales/en/webui.json index 60fa647ef..3b8639578 100644 --- a/electron/app/locales/en/webui.json +++ b/electron/app/locales/en/webui.json @@ -859,6 +859,9 @@ "discover-dialog-admin-user-help": "The login user name for the Administration Server.", "discover-dialog-admin-password-label": "Administration Server Password", "discover-dialog-admin-password-help": "The login password for the Administration Server.", + "discover-dialog-remote-discovery-label": "Remote Discovery", + "discover-dialog-remote-discovery-help": "Discover without collecting archive artifacts", + "discover-dialog-domain-home-remote": "Domain home not required for remote discovery", "wdt-discoverer-replace-title": "Replace Existing Model Content", "wdt-discoverer-replace-message": "This will replace the project's existing model content, continue?", diff --git a/webui/src/js/viewModels/discover-dialog.js b/webui/src/js/viewModels/discover-dialog.js index 8d8ca5389..a0c9f3e83 100644 --- a/webui/src/js/viewModels/discover-dialog.js +++ b/webui/src/js/viewModels/discover-dialog.js @@ -1,13 +1,13 @@ /** * @license - * Copyright (c) 2021, Oracle and/or its affiliates. + * Copyright (c) 2021, 2022, Oracle and/or its affiliates. * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ */ 'use strict'; define(['accUtils', 'knockout', 'utils/i18n', 'ojs/ojarraydataprovider', 'models/wkt-project', 'utils/wdt-discoverer', 'ojs/ojknockout', 'ojs/ojinputtext', 'ojs/ojlabel', 'ojs/ojbutton', - 'ojs/ojdialog', 'ojs/ojformlayout', 'ojs/ojselectsingle', 'ojs/ojvalidationgroup'], + 'ojs/ojdialog', 'ojs/ojformlayout', 'ojs/ojselectsingle', 'ojs/ojvalidationgroup', 'ojs/ojswitch'], function(accUtils, ko, i18n, ArrayDataProvider, project, wdtDiscoverer) { function DiscoverDialogModel(config) { @@ -49,6 +49,11 @@ function(accUtils, ko, i18n, ArrayDataProvider, project, wdtDiscoverer) { this.adminUrl = ko.observable(); this.adminUser = ko.observable(); this.adminPassword = ko.observable(); + this.isRemote = ko.observable(); + + this.domainHomeHelp = ko.computed(() => { + return this.labelMapper(this.isRemote() ? 'domain-home-remote' : 'domain-home-help'); + }, this); this.wdtDomainTypes = [ { key: 'WLS', label: this.labelMapper('wls-domain-type-label') }, diff --git a/webui/src/js/views/discover-dialog.html b/webui/src/js/views/discover-dialog.html index 3411bc4ac..cb34cc6b3 100644 --- a/webui/src/js/views/discover-dialog.html +++ b/webui/src/js/views/discover-dialog.html @@ -1,5 +1,5 @@ @@ -10,20 +10,6 @@
- - - - - - - - + value="{{adminUser}}" + mask-icon="visible" + help.instruction="[[labelMapper('admin-user-help')]]" + required="true"> + value="{{adminPassword}}" + mask-icon="visible" + help.instruction="[[labelMapper('admin-password-help')]]" + required="true"> + + + + + + + + + +
From 9ead4f0d4b7725487fd0e2d39184bfdb6cb57b2c Mon Sep 17 00:00:00 2001 From: Richard Killen Date: Mon, 6 Jun 2022 17:12:10 -0500 Subject: [PATCH 2/6] Use view helper to open discover dialog --- webui/src/js/viewModels/discover-dialog.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/webui/src/js/viewModels/discover-dialog.js b/webui/src/js/viewModels/discover-dialog.js index a0c9f3e83..3007cbb6a 100644 --- a/webui/src/js/viewModels/discover-dialog.js +++ b/webui/src/js/viewModels/discover-dialog.js @@ -5,11 +5,12 @@ */ 'use strict'; -define(['accUtils', 'knockout', 'utils/i18n', 'ojs/ojarraydataprovider', 'models/wkt-project', +define(['accUtils', 'knockout', 'utils/i18n', 'utils/view-helper', 'ojs/ojarraydataprovider', 'models/wkt-project', 'utils/wdt-discoverer', 'ojs/ojknockout', 'ojs/ojinputtext', 'ojs/ojlabel', 'ojs/ojbutton', 'ojs/ojdialog', 'ojs/ojformlayout', 'ojs/ojselectsingle', 'ojs/ojvalidationgroup', 'ojs/ojswitch'], -function(accUtils, ko, i18n, ArrayDataProvider, project, wdtDiscoverer) { +function(accUtils, ko, i18n, viewHelper, ArrayDataProvider, project, wdtDiscoverer) { function DiscoverDialogModel(config) { + const DIALOG_SELECTOR = '#discoverDialog'; this.connected = () => { if(config['hide']) { @@ -18,11 +19,13 @@ function(accUtils, ko, i18n, ArrayDataProvider, project, wdtDiscoverer) { accUtils.announce('Discover dialog loaded.', 'assertive'); - // open the dialog after the current thread, which is loading this view model. + this.dialogContainer = $(DIALOG_SELECTOR)[0]; + + // open the dialog when the container is ready. // using oj-dialog initial-visibility="show" causes vertical centering issues. - setTimeout(function() { - $('#discoverDialog')[0].open(); - }, 1); + viewHelper.componentReady(this.dialogContainer).then(() => { + this.dialogContainer.open(); + }); }; this.labelMapper = (labelId, arg) => { @@ -87,7 +90,7 @@ function(accUtils, ko, i18n, ArrayDataProvider, project, wdtDiscoverer) { discoverConfig['adminPass'] = this.adminPassword(); } - $('#discoverDialog')[0].close(); + this.dialogContainer.close(); wdtDiscoverer.executeDiscover(discoverConfig, this.online).then(); } else { // show messages on all the components that have messages hidden. @@ -97,7 +100,7 @@ function(accUtils, ko, i18n, ArrayDataProvider, project, wdtDiscoverer) { }; this.cancelDiscover = () => { - $('#discoverDialog')[0].close(); + this.dialogContainer.close(); }; this.chooseDomainHome = () => { From ae53e753f886b5f0fb6b1adbf656394af404d760 Mon Sep 17 00:00:00 2001 From: Richard Killen Date: Tue, 7 Jun 2022 14:57:12 -0500 Subject: [PATCH 3/6] Require remote domain home for remote discovery --- electron/app/js/wdtDiscovery.js | 7 +++++- electron/app/locales/en/webui.json | 3 ++- webui/src/js/utils/wdt-discoverer.js | 27 +++++++++++++--------- webui/src/js/viewModels/discover-dialog.js | 7 +++++- webui/src/js/views/discover-dialog.html | 7 +++--- 5 files changed, 33 insertions(+), 18 deletions(-) diff --git a/electron/app/js/wdtDiscovery.js b/electron/app/js/wdtDiscovery.js index 67adc49cc..a7e5058af 100644 --- a/electron/app/js/wdtDiscovery.js +++ b/electron/app/js/wdtDiscovery.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, Oracle and/or its affiliates. + * Copyright (c) 2021, 2022, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ const path = require('path'); @@ -84,6 +84,11 @@ async function _runDiscover(targetWindow, discoverConfig, online) { argList.push('-variable_file'); argList.push(propertiesFile); + const isRemote = discoverConfig['isRemote']; + if (isRemote) { + argList.push('-remote'); + } + const env = {}; if (!process.env.JAVA_HOME) { env['JAVA_HOME'] = discoverConfig['javaHome']; diff --git a/electron/app/locales/en/webui.json b/electron/app/locales/en/webui.json index 3b8639578..857a096e2 100644 --- a/electron/app/locales/en/webui.json +++ b/electron/app/locales/en/webui.json @@ -861,7 +861,8 @@ "discover-dialog-admin-password-help": "The login password for the Administration Server.", "discover-dialog-remote-discovery-label": "Remote Discovery", "discover-dialog-remote-discovery-help": "Discover without collecting archive artifacts", - "discover-dialog-domain-home-remote": "Domain home not required for remote discovery", + "discover-dialog-domain-home-remote-help": "The directory of the domain to be discovered on the remote system", + "discover-dialog-domain-home-remote-label": "Remote Domain Home", "wdt-discoverer-replace-title": "Replace Existing Model Content", "wdt-discoverer-replace-message": "This will replace the project's existing model content, continue?", diff --git a/webui/src/js/utils/wdt-discoverer.js b/webui/src/js/utils/wdt-discoverer.js index 74ecb8eac..c939f3fc0 100644 --- a/webui/src/js/utils/wdt-discoverer.js +++ b/webui/src/js/utils/wdt-discoverer.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, Oracle and/or its affiliates. + * Copyright (c) 2021, 2022, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ 'use strict'; @@ -65,16 +65,21 @@ function (WdtActionsBase, ko, project, wktConsole, dialogHelper, projectIO, i18n return Promise.resolve(false); } - busyDialogMessage = i18n.t('flow-validate-domain-home-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 2/totalSteps); - const errContext = i18n.t('wdt-discoverer-invalid-domain-home-error-prefix'); - const domainHomeValidationResult = - await window.api.ipc.invoke('validate-domain-home', domainHomeDirectory, errContext); - if (!domainHomeValidationResult.isValid) { - const errMessage = domainHomeValidationResult.reason; - dialogHelper.closeBusyDialog(); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(false); + // for remote discovery, domain home is on the remote machine, + // so don't validate the directory + const isRemote = discoverConfig.isRemote; + if (!isRemote) { + busyDialogMessage = i18n.t('flow-validate-domain-home-in-progress'); + dialogHelper.updateBusyDialog(busyDialogMessage, 2/totalSteps); + const errContext = i18n.t('wdt-discoverer-invalid-domain-home-error-prefix'); + const domainHomeValidationResult = + await window.api.ipc.invoke('validate-domain-home', domainHomeDirectory, errContext); + if (!domainHomeValidationResult.isValid) { + const errMessage = domainHomeValidationResult.reason; + dialogHelper.closeBusyDialog(); + await window.api.ipc.invoke('show-error-message', errTitle, errMessage); + return Promise.resolve(false); + } } busyDialogMessage = i18n.t('flow-save-project-in-progress'); diff --git a/webui/src/js/viewModels/discover-dialog.js b/webui/src/js/viewModels/discover-dialog.js index 3007cbb6a..60134be6c 100644 --- a/webui/src/js/viewModels/discover-dialog.js +++ b/webui/src/js/viewModels/discover-dialog.js @@ -55,7 +55,11 @@ function(accUtils, ko, i18n, viewHelper, ArrayDataProvider, project, wdtDiscover this.isRemote = ko.observable(); this.domainHomeHelp = ko.computed(() => { - return this.labelMapper(this.isRemote() ? 'domain-home-remote' : 'domain-home-help'); + return this.labelMapper(this.isRemote() ? 'domain-home-remote-help' : 'domain-home-help'); + }, this); + + this.domainHomeLabel = ko.computed(() => { + return this.labelMapper(this.isRemote() ? 'domain-home-remote-label' : 'domain-home-label'); }, this); this.wdtDomainTypes = [ @@ -88,6 +92,7 @@ function(accUtils, ko, i18n, viewHelper, ArrayDataProvider, project, wdtDiscover discoverConfig['adminUrl'] = this.adminUrl(); discoverConfig['adminUser'] = this.adminUser(); discoverConfig['adminPass'] = this.adminPassword(); + discoverConfig['isRemote'] = this.isRemote(); } this.dialogContainer.close(); diff --git a/webui/src/js/views/discover-dialog.html b/webui/src/js/views/discover-dialog.html index cb34cc6b3..2ae01ec06 100644 --- a/webui/src/js/views/discover-dialog.html +++ b/webui/src/js/views/discover-dialog.html @@ -34,15 +34,14 @@ + required="true"> From de5e21a06dbd89ea931c46dc283a112d95be2753 Mon Sep 17 00:00:00 2001 From: Richard Killen Date: Tue, 7 Jun 2022 15:18:25 -0500 Subject: [PATCH 4/6] Remove read-only label update from domain home field --- webui/src/js/views/discover-dialog.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/webui/src/js/views/discover-dialog.html b/webui/src/js/views/discover-dialog.html index 2ae01ec06..dbd5202f8 100644 --- a/webui/src/js/views/discover-dialog.html +++ b/webui/src/js/views/discover-dialog.html @@ -33,8 +33,7 @@ help.instruction="[[labelMapper('remote-discovery-help')]]"> - From 3e10491f8d2f876916f5a6cc48e198fd446d0659 Mon Sep 17 00:00:00 2001 From: Richard Killen Date: Fri, 10 Jun 2022 13:16:05 -0500 Subject: [PATCH 5/6] Display discover results dialog when -remote is used --- electron/app/js/wdtDiscovery.js | 30 ++++++-- electron/app/locales/en/webui.json | 22 +++++- webui/src/css/app.css | 11 +++ webui/src/js/utils/wdt-discoverer.js | 5 ++ .../js/viewModels/discover-result-dialog.js | 72 +++++++++++++++++++ .../src/js/views/discover-result-dialog.html | 33 +++++++++ 6 files changed, 166 insertions(+), 7 deletions(-) create mode 100644 webui/src/js/viewModels/discover-result-dialog.js create mode 100644 webui/src/js/views/discover-result-dialog.html diff --git a/electron/app/js/wdtDiscovery.js b/electron/app/js/wdtDiscovery.js index a7e5058af..44100a697 100644 --- a/electron/app/js/wdtDiscovery.js +++ b/electron/app/js/wdtDiscovery.js @@ -13,6 +13,8 @@ const { getAbsolutePath, makeDirectoryIfNotExists } = require('./fsUtils'); const { getDiscoverDomainShellScript } = require('./wktTools'); const { getLogger } = require('./wktLogging'); const { sendToWindow } = require('./windowUtils'); +const { readFile } = require('fs/promises'); +const fsUtils = require('./fsUtils'); /* global process */ @@ -77,21 +79,31 @@ async function _runDiscover(targetWindow, discoverConfig, online) { argList.push(discoverConfig['adminPass']); } - argList.push('-archive_file'); - argList.push(archiveFile); + const isRemote = discoverConfig['isRemote']; + if (!isRemote) { + argList.push('-archive_file'); + argList.push(archiveFile); + } + argList.push('-model_file'); argList.push(modelFile); argList.push('-variable_file'); argList.push(propertiesFile); - const isRemote = discoverConfig['isRemote']; if (isRemote) { argList.push('-remote'); } - const env = {}; - if (!process.env.JAVA_HOME) { - env['JAVA_HOME'] = discoverConfig['javaHome']; + const env = { + JAVA_HOME: process.env.JAVA_HOME || discoverConfig['javaHome'] + }; + + let resultsDirectory = null; + let resultsFile = null; + if (isRemote) { + resultsDirectory = await fsUtils.createTemporaryDirectory(projectDir, 'discoverModel'); + resultsFile = path.join(resultsDirectory, 'result.json'); + env['__WLSDEPLOY_STORE_RESULT__'] = resultsFile; } let stdoutEventName = 'show-console-out-line'; @@ -119,6 +131,12 @@ async function _runDiscover(targetWindow, discoverConfig, online) { results.modelFileContent = await project.getModelFileContent(targetWindow, [relativeModelFile], [relativePropertiesFile], [relativeArchiveFile]); + + if(isRemote) { + const resultsText = await readFile(resultsFile, {encoding: 'utf8'}); + results.resultData = JSON.parse(resultsText); + await fsUtils.removeDirectoryRecursively(resultsDirectory); + } } catch (err) { results.isSuccess = false; results.reason = i18n.t('wdt-discovery-failed-error-message', { script: getDiscoverDomainShellScript(), error: errorUtils.getErrorMessage(err)}); diff --git a/electron/app/locales/en/webui.json b/electron/app/locales/en/webui.json index 857a096e2..39dafeccc 100644 --- a/electron/app/locales/en/webui.json +++ b/electron/app/locales/en/webui.json @@ -864,6 +864,9 @@ "discover-dialog-domain-home-remote-help": "The directory of the domain to be discovered on the remote system", "discover-dialog-domain-home-remote-label": "Remote Domain Home", + "discover-result-dialog-title": "Discover Domain Result", + "discover-result-dialog-archive-message": "The following files need to be collected from the remote system and placed in the archive file at the specified paths", + "wdt-discoverer-replace-title": "Replace Existing Model Content", "wdt-discoverer-replace-message": "This will replace the project's existing model content, continue?", "wdt-discoverer-online-aborted-error-title": "Discover Domain Online Aborted", @@ -1452,5 +1455,22 @@ "quickstart-page9-list4-item-2": "Code view provides a shell script that shows how you can automate the installation as well as the YAML resource definitions.", "quickstart-page9-list4-item-3": "The Install Ingress Controller and Update Ingress Routing buttons (and Go menu items) perform the necessary actions to install the ingress controller and update routes on an existing ingress controller.", - "quickstart-page10-title": "Verrazzano-Specific Sections" + "quickstart-page10-title": "Verrazzano-Specific Sections", + + "archive-type-APPLICATION_PLAN": "Application Plans", + "archive-type-APPLICATIONS": "Applications", + "archive-type-CLASSPATH_LIB": "Classpath Libraries", + "archive-type-COHERENCE": "Coherence Files", + "archive-type-COHERENCE_CONFIG": "Coherence Configurations", + "archive-type-COHERENCE_PERSISTENCE_DIR": "Coherence Persistence Directories", + "archive-type-DOMAIN_BIN": "Domain Binaries", + "archive-type-DOMAIN_LIB": "Domain Libraries", + "archive-type-FILE_STORE": "File Stores", + "archive-type-JMS_FOREIGN_SERVER": "JMS Foreign Servers", + "archive-type-MIME_MAPPING": "MIME Mappings", + "archive-type-NODE_MANAGER_KEY_STORE": "Node Manager Key Stores", + "archive-type-SCRIPTS": "Scripts", + "archive-type-SERVER_KEYSTORE": "Server Key Stores", + "archive-type-SHARED_LIBRARIES": "Shared Libraries", + "archive-type-SHLIB_PLAN": "Shared Library Plans" } diff --git a/webui/src/css/app.css b/webui/src/css/app.css index b9270f065..95314cdbf 100644 --- a/webui/src/css/app.css +++ b/webui/src/css/app.css @@ -371,6 +371,12 @@ h6:first-child { height: auto; } +.wkt-discover-result-dialog { + max-width: 1000px; + height: 85vh; + width: 85%; +} + .wkt-add-to-archive-dialog { width: 600px; height: auto; @@ -506,6 +512,11 @@ h6:first-child { height: 100%; } +.wkt-stacked-dialog-body { + display: flex; + flex-direction: column; +} + /* the oj-switcher in the code view should use the remaining height */ .wkt-code-view-switcher { min-height: 1px; diff --git a/webui/src/js/utils/wdt-discoverer.js b/webui/src/js/utils/wdt-discoverer.js index c939f3fc0..030a14982 100644 --- a/webui/src/js/utils/wdt-discoverer.js +++ b/webui/src/js/utils/wdt-discoverer.js @@ -110,6 +110,11 @@ function (WdtActionsBase, ko, project, wktConsole, dialogHelper, projectIO, i18n if (discoverResults.isSuccess) { wktLogger.debug('discover complete: %s', discoverResults.modelFileContent); project.wdtModel.setModelFiles(discoverResults.modelFileContent); + + if (isRemote) { + const options = { resultData: discoverResults.resultData }; + dialogHelper.openDialog('discover-result-dialog', options); + } return Promise.resolve(true); } else { let errMessage; diff --git a/webui/src/js/viewModels/discover-result-dialog.js b/webui/src/js/viewModels/discover-result-dialog.js new file mode 100644 index 000000000..08b420de6 --- /dev/null +++ b/webui/src/js/viewModels/discover-result-dialog.js @@ -0,0 +1,72 @@ +/** + * @license + * Copyright (c) 2022, Oracle and/or its affiliates. + * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ + */ +'use strict'; + +define(['accUtils', 'knockout', 'utils/i18n', 'utils/view-helper', + 'ojs/ojknockout', 'ojs/ojbutton', 'ojs/ojdialog'], +function(accUtils, ko, i18n, viewHelper) { + function DiscoverResultDialogModel(config) { + const DIALOG_SELECTOR = '#discoverResultDialog'; + + this.connected = () => { + accUtils.announce('Discover result dialog loaded.', 'assertive'); + + this.dialogContainer = $(DIALOG_SELECTOR)[0]; + + // open the dialog when the container is ready. + // using oj-dialog initial-visibility="show" causes vertical centering issues. + viewHelper.componentReady(this.dialogContainer).then(() => { + this.dialogContainer.open(); + }); + }; + + this.labelMapper = (labelId, arg) => { + if (arg) { + return i18n.t(`discover-result-dialog-${labelId}`, arg); + } + return i18n.t(`discover-result-dialog-${labelId}`); + }; + + this.anyLabelMapper = (labelId, arg) => { + if (arg) { + return i18n.t(labelId, arg); + } + return i18n.t(labelId); + }; + + // organize the archive entries by type + const resultData = config.resultData; + const missingArchiveEntries = resultData.missingArchiveEntries; + const archiveTypeMap = {}; + for(const entry of missingArchiveEntries) { + const archiveType = entry.type; + archiveTypeMap[archiveType] = archiveTypeMap[archiveType] || []; + archiveTypeMap[archiveType].push({ file: entry.sourceFile, path: entry.path }); + } + + // assemble the types into a list + this.archiveTypes = []; + for(const typeKey in archiveTypeMap) { + const labelKey = 'archive-type-' + typeKey; + const typeLabel = i18n.t(labelKey, typeKey); + this.archiveTypes.push({ type: typeLabel, entries: archiveTypeMap[typeKey]}); + } + + // sort archive types by resolved type name + this.archiveTypes.sort((a, b) => { + return a.type.localeCompare(b.type); + }); + + this.closeDialog = () => { + this.dialogContainer.close(); + }; + } + + /* + * Returns a constructor for the ViewModel. + */ + return DiscoverResultDialogModel; +}); diff --git a/webui/src/js/views/discover-result-dialog.html b/webui/src/js/views/discover-result-dialog.html new file mode 100644 index 000000000..580578911 --- /dev/null +++ b/webui/src/js/views/discover-result-dialog.html @@ -0,0 +1,33 @@ + + +
+ +
+
+ +
+ + + +
+
+ +
+ + + +
+
From d16a37dd9f3ccbff7b2f3f612000623633787eba Mon Sep 17 00:00:00 2001 From: Richard Killen Date: Fri, 10 Jun 2022 14:11:16 -0500 Subject: [PATCH 6/6] Use tables to show archive entry files and paths --- electron/app/locales/en/webui.json | 3 +++ .../js/viewModels/discover-result-dialog.js | 19 +++++++++++--- .../src/js/views/discover-result-dialog.html | 25 +++++++++++++------ 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/electron/app/locales/en/webui.json b/electron/app/locales/en/webui.json index 39dafeccc..eb21b9b72 100644 --- a/electron/app/locales/en/webui.json +++ b/electron/app/locales/en/webui.json @@ -866,6 +866,9 @@ "discover-result-dialog-title": "Discover Domain Result", "discover-result-dialog-archive-message": "The following files need to be collected from the remote system and placed in the archive file at the specified paths", + "discover-result-dialog-file-location-header": "File Location", + "discover-result-dialog-archive-path-header": "Archive Path", + "discover-result-dialog-archive-table-aria-label": "Archive Entries Table", "wdt-discoverer-replace-title": "Replace Existing Model Content", "wdt-discoverer-replace-message": "This will replace the project's existing model content, continue?", diff --git a/webui/src/js/viewModels/discover-result-dialog.js b/webui/src/js/viewModels/discover-result-dialog.js index 08b420de6..6eafe4d72 100644 --- a/webui/src/js/viewModels/discover-result-dialog.js +++ b/webui/src/js/viewModels/discover-result-dialog.js @@ -5,9 +5,9 @@ */ 'use strict'; -define(['accUtils', 'knockout', 'utils/i18n', 'utils/view-helper', - 'ojs/ojknockout', 'ojs/ojbutton', 'ojs/ojdialog'], -function(accUtils, ko, i18n, viewHelper) { +define(['accUtils', 'knockout', 'utils/i18n', 'utils/view-helper', 'ojs/ojarraydataprovider', + 'ojs/ojknockout', 'ojs/ojbutton', 'ojs/ojdialog', 'ojs/ojtable'], +function(accUtils, ko, i18n, viewHelper, ArrayDataProvider) { function DiscoverResultDialogModel(config) { const DIALOG_SELECTOR = '#discoverResultDialog'; @@ -52,7 +52,7 @@ function(accUtils, ko, i18n, viewHelper) { for(const typeKey in archiveTypeMap) { const labelKey = 'archive-type-' + typeKey; const typeLabel = i18n.t(labelKey, typeKey); - this.archiveTypes.push({ type: typeLabel, entries: archiveTypeMap[typeKey]}); + this.archiveTypes.push({ type: typeLabel, entries: new ArrayDataProvider(archiveTypeMap[typeKey]) }); } // sort archive types by resolved type name @@ -60,6 +60,17 @@ function(accUtils, ko, i18n, viewHelper) { return a.type.localeCompare(b.type); }); + this.typesColumnData = [ + { + 'headerText': this.labelMapper('file-location-header'), + 'sortProperty': 'file' + }, + { + 'headerText': this.labelMapper('archive-path-header'), + 'sortable': 'disable' + } + ]; + this.closeDialog = () => { this.dialogContainer.close(); }; diff --git a/webui/src/js/views/discover-result-dialog.html b/webui/src/js/views/discover-result-dialog.html index 580578911..b33f9fcdc 100644 --- a/webui/src/js/views/discover-result-dialog.html +++ b/webui/src/js/views/discover-result-dialog.html @@ -12,14 +12,25 @@