package edu.umd.rhsmith.diads.meater.core.config.components; import java.util.HashMap; import java.util.Map; import org.apache.commons.configuration.HierarchicalConfiguration; 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.core.app.components.ComponentInitializer; import edu.umd.rhsmith.diads.meater.core.app.components.ComponentManager; import edu.umd.rhsmith.diads.meater.core.config.container.InstanceConfig; public abstract class ComponentConfig extends InstanceConfig implements ComponentInitializer { private final Map<String, Class<?>> mediaSourceNames; private final Map<String, Class<?>> mediaProcessorNames; public ComponentConfig() { super(); this.mediaSourceNames = new HashMap<String, Class<?>>(); this.mediaProcessorNames = new HashMap<String, Class<?>>(); } public final Component createComponentInstance(ComponentManager mgr) throws MEaterConfigurationException { Component c = this.instantiateComponent(); for (String s : this.mediaSourceNames.keySet()) { c.expectMediaProcessor(s, this.mediaSourceNames.get(s)); } for (String s : this.mediaProcessorNames.keySet()) { c.expectMediaProcessor(s, this.mediaProcessorNames.get(s)); } return c; } protected abstract Component instantiateComponent() throws MEaterConfigurationException; /* * -------------------------------- * General getters/setters * -------------------------------- */ /* * -------------------------------- * Media interaction * -------------------------------- */ public final Map<String, Class<?>> getMediaSourceTypes() { return new HashMap<String, Class<?>>(this.mediaSourceNames); } protected final void registerMediaSourceName(String name, Class<?> mediaClass) { this.mediaSourceNames.put(name, mediaClass); } protected void unregisterMediaSourceName(String name) { this.mediaSourceNames.remove(name); } public final Map<String, Class<?>> getMediaProcessorTypes() { return new HashMap<String, Class<?>>(this.mediaProcessorNames); } protected final void registerMediaProcessorName(String name, Class<?> mediaClass) { this.mediaProcessorNames.put(name, mediaClass); } protected final void unregisterMediaProcessorName(String name) { this.mediaProcessorNames.remove(name); } /* * -------------------------------- * UI * -------------------------------- */ @Override public String getUiName() { return String.format("%s - %s", this.getRegisteredTypeName(), this .getInstanceName()); } @Override public String getUiDescription() { return super.getUiDescription(); } /* * -------------------------------- * Config operations * -------------------------------- */ @Override protected void loadInternalConfigurationFrom( HierarchicalConfiguration config) throws MEaterConfigurationException { super.loadInternalConfigurationFrom(config); } @Override public void resetInternalConfiguration() { } @Override protected void saveInternalConfigurationTo( HierarchicalConfiguration config) throws MEaterConfigurationException { super.saveInternalConfigurationTo(config); } /* * -------------------------------- * Setup operations * -------------------------------- */ /* * -------------------------------- * Messages * -------------------------------- */ }