package configurationslicing; import java.util.List; public class BooleanSlicer<I> implements Slicer<BooleanSlice<I>, I>{ public static interface BooleanSlicerSpec<I> { public abstract String getName(); public abstract String getUrl(); public abstract List<I> getWorkDomain(); public abstract boolean getValue(I item); public abstract String getName(I item); public abstract boolean setValue(I item, boolean value); } private BooleanSlicerSpec<I> spec; public BooleanSlicer(BooleanSlicerSpec<I> spec) { this.spec=spec; } public BooleanSlice<I> getInitialAccumulator() { return new BooleanSlice<I>(spec); } public BooleanSlice<I> accumulate(BooleanSlice<I> t, I i) { t.add(spec.getName(i), spec.getValue(i)); return t; } public boolean transform(BooleanSlice<I> t, I i) { return spec.setValue(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(); } }