package org.netbeans.gradle.model.java;
import java.io.InvalidObjectException;
import java.io.ObjectInputStream;
import java.io.ObjectStreamException;
import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
import org.netbeans.gradle.model.util.CollectionUtils;
public final class SourceIncludePatterns implements Serializable {
private static final long serialVersionUID = 1L;
public static SourceIncludePatterns ALLOW_ALL = new SourceIncludePatterns(
Collections.<String>emptySet(),
Collections.<String>emptySet());
private final Set<String> excludePatterns;
private final Set<String> includePatterns;
private SourceIncludePatterns(
Collection<? extends String> excludePatterns,
Collection<? extends String> includePatterns) {
this.excludePatterns = CollectionUtils.copyToLinkedHashSet(excludePatterns);
this.includePatterns = CollectionUtils.copyToLinkedHashSet(includePatterns);
CollectionUtils.checkNoNullElements(excludePatterns, "excludePatterns");
CollectionUtils.checkNoNullElements(includePatterns, "includePatterns");
}
public static SourceIncludePatterns create(
Collection<? extends String> excludePatterns,
Collection<? extends String> includePatterns) {
if (excludePatterns.isEmpty() && includePatterns.isEmpty()) {
return ALLOW_ALL;
}
return new SourceIncludePatterns(excludePatterns, includePatterns);
}
public boolean isAllowAll() {
return excludePatterns.isEmpty() && includePatterns.isEmpty();
}
public Set<String> getExcludePatterns() {
return excludePatterns;
}
public Set<String> getIncludePatterns() {
return includePatterns;
}
@Override
public int hashCode() {
int hash = 7;
hash = 89 * hash + excludePatterns.hashCode();
hash = 89 * hash + includePatterns.hashCode();
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 SourceIncludePatterns other = (SourceIncludePatterns)obj;
return excludePatterns.equals(other.excludePatterns)
&& includePatterns.equals(other.includePatterns);
}
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 Set<String> excludePatterns;
private final Set<String> includePatterns;
public SerializedFormat(SourceIncludePatterns source) {
this.excludePatterns = source.excludePatterns;
this.includePatterns = source.includePatterns;
}
private Object readResolve() throws ObjectStreamException {
return SourceIncludePatterns.create(excludePatterns, includePatterns);
}
}
}