package org.netbeans.gradle.project.util;
import java.io.File;
import java.io.InvalidObjectException;
import java.io.ObjectInputStream;
import java.io.ObjectStreamException;
import java.io.Serializable;
import java.nio.file.Path;
import java.util.Objects;
import org.jtrim.utils.ExceptionHelper;
import org.netbeans.gradle.model.java.JavaSourceGroup;
import org.netbeans.gradle.model.java.SourceIncludePatterns;
import org.openide.filesystems.FileObject;
public final class ExcludeIncludeRules implements FileGroupFilter, Serializable {
private static final long serialVersionUID = 1L;
public static ExcludeIncludeRules ALLOW_ALL = new ExcludeIncludeRules(
SourceIncludePatterns.ALLOW_ALL);
private final SourceIncludePatterns sourceIncludePatterns;
private ExcludeIncludeRules(SourceIncludePatterns sourceIncludePatterns) {
ExceptionHelper.checkNotNullArgument(sourceIncludePatterns, "sourceIncludePatterns");
this.sourceIncludePatterns = sourceIncludePatterns;
}
public static ExcludeIncludeRules create(SourceIncludePatterns sourceIncludePatterns) {
if (sourceIncludePatterns.isAllowAll()) {
return ALLOW_ALL;
}
return new ExcludeIncludeRules(sourceIncludePatterns);
}
public static ExcludeIncludeRules create(JavaSourceGroup sourceGroup) {
return create(sourceGroup.getExcludePatterns());
}
@Override
public boolean isAllowAll() {
return sourceIncludePatterns.isAllowAll();
}
public SourceIncludePatterns getSourceIncludePatterns() {
return sourceIncludePatterns;
}
public boolean isIncluded(Path rootPath, FileObject file) {
ExceptionHelper.checkNotNullArgument(rootPath, "rootPath");
ExceptionHelper.checkNotNullArgument(file, "file");
if (isAllowAll()) {
return true;
}
Path path = GradleFileUtils.toPath(file);
return path != null ? isIncluded(rootPath, path) : true;
}
public boolean isIncluded(Path rootPath, File file) {
ExceptionHelper.checkNotNullArgument(rootPath, "rootPath");
ExceptionHelper.checkNotNullArgument(file, "file");
if (isAllowAll()) {
return true;
}
return isIncluded(rootPath, file.toPath());
}
@Override
public boolean isIncluded(Path rootPath, Path file) {
ExceptionHelper.checkNotNullArgument(rootPath, "rootPath");
ExceptionHelper.checkNotNullArgument(file, "file");
if (isAllowAll()) {
return true;
}
return ExcludeInclude.includeFile(
file,
rootPath,
sourceIncludePatterns.getExcludePatterns(),
sourceIncludePatterns.getIncludePatterns());
}
@Override
public int hashCode() {
int hash = 7;
hash = 89 * hash + Objects.hashCode(this.sourceIncludePatterns);
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 ExcludeIncludeRules other = (ExcludeIncludeRules)obj;
return Objects.equals(this.sourceIncludePatterns, other.sourceIncludePatterns);
}
private Object writeReplace() {
return new SerializedFormat(this);
}
private void readObject(ObjectInputStream stream) throws InvalidObjectException {
throw new InvalidObjectException("Use proxy.");
}
private static final class SerializedFormat implements Serializable {
private static final long serialVersionUID = 1L;
private final SourceIncludePatterns sourceIncludePatterns;
public SerializedFormat(ExcludeIncludeRules source) {
this.sourceIncludePatterns = source.sourceIncludePatterns;
}
private Object readResolve() throws ObjectStreamException {
return ExcludeIncludeRules.create(sourceIncludePatterns);
}
}
}