You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2020/01/15 16:12:09 UTC

[camel] 03/07: Move srcgen to camel-tooling-util

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

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

commit 01e676338fea7f0664188e148a05a52d94e91c6b
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Mon Jan 13 08:31:12 2020 +0100

    Move srcgen to camel-tooling-util
---
 .../maven/config/ConnectorConfigGenerator.java     |   8 +-
 .../camel/tooling/util}/srcgen/Annotation.java     |   2 +-
 .../apache/camel/tooling/util}/srcgen/Field.java   |   2 +-
 .../camel/tooling/util}/srcgen/GenericType.java    |   6 +-
 .../camel/tooling/util}/srcgen/JavaClass.java      | 153 +++++++++++++--------
 .../apache/camel/tooling/util}/srcgen/Javadoc.java |   2 +-
 .../apache/camel/tooling/util}/srcgen/Method.java  |  24 +++-
 .../apache/camel/tooling/util}/srcgen/Param.java   |   2 +-
 .../camel/tooling/util}/srcgen/Property.java       |   2 +-
 .../camel/maven/packaging/EndpointDslMojo.java     |   8 +-
 10 files changed, 134 insertions(+), 75 deletions(-)

diff --git a/components/camel-debezium-common/camel-debezium-maven-plugin/src/main/java/org/apache/camel/maven/config/ConnectorConfigGenerator.java b/components/camel-debezium-common/camel-debezium-maven-plugin/src/main/java/org/apache/camel/maven/config/ConnectorConfigGenerator.java
index 4893914..67cff02 100644
--- a/components/camel-debezium-common/camel-debezium-maven-plugin/src/main/java/org/apache/camel/maven/config/ConnectorConfigGenerator.java
+++ b/components/camel-debezium-common/camel-debezium-maven-plugin/src/main/java/org/apache/camel/maven/config/ConnectorConfigGenerator.java
@@ -27,9 +27,9 @@ import io.debezium.config.Configuration;
 import io.debezium.config.Field;
 import io.debezium.relational.history.FileDatabaseHistory;
 import org.apache.camel.component.debezium.configuration.ConfigurationValidation;
