package pl.otros.swing.config;

import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.DataConfiguration;
import org.apache.commons.configuration.event.ConfigurationErrorListener;
import org.apache.commons.configuration.event.ConfigurationListener;
import org.apache.commons.configuration.event.EventSource;

import java.util.Collection;

public class OtrosConfiguration extends DataConfiguration {
  private final EventSource eventSource;

  /**
   * Creates a new instance of {@code DataConfiguration} and sets the
   * wrapped configuration.
   *
   * @param configuration the wrapped configuration
   */
  public OtrosConfiguration(Configuration configuration) {
    super(configuration);
    if (configuration instanceof EventSource) {
      eventSource = (EventSource) configuration;
    } else {
      eventSource = this;
    }

  }

  @Override
  public void addConfigurationListener(ConfigurationListener l) {
    eventSource.addConfigurationListener(l);
  }

  @Override
  public boolean removeConfigurationListener(ConfigurationListener l) {
    return eventSource.removeConfigurationListener(l);
  }

  @Override
  public void addErrorListener(ConfigurationErrorListener l) {
    eventSource.addErrorListener(l);
  }

  @Override
  public void clearErrorListeners() {
    eventSource.clearErrorListeners();
  }

  @Override
  public boolean removeErrorListener(ConfigurationErrorListener l) {
    return eventSource.removeErrorListener(l);
  }

  @Override
  public Collection<ConfigurationErrorListener> getErrorListeners() {
    return eventSource.getErrorListeners();
  }

  @Override
  public void clearConfigurationListeners() {
    eventSource.clearConfigurationListeners();
  }

  @Override
  public Collection<ConfigurationListener> getConfigurationListeners() {
    return eventSource.getConfigurationListeners();
  }
}