You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/10/08 13:09:40 UTC

[camel-quarkus] 09/12: #75: Adding camel-quarkus-catalog (work in progress)

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

davsclaus pushed a commit to branch catalog
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit 2049ca39508152dcc2c3dd08d3643593c0b2cc1c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Oct 8 13:55:41 2019 +0200

    #75: Adding camel-quarkus-catalog (work in progress)
---
 .../quarkus/maven/PrepareCatalogQuarkusMojo.java   | 278 +++++----------------
 1 file changed, 68 insertions(+), 210 deletions(-)

diff --git a/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/PrepareCatalogQuarkusMojo.java b/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/PrepareCatalogQuarkusMojo.java
index 63163d7..3a32e46 100644
--- a/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/PrepareCatalogQuarkusMojo.java
+++ b/tooling/maven/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/PrepareCatalogQuarkusMojo.java
@@ -66,6 +66,7 @@ public class PrepareCatalogQuarkusMojo extends AbstractMojo {
     };
 
     private static final Pattern SCHEME_PATTERN = Pattern.compile("\"scheme\": \"(.*)\"");
+    private static final Pattern NAME_PATTERN = Pattern.compile("\"name\": \"(.*)\"");
     private static final Pattern GROUP_PATTERN = Pattern.compile("\"groupId\": \"(org.apache.camel)\"");
     private static final Pattern ARTIFACT_PATTERN = Pattern.compile("\"artifactId\": \"camel-(.*)\"");
     private static final Pattern VERSION_PATTERN = Pattern.compile("\"version\": \"(.*)\"");
