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 4a0a49768fbfcd339800a356e239e669ee6fc5b3
Author: Peter Palaga <ppal...@redhat.com>
AuthorDate: Tue Mar 31 15:45:12 2020 +0200

    CAMEL-14816 Introduce supportLevel and compileTarget in the Catalog
---
 .../java/org/apache/camel/spi/Metadata.java        |  6 ++++
 .../org/apache/camel/tooling/model/BaseModel.java  | 18 +++++++++++
 .../camel/tooling/model/CompilationTarget.java     | 33 ++++++++++++++++++++
 .../org/apache/camel/tooling/model/JsonMapper.java | 32 ++++++++++++++++++++
 .../apache/camel/tooling/model/SupportLevel.java   | 35 ++++++++++++++++++++++
 .../maven/packaging/AbstractGeneratorMojo.java     | 32 ++++++++++++++++++++
 .../camel/maven/packaging/EndpointDslMojo.java     | 30 -------------------
 .../packaging/EndpointSchemaGeneratorMojo.java     | 28 +++++------------
 .../maven/packaging/PackageDataFormatMojo.java     | 35 +++++++---------------
 .../camel/maven/packaging/PackageLanguageMojo.java | 14 +++++++--
 .../camel/maven/packaging/PackageOtherMojo.java    |  5 ++++
 .../camel/maven/packaging/SchemaGeneratorMojo.java | 21 -------------
 .../camel/maven/packaging/SpiGeneratorMojo.java    | 20 +------------
 .../camel/maven/packaging/generics/ClassUtil.java  | 23 +++++++++++---
 14 files changed, 211 insertions(+), 121 deletions(-)

diff --git 
a/core/camel-api/src/generated/java/org/apache/camel/spi/Metadata.java 
b/core/camel-api/src/generated/java/org/apache/camel/spi/Metadata.java
index fbc64e7..0656e0e 100644
--- a/core/camel-api/src/generated/java/org/apache/camel/spi/Metadata.java
+++ b/core/camel-api/src/generated/java/org/apache/camel/spi/Metadata.java
@@ -121,4 +121,10 @@ public @interface Metadata {
      */
     String includeProperties() default "";
 
+    /**
+     * The highest compilation target supported by this entity.
+     */
+    CompilationTarget[] compilationTarget() default CompilationTarget.JVM;
+    enum CompilationTarget {JVM, Native}
+
 }
diff --git 
a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseModel.java
 
