package com.google.gwt.maven;
import org.apache.maven.model.Resource;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import java.util.Collections;
import java.util.List;
public abstract class AbstractSourcesAsResourcesMojo extends AbstractMojo {
private static final List<String> JAVA_SOURCES = Collections.singletonList("**/*.java");
@Parameter(defaultValue = "${project}", required = true, readonly = true)
protected MavenProject project;
protected boolean checkResource(String sourceRoot) {
// TODO: cache a processed list of Resources in a ThreadLocal as an optimization?
sourceRoot = ensureTrailingSlash(sourceRoot);
for (Resource resource : getProjectResources()) {
String dir = ensureTrailingSlash(resource.getDirectory());
if (dir.equals(sourceRoot)) {
getLog().info(sourceRoot + " already added as a resource folder; skipping.");
continue;
}
if (dir.startsWith(sourceRoot) || sourceRoot.startsWith(dir)) {
getLog().warn(String.format(
"Conflicting path between source folder (%s, to be added as resource) and resource (%s); skipping.",
sourceRoot, dir));
return false;
}
}
return true;
}
protected Resource createResource(String resourceDirectory) {
Resource resource = new Resource();
resource.setDirectory(resourceDirectory);
resource.setIncludes(JAVA_SOURCES);
return resource;
}
protected abstract List<Resource> getProjectResources();
protected abstract void addResource(Resource resource);
protected String ensureTrailingSlash(String directory) {
if (directory.endsWith("/")) {
return directory;
}
return directory + "/";
}
}