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

commit 26b861ac23bb303447087e7afd2f6323ab50e29f
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun Nov 6 13:05:52 2022 +0100

    CAMEL-18205: camel-jbang - Export as gradle project
---
 .../dsl/jbang/core/commands/ExportQuarkus.java     | 108 ++++++++++++++++++++-
 .../resources/templates/quarkus-build-gradle.tmpl  |  39 ++++++++
 .../templates/quarkus-gradle-properties.tmpl       |   7 ++
 .../templates/quarkus-settings-gradle.tmpl         |  11 +++
 .../templates/spring-boot-build-gradle.tmpl        |   2 +-
 5 files changed, 162 insertions(+), 5 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
index d0c70e68627..95135f489f2 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
@@ -123,10 +123,13 @@ class ExportQuarkus extends Export {
             createPom(settings, new File(BUILD_DIR, "pom.xml"), deps);
             if (mavenWrapper) {
                 copyMavenWrapper();
-            } else if ("gradle".equals(project)) {
-                if (gradleWrapper) {
-                    copyGradleWrapper();
-                }
+            }
+        } else if ("gradle".equals(project)) {
+            createGradleProperties(new File(BUILD_DIR, "gradle.properties"));
+            createSettingsGradle(new File(BUILD_DIR, "settings.gradle"));
+            createBuildGradle(settings, new File(BUILD_DIR, "build.gradle"), 
deps);
+            if (gradleWrapper) {
+                copyGradleWrapper();
             }
         }
 
@@ -140,6 +143,103 @@ class ExportQuarkus extends Export {
         return 0;
     }
 
