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.border.TitledBorder; import javax.swing.event.*; import javax.swing.table.*; import org.seqcode.data.motifdb.*; import org.seqcode.gseutils.*; import org.seqcode.viz.components.GenericSelectPanel; import org.seqcode.viz.components.SelectionEvent; public class MotifSelectPanel extends GenericSelectPanel<WeightMatrix> { private MotifTableModel filteredModel, selectedModel; private JComboBox nameBox, versionBox, typeBox; private JTextField regex; private TreeSet<String> names, versions, types; private DefaultComboBoxModel nameModel, versionModel, typeModel; private Collection<WeightMatrix> allMatrices; public MotifSelectPanel() { super(); filteredModel = new MotifTableModel(); selectedModel = new MotifTableModel(); init(filteredModel,selectedModel); names = new TreeSet<String>(); versions = new TreeSet<String>(); types = new TreeSet<String>(); allMatrices = new ArrayList<WeightMatrix>(); } public JPanel getInputsPanel() { JPanel inputsPanel = new JPanel(); inputsPanel.setLayout(new BorderLayout()); JPanel namePanel = new JPanel(); namePanel.setLayout(new BorderLayout()); JPanel versionPanel = new JPanel(); versionPanel.setLayout(new BorderLayout()); JPanel typePanel = new JPanel(); typePanel.setLayout(new BorderLayout()); JPanel regexPanel = new JPanel(); regexPanel.setLayout(new BorderLayout()); JPanel comboPanel = new JPanel(); comboPanel.setLayout(new GridLayout(2,2)); comboPanel.add(namePanel); comboPanel.add(versionPanel); comboPanel.add(typePanel); comboPanel.add(regexPanel); nameModel = new DefaultComboBoxModel(); versionModel = new DefaultComboBoxModel(); typeModel = new DefaultComboBoxModel(); regex = new JTextField(); nameModel.addElement("<None>"); versionModel.addElement("<None>"); typeModel.addElement("<None>"); nameBox = new JComboBox(nameModel); versionBox = new JComboBox(versionModel); typeBox = new JComboBox(typeModel); Dimension d = new Dimension(100,30); nameBox.setPreferredSize(d); versionBox.setPreferredSize(d); typeBox.setPreferredSize(d); namePanel.add(nameBox,BorderLayout.CENTER); versionPanel.add(versionBox,BorderLayout.CENTER); typePanel.add(typeBox,BorderLayout.CENTER); regexPanel.add(regex,BorderLayout.CENTER); namePanel.setBorder(new TitledBorder("Name")); versionPanel.setBorder(new TitledBorder("Version")); typePanel.setBorder(new TitledBorder("Type")); regexPanel.setBorder(new TitledBorder("Match Motif")); inputsPanel.add(comboPanel,BorderLayout.CENTER); setBorder(new TitledBorder("Weight Matrices:")); return inputsPanel; } public void filter() { filteredModel.clear(); String n, v, t; n = (String)nameBox.getSelectedItem(); v = (String)versionBox.getSelectedItem(); t = (String)typeBox.getSelectedItem(); if (n.equals("<None>")) {n = null;} if (v.equals("<None>")) {v = null;} if (t.equals("<None>")) {t = null;} Pattern patt = null; String reg = regex.getText().trim(); if(reg != null && reg.length() > 0) { patt = Pattern.compile(reg); } for (WeightMatrix m : allMatrices) { if ((n == null || m.name.equals(m)) && (v == null || m.version.equals(v)) && (t == null || m.type.equals(t)) && (patt == null || patt.matcher(m.toString()).find())) { filteredModel.addObject(m); } } } public void retrieveData() { allMatrices.addAll(WeightMatrix.getAllWeightMatrices()); names.clear(); versions.clear(); types.clear(); for (WeightMatrix m : allMatrices) { names.add(m.name); types.add(m.type); versions.add(m.version); } } public void updateComponents() { nameModel.removeAllElements(); nameModel.addElement("<None>"); for (String s : names) { nameModel.addElement(s); } versionModel.removeAllElements(); versionModel.addElement("<None>"); for (String s : versions) { versionModel.addElement(s); } typeModel.removeAllElements(); typeModel.addElement("<None>"); for (String s : types) { typeModel.addElement(s); } } }