@@ -89,7 +90,6 @@ public class PrepareCatalogQuarkusMojo extends AbstractMojo {
     private MavenProjectHelper projectHelper;
 
     /**
-     *
      * The output directory for components catalog
      */
     @Parameter(defaultValue = "${project.build.directory}/classes/org/apache/camel/catalog/quarkus/components")
@@ -123,39 +123,22 @@ public class PrepareCatalogQuarkusMojo extends AbstractMojo {
      * Execute goal.
      *
      * @throws MojoExecutionException execution of the main class or one of the
-     *                                                        threads it generated failed.
+     *                                threads it generated failed.
      * @throws MojoFailureException   something bad happened...
      */
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
         Set<String> extensions = findExtensions();
-        executeComponents(extensions);
-//        executeLanguages(extensions);
-//        executeDataFormats(extensions);
-//        executeOthers(extensions);
+        Set<String> artifacts = extractArtifactIds(extensions);
+        executeComponents(artifacts);
+        executeLanguages(artifacts);
+        executeDataFormats(artifacts);
+//        executeOthers(artifacts);
     }
 
-    protected void executeComponents(Set<String> extensions) throws MojoExecutionException, MojoFailureException {
-        getLog().info("Copying all Camel extension json descriptors");
-
-        // grab components from camel-catalog
-        List<String> catalogComponents;
-        try {
-            InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/camel/catalog/components.properties");
-            String text = loadText(is);
-            catalogComponents = Arrays.asList(text.split("\n"));
-            getLog().info("Loaded " + catalogComponents.size() + " components from camel-catalog");
-        } catch (IOException e) {
-            throw new MojoFailureException("Error loading resource from camel-catalog due " + e.getMessage(), e);
-        }
-
-        // make sure to create out dir
-        componentsOutDir.mkdirs();
-
+    private Set<String> extractArtifactIds(Set<String> extensions) throws MojoFailureException {
+        Set<String> answer = new LinkedHashSet<>();
         for (String extension : extensions) {
-
-            // grab GAB
-            String artifactId = null;
             try {
                 MavenProject extProject = getMavenProject("org.apache.camel.quarkus", "camel-quarkus-" + extension, project.getVersion());
                 // grab camel artifact
@@ -163,25 +146,50 @@ public class PrepareCatalogQuarkusMojo extends AbstractMojo {
                         .filter(p -> "org.apache.camel".equals(p.getGroupId()) && "compile".equals(p.getScope()))
                         .findFirst();
                 if (artifact.isPresent()) {
-                    artifactId = artifact.get().getArtifactId();
+                    String artifactId = artifact.get().getArtifactId();
+                    answer.add(artifactId);
                 }
             } catch (ProjectBuildingException e) {
                 throw new MojoFailureException("Cannot read pom.xml for extension " + extension, e);
             }
+        }
+        return answer;
+    }
 
-            if (artifactId == null) {
-                continue;
-            }
+    protected void executeComponents(Set<String> artifactIds) throws MojoExecutionException, MojoFailureException {
+        doExecute(artifactIds, "components", componentsOutDir);
+    }
 
-            getLog().info("Discovered camel-quarkus extension org.apache.camel.quarkus:" + artifactId);
+    protected void executeLanguages(Set<String> artifactIds) throws MojoExecutionException, MojoFailureException {
+        doExecute(artifactIds, "languages", languagesOutDir);
+    }
 
+    protected void executeDataFormats(Set<String> artifactIds) throws MojoExecutionException, MojoFailureException {
+        doExecute(artifactIds, "dataformats", dataFormatsOutDir);
+    }
+
+    protected void doExecute(Set<String> artifactIds, String kind, File outsDir) throws MojoExecutionException, MojoFailureException {
+        // grab from camel-catalog
+        List<String> catalog;
+        try {
+            InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/camel/catalog/" + kind + ".properties");
+            String text = loadText(is);
+            catalog = Arrays.asList(text.split("\n"));
+            getLog().info("Loaded " + catalog.size() + " " + kind + " from camel-catalog");
+        } catch (IOException e) {
+            throw new MojoFailureException("Error loading resource from camel-catalog due " + e.getMessage(), e);
+        }
+
+        // make sure to create out dir
+        outsDir.mkdirs();
+
+        for (String artifactId : artifactIds) {
             // for quarkus we need to amend the json file to use the quarkus maven GAV
             List<String> jsonFiles = new ArrayList<>();
             try {
-                for (String component : catalogComponents) {
-                    InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/camel/catalog/components/" + component + ".json");
+                for (String name : catalog) {
+                    InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/camel/catalog/" + kind + "/" + name + ".json");
                     String text = loadText(is);
-                    // see if it its a
                     boolean match = text.contains("\"artifactId\": \"" + artifactId + "\"");
                     if (match) {
                         jsonFiles.add(text);
@@ -192,192 +200,55 @@ public class PrepareCatalogQuarkusMojo extends AbstractMojo {
             }
 
             for (String text : jsonFiles) {
-                try {
-                    text = GROUP_PATTERN.matcher(text).replaceFirst("\"groupId\": \"org.apache.camel.quarkus\"");
-                    text = ARTIFACT_PATTERN.matcher(text).replaceFirst("\"artifactId\": \"camel-quarkus-$1\"");
-                    text = VERSION_PATTERN.matcher(text).replaceFirst("\"version\": \"" + project.getVersion() + "\"");
+                text = GROUP_PATTERN.matcher(text).replaceFirst("\"groupId\": \"org.apache.camel.quarkus\"");
+                text = ARTIFACT_PATTERN.matcher(text).replaceFirst("\"artifactId\": \"camel-quarkus-$1\"");
+                text = VERSION_PATTERN.matcher(text).replaceFirst("\"version\": \"" + project.getVersion() + "\"");
 
-                    Matcher matcher = SCHEME_PATTERN.matcher(text);
-                    if (matcher.find()) {
-                        String scheme = matcher.group(1);
+                Pattern pattern = null;
+                if ("components".equals(kind)) {
+                    pattern = SCHEME_PATTERN;
+                } else if ("languages".equals(kind)) {
+                    pattern = NAME_PATTERN;
+                } else if ("dataformats".equals(kind)) {
+                    pattern = NAME_PATTERN;
+                }
 
+                Matcher matcher = pattern.matcher(text);
+                if (matcher.find()) {
+                    String scheme = matcher.group(1);
+
+                    try {
                         // write new json file
-                        File to = new File(componentsOutDir, scheme + ".json");
+                        File to = new File(outsDir, scheme + ".json");
                         FileOutputStream fos = new FileOutputStream(to, false);
 
                         fos.write(text.getBytes());
 
                         fos.close();
+                    } catch (IOException e) {
+                        throw new MojoFailureException("Cannot write json file " + scheme, e);
                     }
-                } catch (IOException e) {
-                    throw new MojoFailureException("Cannot write json file " + extension, e);
                 }
             }
         }
 
-        File all = new File(componentsOutDir, "../components.properties");
+        File all = new File(outsDir, "../" + kind + ".properties");
         try {
             FileOutputStream fos = new FileOutputStream(all, false);
 
-            String[] names = componentsOutDir.list();
-            List<String> components = new ArrayList<>();
+            String[] names = outsDir.list();
+            List<String> lines = new ArrayList<>();
             // sort the names
             for (String name : names) {
                 if (name.endsWith(".json")) {
                     // strip out .json from the name
-                    String componentName = name.substring(0, name.length() - 5);
-                    components.add(componentName);
+                    String shortName = name.substring(0, name.length() - 5);
+                    lines.add(shortName);
                 }
             }
 
-            Collections.sort(components);
-            for (String name : components) {
-                fos.write(name.getBytes());
-                fos.write("\n".getBytes());
-            }
-
-            fos.close();
-
-        } catch (IOException e) {
-            throw new MojoFailureException("Error writing to file " + all);
-        }
-    }
-
-    protected void executeLanguages(Set<String> extensions) throws MojoExecutionException, MojoFailureException {
-        // TODO: include core languages
-        getLog().info("Copying all Camel extension json descriptors");
-
-        // grab languages from camel-catalog
-        List catalogLanguages;
-        try {
-            InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/camel/catalog/languages.properties");
-            String text = loadText(is);
-            catalogLanguages = Arrays.asList(text.split("\n"));
-            getLog().info("Loaded " + catalogLanguages.size() + " languages from camel-catalog");
-        } catch (IOException e) {
-            throw new MojoFailureException("Error loading resource from camel-catalog due " + e.getMessage(), e);
-        }
-
-        // make sure to create out dir
-        languagesOutDir.mkdirs();
-
-        for (String extension : extensions) {
-            if (!isCamelLanguage(catalogLanguages, extension)) {
-                continue;
-            }
-
-            // for quarkus we need to amend the json file to use the quarkus maven GAV
-            try {
-                InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/camel/catalog/languages/" + extension + ".json");
-                String text = loadText(is);
-
-                text = GROUP_PATTERN.matcher(text).replaceFirst("\"groupId\": \"org.apache.camel.quarkus\"");
-                text = ARTIFACT_PATTERN.matcher(text).replaceFirst("\"artifactId\": \"camel-quarkus-$1\"");
-                text = VERSION_PATTERN.matcher(text).replaceFirst("\"version\": \"" + project.getVersion() + "\"");
-
-                // write new json file
-                File to = new File(languagesOutDir, extension + ".json");
-                FileOutputStream fos = new FileOutputStream(to, false);
-
-                fos.write(text.getBytes());
-
-                fos.close();
-
-            } catch (IOException e) {
-                throw new MojoFailureException("Cannot write json file " + extension, e);
-            }
-        }
-
-        File all = new File(languagesOutDir, "../languages.properties");
-        try {
-            FileOutputStream fos = new FileOutputStream(all, false);
-
-            String[] names = languagesOutDir.list();
-            List<String> languages = new ArrayList<>();
-            // sort the names
-            for (String name : names) {
-                if (name.endsWith(".json")) {
-                    // strip out .json from the name
-                    String languageName = name.substring(0, name.length() - 5);
-                    languages.add(languageName);
-                }
-            }
-
-            Collections.sort(languages);
-            for (String name : languages) {
-                fos.write(name.getBytes());
-                fos.write("\n".getBytes());
-            }
-
-            fos.close();
-
-        } catch (IOException e) {
-            throw new MojoFailureException("Error writing to file " + all);
-        }
-    }
-
-    protected void executeDataFormats(Set<String> extensions) throws MojoExecutionException, MojoFailureException {
-        // TODO: include core data formats
-        getLog().info("Copying all Camel extension json descriptors");
-
-        // grab dataformats from camel-catalog
-        List catalogDataFormats;
-        try {
-            InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/camel/catalog/dataformats.properties");
-            String text = loadText(is);
-            catalogDataFormats = Arrays.asList(text.split("\n"));
-            getLog().info("Loaded " + catalogDataFormats.size() + " dataformats from camel-catalog");
-        } catch (IOException e) {
-            throw new MojoFailureException("Error loading resource from camel-catalog due " + e.getMessage(), e);
-        }
-
-        // make sure to create out dir
-        dataFormatsOutDir.mkdirs();
-
-        for (String extension : extensions) {
-            if (!isCamelDataFormat(catalogDataFormats, extension)) {
-                continue;
-            }
-
-            // for quarkus we need to amend the json file to use the quarkus maven GAV
-            try {
-                InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/camel/catalog/dataformats/" + extension + ".json");
-                String text = loadText(is);
-
-                text = GROUP_PATTERN.matcher(text).replaceFirst("\"groupId\": \"org.apache.camel.quarkus\"");
-                text = ARTIFACT_PATTERN.matcher(text).replaceFirst("\"artifactId\": \"camel-quarkus-$1\"");
-                text = VERSION_PATTERN.matcher(text).replaceFirst("\"version\": \"" + project.getVersion() + "\"");
-
-                // write new json file
-                File to = new File(dataFormatsOutDir, extension + ".json");
-                FileOutputStream fos = new FileOutputStream(to, false);
-
-                fos.write(text.getBytes());
-
-                fos.close();
-
-            } catch (IOException e) {
-                throw new MojoFailureException("Cannot write json file " + extension, e);
-            }
-        }
-
-        File all = new File(dataFormatsOutDir, "../dataformats.properties");
-        try {
-            FileOutputStream fos = new FileOutputStream(all, false);
-
-            String[] names = dataFormatsOutDir.list();
-            List<String> dataFormats = new ArrayList<>();
-            // sort the names
-            for (String name : names) {
-                if (name.endsWith(".json")) {
-                    // strip out .json from the name
-                    String dataFormatName = name.substring(0, name.length() - 5);
-                    dataFormats.add(dataFormatName);
-                }
-            }
-
-            Collections.sort(dataFormats);
-            for (String name : dataFormats) {
+            Collections.sort(lines);
+            for (String name : lines) {
                 fos.write(name.getBytes());
                 fos.write("\n".getBytes());
             }
@@ -393,7 +264,6 @@ public class PrepareCatalogQuarkusMojo extends AbstractMojo {
         // make sure to create out dir
         othersOutDir.mkdirs();
 
-
         for (String extension : extensions) {
             // skip if the extension is already one of the following
             boolean component = new File(componentsOutDir, extension + ".json").exists();
@@ -486,18 +356,6 @@ public class PrepareCatalogQuarkusMojo extends AbstractMojo {
         }
     }
 
-    private static boolean isCamelComponent(List<String> components, String name) {
-        return components.stream().anyMatch(c -> c.equals(name));
-    }
-
-    private static boolean isCamelLanguage(List<String> languages, String name) {
-        return languages.stream().anyMatch(c -> c.equals(name));
-    }
-
-    private static boolean isCamelDataFormat(List<String> dataFormats, String name) {
-        return dataFormats.stream().anyMatch(c -> c.equals(name));
-    }
-
     private Set<String> findExtensions() {
         Set<String> answer = new LinkedHashSet<>();