diff --git a/src/it/replace-file-content/pom.xml b/src/it/replace-file-content/pom.xml index ed1ccd6..a8b1fad 100644 --- a/src/it/replace-file-content/pom.xml +++ b/src/it/replace-file-content/pom.xml @@ -84,9 +84,9 @@ - ${basedir} + ${basedir}/folder1 - folder1/file12.txt + file12.txt ${project.build.directory}/replace-linestart @@ -139,7 +139,7 @@ md5 - ${project.build.directory}/replace-linestart/folder1/file12.txt + ${project.build.directory}/replace-linestart/file12.txt fb1f2b040970526fc99b1339f22465f1 md5 diff --git a/src/main/java/com/inteligr8/maven/regex/MatchFileContentMojo.java b/src/main/java/com/inteligr8/maven/regex/MatchFileContentMojo.java index e4864ba..69bffa6 100644 --- a/src/main/java/com/inteligr8/maven/regex/MatchFileContentMojo.java +++ b/src/main/java/com/inteligr8/maven/regex/MatchFileContentMojo.java @@ -14,6 +14,7 @@ */ package com.inteligr8.maven.regex; +import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -57,9 +58,11 @@ public class MatchFileContentMojo extends AbstractMatchMojo { try { for (FileSet fileSet : this.filesets) { + Path baseInputPath = this.resolveDirectory(basepath, fileSet.getDirectory(), "fileset input"); + String[] filePathsAndNames = fsman.getIncludedFiles(fileSet); for (String filePathAndName : filePathsAndNames) { - Path file = basepath.resolve(filePathAndName); + Path file = baseInputPath.resolve(filePathAndName); if (!Files.isDirectory(file)) if (this.matches(file, this.chunkSize)) return true; @@ -72,6 +75,20 @@ public class MatchFileContentMojo extends AbstractMatchMojo { return this.negate; } + private Path resolveDirectory(Path basepath, String directory, String errorName) throws IOException, MojoExecutionException { + Path path = new File(directory).toPath(); + if (!path.isAbsolute()) + path = basepath.resolve(path); + + if (!Files.exists(path)) + throw new MojoExecutionException("A " + errorName + " directory does not exist: " + directory); + + if (!Files.isDirectory(path)) + throw new MojoExecutionException("A " + errorName + " does reference a directory: " + directory); + + return path; + } + @Override protected void normalizeParameters() throws MojoFailureException { super.normalizeParameters(); diff --git a/src/main/java/com/inteligr8/maven/regex/ReplaceFileContentMojo.java b/src/main/java/com/inteligr8/maven/regex/ReplaceFileContentMojo.java index 99a00e1..5ff1f2b 100644 --- a/src/main/java/com/inteligr8/maven/regex/ReplaceFileContentMojo.java +++ b/src/main/java/com/inteligr8/maven/regex/ReplaceFileContentMojo.java @@ -52,16 +52,12 @@ public class ReplaceFileContentMojo extends AbstractReplaceMojo { try { for (FileSet fileSet : this.filesets) { - String outputDir = fileSet.getOutputDirectory(); - Path baseOutputPath = new File(outputDir).toPath(); - if (!Files.exists(baseOutputPath)) - Files.createDirectories(baseOutputPath); - if (!Files.isDirectory(baseOutputPath)) - throw new MojoExecutionException("A fileset output directory does not reference a directory: " + outputDir); + 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 = basepath.resolve(filePathAndName); + Path file = baseInputPath.resolve(filePathAndName); Path tofile = baseOutputPath.resolve(filePathAndName); if (!Files.exists(tofile.getParent())) Files.createDirectories(tofile.getParent()); @@ -77,6 +73,25 @@ public class ReplaceFileContentMojo extends AbstractReplaceMojo { return didReplace; } + private Path resolveDirectory(Path basepath, String directory, boolean createIfMissing, String errorName) throws IOException, MojoExecutionException { + Path path = new File(directory).toPath(); + if (!path.isAbsolute()) + path = basepath.resolve(path); + + if (!Files.exists(path)) { + if (createIfMissing) { + Files.createDirectories(path); + } else { + throw new MojoExecutionException("A " + errorName + " directory does not exist: " + directory); + } + } + + if (!Files.isDirectory(path)) + throw new MojoExecutionException("A " + errorName + " does reference a directory: " + directory); + + return path; + } + @Override protected void normalizeParameters() throws MojoFailureException { super.normalizeParameters(); diff --git a/src/test/java/com/inteligr8/maven/regex/FileSetUnitTest.java b/src/test/java/com/inteligr8/maven/regex/FileSetUnitTest.java new file mode 100644 index 0000000..5e1fffb --- /dev/null +++ b/src/test/java/com/inteligr8/maven/regex/FileSetUnitTest.java @@ -0,0 +1,29 @@ +package com.inteligr8.maven.regex; + +import java.io.File; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import org.apache.maven.shared.model.fileset.FileSet; +import org.apache.maven.shared.model.fileset.util.FileSetManager; +import org.junit.Assert; +import org.junit.Test; + +public class FileSetUnitTest { + + @Test + public void srcMainJava() { + FileSet fileset = new FileSet(); + fileset.setDirectory("src/main/java"); + fileset.setIncludes(Arrays.asList("**/*.java")); + + String fs = File.separator; + FileSetManager fsman = new FileSetManager(); + Set files = new HashSet<>(Arrays.asList(fsman.getIncludedFiles(fileset))); + Assert.assertTrue(files.size() > 15); + System.err.println(files); + Assert.assertTrue(files.contains("com"+fs+"inteligr8"+fs+"maven"+fs+"regex"+fs+"AbstractFileMojo.java")); + } + +}