This is an automated email from the ASF dual-hosted git repository.
davsclaus 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 33bded2c0154 chore: camel-jbang - source editor reads property
placeholders from src/main/resources of a Maven project (#27207)
33bded2c0154 is described below
commit 33bded2c01546ca10d17edbf168451ae16990c34
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Oct 1 15:36:36 2026 +0200
chore: camel-jbang - source editor reads property placeholders from
src/main/resources of a Maven project (#27207)
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
---
.../jbang/core/commands/tui/SourceEditAssist.java | 56 ++++++++++++----------
.../commands/tui/SourceEditorProjectInfoTest.java | 14 ++++++
2 files changed, 46 insertions(+), 24 deletions(-)
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SourceEditAssist.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SourceEditAssist.java
index 682d4cb50998..34e1b800e9c6 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SourceEditAssist.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SourceEditAssist.java
@@ -1438,30 +1438,18 @@ final class SourceEditAssist {
}
List<AutocompletePopup.CompletionItem> items = new ArrayList<>();
- try (var stream = java.nio.file.Files.list(rootDir)) {
- stream.filter(p ->
p.getFileName().toString().endsWith(".properties"))
- .forEach(p -> {
- try {
- for (String line :
java.nio.file.Files.readAllLines(p)) {
- String trimmed = line.trim();
- if (trimmed.isEmpty() ||
trimmed.startsWith("#") || trimmed.startsWith("!")) {
- continue;
- }
- int eq = trimmed.indexOf('=');
- if (eq > 0) {
- String key = trimmed.substring(0,
eq).trim();
- String value = trimmed.substring(eq +
1).trim();
- items.add(new
AutocompletePopup.CompletionItem(
- "{{" + key + "}}", value,
"placeholder",
- null, false, null,
p.getFileName().toString()));
- }
- }
- } catch (IOException e) {
- // skip unreadable files
- }
- });
- } catch (IOException e) {
- return List.of();
+ // a Maven or Gradle project keeps its properties in
src/main/resources, a camel run folder next to the routes
+ for (Path dir : List.of(rootDir,
rootDir.resolve("src/main/resources"))) {
+ if (!java.nio.file.Files.isDirectory(dir)) {
+ continue;
+ }
+ try (var stream = java.nio.file.Files.list(dir)) {
+ stream.filter(p ->
p.getFileName().toString().endsWith(".properties"))
+ .sorted()
+ .forEach(p -> addPlaceholders(p,
rootDir.relativize(p).toString(), items));
+ } catch (IOException e) {
+ // skip an unreadable folder
+ }
}
items.sort(Comparator.comparing(AutocompletePopup.CompletionItem::key,
String.CASE_INSENSITIVE_ORDER));
@@ -1471,6 +1459,26 @@ final class SourceEditAssist {
return items;
}
+ private static void addPlaceholders(Path file, String source,
List<AutocompletePopup.CompletionItem> items) {
+ try {
+ for (String line : java.nio.file.Files.readAllLines(file)) {
+ String trimmed = line.trim();
+ if (trimmed.isEmpty() || trimmed.startsWith("#") ||
trimmed.startsWith("!")) {
+ continue;
+ }
+ int eq = trimmed.indexOf('=');
+ if (eq > 0) {
+ String key = trimmed.substring(0, eq).trim();
+ String value = trimmed.substring(eq + 1).trim();
+ items.add(new AutocompletePopup.CompletionItem(
+ "{{" + key + "}}", value, "placeholder", null,
false, null, source));
+ }
+ }
+ } catch (IOException e) {
+ // skip unreadable files
+ }
+ }
+
private static final Pattern PLACEHOLDER
= Pattern.compile("\\{\\{([^}:]+?)(?::([^}]*))?\\}\\}");
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SourceEditorProjectInfoTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SourceEditorProjectInfoTest.java
index 8dd034cf3d80..bc9d3224205b 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SourceEditorProjectInfoTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/SourceEditorProjectInfoTest.java
@@ -90,6 +90,20 @@ class SourceEditorProjectInfoTest {
assertThat(assist.placeholderDocs("from(\"timer:orders\")")).isEmpty();
}
+ @Test
+ void thePlaceholdersOfAMavenProjectComeFromItsResources() throws Exception
{
+ Files.writeString(dir.resolve("pom.xml"), "<project/>\n");
+ Path resources =
Files.createDirectories(dir.resolve("src/main/resources"));
+ Files.writeString(resources.resolve("application.properties"),
"timer.period=1s\n");
+ SourceEditAssist assist = new SourceEditAssist(
+ new MonitorContext(new AtomicReference<>(List.of()), new
AtomicReference<>(List.of())));
+ assist.setRootDir(dir);
+
+
assertThat(assist.placeholderDocs("from(\"timer:foo?period={{timer.period}}\")"))
+ .extracting(SourceViewer.DocEntry::text)
+ .containsExactly("{{timer.period}} = 1s
(src/main/resources/application.properties)");
+ }
+
@Test
void theBeansARouteRefersToAreFound() throws Exception {
Files.writeString(dir.resolve("OrderService.java"), """