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 2023/06/14 14:24:54 UTC

[camel] 01/02: Revert "Simplify the SyncPropertiesMojo and make it work with maven 4"

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

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

commit 3d970c560a0d06ecb04c86fc82dad01eac5e1319
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Jun 14 16:12:37 2023 +0200

    Revert "Simplify the SyncPropertiesMojo and make it work with maven 4"
    
    This reverts commit 82b8cf1f28252bb7fc26bfd37df6219f3fd46b37.
---
 .../maven/sync/properties/SyncPropertiesMojo.java  | 86 ++++++++++++++++------
 .../main/resources/camel-dependencies-template.xml |  6 +-
 2 files changed, 68 insertions(+), 24 deletions(-)

diff --git a/tooling/maven/sync-properties-maven-plugin/src/main/java/org/apache/camel/maven/sync/properties/SyncPropertiesMojo.java b/tooling/maven/sync-properties-maven-plugin/src/main/java/org/apache/camel/maven/sync/properties/SyncPropertiesMojo.java
index 1226b5f5a9c..d2471d535eb 100644
--- a/tooling/maven/sync-properties-maven-plugin/src/main/java/org/apache/camel/maven/sync/properties/SyncPropertiesMojo.java
+++ b/tooling/maven/sync-properties-maven-plugin/src/main/java/org/apache/camel/maven/sync/properties/SyncPropertiesMojo.java
@@ -17,14 +17,21 @@
 package org.apache.camel.maven.sync.properties;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import java.util.Properties;
+import java.util.TreeMap;
 
 import org.apache.camel.tooling.util.FileUtil;
 import org.apache.camel.tooling.util.PackageHelper;
 import org.apache.camel.util.IOHelper;
+import org.apache.camel.util.OrderedProperties;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -32,7 +39,6 @@ import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.util.ReaderFactory;
 
 /**
  * Copy the properties from a source POM to a different destination POM for syncing purposes.
@@ -59,23 +65,67 @@ public class SyncPropertiesMojo extends AbstractMojo {
         dir = PackageHelper.findCamelDirectory(baseDir, "camel-dependencies");
         File targetPom = new File(dir, "pom.xml");
         dir = PackageHelper.findCamelDirectory(baseDir, "etc");
+        File licenseHeader = new File(dir, "apache-header.xml");
 
         try {
-            String sourceStr = IOHelper.toString(ReaderFactory.newXmlReader(Files.newInputStream(sourcePom.toPath())));
-            String targetStr = IOHelper.toString(ReaderFactory
-                    .newXmlReader(SyncPropertiesMojo.class.getResourceAsStream("/camel-dependencies-template.xml")));
+            Properties parentProp;
+            String generatedVersion;
 
-            String version = findGroup(sourceStr, "<parent>.*?(?<v><version>.*?</version>).*?</parent>", "v");
-            String properties = findGroup(sourceStr, "(?<p><properties>.*?</properties>)", "p");
+            if (getLog().isDebugEnabled()) {
+                getLog().debug("Reading source file " + sourcePom.toPath());
+            }
+
+            try (FileReader reader = new FileReader(sourcePom)) {
+                MavenXpp3Reader mavenReader = new MavenXpp3Reader();
+                Model model = mavenReader.read(reader);
+
+                MavenProject sourceProject = new MavenProject(model);
+                parentProp = sourceProject.getProperties();
+                generatedVersion = sourceProject.getVersion();
+            }
+
+            InputStream is = null;
+            try {
+                is = SyncPropertiesMojo.class.getResourceAsStream("/camel-dependencies-template.xml");
+                MavenXpp3Reader mavenReader = new MavenXpp3Reader();
+                Model model = mavenReader.read(is);
+
+                // sort the properties
+                OrderedProperties op = new OrderedProperties();
+                op.putAll(new TreeMap<>(parentProp));
+
+                MavenProject targetProject = new MavenProject(model);
+                targetProject.getModel().setProperties(op);
 
-            version = version.replaceAll("\\$", "\\\\\\$");
-            properties = properties.replaceAll("\\$", "\\\\\\$");
+                if (getLog().isDebugEnabled()) {
+                    getLog().debug("Set version of target pom to " + generatedVersion);
+                }
+                targetProject.setVersion(generatedVersion);
 
-            targetStr = targetStr.replaceFirst("\\Q<version>@version@</version>\\E", version);
-            targetStr = targetStr.replaceFirst("\\Q<properties>@properties@</properties>\\E", properties);
+                MavenXpp3Writer mavenWriter = new MavenXpp3Writer();
+                mavenWriter.write(new FileWriter(targetPom), model);
+            } finally {
+                IOHelper.close(is);
+            }
+
+            // add license header in top
+            getLog().debug("Add license header...");
+            String text = IOHelper.loadText(new FileInputStream(targetPom));
+            String text2 = IOHelper.loadText(new FileInputStream(licenseHeader));
+            StringBuilder sb = new StringBuilder(text);
+            int pos = sb.indexOf("<project");
+            sb.insert(pos, text2);
+
+            // avoid annoying http -> https change when rebuilding
+            getLog().debug("Replacing xsd location ...");
+            String out = sb.toString();
+            out = out.replace("https://maven.apache.org/xsd/maven-4.0.0.xsd", "http://maven.apache.org/xsd/maven-4.0.0.xsd");
+
+            // avoid IDE complaining about empty tag
+            out = out.replace("<relativePath></relativePath>", "<relativePath />");
 
             // write lines
-            boolean updated = FileUtil.updateFile(targetPom.toPath(), targetStr, StandardCharsets.UTF_8);
+            boolean updated = FileUtil.updateFile(targetPom.toPath(), out, StandardCharsets.UTF_8);
             if (updated) {
                 getLog().info("Updated: " + targetPom);
             }
@@ -85,12 +135,4 @@ public class SyncPropertiesMojo extends AbstractMojo {
         }
     }
 
-    private String findGroup(String str, String regex, String group) {
-        Matcher m = Pattern.compile(regex, Pattern.DOTALL).matcher(str);
-        if (m.find()) {
-            return m.group(group);
-        }
-        return str;
-    }
-
 }
diff --git a/tooling/maven/sync-properties-maven-plugin/src/main/resources/camel-dependencies-template.xml b/tooling/maven/sync-properties-maven-plugin/src/main/resources/camel-dependencies-template.xml
index 88f5174071e..a79e851e05e 100644
--- a/tooling/maven/sync-properties-maven-plugin/src/main/resources/camel-dependencies-template.xml
+++ b/tooling/maven/sync-properties-maven-plugin/src/main/resources/camel-dependencies-template.xml
@@ -30,13 +30,15 @@
 
     <groupId>org.apache.camel</groupId>
     <artifactId>camel-dependencies</artifactId>
-    <version>@version@</version>
+    <version>3.21.0-SNAPSHOT</version>
 
     <packaging>pom</packaging>
     <name>Camel :: Dependencies</name>
     <description>Camel Dependencies POM</description>
 
     <!-- sync properties here from parent/pom.xml -->
-    <properties>@properties@</properties>
+    <properties>
+
+    </properties>
 
 </project>