-import org.apache.camel.maven.packaging.srcgen.Annotation;
-import org.apache.camel.maven.packaging.srcgen.JavaClass;
-import org.apache.camel.maven.packaging.srcgen.Method;
+import org.apache.camel.tooling.util.srcgen.Annotation;
+import org.apache.camel.tooling.util.srcgen.JavaClass;
+import org.apache.camel.tooling.util.srcgen.Method;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
@@ -173,7 +173,7 @@ public final class ConnectorConfigGenerator {
         // connector fields
         dbzConfigFields.forEach((fieldName, fieldConfig) -> {
             if (!isFieldInternalOrDeprecated(fieldConfig)) {
-                final org.apache.camel.maven.packaging.srcgen.Field field = javaClass.addField()
+                final org.apache.camel.tooling.util.srcgen.Field field = javaClass.addField()
                         .setName(fieldConfig.getFieldName())
                         .setType(fieldConfig.getRawType())
                         .setPrivate();
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Annotation.java b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Annotation.java
similarity index 98%
rename from tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Annotation.java
rename to tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Annotation.java
index 992a122..34c1ef8 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Annotation.java
+++ b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Annotation.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.maven.packaging.srcgen;
+package org.apache.camel.tooling.util.srcgen;
 
 import java.util.LinkedHashMap;
 import java.util.stream.Collectors;
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Field.java b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Field.java
similarity index 98%
rename from tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Field.java
rename to tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Field.java
index 1fd3cac..edfc731 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Field.java
+++ b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Field.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.maven.packaging.srcgen;
+package org.apache.camel.tooling.util.srcgen;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/GenericType.java b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/GenericType.java
similarity index 99%
rename from tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/GenericType.java
rename to tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/GenericType.java
index abc325a..1f1b064 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/GenericType.java
+++ b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/GenericType.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.maven.packaging.srcgen;
+package org.apache.camel.tooling.util.srcgen;
 
 import java.lang.reflect.Array;
 import java.lang.reflect.GenericArrayType;
@@ -29,10 +29,10 @@ import java.util.Map;
 @SuppressWarnings("rawtypes")
 public class GenericType {
 
-    private static final GenericType ALL = new GenericType(Object.class);
-
     private static final GenericType[] EMPTY = new GenericType[0];
 
+    private static final GenericType ALL = new GenericType(Object.class);
+
     private static final Map<String, Class> PRIMITIVE_CLASSES = new HashMap<>();
 
     public enum BoundType {
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/JavaClass.java b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/JavaClass.java
similarity index 81%
rename from tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/JavaClass.java
rename to tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/JavaClass.java
index 4c44e8e..d0e47c1 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/JavaClass.java
+++ b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/JavaClass.java
@@ -14,10 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.maven.packaging.srcgen;
+package org.apache.camel.tooling.util.srcgen;
 
 import java.util.ArrayList;
 import java.util.Comparator;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -25,7 +26,6 @@ import java.util.Set;
 import java.util.TreeSet;
 import java.util.stream.Collectors;
 
-import org.jboss.forge.roaster.model.util.Strings;
 
 public class JavaClass {
 
@@ -49,6 +49,7 @@ public class JavaClass {
     boolean isAbstract;
     boolean isClass = true;
     boolean isEnum;
+    int maxImportPerPackage = 10;
 
     public JavaClass() {
     }
@@ -69,6 +70,10 @@ public class JavaClass {
         }
     }
 
+    public void setMaxImportPerPackage(int maxImportPerPackage) {
+        this.maxImportPerPackage = maxImportPerPackage;
+    }
+
     public JavaClass setStatic(boolean aStatic) {
         isStatic = aStatic;
         return this;
@@ -243,6 +248,20 @@ public class JavaClass {
         imports.removeIf(f -> f.startsWith("java.lang.") || f.startsWith(packageName + "."));
         imports.removeIf(GenericType::isPrimitive);
 
+        Map<String, List<String>> importsByPackages = new LinkedHashMap<>();
+        for (String imp : imports) {
+            String key = imp.substring(0, imp.lastIndexOf('.'));
+            importsByPackages.computeIfAbsent(key, k -> new ArrayList<>()).add(imp);
+        }
+        imports.clear();
+        for (Map.Entry<String, List<String>> e : importsByPackages.entrySet()) {
+            if (e.getValue().size() < maxImportPerPackage) {
+                imports.addAll(e.getValue());
+            } else {
+                imports.add(e.getKey() + ".*");
+            }
+        }
+
         sb.append("package ").append(packageName).append(";\n");
         sb.append("\n");
         if (!imports.isEmpty()) {
@@ -267,7 +286,7 @@ public class JavaClass {
                 .append("enum ").append(name).append(" {\n")
                 .append(indent)
                 .append("    ")
-                .append(Strings.join(values, ",\n" + indent + "    "))
+                .append(String.join(",\n" + indent + "    ", values))
                 .append(";\n")
                 .append(indent)
                 .append("}");
@@ -289,7 +308,7 @@ public class JavaClass {
         }
         if (!implementNames.isEmpty()) {
             sb2.append(isClass ? " implements " : " extends ")
-                    .append(Strings.join(implementNames, ", "));
+                    .append(String.join(", ", implementNames));
         }
         sb2.append(" {");
         if (sb2.length() < 80) {
@@ -311,7 +330,7 @@ public class JavaClass {
             if (!implementNames.isEmpty()) {
                 sb.append("\n");
                 sb.append(indent).append(isClass ? "        implements\n" : "        extends\n");
-                sb.append(indent).append("            ").append(Strings.join(implementNames, ", "));
+                sb.append(indent).append("            ").append(String.join(", ", implementNames));
             }
             sb.append(" {\n");
         }
@@ -415,73 +434,91 @@ public class JavaClass {
         }
         printAnnotations(sb, indent, method.annotations);
 
-        StringBuilder sb2 = new StringBuilder();
-        sb2.append(indent);
-        if (method.isPublic) {
-            sb2.append("public ");
-        } else if (method.isProtected) {
-            sb2.append("protected ");
-        }
-        if (method.isDefault) {
-            sb2.append("default ");
-        }
-        if (method.isStatic) {
-            sb2.append("static ");
-        }
-        if (!method.isConstructor) {
-            sb2.append(method.returnType != null ? shortName(method.returnType) : "void");
-            sb2.append(" ");
-        }
-        sb2.append(method.name);
-        sb2.append("(");
-        sb2.append(method.parameters.stream().map(p -> shortName(p.type) + " " + p.name)
-                .collect(Collectors.joining(", ")));
-        sb2.append(") ");
-        if (!method.exceptions.isEmpty()) {
-            sb2.append("throws ");
-            sb2.append(method.exceptions.stream().map(this::shortName).collect(Collectors.joining(", ", "", " ")));
-        }
-        sb2.append("{");
-        if (sb2.length() < 84) {
-            sb.append(sb2);
+        if (method.signature != null) {
+            sb.append(method.signature);
+            if (!method.isAbstract) {
+                sb.append(" {");
+            }
         } else {
-            sb.append(indent);
+            StringBuilder sb2 = new StringBuilder();
+            sb2.append(indent);
             if (method.isPublic) {
-                sb.append("public ");
+                sb2.append("public ");
             } else if (method.isProtected) {
-                sb.append("protected ");
+                sb2.append("protected ");
+            } else if (method.isPrivate) {
+                sb2.append("private ");
             }
             if (method.isDefault) {
-                sb.append("default ");
+                sb2.append("default ");
             }
             if (method.isStatic) {
-                sb.append("static ");
+                sb2.append("static ");
             }
-            sb.append(shortName(method.returnType));
-            sb.append(" ");
-            sb.append(method.name);
-            if (method.parameters.size() > 0) {
-                sb.append("(\n");
-                sb.append(method.parameters.stream().map(p -> indent + "        " + shortName(p.type) + " " + p.name)
-                        .collect(Collectors.joining(",\n")));
-                sb.append(")");
-            } else {
-                sb.append("()");
+            if (!method.isConstructor) {
+                sb2.append(method.returnType != null ? shortName(method.returnType) : "void");
+                sb2.append(" ");
             }
+            sb2.append(method.name);
+            sb2.append("(");
+            sb2.append(method.parameters.stream().map(p -> shortName(p.type) + " " + p.name)
+                    .collect(Collectors.joining(", ")));
+            sb2.append(") ");
             if (!method.exceptions.isEmpty()) {
-                sb.append("\n            throws");
-                sb.append(method.exceptions.stream().map(this::shortName).collect(Collectors.joining(", ", " ", "")));
+                sb2.append("throws ");
+                sb2.append(method.exceptions.stream().map(this::shortName).collect(Collectors.joining(", ", "", " ")));
+            }
+            if (!method.isAbstract) {
+                sb2.append("{");
+            }
+            if (sb2.length() < 84) {
+                sb.append(sb2);
+            } else {
+                sb.append(indent);
+                if (method.isPublic) {
+                    sb.append("public ");
+                } else if (method.isProtected) {
+                    sb.append("protected ");
+                } else if (method.isPrivate) {
+                    sb.append("private ");
+                }
+                if (method.isDefault) {
+                    sb.append("default ");
+                }
+                if (!method.isConstructor) {
+                    sb.append(method.returnType != null ? shortName(method.returnType) : "void");
+                    sb.append(" ");
+                }
+                sb.append(method.name);
+                if (method.parameters.size() > 0) {
+                    sb.append("(\n");
+                    sb.append(method.parameters.stream().map(p -> indent + "        " + shortName(p.type) + " " + p.name)
+                            .collect(Collectors.joining(",\n")));
+                    sb.append(")");
+                } else {
+                    sb.append("()");
+                }
+                if (!method.exceptions.isEmpty()) {
+                    sb.append("\n            throws");
+                    sb.append(method.exceptions.stream().map(this::shortName).collect(Collectors.joining(", ", " ", "")));
+                }
+                if (!method.isAbstract) {
+                    sb.append(" {");
+                }
             }
-            sb.append(" {");
         }
-        sb.append("\n");
-        for (String l : method.body.split("\n")) {
-            sb.append(indent);
-            sb.append("    ");
-            sb.append(l);
+        if (!method.isAbstract) {
             sb.append("\n");
+            for (String l : method.body.split("\n")) {
+                sb.append(indent);
+                sb.append("    ");
+                sb.append(l);
+                sb.append("\n");
+            }
+            sb.append(indent).append("}\n");
+        } else {
+            sb.append(";\n");
         }
-        sb.append(indent).append("}\n");
     }
 
     private void printField(StringBuilder sb, String indent, Field field) {
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Javadoc.java b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Javadoc.java
similarity index 95%
rename from tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Javadoc.java
rename to tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Javadoc.java
index 97b1132..a1ca7c6 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Javadoc.java
+++ b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Javadoc.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.maven.packaging.srcgen;
+package org.apache.camel.tooling.util.srcgen;
 
 public class Javadoc {
 
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Method.java b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Method.java
similarity index 87%
rename from tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Method.java
rename to tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Method.java
index 66f388f..8277350 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Method.java
+++ b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Method.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.maven.packaging.srcgen;
+package org.apache.camel.tooling.util.srcgen;
 
 import java.lang.reflect.Type;
 import java.util.ArrayList;
@@ -27,23 +27,40 @@ public class Method {
     boolean isDefault;
     boolean isPublic;
     boolean isProtected;
+    boolean isPrivate;
     boolean isStatic;
     boolean isConstructor;
+    boolean isAbstract;
+    String signature;
     String body;
     List<Param> parameters = new ArrayList<>();
     List<GenericType> exceptions = new ArrayList<>();
     List<Annotation> annotations = new ArrayList<>();
     Javadoc javadoc = new Javadoc();
 
+    public Method setSignature(String signature) {
+        this.signature = signature;
+        return this;
+    }
+
     public Method setPublic() {
         isPublic = true;
         isProtected = false;
+        isPrivate = false;
         return this;
     }
 
     public Method setProtected() {
         isPublic = false;
         isProtected = true;
+        isPrivate = false;
+        return this;
+    }
+
+    public Method setPrivate() {
+        isPublic = false;
+        isProtected = false;
+        isPrivate = true;
         return this;
     }
 
@@ -57,6 +74,11 @@ public class Method {
         return this;
     }
 
+    public Method setAbstract() {
+        isAbstract = true;
+        return this;
+    }
+
     public String getName() {
         return name;
     }
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Param.java b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Param.java
similarity index 95%
rename from tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Param.java
rename to tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Param.java
index 3e79b22..9f6ae5b 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Param.java
+++ b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Param.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.maven.packaging.srcgen;
+package org.apache.camel.tooling.util.srcgen;
 
 public class Param {
 
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Property.java b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Property.java
similarity index 98%
rename from tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Property.java
rename to tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Property.java
index 819e94f..5d29755 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/srcgen/Property.java
+++ b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/srcgen/Property.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.maven.packaging.srcgen;
+package org.apache.camel.tooling.util.srcgen;
 
 public class Property {
 
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointDslMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointDslMojo.java
index aa7ea71..0d54d1a 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointDslMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointDslMojo.java
@@ -51,10 +51,10 @@ import org.apache.camel.maven.packaging.generics.GenericsUtil;
 import org.apache.camel.maven.packaging.model.ComponentModel;
 import org.apache.camel.maven.packaging.model.ComponentOptionModel;
 import org.apache.camel.maven.packaging.model.EndpointOptionModel;
-import org.apache.camel.maven.packaging.srcgen.GenericType;
-import org.apache.camel.maven.packaging.srcgen.GenericType.BoundType;
-import org.apache.camel.maven.packaging.srcgen.JavaClass;
-import org.apache.camel.maven.packaging.srcgen.Method;
+import org.apache.camel.tooling.util.srcgen.GenericType;
+import org.apache.camel.tooling.util.srcgen.GenericType.BoundType;
+import org.apache.camel.tooling.util.srcgen.JavaClass;
+import org.apache.camel.tooling.util.srcgen.Method;
 import org.apache.camel.tooling.util.JSonSchemaHelper;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;