/* FilteredBookSegment.java created 2008-02-28 * */ package org.signalml.domain.book; import java.util.Enumeration; import java.util.HashMap; import java.util.LinkedList; import org.signalml.domain.book.filter.AtomFilterChain; /** FilteredBookSegment * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public class FilteredBookSegment implements StandardBookSegment { private StandardBookSegment source; private StandardBookAtom[] acceptedAtoms; private HashMap<StandardBookAtom,Integer> atomIndexMap; public FilteredBookSegment(StandardBookSegment source, AtomFilterChain filter) { this.source = source; LinkedList<StandardBookAtom> atoms = new LinkedList<StandardBookAtom>(); atomIndexMap = new HashMap<StandardBookAtom, Integer>(); int atomCount = source.getAtomCount(); StandardBookAtom atom; for (int i=0; i<atomCount; i++) { atom = source.getAtomAt(i); if (filter == null || filter.matches(source, atom)) { atomIndexMap.put(atom, atoms.size()); atoms.add(atom); } } acceptedAtoms = new StandardBookAtom[atoms.size()]; atoms.toArray(acceptedAtoms); } @Override public StandardBookAtom getAtomAt(int index) { return acceptedAtoms[index]; } @Override public int getAtomCount() { return acceptedAtoms.length; } @Override public int getChannelNumber() { return source.getChannelNumber(); } @Override public float getDecompositionEnergy() { return source.getDecompositionEnergy(); } @Override public Object getProperty(String name) throws IllegalArgumentException { return source.getProperty(name); } @Override public Enumeration<String> getPropertyNames() { return source.getPropertyNames(); } @Override public int getSegmentLength() { return source.getSegmentLength(); } @Override public float getSamplingFrequency() { return source.getSamplingFrequency(); } @Override public float getSegmentTimeLength() { return source.getSegmentTimeLength(); } @Override public int getSegmentNumber() { return source.getSegmentNumber(); } @Override public float getSegmentTime() { return source.getSegmentTime(); } @Override public float getSignalEnergy() { return source.getSignalEnergy(); } @Override public float[] getSignalSamples() { return source.getSignalSamples(); } @Override public boolean hasSignal() { return source.hasSignal(); } @Override public int indexOfAtom(StandardBookAtom atom) { return atomIndexMap.get(atom).intValue(); } }