b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseModel.java
index 6051963..7c5ae34 100644
--- 
a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseModel.java
+++ 
b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseModel.java
@@ -31,6 +31,8 @@ public abstract class BaseModel<O extends BaseOptionModel> {
     protected boolean deprecated;
     protected String deprecationNote;
     protected final List<O> options = new ArrayList<>();
+    protected SupportLevel supportLevel;
+    protected CompilationTarget compilationTarget;
 
     public static Comparator<BaseModel<?>> compareTitle() {
         return (m1, m2) -> m1.getTitle().compareToIgnoreCase(m2.getTitle());
@@ -118,4 +120,20 @@ public abstract class BaseModel<O extends BaseOptionModel> 
{
         return !Strings.isNullOrEmpty(firstVersion) ? 
Strings.cutLastZeroDigit(firstVersion) : "";
     }
 
+    public SupportLevel getSupportLevel() {
+        return supportLevel;
+    }
+
+    public void setSupportLevel(SupportLevel supportLevel) {
+        this.supportLevel = supportLevel;
+    }
+
+    public CompilationTarget getCompilationTarget() {
+        return compilationTarget;
+    }
+
+    public void setCompilationTarget(CompilationTarget compilationTarget) {
+        this.compilationTarget = compilationTarget;
+    }
+
 }
diff --git 
a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/CompilationTarget.java
 
b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/CompilationTarget.java
new file mode 100644
index 0000000..943f2c5
--- /dev/null
+++ 
b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/CompilationTarget.java
@@ -0,0 +1,33 @@
+/*
+ * 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.tooling.model;
+
+/**
+ * A compilation target supported by some Camel entity, such as component, 
language, data format, etc.
+ */
+public enum CompilationTarget {
+    /** The default compilation target */
+    JVM,
+    /** Native compilation target; implies {@link #JVM} */
+    Native;
+
+    public static CompilationTarget DEFAULT = JVM;
+
+    public static CompilationTarget safeValueOf(String string) {
+        return string == null ? DEFAULT : valueOf(string);
+    }
+}
diff --git 
a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java
 
b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java
index 7a8dfdc..3f4ac18 100644
--- 
a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java
+++ 
b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java
@@ -146,6 +146,12 @@ public final class JsonMapper {
         obj.put("groupId", model.getGroupId());
         obj.put("artifactId", model.getArtifactId());
         obj.put("version", model.getVersion());
+        if (model.getSupportLevel() != null) {
+            obj.put("supportLevel", model.getSupportLevel().name());
+        }
+        if (model.getCompilationTarget() != null) {
+            obj.put("compilationTarget", model.getCompilationTarget().name());
+        }
         obj.entrySet().removeIf(e -> e.getValue() == null);
         JsonObject wrapper = new JsonObject();
         wrapper.put("component", obj);
@@ -199,6 +205,12 @@ public final class JsonMapper {
         obj.put("groupId", model.getGroupId());
         obj.put("artifactId", model.getArtifactId());
         obj.put("version", model.getVersion());
+        if (model.getSupportLevel() != null) {
+            obj.put("supportLevel", model.getSupportLevel().name());
+        }
+        if (model.getCompilationTarget() != null) {
+            obj.put("compilationTarget", model.getCompilationTarget().name());
+        }
         obj.entrySet().removeIf(e -> e.getValue() == null);
         JsonObject wrapper = new JsonObject();
         wrapper.put("dataformat", obj);
@@ -245,6 +257,12 @@ public final class JsonMapper {
         obj.put("deprecationNote", model.getDeprecationNote());
         obj.put("input", model.isInput());
         obj.put("output", model.isOutput());
+        if (model.getSupportLevel() != null) {
+            obj.put("supportLevel", model.getSupportLevel().name());
+        }
+        if (model.getCompilationTarget() != null) {
+            obj.put("compilationTarget", model.getCompilationTarget().name());
+        }
         obj.entrySet().removeIf(e -> e.getValue() == null);
         JsonObject wrapper = new JsonObject();
         wrapper.put("model", obj);
@@ -297,6 +315,12 @@ public final class JsonMapper {
         obj.put("groupId", model.getGroupId());
         obj.put("artifactId", model.getArtifactId());
         obj.put("version", model.getVersion());
+        if (model.getSupportLevel() != null) {
+            obj.put("supportLevel", model.getSupportLevel().name());
+        }
+        if (model.getCompilationTarget() != null) {
+            obj.put("compilationTarget", model.getCompilationTarget().name());
+        }
         obj.entrySet().removeIf(e -> e.getValue() == null);
         JsonObject wrapper = new JsonObject();
         wrapper.put("language", obj);
@@ -337,6 +361,12 @@ public final class JsonMapper {
         obj.put("groupId", model.getGroupId());
         obj.put("artifactId", model.getArtifactId());
         obj.put("version", model.getVersion());
+        if (model.getSupportLevel() != null) {
+            obj.put("supportLevel", model.getSupportLevel().name());
+        }
+        if (model.getCompilationTarget() != null) {
+            obj.put("compilationTarget", model.getCompilationTarget().name());
+        }
         obj.entrySet().removeIf(e -> e.getValue() == null);
         JsonObject wrapper = new JsonObject();
         wrapper.put("other", obj);
@@ -352,6 +382,8 @@ public final class JsonMapper {
         model.setDeprecated(mobj.getBooleanOrDefault("deprecated", false));
         model.setDeprecationNote(mobj.getString("label"));
         model.setJavaType(mobj.getString("javaType"));
+        
model.setCompilationTarget(CompilationTarget.safeValueOf(mobj.getString("compilationTarget")));
+        
model.setSupportLevel(SupportLevel.safeValueOf(mobj.getString("supportLevel")));
     }
 
     private static void parseOption(JsonObject mp, BaseOptionModel option, 
String name) {
diff --git 
a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/SupportLevel.java
 
b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/SupportLevel.java
new file mode 100644
index 0000000..baf2773
--- /dev/null
+++ 
b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/SupportLevel.java
@@ -0,0 +1,35 @@
+/*
+ * 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.tooling.model;
+
+/**
+ * A level of support for some Camel entity, such as component, language, data 
format, etc.
+ */
+public enum SupportLevel {
+    /** An experimental entity that may change or be removed in minor release 
*/
+    Preview,
+
+    /** A stable entity */
+    Stable;
+
+    public static SupportLevel DEFAULT = Stable;
+
+    public static SupportLevel safeValueOf(String string) {
+        return string == null ? DEFAULT : valueOf(string);
+    }
+
+}
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGeneratorMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGeneratorMojo.java
index 5f7e9ec..a307cb8 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGeneratorMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGeneratorMojo.java
@@ -25,6 +25,7 @@ import java.util.Collections;
 import java.util.function.Supplier;
 
 import org.apache.camel.tooling.util.FileUtil;
+import org.apache.maven.artifact.DependencyResolutionRequiredException;
 import org.apache.maven.model.Resource;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
@@ -60,6 +61,8 @@ public abstract class AbstractGeneratorMojo extends 
AbstractMojo {
     @Component
     protected BuildContext buildContext;
 
+    private DynamicClassLoader projectClassLoader;
+
     public void execute(MavenProject project,
                         MavenProjectHelper projectHelper,
                         BuildContext buildContext) throws 
MojoFailureException, MojoExecutionException {
@@ -158,4 +161,33 @@ public abstract class AbstractGeneratorMojo extends 
AbstractMojo {
         };
     }
 
+    protected Class<?> loadClass(String loadClassName) {
+        Class<?> optionClass;
+        String org = loadClassName;
+        while (true) {
+            try {
+                optionClass = getProjectClassLoader().loadClass(loadClassName);
+                break;
+            } catch (ClassNotFoundException e) {
+                int dotIndex = loadClassName.lastIndexOf('.');
+                if (dotIndex == -1) {
+                    throw new IllegalArgumentException(org);
+                } else {
+                    loadClassName = loadClassName.substring(0, dotIndex) + "$" 
+ loadClassName.substring(dotIndex + 1);
+                }
+            }
+        }
+        return optionClass;
+    }
+
+    protected final DynamicClassLoader getProjectClassLoader() {
+        if (projectClassLoader == null) {
+            try {
+                projectClassLoader = 
DynamicClassLoader.createDynamicClassLoader(project.getCompileClasspathElements());
+            } catch (DependencyResolutionRequiredException e) {
+                throw new RuntimeException("Unable to create project 
classloader", e);
+            }
+        }
+        return projectClassLoader;
+    }
 }
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 6cfc51a..322ab9b 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
@@ -143,8 +143,6 @@ public class EndpointDslMojo extends AbstractGeneratorMojo {
     @Parameter
     protected File outputResourcesDir;
 
-    DynamicClassLoader projectClassLoader;
-
     @Override
     public void execute(MavenProject project, MavenProjectHelper 
projectHelper, BuildContext buildContext) throws MojoFailureException, 
MojoExecutionException {
         buildDir = new File(project.getBuild().getDirectory());
@@ -158,11 +156,6 @@ public class EndpointDslMojo extends AbstractGeneratorMojo 
{
 
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
-        try {
-            projectClassLoader = 
DynamicClassLoader.createDynamicClassLoader(project.getTestClasspathElements());
-        } catch 
(org.apache.maven.artifact.DependencyResolutionRequiredException e) {
-            throw new RuntimeException(e.getMessage(), e);
-        }
 
         Path root = findCamelDirectory(baseDir, 
"core/camel-endpointdsl").toPath();
         if (sourcesOutputDir == null) {
@@ -755,25 +748,6 @@ public class EndpointDslMojo extends AbstractGeneratorMojo 
{
         return PRIMITIVEMAP.containsKey(type);
     }
 
-    private Class<?> loadClass(String loadClassName) {
-        Class<?> optionClass;
-        String org = loadClassName;
-        while (true) {
-            try {
-                optionClass = getProjectClassLoader().loadClass(loadClassName);
-                break;
-            } catch (ClassNotFoundException e) {
-                int dotIndex = loadClassName.lastIndexOf('.');
-                if (dotIndex == -1) {
-                    throw new IllegalArgumentException(org);
-                } else {
-                    loadClassName = loadClassName.substring(0, dotIndex) + "$" 
+ loadClassName.substring(dotIndex + 1);
-                }
-            }
-        }
-        return optionClass;
-    }
-
     private GenericType getType(JavaClass javaClass, Map<String, JavaClass> 
enumClasses, List<String> enums, String type) {
         type = type.trim();
         // Check if this is an array
@@ -880,10 +854,6 @@ public class EndpointDslMojo extends AbstractGeneratorMojo 
{
         return getProjectClassLoader().generateDummyClass(clazzName);
     }
 
-    private DynamicClassLoader getProjectClassLoader() {
-        return projectClassLoader;
-    }
-
     private static String loadComponentJson(Map<File, Supplier<String>> 
jsonFiles, String componentName) {
         return loadJsonOfType(jsonFiles, componentName, "component");
     }
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojo.java
index 74b2671..d575a27 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojo.java
@@ -47,6 +47,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import org.apache.camel.maven.packaging.generics.ClassUtil;
 import org.apache.camel.maven.packaging.generics.GenericsUtil;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
@@ -55,10 +56,12 @@ import org.apache.camel.spi.UriParams;
 import org.apache.camel.spi.UriPath;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.tooling.model.BaseOptionModel;
+import org.apache.camel.tooling.model.CompilationTarget;
 import org.apache.camel.tooling.model.ComponentModel;
 import org.apache.camel.tooling.model.ComponentModel.ComponentOptionModel;
 import org.apache.camel.tooling.model.ComponentModel.EndpointOptionModel;
 import org.apache.camel.tooling.model.JsonMapper;
+import org.apache.camel.tooling.model.SupportLevel;
 import org.apache.camel.tooling.util.JavadocHelper;
 import org.apache.camel.tooling.util.PackageHelper;
 import org.apache.camel.tooling.util.Strings;
@@ -100,7 +103,6 @@ public class EndpointSchemaGeneratorMojo extends 
AbstractGeneratorMojo {
     @Parameter(defaultValue = "${project.basedir}/src/generated/resources")
     protected File resourcesOutputDir;
 
-    protected ClassLoader projectClassLoader;
     protected IndexView indexView;
     protected Map<String, String> resources = new HashMap<>();
     protected List<Path> sourceRoots;
@@ -460,6 +462,11 @@ public class EndpointSchemaGeneratorMojo extends 
AbstractGeneratorMojo {
         if (!Strings.isNullOrEmpty(firstVersion)) {
             model.setFirstVersion(firstVersion);
         }
+        model.setSupportLevel(
+                ClassUtil.hasAnnotation("org.apache.camel.Experimental", 
endpointClassElement)
+                        ? SupportLevel.Preview
+                        : SupportLevel.Stable);
+        model.setCompilationTarget(CompilationTarget.JVM);
 
         // get the java type class name via the @Component annotation from its
         // component class
@@ -1028,25 +1035,6 @@ public class EndpointSchemaGeneratorMojo extends 
AbstractGeneratorMojo {
         }
     }
 
-    private Class<?> loadClass(String name) {
-        try {
-            return getProjectClassLoader().loadClass(name);
-        } catch (ClassNotFoundException e) {
-            throw (NoClassDefFoundError) new 
NoClassDefFoundError(name).initCause(e);
-        }
-    }
-
-    private ClassLoader getProjectClassLoader() {
-        if (projectClassLoader == null) {
-            try {
-                projectClassLoader = 
DynamicClassLoader.createDynamicClassLoader(project.getCompileClasspathElements());
-            } catch (DependencyResolutionRequiredException e) {
-                throw new RuntimeException("Unable to create project 
classloader", e);
-            }
-        }
-        return projectClassLoader;
-    }
-
     private IndexView getIndex() {
         if (indexView == null) {
             Path output = Paths.get(project.getBuild().getOutputDirectory());
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageDataFormatMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageDataFormatMojo.java
index 27cc67f..ca2070e 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageDataFormatMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageDataFormatMojo.java
@@ -31,16 +31,17 @@ import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import org.apache.camel.maven.packaging.generics.ClassUtil;
 import org.apache.camel.spi.Metadata;
-import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.tooling.model.CompilationTarget;
 import org.apache.camel.tooling.model.DataFormatModel;
 import org.apache.camel.tooling.model.DataFormatModel.DataFormatOptionModel;
 import org.apache.camel.tooling.model.EipModel;
 import org.apache.camel.tooling.model.EipModel.EipOptionModel;
 import org.apache.camel.tooling.model.JsonMapper;
+import org.apache.camel.tooling.model.SupportLevel;
 import org.apache.camel.tooling.util.PackageHelper;
 import org.apache.camel.tooling.util.Strings;
-import org.apache.maven.artifact.DependencyResolutionRequiredException;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.logging.Log;
@@ -184,7 +185,7 @@ public class PackageDataFormatMojo extends 
AbstractGeneratorMojo {
                             excluded = metadata.excludeProperties();
                         }
 
-                        DataFormatModel dataFormatModel = 
extractDataFormatModel(project, json, name, javaType, included, excluded);
+                        DataFormatModel dataFormatModel = 
extractDataFormatModel(project, json, name, clazz, included, excluded);
                         if (log.isDebugEnabled()) {
                             log.debug("Model: " + dataFormatModel);
                         }
@@ -241,26 +242,7 @@ public class PackageDataFormatMojo extends 
AbstractGeneratorMojo {
         return count;
     }
 
-    private Class<?> loadClass(String name) {
-        try {
-            return getProjectClassLoader().loadClass(name);
-        } catch (ClassNotFoundException e) {
-            throw (NoClassDefFoundError) new 
NoClassDefFoundError(name).initCause(e);
-        }
-    }
-
-    private ClassLoader getProjectClassLoader() {
-        if (projectClassLoader == null) {
-            try {
-                projectClassLoader = 
DynamicClassLoader.createDynamicClassLoader(project.getCompileClasspathElements());
-            } catch (DependencyResolutionRequiredException e) {
-                throw new RuntimeException("Unable to create project 
classloader", e);
-            }
-        }
-        return projectClassLoader;
-    }
-
-    private static DataFormatModel extractDataFormatModel(MavenProject 
project, String json, String name, String javaType,
+    private static DataFormatModel extractDataFormatModel(MavenProject 
project, String json, String name, Class<?> javaType,
                                                           String 
includedProperties, String excludedProperties) {
         EipModel def = JsonMapper.generateEipModel(json);
         DataFormatModel model = new DataFormatModel();
@@ -271,12 +253,17 @@ public class PackageDataFormatMojo extends 
AbstractGeneratorMojo {
         model.setLabel(def.getLabel());
         model.setDeprecated(def.isDeprecated());
         model.setDeprecationNote(def.getDeprecationNote());
-        model.setJavaType(javaType);
+        model.setJavaType(javaType.getCanonicalName());
         model.setModelName(def.getName());
         model.setModelJavaType(def.getJavaType());
         model.setGroupId(project.getGroupId());
         model.setArtifactId(project.getArtifactId());
         model.setVersion(project.getVersion());
+        model.setSupportLevel(
+                ClassUtil.hasAnnotation("org.apache.camel.Experimental", 
javaType)
+                        ? SupportLevel.Preview
+                        : SupportLevel.Stable);
+        model.setCompilationTarget(CompilationTarget.JVM);
 
         for (EipOptionModel opt : def.getOptions()) {
             DataFormatOptionModel option = new DataFormatOptionModel();
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java
index 9d7fb78..1b7a9d4 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java
@@ -25,10 +25,13 @@ import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import org.apache.camel.maven.packaging.generics.ClassUtil;
+import org.apache.camel.tooling.model.CompilationTarget;
 import org.apache.camel.tooling.model.EipModel;
 import org.apache.camel.tooling.model.EipModel.EipOptionModel;
 import org.apache.camel.tooling.model.JsonMapper;
 import org.apache.camel.tooling.model.LanguageModel;
+import org.apache.camel.tooling.model.SupportLevel;
 import org.apache.camel.tooling.model.LanguageModel.LanguageOptionModel;
 import org.apache.camel.tooling.util.PackageHelper;
 import org.apache.maven.plugin.MojoExecutionException;
@@ -145,7 +148,7 @@ public class PackageLanguageMojo extends 
AbstractGeneratorMojo {
                 if (core != null) {
                     for (Map.Entry<String, String> entry : 
javaTypes.entrySet()) {
                         String name = entry.getKey();
-                        String javaType = entry.getValue();
+                        Class<?> javaType = loadClass(entry.getValue());
                         String modelName = asModelName(name);
 
                         String json = PackageHelper.loadText(new File(core, 
"src/generated/resources/org/apache/camel/model/language/" + modelName + 
PackageHelper.JSON_SUFIX));
@@ -192,7 +195,7 @@ public class PackageLanguageMojo extends 
AbstractGeneratorMojo {
         return count;
     }
 
-    protected static LanguageModel extractLanguageModel(MavenProject project, 
String json, String name, String javaType) {
+    protected static LanguageModel extractLanguageModel(MavenProject project, 
String json, String name, Class<?> javaType) {
         EipModel def = JsonMapper.generateEipModel(json);
         LanguageModel model = new LanguageModel();
         model.setName(name);
@@ -202,12 +205,17 @@ public class PackageLanguageMojo extends 
AbstractGeneratorMojo {
         model.setLabel(def.getLabel());
         model.setDeprecated(def.isDeprecated());
         model.setDeprecationNote(def.getDeprecationNote());
-        model.setJavaType(javaType);
+        model.setJavaType(javaType.getCanonicalName());
         model.setModelName(def.getName());
         model.setModelJavaType(def.getJavaType());
         model.setGroupId(project.getGroupId());
         model.setArtifactId(project.getArtifactId());
         model.setVersion(project.getVersion());
+        model.setSupportLevel(
+                ClassUtil.hasAnnotation("org.apache.camel.Experimental", 
javaType)
+                        ? SupportLevel.Preview
+                        : SupportLevel.Stable);
+        model.setCompilationTarget(CompilationTarget.JVM);
 
         for (EipOptionModel opt : def.getOptions()) {
             LanguageOptionModel option = new LanguageOptionModel();
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageOtherMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageOtherMojo.java
index 8eb2de0..6ea4963 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageOtherMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageOtherMojo.java
@@ -19,8 +19,10 @@ package org.apache.camel.maven.packaging;
 import java.io.File;
 import java.util.Collections;
 
+import org.apache.camel.tooling.model.CompilationTarget;
 import org.apache.camel.tooling.model.JsonMapper;
 import org.apache.camel.tooling.model.OtherModel;
+import org.apache.camel.tooling.model.SupportLevel;
 import org.apache.camel.tooling.util.PackageHelper;
 import org.apache.camel.tooling.util.Strings;
 import org.apache.maven.plugin.MojoExecutionException;
@@ -122,6 +124,9 @@ public class PackageOtherMojo extends AbstractGeneratorMojo 
{
                 title = Strings.camelDashToTitle(name);
             }
             otherModel.setTitle(title);
+            final SupportLevel supportLevel = 
SupportLevel.safeValueOf(project.getProperties().getProperty("supportLevel"));
+            otherModel.setSupportLevel(supportLevel);
+            otherModel.setCompilationTarget(CompilationTarget.JVM);
 
             if (log.isDebugEnabled()) {
                 log.debug("Model: " + otherModel);
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SchemaGeneratorMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SchemaGeneratorMojo.java
index c9d2db8..4e21a63 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SchemaGeneratorMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SchemaGeneratorMojo.java
@@ -56,7 +56,6 @@ import org.apache.camel.tooling.util.JavadocHelper;
 import org.apache.camel.tooling.util.PackageHelper;
 import org.apache.camel.tooling.util.Strings;
 import org.apache.camel.tooling.util.srcgen.GenericType;
-import org.apache.maven.artifact.DependencyResolutionRequiredException;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
@@ -104,7 +103,6 @@ public class SchemaGeneratorMojo extends 
AbstractGeneratorMojo {
     @Parameter(defaultValue = "${project.basedir}/src/generated/resources")
     protected File resourcesOutputDir;
 
-    private ClassLoader projectClassLoader;
     private IndexView indexView;
     private final Map<String, JavaClassSource> sources = new HashMap<>();
 
@@ -228,25 +226,6 @@ public class SchemaGeneratorMojo extends 
AbstractGeneratorMojo {
 
     }
 
-    private Class<?> loadClass(String name) {
-        try {
-            return getProjectClassLoader().loadClass(name);
-        } catch (ClassNotFoundException e) {
-            throw (NoClassDefFoundError) new 
NoClassDefFoundError(name).initCause(e);
-        }
-    }
-
-    private ClassLoader getProjectClassLoader() {
-        if (projectClassLoader == null) {
-            try {
-                projectClassLoader = 
DynamicClassLoader.createDynamicClassLoader(project.getCompileClasspathElements());
-            } catch (DependencyResolutionRequiredException e) {
-                throw new RuntimeException("Unable to create project 
classloader", e);
-            }
-        }
-        return projectClassLoader;
-    }
-
     private IndexView getIndex() {
         if (indexView == null) {
             Path output = Paths.get(project.getBuild().getOutputDirectory());
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpiGeneratorMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpiGeneratorMojo.java
index 4da6d7e..de40309 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpiGeneratorMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpiGeneratorMojo.java
@@ -34,7 +34,6 @@ import java.util.stream.Collectors;
 import org.apache.camel.spi.annotations.ConstantProvider;
 import org.apache.camel.spi.annotations.ServiceFactory;
 import org.apache.camel.spi.annotations.SubServiceFactory;
-import org.apache.maven.artifact.DependencyResolutionRequiredException;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
@@ -64,8 +63,6 @@ public class SpiGeneratorMojo extends AbstractGeneratorMojo {
     @Parameter(defaultValue = "${project.basedir}/src/generated/resources")
     protected File resourcesOutputDir;
 
-    private ClassLoader projectClassLoader;
-
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
         if (classesDirectory == null) {
@@ -168,21 +165,6 @@ public class SpiGeneratorMojo extends 
AbstractGeneratorMojo {
         return Files.isRegularFile(file);
     }
 
-    private ClassLoader getProjectClassLoader() throws MojoExecutionException {
-        if (projectClassLoader == null) {
-            projectClassLoader = createProjectClassLoader();
-        }
-        return projectClassLoader;
-    }
-
-    private DynamicClassLoader createProjectClassLoader() throws 
MojoExecutionException {
-        try {
-            return 
DynamicClassLoader.createDynamicClassLoader(project.getCompileClasspathElements());
-        } catch (DependencyResolutionRequiredException e) {
-            throw new MojoExecutionException("Unable to create project 
classloader", e);
-        }
-    }
-
     private IndexView getIndex() throws MojoExecutionException {
         try {
             List<IndexView> indices = new ArrayList<>();
@@ -223,7 +205,7 @@ public class SpiGeneratorMojo extends AbstractGeneratorMojo 
{
         String pn = fqn.substring(0, fqn.lastIndexOf('.'));
         String cn = fqn.substring(fqn.lastIndexOf('.') + 1);
 
-        StringBuilder w = new StringBuilder(); 
+        StringBuilder w = new StringBuilder();
         w.append("/* " + GENERATED_MSG + " */\n");
         w.append("package ").append(pn).append(";\n");
         w.append("\n");
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/generics/ClassUtil.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/generics/ClassUtil.java
index 072b239..ab2ee49 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/generics/ClassUtil.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/generics/ClassUtil.java
@@ -25,6 +25,7 @@ import java.lang.reflect.WildcardType;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.stream.Stream;
 
 /**
  * Utility classes with respect to the class operations.
@@ -80,7 +81,7 @@ public final class ClassUtil {
      * {@link ParameterizedType}, it returns the raw type otherwise it return
      * the casted {@link Class} of the type argument.
      * </p>
-     * 
+     *
      * @param type class or parametrized type
      * @return
      */
@@ -91,7 +92,7 @@ public final class ClassUtil {
     /**
      * Returns true if type is an instance of <code>ParameterizedType</code>
      * else otherwise.
-     * 
+     *
      * @param type type of the artifact
      * @return true if type is an instance of <code>ParameterizedType</code>
      */
@@ -102,7 +103,7 @@ public final class ClassUtil {
     /**
      * Returns true if type is an instance of <code>WildcardType</code> else
      * otherwise.
-     * 
+     *
      * @param type type of the artifact
      * @return true if type is an instance of <code>WildcardType</code>
      */
@@ -112,7 +113,7 @@ public final class ClassUtil {
 
     /**
      * Returns true if rhs is assignable type to the lhs, false otherwise.
-     * 
+     *
      * @param lhs left hand side class
      * @param rhs right hand side class
      * @return true if rhs is assignable to lhs
@@ -201,4 +202,18 @@ public final class ClassUtil {
 
         return null;
     }
+
+    /**
+     * @param fqAnnotationName a fully qualified runtime annotation name whose 
presence on the given class is to be
+     *            checked
+     * @param cl the class to check
+     * @return {@code true} if the given {@link Class} is annotated with the 
given <strong>runtime</strong> annotation;
+     *         {@code false} otherwise
+     */
+    public static boolean hasAnnotation(String fqAnnotationName, Class<?> cl) {
+        return Stream.of(cl.getAnnotations())
+            .map(annotation -> annotation.annotationType().getName())
+            .filter(className -> fqAnnotationName.equals(className))
+            .findFirst().isPresent();
+    }
 }

Reply via email to