package org.netbeans.gradle.project.java.query;
import java.io.File;
import java.net.URL;
import java.nio.file.Path;
import java.util.Objects;
import org.jtrim.utils.ExceptionHelper;
import org.netbeans.gradle.project.util.FileGroupFilter;
import org.netbeans.gradle.project.util.UrlFactory;
import org.netbeans.spi.java.classpath.ClassPathImplementation;
import org.netbeans.spi.java.classpath.FilteringPathResourceImplementation;
import org.netbeans.spi.java.classpath.support.PathResourceBase;
final class ExcludeAwarePathResource extends PathResourceBase implements FilteringPathResourceImplementation {
private final Path root;
private final URL url;
private final FileGroupFilter includeRules;
private ExcludeAwarePathResource(File root, URL rootUrl, FileGroupFilter includeRules) {
this.root = root.toPath();
this.url = rootUrl;
this.includeRules = includeRules;
}
public static ExcludeAwarePathResource tryCreate(
File root,
FileGroupFilter includeRules,
UrlFactory urlForArchiveFactory) {
ExceptionHelper.checkNotNullArgument(includeRules, "includeRules");
URL url = urlForArchiveFactory.toUrl(root);
if (url == null) {
return null;
}
return new ExcludeAwarePathResource(root, url, includeRules);
}
@Override
public URL[] getRoots() {
return new URL[]{url};
}
@Override
public ClassPathImplementation getContent() {
return null;
}
@Override
public boolean includes(URL urlRoot, String resource) {
String normPath = resource.replace("/", root.getFileSystem().getSeparator());
Path resourcePath = root.resolve(normPath);
return includeRules.isIncluded(root, resourcePath);
}
@Override
public int hashCode() {
int hash = 5;
hash = 43 * hash + Objects.hashCode(this.root);
hash = 43 * hash + Objects.hashCode(this.includeRules);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (obj == this)
return true;
if (getClass() != obj.getClass())
return false;
final ExcludeAwarePathResource other = (ExcludeAwarePathResource)obj;
return Objects.equals(this.root, other.root) && Objects.equals(this.includeRules, other.includeRules);
}
@Override
public String toString() {
return "ExcludeAwarePathResource{" + url + "}";
}
}