package com.yoursway.utils.filespec; import static com.google.common.base.Functions.TO_STRING; import static com.google.common.base.Join.join; import static com.google.common.collect.Iterables.transform; import static com.google.common.collect.Sets.newHashSet; import java.io.Serializable; import java.util.List; import java.util.Set; import com.google.common.collect.Lists; import com.yoursway.utils.fileset.FileSet; import com.yoursway.utils.relativepath.RelativePath; public class CompoundFileSetSpec implements FileSetSpec, Serializable { private static final long serialVersionUID = 1L; private List<FileSetSpec> children = Lists.newArrayList(); public void add(FileSetSpec spec) { children.add(spec); } public boolean contains(RelativePath file) { for (FileSetSpec spec : children) if (spec.contains(file)) return true; return false; } @Override public String toString() { if (children.size() == 1) return children.iterator().next().toString(); else return "(" + join(" UNION ", transform(children, TO_STRING)) + ")"; } public boolean isKnownToBeEmpty() { return children.isEmpty(); } public FileSet resolve(FileSet allFiles) { Set<RelativePath> result = newHashSet(); for (FileSetSpec child : children) result.addAll(child.resolve(allFiles).asCollection()); return new FileSet(result); } }