package edu.umd.rhsmith.diads.meater.core.app.components.media; import java.util.Collection; import java.util.LinkedList; import java.util.NoSuchElementException; import edu.umd.rhsmith.diads.meater.core.app.MEaterConfigurationException; import edu.umd.rhsmith.diads.meater.core.app.components.Component; import edu.umd.rhsmith.diads.meater.util.ControlException; public final class MediaPath<M> extends Component implements MediaProcessor<M> { private final Class<M> mediaClass; private final Collection<String> sourceNames; private final Collection<String> processorNames; private final Collection<MediaProcessor<? super M>> processors; private final boolean rejectable; public MediaPath(MediaPathInitializer<M> init) throws MEaterConfigurationException { super(init); this.mediaClass = init.getMediaClass(); this.registerMediaProcessor(this); this.sourceNames = init.getSourceNames(); this.processorNames = init.getProcessorNames(); this.processors = new LinkedList<MediaProcessor<? super M>>(); this.rejectable = init.isRejectable(); } @Override public String getProcessorName() { return ""; } @Override public Class<M> getMediaClass() { return this.mediaClass; } public boolean isRejectable() { return rejectable; } @Override public boolean processMedia(M media) { for (MediaProcessor<? super M> processor : this.processors) { if (!processor.processMedia(media)) { return false; } } return true; } @Override protected void doInitRoutine() throws MEaterConfigurationException { MediaManager mediaManager = this.getComponentManager() .getMediaManager(); try { for (String sourceName : this.sourceNames) { MediaSource<? extends M> s = mediaManager.getMediaSource( sourceName, this.getMediaClass()); mediaManager.registerOutput(s, this, this.rejectable); } for (String processorName : this.processorNames) { this.processors.add(mediaManager.getMediaProcessor( processorName, this.getMediaClass())); } } catch (NoSuchElementException e) { throw new MEaterConfigurationException(e.getMessage()); } } @Override protected void doStartupRoutine() throws ControlException { } @Override protected void doShutdownRoutine() { } }