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/06/21 08:52:18 UTC

[camel] 03/08: CAMEL-13663: camel-main-maven-plugin to generte spring-boot tooling metadata to fool Java editors to have code completions for Camel Main application.properties files.

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

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

commit 0b13d7ca9dcc9fc92d936a183390d976e8237fde
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Jun 21 09:06:23 2019 +0200

    CAMEL-13663: camel-main-maven-plugin to generte spring-boot tooling metadata to fool Java editors to have code completions for Camel Main application.properties files.
---
 .../java/org/apache/camel/maven/AutowireMojo.java  | 23 ++++----
 .../apache/camel/maven/SpringBootToolingMojo.java  | 25 ++++-----
 .../org/apache/camel/maven/model/AutowireData.java | 44 +++++++++++++++
 .../apache/camel/maven/model/SpringBootData.java   | 64 ++++++++++++++++++++++
 4 files changed, 132 insertions(+), 24 deletions(-)

diff --git a/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/AutowireMojo.java b/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/AutowireMojo.java
index 947c5a7..50a7190 100644
--- a/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/AutowireMojo.java
+++ b/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/AutowireMojo.java
@@ -31,7 +31,7 @@ import java.util.stream.Collectors;
 
 import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.catalog.JSonSchemaHelper;
-import org.apache.camel.support.IntrospectionSupport;
+import org.apache.camel.maven.model.AutowireData;
 import org.apache.camel.support.PatternHelper;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.OrderedProperties;
@@ -116,7 +116,7 @@ public class AutowireMojo extends AbstractMainMojo {
         }
 
         // find the autowire via classpath scanning
