package edu.umd.rhsmith.diads.meater.core.app.components.media.sets; import edu.umd.rhsmith.diads.meater.core.app.components.media.MediaProcessor; public abstract class BaseMediaSetFilter<M> implements MediaSetFilter<M> { private final MediaProcessor<M> present; private final MediaProcessor<M> absent; public BaseMediaSetFilter() throws IllegalArgumentException { this.present = new MediaProcessor<M>() { @Override public boolean processMedia(M media) { return contains(media); } @Override public Class<M> getMediaClass() { return BaseMediaSetFilter.this.getMediaClass(); } @Override public String getProcessorName() { return BaseMediaSetFilter.this.getFilterPresentName(); } }; this.absent = new MediaProcessor<M>() { @Override public boolean processMedia(M media) { return !contains(media); } @Override public Class<M> getMediaClass() { return BaseMediaSetFilter.this.getMediaClass(); } @Override public String getProcessorName() { return BaseMediaSetFilter.this.getFilterAbsentName(); } }; } public abstract String getFilterPresentName(); public abstract String getFilterAbsentName(); public abstract Class<M> getMediaClass(); public abstract boolean contains(M media); @Override public MediaProcessor<M> getFilterPresentMedia() { return present; } @Override public MediaProcessor<M> getFilterAbsentMedia() { return absent; } }