package edu.umd.rhsmith.diads.meater.core.app.components.media;
public class MediaSource<M> {
private Class<? extends M> mediaClass;
private final String name;
private MediaManager mediaManager;
public MediaSource(String name, Class<? extends M> mediaClass)
throws IllegalArgumentException {
if (name == null) {
throw new IllegalArgumentException(MSG_ERR_NULL_NAME);
}
if (mediaClass == null) {
throw new IllegalArgumentException(MSG_ERR_NULL_CLASS);
}
this.name = name;
this.mediaClass = mediaClass;
}
public final String getSourceName() {
return this.name;
}
void setMediaManager(MediaManager mediaManager) {
this.mediaManager = mediaManager;
}
public MediaManager getMediaManager() {
return this.mediaManager;
}
public final Class<? extends M> getMediaClass() {
return this.mediaClass;
}
public final void setMediaClass(Class<? extends M> mediaClass)
throws IllegalArgumentException, IllegalStateException {
if (mediaClass == null) {
throw new IllegalArgumentException(MSG_ERR_NULL_CLASS);
}
if (this.mediaManager != null) {
throw new IllegalStateException(MSG_ERR_CHANGED);
}
this.mediaClass = mediaClass;
}
public final void sourceMedia(M media) throws NullPointerException {
this.mediaManager.submitMedia(media, this);
}
@Override
public final String toString() {
return String.format("Media source %s", this.getSourceName());
}
private static final String MSG_ERR_NULL_CLASS = "Media source media classes must be non-null";
private static final String MSG_ERR_NULL_NAME = "Media source names must be non-null";
private static final String MSG_ERR_CHANGED = "Cannot change media class after having been registered to a MediaManager";
}