package org.signalml.plugin.bookreporter.chart;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import org.jfree.chart.plot.XYPlot;
import org.signalml.plugin.bookreporter.data.BookReporterConstants;
import org.signalml.plugin.bookreporter.data.BookReporterFASPThreshold;
import org.signalml.plugin.bookreporter.data.book.BookReporterAtom;
import org.signalml.plugin.bookreporter.logic.filter.BookReporterBookAtomFilterBase;
import org.signalml.plugin.bookreporter.logic.filter.IBookReporterBookAtomFilter;
import org.signalml.plugin.export.signal.Tag;
import org.signalml.plugin.export.signal.TagStyle;
/**
* @author piotr@develancer.pl
*/
public abstract class BookReporterChartData {
private final IBookReporterBookAtomFilter filter;
private final LinkedList<Tag> tags;
private final TagStyle tagStyle;
public BookReporterChartData(BookReporterFASPThreshold threshold) {
this(threshold, null);
}
public BookReporterChartData(BookReporterFASPThreshold threshold, TagStyle tagStyle) {
this.filter = new BookReporterBookAtomFilterBase(threshold);
this.tags = new LinkedList<Tag>();
this.tagStyle = tagStyle;
}
protected abstract void include(Collection<BookReporterAtom> filteredAtoms);
protected void includeTags(Collection<BookReporterAtom> filteredAtoms) {
if (this.tagStyle != null) {
for (BookReporterAtom atom : filteredAtoms) {
double halfWidth = atom.scale * BookReporterConstants.TIME_OCCUPATION_SCALE;
Tag tag = new Tag(tagStyle, atom.position - halfWidth, 2 * halfWidth);
tags.add(tag);
}
}
}
public abstract XYPlot getPlot();
public List<Tag> getTagList() {
return Collections.unmodifiableList(this.tags);
}
public void process(Collection<BookReporterAtom> allAtoms) {
BookReporterAtom[] atomArray = (BookReporterAtom[]) allAtoms.toArray(
new BookReporterAtom[allAtoms.size()]
);
Collection<BookReporterAtom> filteredAtoms = this.filter.filter(atomArray);
this.include(filteredAtoms);
this.includeTags(filteredAtoms);
}
}