From 95c8e68d0d2bb31e0069c4af1ffeb82109d7bf60 Mon Sep 17 00:00:00 2001 From: "Brian M. Long" Date: Thu, 14 Oct 2021 17:16:42 -0400 Subject: [PATCH] renamed goals; added better merge-dirs --- .../folder1/file11.txt | 0 .../folder1/file12.txt | 0 .../folder2/file11.txt | 0 .../folder2/file21.txt | 0 src/it/merge-dirs-complex/pom.xml | 79 ++++++++++++ .../pom.xml | 4 +- .../folder1/file11.txt | 0 .../folder1/file12.txt | 0 .../folder2/file11.txt | 0 .../folder2/file21.txt | 0 .../pom.xml | 4 +- src/it/merge-files-simple/folder1/file11.txt | 1 + src/it/merge-files-simple/folder1/file12.txt | 1 + src/it/merge-files-simple/folder2/file11.txt | 1 + src/it/merge-files-simple/folder2/file21.txt | 1 + .../pom.xml | 4 +- ...Mojo.java => AbstractFileContentMojo.java} | 2 +- .../maven/merge/AbstractMergeMojo.java | 116 ++++++++++++++++++ .../merge/AppendDirectoriesContentMojo.java | 80 ------------ .../maven/merge/AppendFilesContentMojo.java | 2 +- .../maven/merge/MergeDirectoriesMojo.java | 32 +++++ .../inteligr8/maven/merge/MergeFilesMojo.java | 32 +++++ .../maven/merge/FileSetUnitTest.java | 4 +- 23 files changed, 273 insertions(+), 90 deletions(-) rename src/it/{append-dirs-nomerge => merge-dirs-complex}/folder1/file11.txt (100%) mode change 100644 => 100755 rename src/it/{append-dirs-nomerge => merge-dirs-complex}/folder1/file12.txt (100%) mode change 100644 => 100755 rename src/it/{append-dirs-nomerge => merge-dirs-complex}/folder2/file11.txt (100%) mode change 100644 => 100755 rename src/it/{append-dirs-nomerge => merge-dirs-complex}/folder2/file21.txt (100%) mode change 100644 => 100755 create mode 100755 src/it/merge-dirs-complex/pom.xml rename src/it/{append-dirs-empty => merge-files-empty}/pom.xml (93%) rename src/it/{append-dirs-simple => merge-files-nomerge}/folder1/file11.txt (100%) rename src/it/{append-dirs-simple => merge-files-nomerge}/folder1/file12.txt (100%) rename src/it/{append-dirs-simple => merge-files-nomerge}/folder2/file11.txt (100%) rename src/it/{append-dirs-simple => merge-files-nomerge}/folder2/file21.txt (100%) rename src/it/{append-dirs-nomerge => merge-files-nomerge}/pom.xml (93%) create mode 100644 src/it/merge-files-simple/folder1/file11.txt create mode 100644 src/it/merge-files-simple/folder1/file12.txt create mode 100644 src/it/merge-files-simple/folder2/file11.txt create mode 100644 src/it/merge-files-simple/folder2/file21.txt rename src/it/{append-dirs-simple => merge-files-simple}/pom.xml (93%) rename src/main/java/com/inteligr8/maven/merge/{AbstractAppendMojo.java => AbstractFileContentMojo.java} (98%) create mode 100755 src/main/java/com/inteligr8/maven/merge/AbstractMergeMojo.java delete mode 100644 src/main/java/com/inteligr8/maven/merge/AppendDirectoriesContentMojo.java create mode 100644 src/main/java/com/inteligr8/maven/merge/MergeDirectoriesMojo.java create mode 100755 src/main/java/com/inteligr8/maven/merge/MergeFilesMojo.java diff --git a/src/it/append-dirs-nomerge/folder1/file11.txt b/src/it/merge-dirs-complex/folder1/file11.txt old mode 100644 new mode 100755 similarity index 100% rename from src/it/append-dirs-nomerge/folder1/file11.txt rename to src/it/merge-dirs-complex/folder1/file11.txt diff --git a/src/it/append-dirs-nomerge/folder1/file12.txt b/src/it/merge-dirs-complex/folder1/file12.txt old mode 100644 new mode 100755 similarity index 100% rename from src/it/append-dirs-nomerge/folder1/file12.txt rename to src/it/merge-dirs-complex/folder1/file12.txt diff --git a/src/it/append-dirs-nomerge/folder2/file11.txt b/src/it/merge-dirs-complex/folder2/file11.txt old mode 100644 new mode 100755 similarity index 100% rename from src/it/append-dirs-nomerge/folder2/file11.txt rename to src/it/merge-dirs-complex/folder2/file11.txt diff --git a/src/it/append-dirs-nomerge/folder2/file21.txt b/src/it/merge-dirs-complex/folder2/file21.txt old mode 100644 new mode 100755 similarity index 100% rename from src/it/append-dirs-nomerge/folder2/file21.txt rename to src/it/merge-dirs-complex/folder2/file21.txt diff --git a/src/it/merge-dirs-complex/pom.xml b/src/it/merge-dirs-complex/pom.xml new file mode 100755 index 0000000..b5653bf --- /dev/null +++ b/src/it/merge-dirs-complex/pom.xml @@ -0,0 +1,79 @@ + + + + 4.0.0 + + com.inteligr8 + merge-maven-plugin-text-files + @pom.version@ + pom + + Text Files Plugin Tests + + + + + ${project.groupId} + merge-maven-plugin + @pom.version@ + + + merge-simple + validate + + merge-dirs + + + + + ${basedir} + + * + + + *.log + pom.xml + target + + target + + + + + + + + maven-enforcer-plugin + 1.4.1 + + + assert + enforce + + + + 8 + 15 + + target/file11.txt + + + + 3 + 8 + + target/file12.txt + target/file21.txt + + + + + + + + + + + diff --git a/src/it/append-dirs-empty/pom.xml b/src/it/merge-files-empty/pom.xml similarity index 93% rename from src/it/append-dirs-empty/pom.xml rename to src/it/merge-files-empty/pom.xml index 4f02e44..17a2778 100644 --- a/src/it/append-dirs-empty/pom.xml +++ b/src/it/merge-files-empty/pom.xml @@ -20,10 +20,10 @@ @pom.version@ - append-simple + merge-simple validate - append-dirs + merge-files diff --git a/src/it/append-dirs-simple/folder1/file11.txt b/src/it/merge-files-nomerge/folder1/file11.txt similarity index 100% rename from src/it/append-dirs-simple/folder1/file11.txt rename to src/it/merge-files-nomerge/folder1/file11.txt diff --git a/src/it/append-dirs-simple/folder1/file12.txt b/src/it/merge-files-nomerge/folder1/file12.txt similarity index 100% rename from src/it/append-dirs-simple/folder1/file12.txt rename to src/it/merge-files-nomerge/folder1/file12.txt diff --git a/src/it/append-dirs-simple/folder2/file11.txt b/src/it/merge-files-nomerge/folder2/file11.txt similarity index 100% rename from src/it/append-dirs-simple/folder2/file11.txt rename to src/it/merge-files-nomerge/folder2/file11.txt diff --git a/src/it/append-dirs-simple/folder2/file21.txt b/src/it/merge-files-nomerge/folder2/file21.txt similarity index 100% rename from src/it/append-dirs-simple/folder2/file21.txt rename to src/it/merge-files-nomerge/folder2/file21.txt diff --git a/src/it/append-dirs-nomerge/pom.xml b/src/it/merge-files-nomerge/pom.xml similarity index 93% rename from src/it/append-dirs-nomerge/pom.xml rename to src/it/merge-files-nomerge/pom.xml index 2523e0d..3a41467 100644 --- a/src/it/append-dirs-nomerge/pom.xml +++ b/src/it/merge-files-nomerge/pom.xml @@ -20,10 +20,10 @@ @pom.version@ - append-simple + merge-simple validate - append-dirs + merge-files diff --git a/src/it/merge-files-simple/folder1/file11.txt b/src/it/merge-files-simple/folder1/file11.txt new file mode 100644 index 0000000..a5bce3f --- /dev/null +++ b/src/it/merge-files-simple/folder1/file11.txt @@ -0,0 +1 @@ +test1 diff --git a/src/it/merge-files-simple/folder1/file12.txt b/src/it/merge-files-simple/folder1/file12.txt new file mode 100644 index 0000000..a5bce3f --- /dev/null +++ b/src/it/merge-files-simple/folder1/file12.txt @@ -0,0 +1 @@ +test1 diff --git a/src/it/merge-files-simple/folder2/file11.txt b/src/it/merge-files-simple/folder2/file11.txt new file mode 100644 index 0000000..180cf83 --- /dev/null +++ b/src/it/merge-files-simple/folder2/file11.txt @@ -0,0 +1 @@ +test2 diff --git a/src/it/merge-files-simple/folder2/file21.txt b/src/it/merge-files-simple/folder2/file21.txt new file mode 100644 index 0000000..180cf83 --- /dev/null +++ b/src/it/merge-files-simple/folder2/file21.txt @@ -0,0 +1 @@ +test2 diff --git a/src/it/append-dirs-simple/pom.xml b/src/it/merge-files-simple/pom.xml similarity index 93% rename from src/it/append-dirs-simple/pom.xml rename to src/it/merge-files-simple/pom.xml index 559b0f1..cf18ad5 100644 --- a/src/it/append-dirs-simple/pom.xml +++ b/src/it/merge-files-simple/pom.xml @@ -20,10 +20,10 @@ @pom.version@ - append-simple + merge-simple validate - append-dirs + merge-files diff --git a/src/main/java/com/inteligr8/maven/merge/AbstractAppendMojo.java b/src/main/java/com/inteligr8/maven/merge/AbstractFileContentMojo.java similarity index 98% rename from src/main/java/com/inteligr8/maven/merge/AbstractAppendMojo.java rename to src/main/java/com/inteligr8/maven/merge/AbstractFileContentMojo.java index cbb5dfd..959762b 100644 --- a/src/main/java/com/inteligr8/maven/merge/AbstractAppendMojo.java +++ b/src/main/java/com/inteligr8/maven/merge/AbstractFileContentMojo.java @@ -31,7 +31,7 @@ import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; -public abstract class AbstractAppendMojo extends AbstractMojo { +public abstract class AbstractFileContentMojo extends AbstractMojo { @Parameter( defaultValue = "${project}", readonly = true ) protected MavenProject project; diff --git a/src/main/java/com/inteligr8/maven/merge/AbstractMergeMojo.java b/src/main/java/com/inteligr8/maven/merge/AbstractMergeMojo.java new file mode 100755 index 0000000..45f5b32 --- /dev/null +++ b/src/main/java/com/inteligr8/maven/merge/AbstractMergeMojo.java @@ -0,0 +1,116 @@ +/* + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package com.inteligr8.maven.merge; + +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.FileVisitor; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.List; + +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.shared.model.fileset.FileSet; +import org.apache.maven.shared.model.fileset.util.FileSetManager; + +public abstract class AbstractMergeMojo extends AbstractFileContentMojo { + + @Parameter( property = "filesets", required = true ) + protected List filesets; + + protected boolean mergeInFileSet(boolean directory) throws MojoExecutionException { + if (this.getLog().isDebugEnabled()) + this.getLog().debug("merge " + (directory ? "directories" : "files")); + + boolean didMerge = false; + FileSetManager fsman = new FileSetManager(this.getLog()); + Path basepath = this.project.getBasedir().toPath(); + + try { + for (FileSet fileSet : this.filesets) { + Path baseInputPath = this.resolveDirectory(basepath, fileSet.getDirectory(), false, "fileset input"); + final Path baseOutputPath = this.resolveDirectory(basepath, fileSet.getOutputDirectory(), true, "fileset output"); + + String[] filePathsAndNames = directory ? fsman.getIncludedDirectories(fileSet) : fsman.getIncludedFiles(fileSet); + for (String filePathAndName : filePathsAndNames) { + Path file = baseInputPath.resolve(filePathAndName); + + if (Files.isDirectory(file)) { + if (this.getLog().isDebugEnabled()) + this.getLog().debug("merging directory: " + filePathAndName); + + final Path baseDirInputPath = file; + + Files.walkFileTree(file, new FileVisitor() { + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { + return FileVisitResult.TERMINATE; + } + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + Path filePathAndName = baseDirInputPath.relativize(file); + Path tofile = baseOutputPath.resolve(filePathAndName); + AbstractMergeMojo.this.mergeFile(file, tofile, Files.exists(tofile)); + if (!Files.exists(tofile.getParent())) + Files.createDirectories(tofile.getParent()); + + return FileVisitResult.CONTINUE; + } + }); + } else { + Path tofile = baseOutputPath.resolve(filePathAndName); + didMerge = this.mergeFile(file, tofile, didMerge); + } + } + } + } catch (IOException ie) { + throw new MojoExecutionException("Execution failed due to an I/O related issue", ie); + } + + return didMerge; + } + + private boolean mergeFile(Path file, Path tofile, boolean alreadyMergedOnce) throws IOException { + if (this.getLog().isDebugEnabled()) + this.getLog().debug("merging file: '" + file + "' => '" + tofile + "'"); + + if (!Files.exists(tofile.getParent())) + Files.createDirectories(tofile.getParent()); + + if (alreadyMergedOnce && this.spacing > 0) { + StringBuilder strbuilder = new StringBuilder(); + for (int s = 0; s < this.spacing; s++) + strbuilder.append(this.lineEnding); + if (strbuilder.length() > 0) + this.appendText(strbuilder.toString(), tofile); + } + + alreadyMergedOnce = this.appendFileContent(file, tofile) || alreadyMergedOnce; + return alreadyMergedOnce; + } + +} diff --git a/src/main/java/com/inteligr8/maven/merge/AppendDirectoriesContentMojo.java b/src/main/java/com/inteligr8/maven/merge/AppendDirectoriesContentMojo.java deleted file mode 100644 index bdce4fc..0000000 --- a/src/main/java/com/inteligr8/maven/merge/AppendDirectoriesContentMojo.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ -package com.inteligr8.maven.merge; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; - -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugins.annotations.Mojo; -import org.apache.maven.plugins.annotations.Parameter; -import org.apache.maven.shared.model.fileset.FileSet; -import org.apache.maven.shared.model.fileset.util.FileSetManager; -import org.codehaus.plexus.component.annotations.Component; - -@Mojo( name = "append-dirs", threadSafe = true ) -@Component( role = org.apache.maven.plugin.Mojo.class ) -public class AppendDirectoriesContentMojo extends AbstractAppendMojo { - - @Parameter( property = "filesets", required = true ) - protected List filesets; - - @Override - public void execute() throws MojoExecutionException { - this.getLog().debug("Executing file append"); - - this.appendContentInFileSet(); - } - - private boolean appendContentInFileSet() throws MojoExecutionException { - boolean didMerge = false; - FileSetManager fsman = new FileSetManager(this.getLog()); - Path basepath = this.project.getBasedir().toPath(); - - try { - for (FileSet fileSet : this.filesets) { - Path baseInputPath = this.resolveDirectory(basepath, fileSet.getDirectory(), false, "fileset input"); - Path baseOutputPath = this.resolveDirectory(basepath, fileSet.getOutputDirectory(), true, "fileset output"); - - String[] filePathsAndNames = fsman.getIncludedFiles(fileSet); - for (String filePathAndName : filePathsAndNames) { - Path file = baseInputPath.resolve(filePathAndName); - Path tofile = baseOutputPath.resolve(filePathAndName); - if (!Files.exists(tofile.getParent())) - Files.createDirectories(tofile.getParent()); - - if (!Files.isDirectory(file)) { - if (didMerge && this.spacing > 0) { - StringBuilder strbuilder = new StringBuilder(); - for (int s = 0; s < this.spacing; s++) - strbuilder.append(this.lineEnding); - if (strbuilder.length() > 0) - this.appendText(strbuilder.toString(), tofile); - } - - didMerge = this.appendFileContent(file, tofile) || didMerge; - } - } - } - } catch (IOException ie) { - throw new MojoExecutionException("Execution failed due to an I/O related issue", ie); - } - - return didMerge; - } - -} diff --git a/src/main/java/com/inteligr8/maven/merge/AppendFilesContentMojo.java b/src/main/java/com/inteligr8/maven/merge/AppendFilesContentMojo.java index fac5d00..e7f331a 100644 --- a/src/main/java/com/inteligr8/maven/merge/AppendFilesContentMojo.java +++ b/src/main/java/com/inteligr8/maven/merge/AppendFilesContentMojo.java @@ -28,7 +28,7 @@ import org.codehaus.plexus.component.annotations.Component; @Mojo( name = "append-files", threadSafe = true ) @Component( role = org.apache.maven.plugin.Mojo.class ) -public class AppendFilesContentMojo extends AbstractAppendMojo { +public class AppendFilesContentMojo extends AbstractFileContentMojo { @Parameter( property = "filesets", required = true ) protected List filesets; diff --git a/src/main/java/com/inteligr8/maven/merge/MergeDirectoriesMojo.java b/src/main/java/com/inteligr8/maven/merge/MergeDirectoriesMojo.java new file mode 100644 index 0000000..d78ac35 --- /dev/null +++ b/src/main/java/com/inteligr8/maven/merge/MergeDirectoriesMojo.java @@ -0,0 +1,32 @@ +/* + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package com.inteligr8.maven.merge; + +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugins.annotations.Mojo; +import org.codehaus.plexus.component.annotations.Component; + +@Mojo( name = "merge-dirs", threadSafe = true ) +@Component( role = org.apache.maven.plugin.Mojo.class ) +public class MergeDirectoriesMojo extends AbstractMergeMojo { + + @Override + public void execute() throws MojoExecutionException { + this.getLog().debug("Executing directory merge"); + + this.mergeInFileSet(true); + } + +} diff --git a/src/main/java/com/inteligr8/maven/merge/MergeFilesMojo.java b/src/main/java/com/inteligr8/maven/merge/MergeFilesMojo.java new file mode 100755 index 0000000..71866fe --- /dev/null +++ b/src/main/java/com/inteligr8/maven/merge/MergeFilesMojo.java @@ -0,0 +1,32 @@ +/* + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package com.inteligr8.maven.merge; + +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugins.annotations.Mojo; +import org.codehaus.plexus.component.annotations.Component; + +@Mojo( name = "merge-files", threadSafe = true ) +@Component( role = org.apache.maven.plugin.Mojo.class ) +public class MergeFilesMojo extends AbstractMergeMojo { + + @Override + public void execute() throws MojoExecutionException { + this.getLog().debug("Executing file merge"); + + this.mergeInFileSet(false); + } + +} diff --git a/src/test/java/com/inteligr8/maven/merge/FileSetUnitTest.java b/src/test/java/com/inteligr8/maven/merge/FileSetUnitTest.java index 382a82f..1c87921 100644 --- a/src/test/java/com/inteligr8/maven/merge/FileSetUnitTest.java +++ b/src/test/java/com/inteligr8/maven/merge/FileSetUnitTest.java @@ -20,9 +20,9 @@ public class FileSetUnitTest { FileSetManager fsman = new FileSetManager(); Set files = new HashSet<>(Arrays.asList(fsman.getIncludedFiles(fileset))); - Assert.assertTrue(files.size() > 2); + Assert.assertTrue(files.size() > 4); System.err.println(files); - Assert.assertTrue(files.contains("com/inteligr8/maven/merge/AbstractAppendMojo.java".replace("/", File.separator))); + Assert.assertTrue(files.contains("com/inteligr8/maven/merge/AbstractMergeMojo.java".replace("/", File.separator))); } }