You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@daffodil.apache.org by ar...@apache.org on 2022/08/05 17:38:30 UTC

[daffodil-vscode] 26/28: attempt to get Typescript properly talking to Scala

This is an automated email from the ASF dual-hosted git repository.

arosien pushed a commit to branch daffodil-vscode-tdml
in repository https://gitbox.apache.org/repos/asf/daffodil-vscode.git

commit 1639d792290da14e05a9edea3682f6a9cb6542cd
Author: Michael Hoke <mi...@nteligen.com>
AuthorDate: Mon Aug 1 11:05:13 2022 -0400

    attempt to get Typescript properly talking to Scala
---
 package.json                                       |  5 +++
 .../org.apache.daffodil.debugger.dap/Parse.scala   |  9 ++--
 src/daffodilDebugger.ts                            | 11 +++--
 src/launchWizard/launchWizard.js                   | 50 +++++++++++++++++++++
 src/launchWizard/launchWizard.ts                   | 51 ++++++++++++++++++++++
 src/utils.ts                                       |  5 +--
 6 files changed, 118 insertions(+), 13 deletions(-)

diff --git a/package.json b/package.json
index 23f6552..cf0ada6 100644
--- a/package.json
+++ b/package.json
@@ -469,6 +469,11 @@
             "description": "Description of the TDML Test Case",
             "default": "${command:AskForTDMLDescription}"
           },
