package info.freelibrary.maven; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.attribute.PosixFilePermission; import java.util.Iterator; import java.util.List; import java.util.Set; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; import info.freelibrary.util.FileUtils; /** * A Maven plugin to set file permissions on a project file (probably one created by the build). * * @author <a href="mailto:ksclarke@ksclarke.io">Kevin S. Clarke</a> */ @Mojo(name = "set-file-perms") public class FilePermissionsMojo extends AbstractMojo { /** * The Maven project directory. */ @Parameter(defaultValue = "${project}") protected MavenProject myProject; /** * The permissions to set. */ @Parameter(alias = "perms") private int myPerms; /** * The file or directory on which to set permissions. */ @Parameter(alias = "file") private File myFile; /** * A list of files or directories on which to set permissions. */ @Parameter(alias = "files") private List<String> myFiles; @Override public void execute() throws MojoExecutionException, MojoFailureException { final Set<PosixFilePermission> perms = FileUtils.convertToPermissionsSet(myPerms); try { if (myFile != null) { Files.setPosixFilePermissions(myFile.toPath(), perms); } else if (myFiles != null) { final Iterator<String> iterator = myFiles.iterator(); while (iterator.hasNext()) { Files.setPosixFilePermissions(new File(iterator.next()).toPath(), perms); } } } catch (final IOException details) { throw new MojoExecutionException(details.getMessage(), details); } } }