package edu.umd.rhsmith.diads.meater.core.config; import java.util.LinkedList; import java.util.List; import org.apache.commons.configuration.HierarchicalConfiguration; import edu.umd.rhsmith.diads.meater.core.app.MEaterConfigurationException; import edu.umd.rhsmith.diads.meater.core.config.props.ConfigProperty; import edu.umd.rhsmith.diads.meater.core.config.setup.ops.SetupConsoleOperation; import edu.umd.rhsmith.diads.meater.core.config.setup.ops.unit.ResetOperation; import edu.umd.rhsmith.diads.meater.core.config.setup.ops.unit.SetupPropertiesOperation; public abstract class ConfigUnit { private String uiName; private String uiDescription; private final List<SetupConsoleOperation> setupConsoleOperations; private final List<ConfigProperty<?>> configProperties; public ConfigUnit() { this.setupConsoleOperations = new LinkedList<SetupConsoleOperation>(); this.configProperties = new LinkedList<ConfigProperty<?>>(); // everyone can reset this.registerSetupConsoleOperation(new ResetOperation(this)); // everyone can set up this.registerSetupConsoleOperation(new SetupPropertiesOperation(this)); this.uiName = null; this.uiDescription = null; } public ConfigUnit(String uiName, String uiDescription) { this(); this.uiName = uiName; this.uiDescription = uiDescription; } /* * -------------------------------- * General getters/setters * -------------------------------- */ /* * -------------------------------- * UI * -------------------------------- */ public String getUiName() { return this.uiName; } public String getUiDescription() { return this.uiDescription; } /* * -------------------------------- * Setup operations * -------------------------------- */ public void registerConfigProperty(ConfigProperty<?> prop) throws NullPointerException { if (prop == null) { throw new NullPointerException(); } this.configProperties.add(prop); } public List<ConfigProperty<?>> getConfigProperties() { return new LinkedList<ConfigProperty<?>>(this.configProperties); } public void registerSetupConsoleOperation(SetupConsoleOperation op) throws NullPointerException { if (op == null) { throw new NullPointerException(); } this.setupConsoleOperations.add(op); } public List<SetupConsoleOperation> getSetupOperations() { return new LinkedList<SetupConsoleOperation>( this.setupConsoleOperations); } /* * -------------------------------- * Config operations * -------------------------------- */ public final void resetConfiguration() { this.resetProperties(); this.resetInternalConfiguration(); } public final void loadConfigurationFrom(HierarchicalConfiguration config) throws MEaterConfigurationException { this.loadInternalConfigurationFrom(config); this.loadPropertiesFrom(config); } public final void saveConfigurationTo(HierarchicalConfiguration config) throws MEaterConfigurationException { this.saveInternalConfigurationTo(config); this.savePropertiesTo(config); } private void resetProperties() { for (ConfigProperty<?> prop : this.configProperties) { prop.reset(); } } private void loadPropertiesFrom(HierarchicalConfiguration config) { for (ConfigProperty<?> prop : this.configProperties) { prop.loadVal(config); } } private void savePropertiesTo(HierarchicalConfiguration config) { for (ConfigProperty<?> prop : this.configProperties) { prop.saveVal(config); } } protected void resetInternalConfiguration() { // override in subclass if you want } protected void loadInternalConfigurationFrom( HierarchicalConfiguration config) throws MEaterConfigurationException { // override in subclass if you want } protected void saveInternalConfigurationTo(HierarchicalConfiguration config) throws MEaterConfigurationException { // override in subclass if you want } /* * -------------------------------- * Messages * -------------------------------- */ }