This is an automated email from the ASF dual-hosted git repository.
cdeppisch pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 95dbe389508 chore(camel-jbang): Kubernetes export of current directory
95dbe389508 is described below
commit 95dbe3895089539132f80580d391d405e2000f1e
Author: Christoph Deppisch <[email protected]>
AuthorDate: Thu Sep 5 09:09:06 2024 +0200
chore(camel-jbang): Kubernetes export of current directory
- Allow Kubernetes export to use all files in the current directory
---
.../apache/camel/dsl/jbang/core/commands/Run.java | 5 +--
.../camel/dsl/jbang/core/common/SourceHelper.java | 42 +++++++++++++++++-----
.../core/commands/kubernetes/MetadataHelper.java | 8 ++++-
3 files changed, 42 insertions(+), 13 deletions(-)
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
index a5bbccd45df..ba90abedf9a 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
@@ -78,9 +78,6 @@ public class Run extends CamelCommand {
public static final String RUN_SETTINGS_FILE =
"camel-jbang-run.properties";
private static final String RUN_PLATFORM_DIR = ".camel-jbang-run";
- private static final String[] ACCEPTED_FILE_EXT
- = new String[] { "java", "groovy", "js", "jsh", "kts", "xml",
"yaml" };
-
private static final String[] ACCEPTED_XML_ROOT_ELEMENT_NAMES = new
String[] {
"route", "routes",
"routeTemplate", "routeTemplates",
@@ -1563,7 +1560,7 @@ public class Run extends CamelCommand {
}
// if the ext is an accepted file then we include it as a
potential route
// (java files need to be included as route to support
pojos/processors with routes)
- return Arrays.stream(ACCEPTED_FILE_EXT).anyMatch(e ->
e.equalsIgnoreCase(ext2));
+ return SourceHelper.isAcceptedSourceFile(ext2);
} else {
// assume match as it can be wildcard or dir
return true;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/SourceHelper.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/SourceHelper.java
index 59d8b6eb53b..1601dbd8a73 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/SourceHelper.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/SourceHelper.java
@@ -17,8 +17,11 @@
package org.apache.camel.dsl.jbang.core.common;
+import java.io.File;
import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.StringJoiner;
@@ -34,6 +37,9 @@ import org.apache.camel.util.IOHelper;
public class SourceHelper {
+ private static final String[] ACCEPTED_FILE_EXT
+ = new String[] { "java", "groovy", "js", "jsh", "kts", "xml",
"yaml" };
+
public static Source resolveSource(String source) {
List<Source> resolved =
resolveSources(Collections.singletonList(source));
if (resolved.isEmpty()) {
@@ -52,7 +58,10 @@ public class SourceHelper {
for (String source : sources) {
SourceScheme sourceScheme = SourceScheme.fromUri(source);
String fileExtension = FileUtil.onlyExt(source);
- String fileName = SourceScheme.onlyName(FileUtil.onlyName(source))
+ "." + fileExtension;
+ String fileName = SourceScheme.onlyName(FileUtil.onlyName(source));
+ if (fileExtension != null) {
+ fileName = fileName + "." + fileExtension;
+ }
try {
switch (sourceScheme) {
case GIST -> {
@@ -63,9 +72,9 @@ public class SourceHelper {
for (String uri : all.toString().split(",")) {
resolved.add(new Source(
sourceScheme,
- fileName,
+ FileUtil.stripPath(uri),
IOHelper.loadText(resolver.resolve(uri).getInputStream()),
- fileExtension, compression));
+ FileUtil.onlyExt(uri), compression));
}
}
}
@@ -114,16 +123,29 @@ public class SourceHelper {
for (String uri : all.toString().split(",")) {
resolved.add(new Source(
sourceScheme,
- fileName,
+ FileUtil.stripPath(uri),
IOHelper.loadText(resolver.resolve(uri).getInputStream()),
- fileExtension, compression));
+ FileUtil.onlyExt(uri), compression));
}
}
}
case UNKNOWN -> {
- try (FileInputStream fis = new
FileInputStream(source)) {
- resolved.add(
- new Source(sourceScheme, fileName,
IOHelper.loadText(fis), fileExtension, compression));
+ if (isAcceptedSourceFile(fileExtension)) {
+ File sourceFile = new File(source);
+ if (!sourceFile.exists()) {
+ throw new FileNotFoundException("Source file
'%s' does not exist".formatted(source));
+ }
+
+ if (!sourceFile.isDirectory()) {
+ try (FileInputStream fis = new
FileInputStream(sourceFile)) {
+ resolved.add(
+ new Source(
+ sourceScheme,
+ fileName,
+ IOHelper.loadText(fis),
+ fileExtension,
compression));
+ }
+ }
}
}
}
@@ -134,4 +156,8 @@ public class SourceHelper {
return resolved;
}
+ public static boolean isAcceptedSourceFile(String fileExt) {
+ return Arrays.stream(ACCEPTED_FILE_EXT).anyMatch(e ->
e.equalsIgnoreCase(fileExt));
+ }
+
}
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/MetadataHelper.java
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/MetadataHelper.java
index 87c649d14bb..91fe9fffc74 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/MetadataHelper.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/MetadataHelper.java
@@ -105,7 +105,13 @@ public class MetadataHelper {
public static SourceMetadata readFromSource(CamelCatalog catalog, String
location, String source) throws Exception {
try (CamelContext context = createCamelContext()) {
Resource resource = ResourceHelper.fromString(location, source);
- PluginHelper.getRoutesLoader(context).loadRoutes(resource);
+
+ try {
+ PluginHelper.getRoutesLoader(context).loadRoutes(resource);
+ } catch (IllegalArgumentException e) {
+ // obviously no matching routes loader is available, return
empty metadata
+ return new SourceMetadata();
+ }
context.start();