+    private void createGradleProperties(File output) throws Exception {
+        InputStream is = 
ExportQuarkus.class.getClassLoader().getResourceAsStream("templates/quarkus-gradle-properties.tmpl");
+        String context = IOHelper.loadText(is);
+        IOHelper.close(is);
+
+        context = context.replaceFirst("\\{\\{ \\.QuarkusGroupId }}", 
quarkusGroupId);
+        context = context.replaceFirst("\\{\\{ \\.QuarkusArtifactId }}", 
quarkusArtifactId);
+        context = context.replaceAll("\\{\\{ \\.QuarkusVersion }}", 
quarkusVersion);
+
+        IOHelper.writeText(context, new FileOutputStream(output, false));
+    }
+
+    private void createSettingsGradle(File output) throws Exception {
+        String[] ids = gav.split(":");
+
+        InputStream is = 
ExportQuarkus.class.getClassLoader().getResourceAsStream("templates/quarkus-settings-gradle.tmpl");
+        String context = IOHelper.loadText(is);
+        IOHelper.close(is);
+
+        context = context.replaceFirst("\\{\\{ \\.GroupId }}", ids[0]);
+        context = context.replaceFirst("\\{\\{ \\.ArtifactId }}", ids[1]);
+        context = context.replaceFirst("\\{\\{ \\.Version }}", ids[2]);
+
+        IOHelper.writeText(context, new FileOutputStream(output, false));
+    }
+
+    private void createBuildGradle(File settings, File gradleBuild, 
Set<String> deps) throws Exception {
+        String[] ids = gav.split(":");
+
+        InputStream is = 
ExportSpringBoot.class.getClassLoader().getResourceAsStream("templates/quarkus-build-gradle.tmpl");
+        String context = IOHelper.loadText(is);
+        IOHelper.close(is);
+
+        CamelCatalog catalog = loadQuarkusCatalog();
+        if (camelVersion == null) {
+            camelVersion = catalog.getCatalogVersion();
+        }
+        String camelVersion = catalog.getCatalogVersion();
+
+        context = context.replaceFirst("\\{\\{ \\.GroupId }}", ids[0]);
+        context = context.replaceFirst("\\{\\{ \\.ArtifactId }}", ids[1]);
+        context = context.replaceFirst("\\{\\{ \\.Version }}", ids[2]);
+        context = context.replaceFirst("\\{\\{ \\.QuarkusGroupId }}", 
quarkusGroupId);
+        context = context.replaceFirst("\\{\\{ \\.QuarkusArtifactId }}", 
quarkusArtifactId);
+        context = context.replaceAll("\\{\\{ \\.QuarkusVersion }}", 
quarkusVersion);
+        context = context.replaceAll("\\{\\{ \\.JavaVersion }}", javaVersion);
+        context = context.replaceAll("\\{\\{ \\.CamelVersion }}", 
camelVersion);
+
+        Properties prop = new CamelCaseOrderedProperties();
+        RuntimeUtil.loadProperties(prop, settings);
+        String repos = prop.getProperty("camel.jbang.repos");
+        if (repos == null) {
+            context = context.replaceFirst("\\{\\{ \\.MavenRepositories }}", 
"");
+        } else {
+            StringBuilder sb = new StringBuilder();
+            for (String repo : repos.split(",")) {
+                sb.append("    maven {\n");
+                sb.append("        url: '").append(repo).append("'\n");
+                sb.append("    }\n");
+            }
+            context = context.replaceFirst("\\{\\{ \\.MavenRepositories }}", 
sb.toString());
+        }
+
+        List<MavenGav> gavs = new ArrayList<>();
+        for (String dep : deps) {
+            MavenGav gav = MavenGav.parseGav(dep);
+            String gid = gav.getGroupId();
+            String aid = gav.getArtifactId();
+            // transform to camel-quarkus extension GAV
+            if ("org.apache.camel".equals(gid)) {
+                String qaid = aid.replace("camel-", "camel-quarkus-");
+                ArtifactModel<?> am = 
catalog.modelFromMavenGAV("org.apache.camel.quarkus", qaid, null);
+                if (am != null) {
+                    // use quarkus extension
+                    gav.setGroupId(am.getGroupId());
+                    gav.setArtifactId(am.getArtifactId());
+                    gav.setVersion(quarkusVersion);
+                } else {
+                    // there is no quarkus extension so use plain camel
+                    gav.setVersion(camelVersion);
+                }
+            }
+            gavs.add(gav);
+        }
+
+        // sort artifacts
+        gavs.sort(mavenGavComparator());
+
+        StringBuilder sb = new StringBuilder();
+        for (MavenGav gav : gavs) {
+            sb.append("    implementation 
'").append(gav.toString()).append("'\n");
+        }
+        context = context.replaceFirst("\\{\\{ \\.CamelDependencies }}", 
sb.toString());
+
+        IOHelper.writeText(context, new FileOutputStream(gradleBuild, false));
+    }
+
     @Override
     protected String applicationPropertyLine(String key, String value) {
         // quarkus use dash cased properties and lets turn camel into dash as 
well
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-build-gradle.tmpl
 
b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-build-gradle.tmpl
new file mode 100644
index 00000000000..f64a9a4f46a
--- /dev/null
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-build-gradle.tmpl
@@ -0,0 +1,39 @@
+plugins {
+    id 'java'
+    id 'io.quarkus'
+}
+
+repositories {
+    mavenCentral()
+    mavenLocal()
+{{ .MavenRepositories }}
+}
+
+dependencies {
+    implementation 
enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}")
+    implementation 
enforcedPlatform("${quarkusPlatformGroupId}:quarkus-camel-bom:${quarkusPlatformVersion}")
+    implementation 'io.quarkus:quarkus-arc'
+{{ .CamelDependencies }}
+    testImplementation 'io.quarkus:quarkus-junit5'
+    testImplementation 
'org.apache.camel.quarkus:camel-quarkus-junit5:${quarkusPlatformVersion}'
+}
+
+group = '{{ .GroupId }}'
+version = '{{ .Version }}'
+
+java {
+    sourceCompatibility = '{{ .JavaVersion }}'
+    targetCompatibility = '{{ .JavaVersion }}'
+}
+
+test {
+    systemProperty "java.util.logging.manager", 
"org.jboss.logmanager.LogManager"
+}
+compileJava {
+    options.encoding = 'UTF-8'
+    options.compilerArgs << '-parameters'
+}
+
+compileTestJava {
+    options.encoding = 'UTF-8'
+}
\ No newline at end of file
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-gradle-properties.tmpl
 
b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-gradle-properties.tmpl
new file mode 100644
index 00000000000..4beeb36b68b
--- /dev/null
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-gradle-properties.tmpl
@@ -0,0 +1,7 @@
+gradle.properties
+#Gradle properties
+quarkusPluginId=io.quarkus
+quarkusPluginVersion={{ .QuarkusVersion }}
+quarkusPlatformGroupId={{ .QuarkusGroupId }}
+quarkusPlatformArtifactId={{ .QuarkusArtifactId }}
+quarkusPlatformVersion={{ .QuarkusVersion }}
\ No newline at end of file
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-settings-gradle.tmpl
 
b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-settings-gradle.tmpl
new file mode 100644
index 00000000000..4d63110b59d
--- /dev/null
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-settings-gradle.tmpl
@@ -0,0 +1,11 @@
+pluginManagement {
+    repositories {
+        mavenCentral()
+        gradlePluginPortal()
+        mavenLocal()
+    }
+    plugins {
+        id "${quarkusPluginId}" version "${quarkusPluginVersion}"
+    }
+}
+rootProject.name='{{ .ArtifactId }}'
\ No newline at end of file
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-build-gradle.tmpl
 
b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-build-gradle.tmpl
index 1f0ffc6cd8f..3d64253738f 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-build-gradle.tmpl
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-build-gradle.tmpl
@@ -9,8 +9,8 @@ version = '{{ .Version }}'
 sourceCompatibility = '{{ .JavaVersion }}'
 
 repositories {
-    mavenLocal()
     mavenCentral()
+    mavenLocal()
 {{ .MavenRepositories }}
 }
 

Reply via email to