This is an automated email from the ASF dual-hosted git repository.
apupier 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 21c66f8f40e CAMEL-21175 - Create package name for file created with
Camel Jbang
21c66f8f40e is described below
commit 21c66f8f40ef5765f4702c51ff9268e2df2ef561
Author: Aurélien Pupier <[email protected]>
AuthorDate: Wed Sep 4 17:32:23 2024 +0200
CAMEL-21175 - Create package name for file created with Camel Jbang
when the file is created in a subfolder of a src/main/java directory
Signed-off-by: Aurélien Pupier <[email protected]>
---
.../apache/camel/dsl/jbang/core/commands/Init.java | 26 ++++++++++++++++
.../src/main/resources/templates/java.tmpl | 2 +-
.../camel/dsl/jbang/core/commands/InitTest.java | 36 ++++++++++++++++++++++
3 files changed, 63 insertions(+), 1 deletion(-)
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
index 0140e702675..f6a202a5544 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
@@ -18,6 +18,7 @@ package org.apache.camel.dsl.jbang.core.commands;
import java.io.File;
import java.io.FileOutputStream;
+import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Path;
import java.util.Stack;
@@ -178,10 +179,35 @@ public class Init extends CamelCommand {
}
content = sb.toString();
}
+ if ("java".equals(ext)) {
+ String packageDeclaration = computeJavaPackageDeclaration(target);
+ content = content.replaceFirst("\\{\\{ \\.PackageDeclaration }}",
packageDeclaration);
+ }
IOHelper.writeText(content, new FileOutputStream(target, false));
return 0;
}
+ /**
+ * @param target
+ * @return The package declaration lines to insert at the
beginning of the file or empty string if no
+ * package found
+ * @throws IOException
+ */
+ private String computeJavaPackageDeclaration(File target) throws
IOException {
+ String packageDeclaration = "";
+ String canonicalPath = target.getParentFile().getCanonicalPath();
+ String srcMainJavaPath = "src" + File.separatorChar + "main" +
File.separatorChar + "java";
+ int index = canonicalPath.indexOf(srcMainJavaPath);
+ if (index != -1) {
+ String packagePath = canonicalPath.substring(index +
srcMainJavaPath.length() + 1);
+ String packageName = packagePath.replace(File.separatorChar, '.');
+ if (!packageName.isEmpty()) {
+ packageDeclaration = "package " + packageName + ";\n\n";
+ }
+ }
+ return packageDeclaration;
+ }
+
private void createWorkingDirectoryIfAbsent() {
File work = CommandLineHelper.getWorkDir();
if (!work.exists()) {
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/java.tmpl
b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/java.tmpl
index 468454c3fb2..1f922f1e6e7 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/java.tmpl
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/java.tmpl
@@ -1,4 +1,4 @@
-import org.apache.camel.builder.RouteBuilder;
+{{ .PackageDeclaration }}import org.apache.camel.builder.RouteBuilder;
public class {{ .Name }} extends RouteBuilder {
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/InitTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/InitTest.java
index 215be781fee..f23f70d009b 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/InitTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/InitTest.java
@@ -20,6 +20,7 @@ import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.List;
import org.apache.camel.util.FileUtil;
import org.junit.jupiter.api.AfterEach;
@@ -85,4 +86,39 @@ class InitTest {
assertTrue(existingFileInTargetDirectory.toFile().exists(), "The file
in the target folder has been deleted");
}
+
+ @Test
+ void initJavaWithPackageName() throws Exception {
+ Path packageFolderInsideMavenProject
+ = Files.createDirectories(new File(workingDir,
"src/main/java/com/acme/demo").toPath());
+
+ Init initCommand = new Init(new CamelJBangMain());
+ CommandLine.populateCommand(initCommand, "MyRoute.java", "--dir=" +
packageFolderInsideMavenProject);
+
+ int exit = initCommand.doCall();
+
+ assertEquals(0, exit);
+ File f = new File(packageFolderInsideMavenProject.toFile(),
"MyRoute.java");
+ assertTrue(f.exists(), "Java file not created: " + f);
+ List<String> lines = Files.readAllLines(f.toPath());
+ assertEquals("package com.acme.demo;", lines.get(0));
+ assertEquals("", lines.get(1));
+ assertEquals("import org.apache.camel.builder.RouteBuilder;",
lines.get(2));
+ f.delete();
+ }
+
+ @Test
+ void initJavaWithoutPackageName() throws Exception {
+ Init initCommand = new Init(new CamelJBangMain());
+ CommandLine.populateCommand(initCommand, "MyRoute.java");
+
+ int exit = initCommand.doCall();
+
+ assertEquals(0, exit);
+ File f = new File("MyRoute.java");
+ assertTrue(f.exists(), "Java file not created: " + f);
+ List<String> lines = Files.readAllLines(f.toPath());
+ assertEquals("import org.apache.camel.builder.RouteBuilder;",
lines.get(0));
+ f.delete();
+ }
}