package com.yoursway.utils.filespec;
import static com.google.common.collect.Sets.newHashSet;
import java.io.Serializable;
import java.util.Set;
import com.yoursway.utils.fileset.FileSet;
import com.yoursway.utils.relativepath.RelativePath;
public class ExcludedFileSpec implements FileSetSpec, Serializable {
private static final long serialVersionUID = 1L;
private final FileSetSpec included;
private final FileSetSpec excluded;
public ExcludedFileSpec(FileSetSpec included, FileSetSpec excluded) {
this.included = included;
this.excluded = excluded;
}
public boolean contains(RelativePath file) {
return included.contains(file) && !excluded.contains(file);
}
@Override
public String toString() {
if (excluded.isKnownToBeEmpty())
return included.toString();
else
return "(" + included + " WITHOUT " + excluded + ")";
}
public boolean isKnownToBeEmpty() {
return included.isKnownToBeEmpty();
}
public FileSet resolve(FileSet allFiles) {
Set<RelativePath> result = newHashSet(included.resolve(allFiles).asCollection());
result.removeAll(excluded.resolve(allFiles).asCollection());
return new FileSet(result);
}
}