package configurationslicing; import java.util.List; import java.util.Set; import configurationslicing.BooleanSlicer.BooleanSlicerSpec; public class UnorderedStringSlicer<I> implements Slicer<UnorderedStringSlice<I>, I>{ public static interface UnorderedStringSlicerSpec<I> { public abstract String getName(); public abstract String getUrl(); public abstract List<I> getWorkDomain(); public abstract List<String> getValues(I item); public abstract String getName(I item); public abstract boolean setValues(I item, Set<String> set); } private UnorderedStringSlicerSpec<I> spec; public UnorderedStringSlicer(UnorderedStringSlicerSpec<I> spec) { this.spec=spec; } public UnorderedStringSlice<I> getInitialAccumulator() { return new UnorderedStringSlice<I>(spec); } public UnorderedStringSlice<I> accumulate(UnorderedStringSlice<I> t, I i) { t.add(spec.getName(i), spec.getValues(i)); return t; } public boolean transform(UnorderedStringSlice<I> t, I i) { return spec.setValues(i, t.get(spec.getName(i))); } public String getName() { return spec.getName(); } public String getUrl() { return spec.getUrl(); } public List<I> getWorkDomain() { return spec.getWorkDomain(); } }