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

SvenO3 pushed a commit to branch 
remove-groovy-support-from-adapter-script-transformation
in repository https://gitbox.apache.org/repos/asf/streampipes.git

commit 7ed9d3fa0362dad092e7d424488b23540d8985c5
Author: Sven Oehler <[email protected]>
AuthorDate: Mon Jun 29 15:26:56 2026 +0200

    Add script language validation
---
 .../management/management/GuessManagement.java     |  2 +-
 .../transformer/api/TransformationEngines.java     | 26 ++++++++++++++++++++++
 .../connect/AdapterWorkerManagement.java           | 13 +++++++++++
 3 files changed, 40 insertions(+), 1 deletion(-)

diff --git 
a/streampipes-connect-management/src/main/java/org/apache/streampipes/connect/management/management/GuessManagement.java
 
b/streampipes-connect-management/src/main/java/org/apache/streampipes/connect/management/management/GuessManagement.java
index 1cbde82a00..700ad4e0ac 100644
--- 
a/streampipes-connect-management/src/main/java/org/apache/streampipes/connect/management/management/GuessManagement.java
+++ 
b/streampipes-connect-management/src/main/java/org/apache/streampipes/connect/management/management/GuessManagement.java
@@ -131,7 +131,7 @@ public class GuessManagement {
           throw new AdapterException("No samples available to transform");
         }
 
-      } catch (ScriptCompilationException | ScriptExecutionException e) {
+      } catch (ScriptCompilationException | ScriptExecutionException | 
IllegalArgumentException e) {
         throw new AdapterException(String.format("Could not execute script: 
%s", e.getMessage()));
       }
     }
diff --git 
a/streampipes-connect-transformer-api/src/main/java/org/apache/streampipes/connect/transformer/api/TransformationEngines.java
 
b/streampipes-connect-transformer-api/src/main/java/org/apache/streampipes/connect/transformer/api/TransformationEngines.java
index 99b2a8863c..01ee009441 100644
--- 
a/streampipes-connect-transformer-api/src/main/java/org/apache/streampipes/connect/transformer/api/TransformationEngines.java
+++ 
b/streampipes-connect-transformer-api/src/main/java/org/apache/streampipes/connect/transformer/api/TransformationEngines.java
@@ -24,6 +24,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Supplier;
+import java.util.stream.Collectors;
 
 public enum TransformationEngines {
 
@@ -36,9 +37,16 @@ public enum TransformationEngines {
   }
 
   public TransformationEngine getTransformationEngine(String language) {
+    validateSupportedLanguage(language);
     return transformationEngines.get(language).get();
   }
 
+  public void validateSupportedLanguage(String language) {
+    if (!transformationEngines.containsKey(language)) {
+      throw new IllegalArgumentException(unsupportedLanguageMessage(language));
+    }
+  }
+
   public List<ScriptMetadata> getAvailableEngineMetadata() {
     return transformationEngines
         .values()
@@ -46,4 +54,22 @@ public enum TransformationEngines {
         .map(transformationEngineSupplier -> 
transformationEngineSupplier.get().metadata())
         .toList();
   }
+
+  private String unsupportedLanguageMessage(String language) {
+    var requestedLanguage = language == null || language.isBlank()
+        ? "missing"
+        : "'" + language + "'";
+
+    var supportedLanguages = transformationEngines.keySet()
+        .stream()
+        .sorted()
+        .collect(Collectors.joining(", "));
+
+    var message = "Unsupported script transformation language " + 
requestedLanguage + ". ";
+    if (supportedLanguages.isBlank()) {
+      return message + "No script transformation languages are available.";
+    }
+
+    return message + "Supported languages: " + supportedLanguages + ".";
+  }
 }
diff --git 
a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/AdapterWorkerManagement.java
 
b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/AdapterWorkerManagement.java
index 3b495a3cb8..f3d17fd20e 100644
--- 
a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/AdapterWorkerManagement.java
+++ 
b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/AdapterWorkerManagement.java
@@ -19,6 +19,7 @@
 package org.apache.streampipes.extensions.management.connect;
 
 import org.apache.streampipes.commons.exceptions.connect.AdapterException;
+import org.apache.streampipes.connect.transformer.api.TransformationEngines;
 import org.apache.streampipes.extensions.api.connect.StreamPipesAdapter;
 import 
org.apache.streampipes.extensions.api.connect.context.IAdapterRuntimeContext;
 import org.apache.streampipes.extensions.api.monitoring.SpMonitoringManager;
@@ -58,6 +59,7 @@ public class AdapterWorkerManagement {
 
     if (adapter.isPresent()) {
       var newAdapterInstance = 
adapter.get().declareConfig().getSupplier().get();
+      validateScriptLanguage(adapterDescription);
       runningAdapterInstances.addAdapter(
           adapterDescription.getElementId(),
           newAdapterInstance,
@@ -102,6 +104,17 @@ public class AdapterWorkerManagement {
     return new AdapterContextGenerator().makeRuntimeContext(adapterInstanceId);
   }
 
+  private void validateScriptLanguage(AdapterDescription adapterDescription) 
throws AdapterException {
+    var transformationConfig = adapterDescription.getTransformationConfig();
+    if (transformationConfig != null && transformationConfig.isScriptActive()) 
{
+      try {
+        
TransformationEngines.INSTANCE.validateSupportedLanguage(transformationConfig.getLanguage());
+      } catch (IllegalArgumentException e) {
+        throw new AdapterException(e.getMessage(), e);
+      }
+    }
+  }
+
   private void resetMonitoring(String elementId) {
     SpMonitoringManager.INSTANCE.reset(elementId);
   }

Reply via email to