package org.netbeans.gradle.project.util;
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;
public final class UnionFileGroupFilter implements FileGroupFilter, Serializable {
private static final long serialVersionUID = 1L;
private final FileGroupFilter filter1;
private final FileGroupFilter filter2;
private UnionFileGroupFilter(FileGroupFilter filter1, FileGroupFilter filter2) {
ExceptionHelper.checkNotNullArgument(filter1, "filter1");
ExceptionHelper.checkNotNullArgument(filter2, "filter2");
this.filter1 = filter1;
this.filter2 = filter2;
}
public static FileGroupFilter union(FileGroupFilter filter1, FileGroupFilter filter2) {
if (filter1.isAllowAll() || filter2.isAllowAll()) {
return ExcludeIncludeRules.ALLOW_ALL;
}
return new UnionFileGroupFilter(filter1, filter2);
}
@Override
public boolean isIncluded(Path rootPath, Path file) {
return filter1.isIncluded(rootPath, file) || filter2.isIncluded(rootPath, file);
}
@Override
public boolean isAllowAll() {
return filter1.isAllowAll() || filter2.isAllowAll();
}
@Override
public int hashCode() {
int hash = 7;
hash = 37 * hash + Objects.hashCode(this.filter1);
hash = 37 * hash + Objects.hashCode(this.filter2);
return hash;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
final UnionFileGroupFilter other = (UnionFileGroupFilter)obj;
return Objects.equals(this.filter1, other.filter1)
&& Objects.equals(this.filter2, other.filter2);
}
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 FileGroupFilter filter1;
private final FileGroupFilter filter2;
public SerializedFormat(UnionFileGroupFilter source) {
this.filter1 = source.filter1;
this.filter2 = source.filter2;
}
private Object readResolve() throws ObjectStreamException {
return new UnionFileGroupFilter(filter1, filter2);
}
}
}