package org.seqcode.projects.seqview.components;
import java.util.*;
import java.util.regex.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import org.seqcode.data.seqdata.*;
import org.seqcode.genome.Genome;
import org.seqcode.gseutils.Pair;
import org.seqcode.viz.components.GenericSelectPanel;
import java.sql.*;
public class ChipSeqAnalysisSelectPanel extends GenericSelectPanel<SeqAnalysis> {
TreeSet<SeqAnalysis> analyses;
private JTextField regex;
private JCheckBox active;
private ChipSeqAnalysisTableModel selectedModel, filteredModel;
public ChipSeqAnalysisSelectPanel(Genome g) {
super(g);
analyses = new TreeSet<SeqAnalysis>();
selectedModel = new ChipSeqAnalysisTableModel();
filteredModel = new ChipSeqAnalysisTableModel();
init(filteredModel,selectedModel);
}
public ChipSeqAnalysisSelectPanel() {
super();
analyses = new TreeSet<SeqAnalysis>();
selectedModel = new ChipSeqAnalysisTableModel();
filteredModel = new ChipSeqAnalysisTableModel();
init(filteredModel,selectedModel);
}
public JPanel getInputsPanel() {
JPanel inputPanel = new JPanel(); inputPanel.setLayout(new BorderLayout());
inputPanel.setLayout(new BorderLayout());
regex = new JTextField();
active = new JCheckBox("Active Analyses Only?", true);
inputPanel.add(active, BorderLayout.EAST);
inputPanel.add(new JLabel("pattern to filter analyses"), BorderLayout.WEST);
inputPanel.add(regex, BorderLayout.CENTER);
return inputPanel;
}
public void retrieveData() {
analyses.clear();
try {
synchronized(analyses) {
Collection<SeqAnalysis> all = SeqAnalysis.getAll(active.isSelected() ? true : null);
for(SeqAnalysis a :all) {
analyses.add(a);
}
}
} catch (SQLException e) {
throw new RuntimeException(e.toString(), e);
}
}
public void updateComponents() {
selectedModel.clear();
filteredModel.clear();
synchronized(analyses) {
for (SeqAnalysis a : analyses) {
filteredModel.addObject(a);
}
}
}
public void filter() {
String reg = regex.getText().trim();
Pattern patt = null;
if(reg != null && reg.length() > 0) {
patt = Pattern.compile(reg);
}
synchronized(analyses) {
analyses.clear();
try {
Collection<SeqAnalysis> all = SeqAnalysis.getAll(active.isSelected() ? true : null);
for (SeqAnalysis a : all) {
if (patt == null || patt.matcher(a.toString()).find()) {
Set<SeqAlignment> fg = a.getForeground();
Iterator<SeqAlignment> i = fg.iterator();
if (i.hasNext()) {
SeqAlignment align = i.next();
if (!align.getGenome().equals(getGenome())) {
continue;
}
analyses.add(a);
}
}
}
} catch (SQLException e) {
throw new RuntimeException(e.toString(), e);
}
filteredModel.clear();
for (SeqAnalysis a : analyses) {
filteredModel.addObject(a);
}
}
}
public void close() {
super.close();
}
}