-        List<String> autowires = findAutowireComponentOptionsByClasspath(catalog, camelComponentsOnClasspath, reflections, mappingProperties);
+        List<AutowireData> autowires = findAutowireComponentOptionsByClasspath(catalog, camelComponentsOnClasspath, reflections, mappingProperties);
 
         if (!autowires.isEmpty()) {
             outFolder.mkdirs();
@@ -124,9 +124,11 @@ public class AutowireMojo extends AbstractMainMojo {
             try {
                 FileOutputStream fos = new FileOutputStream(file, false);
                 fos.write("# Generated by camel build tools\n".getBytes());
-                for (String line : autowires) {
-                    fos.write(line.getBytes());
-                    fos.write("\n".getBytes());
+                for (AutowireData data : autowires) {
+                    fos.write(data.getKey().getBytes());
+                    fos.write('=');
+                    fos.write(data.getValue().getBytes());
+                    fos.write('\n');
                 }
                 IOHelper.close(fos);
                 getLog().info("Created file: " + file + " (autowire by classpath: " + autowires.size() + ")");
@@ -162,9 +164,9 @@ public class AutowireMojo extends AbstractMainMojo {
         return mappings;
     }
 
-    protected List<String> findAutowireComponentOptionsByClasspath(CamelCatalog catalog, Set<String> components,
+    protected List<AutowireData> findAutowireComponentOptionsByClasspath(CamelCatalog catalog, Set<String> components,
                                                                    Reflections reflections, Properties mappingProperties) {
-        List<String> autowires = new ArrayList<>();
+        List<AutowireData> autowires = new ArrayList<>();
 
         for (String componentName : components) {
             getLog().debug("Autowiring Camel component: " + componentName);
@@ -200,9 +202,10 @@ public class AutowireMojo extends AbstractMainMojo {
                                  .collect(Collectors.toSet());
                             Class best = chooseBestKnownType(componentName, name, clazz, classes, mappingProperties);
                             if (best != null) {
-                                String line = "camel.component." + componentName + "." + name + "=#class:" + best.getName();
-                                getLog().debug(line);
-                                autowires.add(line);
+                                String key = "camel.component." + componentName + "." + name;
+                                String value = "#class:" + best.getName();
+                                getLog().debug(key + "=" + value);
+                                autowires.add(new AutowireData(key, value));
 
                                 // TODO: get options from best class (getter/setter pairs)
                                 // we dont have documentation
diff --git a/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/SpringBootToolingMojo.java b/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/SpringBootToolingMojo.java
index a5d8cb0..d331108 100644
--- a/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/SpringBootToolingMojo.java
+++ b/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/SpringBootToolingMojo.java
@@ -25,6 +25,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.camel.catalog.JSonSchemaHelper;
+import org.apache.camel.maven.model.SpringBootData;
 import org.apache.camel.util.IOHelper;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -61,7 +62,7 @@ public class SpringBootToolingMojo extends AbstractMainMojo {
             return;
         }
 
-        List<String[]> componentData = new ArrayList<>();
+        List<SpringBootData> componentData = new ArrayList<>();
         for (String componentName : camelComponentsOnClasspath) {
             String json = catalog.componentJSonSchema(componentName);
             if (json == null) {
@@ -79,7 +80,7 @@ public class SpringBootToolingMojo extends AbstractMainMojo {
                 // we want to use dash in the name
                 String dash = camelCaseToDash(name);
                 String key = "camel.component." + componentName + "." + dash;
-                componentData.add(new String[]{key, javaType, desc, defaultValue});
+                componentData.add(new SpringBootData(key, javaType, desc, defaultValue));
             }
         }
 
@@ -87,21 +88,17 @@ public class SpringBootToolingMojo extends AbstractMainMojo {
             StringBuilder sb = new StringBuilder();
 
             for (int i = 0; i < componentData.size(); i++) {
-                String[] row = componentData.get(i);
-                String name = row[0];
-                String javaType = row[1];
-                String desc = row[2];
-                String defaultValue = row[3];
+                SpringBootData row = componentData.get(i);
                 sb.append("    {\n");
-                sb.append("      \"name\": \"" + name + "\",\n");
-                sb.append("      \"type\": \"" + javaType + "\",\n");
-                sb.append("      \"description\": \"" + desc + "\"");
-                if (defaultValue != null) {
+                sb.append("      \"name\": \"" + row.getName() + "\",\n");
+                sb.append("      \"type\": \"" + row.getJavaType() + "\",\n");
+                sb.append("      \"description\": \"" + row.getDescription() + "\"");
+                if (row.getDefaultValue() != null) {
                     sb.append(",\n");
-                    if (springBootDefaultValueQuotes(javaType)) {
-                        sb.append("      \"defaultValue\": \"" + defaultValue + "\"\n");
+                    if (springBootDefaultValueQuotes(row.getJavaType())) {
+                        sb.append("      \"defaultValue\": \"" + row.getDefaultValue() + "\"\n");
                     } else {
-                        sb.append("      \"defaultValue\": " + defaultValue + "\n");
+                        sb.append("      \"defaultValue\": " + row.getDefaultValue() + "\n");
                     }
                 } else {
                     sb.append("\n");
diff --git a/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/model/AutowireData.java b/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/model/AutowireData.java
new file mode 100644
index 0000000..ab7019a
--- /dev/null
+++ b/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/model/AutowireData.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.maven.model;
+
+public final class AutowireData {
+
+    private String key;
+    private String value;
+
+    public AutowireData(String key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+}
diff --git a/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/model/SpringBootData.java b/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/model/SpringBootData.java
new file mode 100644
index 0000000..e10ae5a
--- /dev/null
+++ b/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/model/SpringBootData.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.maven.model;
+
+public final class SpringBootData {
+
+    private String name;
+    private String javaType;
+    private String description;
+    private String defaultValue;
+
+    public SpringBootData(String name, String javaType, String description, String defaultValue) {
+        this.name = name;
+        this.javaType = javaType;
+        this.description = description;
+        this.defaultValue = defaultValue;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getJavaType() {
+        return javaType;
+    }
+
+    public void setJavaType(String javaType) {
+        this.javaType = javaType;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getDefaultValue() {
+        return defaultValue;
+    }
+
+    public void setDefaultValue(String defaultValue) {
+        this.defaultValue = defaultValue;
+    }
+}