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 2021/12/22 08:36:26 UTC
[camel] 02/04: CAMEL-17194: endpointdsl - Prepare for generate only once during project build.
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 b7c6ec183eb7fe9a1d0989db769eda34988b36ff
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Dec 22 09:07:11 2021 +0100
CAMEL-17194: endpointdsl - Prepare for generate only once during project build.
---
.../camel/maven/packaging/EndpointDslMojo.java | 97 ++++------------------
1 file changed, 18 insertions(+), 79 deletions(-)
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 1534970..4f6da63 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
@@ -27,11 +27,6 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.function.Supplier;
import java.util.stream.Collectors;
import javax.annotation.Generated;
@@ -41,7 +36,6 @@ import org.apache.camel.tooling.model.ComponentModel;
import org.apache.camel.tooling.model.ComponentModel.EndpointOptionModel;
import org.apache.camel.tooling.model.JsonMapper;
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.camel.tooling.util.srcgen.JavaClass;
@@ -62,7 +56,6 @@ import org.jboss.forge.roaster.model.source.MethodSource;
import org.jboss.forge.roaster.model.source.ParameterSource;
import org.sonatype.plexus.build.incremental.BuildContext;
-import static org.apache.camel.maven.packaging.MojoHelper.getComponentPath;
import static org.apache.camel.tooling.util.PackageHelper.findCamelDirectory;
import static org.apache.camel.tooling.util.PackageHelper.loadText;
@@ -73,8 +66,6 @@ import static org.apache.camel.tooling.util.PackageHelper.loadText;
defaultPhase = LifecyclePhase.PROCESS_CLASSES)
public class EndpointDslMojo extends AbstractGeneratorMojo {
- private static final Map<Path, Lock> LOCKS = new ConcurrentHashMap<>();
-
/**
* The project build directory
*/
@@ -118,10 +109,12 @@ public class EndpointDslMojo extends AbstractGeneratorMojo {
protected File outputResourcesDir;
/**
- * The components directory where all the Apache Camel components are
+ * The catalog directory where the component json files are
*/
- @Parameter(defaultValue = "${project.build.directory}/../../../components")
- protected File componentsDir;
+ @Parameter(defaultValue = "${project.build.directory}/../../../catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components")
+ protected File jsonDir;
+
+ private transient String licenseHeader;
@Override
public void execute(MavenProject project, MavenProjectHelper projectHelper, BuildContext buildContext)
@@ -153,35 +146,14 @@ public class EndpointDslMojo extends AbstractGeneratorMojo {
List<ComponentModel> models = new ArrayList<>();
- for (File dir : componentsDir.listFiles()) {
- List<Path> subs = getComponentPath(dir.toPath());
- for (Path sub : subs) {
- sub = sub.resolve("src/generated/resources/");
- PackageHelper.walk(sub).forEach(p -> {
- String f = p.getFileName().toString();
- if (f.endsWith(PackageHelper.JSON_SUFIX)) {
- try {
- BaseModel<?> model = JsonMapper.generateModel(p);
- if (model instanceof ComponentModel) {
- models.add((ComponentModel) model);
- }
- } catch (Exception e) {
- // ignore as its not a camel model
- }
- }
- });
- }
+ for (File file : jsonDir.listFiles()) {
+ BaseModel<?> model = JsonMapper.generateModel(file.toPath());
+ models.add((ComponentModel) model);
}
models.sort((o1, o2) -> o1.getScheme().compareToIgnoreCase(o2.getScheme()));
// generate component endpoint DSL files and write them
- Lock lock = LOCKS.computeIfAbsent(root, d -> new ReentrantLock());
- lock.lock();
- try {
- executeComponent(models);
- } finally {
- lock.unlock();
- }
+ executeComponent(models);
}
private void executeComponent(List<ComponentModel> allModels) throws MojoFailureException {
@@ -191,6 +163,14 @@ public class EndpointDslMojo extends AbstractGeneratorMojo {
// Group the models by implementing classes
Map<String, List<ComponentModel>> grModels
= allModels.stream().collect(Collectors.groupingBy(ComponentModel::getJavaType));
+
+ // load license header
+ try (InputStream is = getClass().getClassLoader().getResourceAsStream("license-header-java.txt")) {
+ this.licenseHeader = loadText(is);
+ } catch (Exception e) {
+ throw new MojoFailureException("Error loading license-header-java.txt file", e);
+ }
+
for (List<ComponentModel> compModels : grModels.values()) {
ComponentModel model = compModels.get(0); // They should be equivalent
List<String> aliases = compModels.stream().map(ComponentModel::getScheme).sorted().collect(Collectors.toList());
@@ -941,43 +921,6 @@ public class EndpointDslMojo extends AbstractGeneratorMojo {
return getProjectClassLoader().generateDummyClass(clazzName);
}
- private static String loadComponentJson(Map<File, Supplier<String>> jsonFiles, String componentName) {
- return loadJsonOfType(jsonFiles, componentName, "component");
- }
-
- private static String loadJsonOfType(Map<File, Supplier<String>> jsonFiles, String modelName, String type) {
- for (Map.Entry<File, Supplier<String>> entry : jsonFiles.entrySet()) {
- if (entry.getKey().getName().equals(modelName + PackageHelper.JSON_SUFIX)) {
- String json = entry.getValue().get();
- if (type.equals(PackageHelper.getSchemaKind(json))) {
- return json;
- }
- }
- }
- return null;
- }
-
- private void findComponentNames(File dir, Set<String> componentNames) {
- File f = new File(dir, "classes/META-INF/services/org/apache/camel/component");
-
- if (f.exists() && f.isDirectory()) {
- File[] files = f.listFiles();
- if (files != null) {
- for (File file : files) {
- // skip directories as there may be a sub .resolver
- // directory
- if (file.isDirectory()) {
- continue;
- }
- String name = file.getName();
- if (name.charAt(0) != '.') {
- componentNames.add(name);
- }
- }
- }
- }
- }
-
private boolean writeSourceIfChanged(JavaClass source, String filePath, String fileName, boolean innerClassesLast)
throws MojoFailureException {
return writeSourceIfChanged(source.printClass(innerClassesLast), filePath, fileName);
@@ -985,11 +928,7 @@ public class EndpointDslMojo extends AbstractGeneratorMojo {
private boolean writeSourceIfChanged(String source, String filePath, String fileName) throws MojoFailureException {
try {
- String header;
- try (InputStream is = getClass().getClassLoader().getResourceAsStream("license-header-java.txt")) {
- header = loadText(is);
- }
- String code = header + source;
+ String code = licenseHeader + source;
getLog().debug("Source code generated:\n" + code);
return updateResource(sourcesOutputDir.toPath(), filePath + "/" + fileName, code);