+          "tdmlPath": {
+            "type": "string",
+            "description": "Path to output for TDML file (req: tdmlAction=generate)",
+            "default": "${workspaceFolder}/infoset.tdml"
+          },
           "infosetOutputType": {
             "type": "string",
             "description": "Destination for final Infoset (file | 'console' | 'none')",
diff --git a/server/core/src/main/scala/org.apache.daffodil.debugger.dap/Parse.scala b/server/core/src/main/scala/org.apache.daffodil.debugger.dap/Parse.scala
index 0b60bca..4620b91 100644
--- a/server/core/src/main/scala/org.apache.daffodil.debugger.dap/Parse.scala
+++ b/server/core/src/main/scala/org.apache.daffodil.debugger.dap/Parse.scala
@@ -166,8 +166,9 @@ object Parse {
       lazy val (schemaPath: Path, dataPath: Path) =
         tdmlConfig
           .map {
-            case LaunchArgs.TDMLConfig(_, name, description, path) =>
-              TDMLWrapper.execute(defaultSchemaPath, defaultDataPath, name, description, path)
+            case LaunchArgs.TDMLConfig(action, name, description, path) =>
+              if (action == "execute")
+                TDMLWrapper.execute(defaultSchemaPath, defaultDataPath, name, description, path)
           }
           .getOrElse(defaultSchemaPath -> defaultDataPath)
 
@@ -282,9 +283,7 @@ object Parse {
   val dataDumpSource = DAPodil.Source(Paths.get("data"), Some(DAPodil.Source.Ref(2)))
 
   def debugee(request: Request): EitherNel[String, Resource[IO, DAPodil.Debugee]] =
-    Debugee.LaunchArgs
-      .parse(request.arguments)
-      .map(debugee)
+    Debugee.LaunchArgs.parse(request.arguments).map(debugee)
 
   def debugee(args: Debugee.LaunchArgs): Resource[IO, DAPodil.Debugee] =
     for {
diff --git a/src/daffodilDebugger.ts b/src/daffodilDebugger.ts
index f0482d3..7ff0dd4 100644
--- a/src/daffodilDebugger.ts
+++ b/src/daffodilDebugger.ts
@@ -186,14 +186,17 @@ export async function getDebugger(
       }
 
       if (config.tdmlConfig.action !== 'none') {
-        if (config.tdmlName === '') {
-          config.tdmlName = await vscode.commands.executeCommand(
+        if (
+          typeof config.tdmlConfig.name !== 'undefined' &&
+          config.tdmlConfig.name === ''
+        ) {
+          config.tdmlConfig.name = await vscode.commands.executeCommand(
             'extension.dfdl-debug.getTDMLName'
           )
         }
 
-        if (config.tdmlDescription === '') {
-          config.tdmlDescription = await vscode.commands.executeCommand(
+        if (config.tdmlConfig.description === '') {
+          config.tdmlConfig.description = await vscode.commands.executeCommand(
             'extension.dfdl-debug.getTDMLDescription'
           )
         }
diff --git a/src/launchWizard/launchWizard.js b/src/launchWizard/launchWizard.js
index 25c9b14..4469aca 100644
--- a/src/launchWizard/launchWizard.js
+++ b/src/launchWizard/launchWizard.js
@@ -56,6 +56,31 @@ function updateInfosetOutputType() {
   }
 }
 
+// Function to update select TDML action
+function updateTDMLAction() {
+  var tdmlSelectionBox = document.getElementById('tdmlAction')
+  var tdmlSelectedValue =
+    tdmlSelectionBox.options[tdmlSelectionBox.selectedIndex].value
+
+  if (tdmlSelectedValue !== 'none') {
+    document.getElementById('tdmlNameLabel').style =
+      'margin-top: 10px; visibility: visible;'
+    document.getElementById('tdmlDescriptionLabel').style =
+      'margin-top: 10px; visibility: visible;'
+  } else {
+    document.getElementById('tdmlNameLabel').style = 'visibility: hidden;'
+    document.getElementById('tdmlDescriptionLabel').style =
+      'visibility: hidden;'
+  }
+
+  if (tdmlSelectedValue === 'generate') {
+    document.getElementById('tdmlPath').style =
+      'margin-top: 10px; visibility: visible;'
+  } else {
+    document.getElementById('tdmlPath').style = 'visibility: hidden;'
+  }
+}
+
 // Function to update config selected, also display name input box if 'New Config' selected
 function updateSelectedConfig() {
   var configSelectionBox = document.getElementById('configSelected')
@@ -101,6 +126,10 @@ function save() {
     'infosetOutputFilePath'
   ).value
   const infosetOutputType = document.getElementById('infosetOutputType').value
+  const tdmlAction = document.getElementById('tdmlAction').value
+  const tdmlName = document.getElementById('tdmlName').value
+  const tdmlDescription = document.getElementById('tdmlDescription').value
+  const tdmlPath = document.getElementById('tdmlPath').value
   const openHexView = document.getElementById('openHexView').checked
   const openInfosetDiffView = document.getElementById(
     'openInfosetDiffView'
@@ -125,6 +154,12 @@ function save() {
           type: infosetOutputType,
           path: infosetOutputFilePath,
         },
+        tdmlConfig: {
+          action: tdmlAction,
+          name: tdmlName,
+          description: tdmlDescription,
+          path: tdmlPath,
+        },
         trace: trace,
         stopOnEntry: stopOnEntry,
         useExistingServer: useExistingServer,
@@ -157,6 +192,20 @@ function updateConfigValues(config) {
   ]
     ? config.infosetOutput['type']
     : config.infosetOutputType
+  document.getElementById('tdmlAction').value = config.tdmlConfig['action']
+    ? config.tdmlConfig['action']
+    : config.tdmlAction
+  document.getElementById('tdmlName').value = config.tdmlConfig['name']
+    ? config.tdmlConfig['name']
+    : config.tdmlName
+  document.getElementById('tdmlDescription').value = config.tdmlConfig[
+    'description'
+  ]
+    ? config.tdmlConfig['description']
+    : config.tdmlDescription
+  document.getElementById('tdmlPath').value = config.tdmlConfig['path']
+    ? config.tdmlConfig['path']
+    : config.tdmlPath
   document.getElementById('openHexView').checked = config.openHexView
   document.getElementById('openInfosetDiffView').checked =
     config.openInfosetDiffView
@@ -167,6 +216,7 @@ function updateConfigValues(config) {
   document.getElementById('useExistingServer').checked =
     config.useExistingServer
   updateInfosetOutputType()
+  updateTDMLAction()
 }
 
 // Function for updating the classpath input box
diff --git a/src/launchWizard/launchWizard.ts b/src/launchWizard/launchWizard.ts
index f49eb5c..2770af6 100644
--- a/src/launchWizard/launchWizard.ts
+++ b/src/launchWizard/launchWizard.ts
@@ -355,6 +355,37 @@ class LaunchWizard {
       }
     })
 
+    let tdmlActionSelect = ''
+    let tdmlActions = ['none', 'generate', 'append', 'execute']
+    let tdmlAction = defaultValues.tdmlConfig['action']
+      ? defaultValues.tdmlConfig['type']
+      : defaultValues.tdmlAction
+    let tdmlName = defaultValues.tdmlConfig['name']
+      ? defaultValues.tdmlConfig['name']
+      : defaultValues.tdmlName
+    let tdmlDescription = defaultValues.tdmlConfig['description']
+      ? defaultValues.tdmlConfig['description']
+      : defaultValues.tdmlDescription
+    let tdmlPath = defaultValues.tdmlConfig['path']
+      ? defaultValues.tdmlConfig['path']
+      : defaultValues.tdmlPath
+    let tdmlNameDesVisOrHiddenStyle =
+      tdmlAction !== 'none'
+        ? 'margin-top: 10px; visibility: visible;'
+        : 'visibility: hidden'
+    let tdmlPathVisOrHiddenStyle =
+      tdmlAction === 'generate'
+        ? 'margin-top: 10px; visibility: visible;'
+        : 'visibility: hidden'
+
+    tdmlActions.forEach((action) => {
+      if (action === tdmlAction) {
+        tdmlActionSelect += `<option selected value="${action}">${action}</option>`
+      } else {
+        tdmlActionSelect += `<option value="${action}">${action}</option>`
+      }
+    })
+
     return `
   <!DOCTYPE html>
   <html lang="en">
@@ -466,6 +497,26 @@ class LaunchWizard {
         </label>
       </div>
 
+      <div id="tdmlActionDiv" class="setting-div">
+        <p>TDML Action:</p>
+        <p class="setting-description">TDML Action (none | generate | append | execute)</p>
+        <select onChange="updateTDMLAction()" class="file-input" style="width: 200px;" id="tdmlAction">
+          ${tdmlActionSelect}
+        </select>
+
+        <p id="tdmlNameLabel" style="${tdmlNameDesVisOrHiddenStyle}" class="setting-description">
+          TDML Name: <input class="setting-div" value="${tdmlName}" id="tdmlName">
+        </p>
+
+        <p id="tdmlDescriptionLabel" style="${tdmlNameDesVisOrHiddenStyle}" class="setting-description">
+          TDML Description: <input class="setting-div" value="${tdmlDescription}" id="tdmlDescription">
+        </p>
+
+        <p id="tdmlPathLabel" style="${tdmlPathVisOrHiddenStyle}" class="file-input">
+          TDML File Path: <input class="file-input" value="${tdmlPath}" id="tdmlPath">
+        </p>
+      </div>
+
       <div id="programDiv" class="setting-div">
         <p>Program:</p>
         <p class="setting-description">Absolute path to the DFDL schema file.</p>
diff --git a/src/utils.ts b/src/utils.ts
index 5c5690d..dba985f 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -119,10 +119,7 @@ export function getConfig(
             'tdmlDescription',
             'Generated by DFDL VSCode Extension'
           ),
-          path: defaultConf.get(
-            'tdmlConfigPath',
-            '${workspaceFolder}/infoset.tdml'
-          ),
+          path: defaultConf.get('tdmlPath', '${workspaceFolder}/infoset.tdml'),
         },
     stopOnEntry: stopOnEntry
       ? stopOnEntry