/* PredefinedFiltersPresetManager.java created 2010-11-26
*
*/
package org.signalml.app.config.preset.managers;
import java.io.IOException;
import java.util.List;
import org.signalml.app.config.AbstractXMLConfiguration;
import org.signalml.app.config.preset.PredefinedFiltersConfiguration;
import org.signalml.domain.montage.filter.SampleFilterDefinition;
import org.signalml.domain.montage.filter.TimeDomainSampleFilter;
import com.thoughtworks.xstream.XStream;
/**
* This class holds a list of {@link PredefinedFiltersConfiguration}
* which contains a set of predefined filters for each sampling frequency.
*
* @author Piotr Szachewicz
*/
public abstract class PredefinedFiltersPresetManager extends AbstractXMLConfiguration {
/**
* A list containing {@link PredefinedFiltersConfiguration} of
* {@link TimeDomainSampleFilter time domain filters} for each
* sampling frequency.
*/
private List<PredefinedFiltersConfiguration> predefinedTimeDomainFilters;
/**
* Finds a {@link PredefinedFiltersConfiguration} for the given sampling
* frequency.
* @param samplingFrequency sampling frequency for which the returned
* {@link PredefinedFiltersConfiguration} must operate.
* @return a {@link PredefinedFiltersConfiguration} for the given sampling
* frequency. If no {@link PredefinedFiltersConfiguration} exists for
* the given sampling frequency, null is returned.
*/
private PredefinedFiltersConfiguration findConfiguration(double samplingFrequency) {
for (PredefinedFiltersConfiguration p: predefinedTimeDomainFilters) {
if (p.getSamplingFrequency() == samplingFrequency) {
return p;
}
}
return null;
}
/**
* Returns the list of predefined {@link TimeDomainSampleFilter filters}
* for the given sampling frequency.
* @param samplingFrequency the sampling frequency for which the filters
* were designed
* @return the list of predefined filters
*/
public List<SampleFilterDefinition> getPredefinedFilters(double samplingFrequency) {
PredefinedFiltersConfiguration p = findConfiguration(samplingFrequency);
if (p != null)
return p.getPredefinedFilters();
return null;
}
/**
* Returns the filter which should be the starting point when designing
* custom filter in the filter designer's window. Modifying this filter
* does not affect the filter contained in this preset manager (this
* method returns a copy of the filter).
* @param samplingFrequency sampling frequency at which the filter will
* be designed
* @return the {@link TimeDomainSampleFilter filter} which should be
* displayed when creating custom filter
*/
public SampleFilterDefinition getCustomFilterStartingPoint(double samplingFrequency) {
PredefinedFiltersConfiguration p = findConfiguration(samplingFrequency);
if (p != null)
return p.getCustomFilterStartingPoint().duplicate();
return null;
}
/**
* Returns a custom filter design starting point. This method should
* be used only if method
* {@link PredefinedTimeDomainFiltersPresetManager#getCustomFilterStartingPoint(double)}
* does not return any filter. Modifying this filter
* does not affect the filter contained in this preset manager (this
* method returns a copy of the filter).
* @return a custom starting point which could be used while starting to
* design a custom filter
*/
public SampleFilterDefinition getCustomStartingPoint() {
if (predefinedTimeDomainFilters.size() > 0) {
return predefinedTimeDomainFilters.get(0).getCustomFilterStartingPoint().duplicate();
}
return null;
}
/**
* Returns the number of {@link TimeDomainSampleFilter filters} predefined
* for the given sampling frequency.
* @return the number of predefined filters
*/
public int getPredefinedFilterCount(double samplingFrequency) {
PredefinedFiltersConfiguration p = findConfiguration(samplingFrequency);
if (p != null)
return p.getNumberOfPredefinedFilters();
return 0;
}
/**
* Returns the predefined {@link TimeDomainSampleFilter filters} of
* a specified index defined for the specified sampling frequency.
* Modifying the filters returned by this method
* does not affect the filters contained in this preset manager (this
* method returns copies of the filters).
* @param samplingFrequency sampling frequency for which the returned
* filter should be designed
* @param index the index of the filter to be returned
* @return the predefined filter of the specified index, designed for
* the given sampling frequency
*/
public SampleFilterDefinition getPredefinedFilterAt(double samplingFrequency, int index) {
PredefinedFiltersConfiguration p = findConfiguration(samplingFrequency);
if (p != null)
return ((SampleFilterDefinition) p.getPredefinedFilters().get(index)).duplicate();
return null;
}
/**
* Returns the {@link XStream} which will be used with this
* {@link AbstractXMLConfiguration}.
* @return the streamer to be used
*/
@Override
public XStream getStreamer() {
if (streamer == null)
streamer = createFilterPresetManagerStreamer();
return streamer;
}
/**
* Creates an {@link XStream} which should be used with this preset manager.
* @return a streamer to be used to stream preset data to XML
*/
protected abstract XStream createFilterPresetManagerStreamer();
/**
* Loads default predefined filters from a file.
* @throws IOException when an error occurs while reading the file containing
* default predefined filters
*/
public abstract void loadDefaults() throws IOException;
}