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 MotifScanSelectPanel extends GenericSelectPanel<WeightMatrixScan> { private MotifScanTableModel filteredModel, selectedModel; private DefaultComboBoxModel nameModel, versionModel, typeModel, scannameModel; private JComboBox nameBox, versionBox, typeBox, scannameBox; private JTextField regex; private TreeSet<String> names, versions, types, scannames; private Collection<WeightMatrixScan> scans; public MotifScanSelectPanel() { super(); filteredModel = new MotifScanTableModel(); selectedModel = new MotifScanTableModel(); scans = new ArrayList<WeightMatrixScan>(); super.init(filteredModel,selectedModel); } public JPanel getInputsPanel() { 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 scannamePanel = new JPanel(); scannamePanel.setLayout(new BorderLayout()); JPanel regexPanel = new JPanel(); regexPanel.setLayout(new BorderLayout()); GridBagLayout gridbag = new GridBagLayout(); JPanel comboPanel = new JPanel(); comboPanel.setLayout(gridbag); nameModel = new DefaultComboBoxModel(); versionModel = new DefaultComboBoxModel(); typeModel = new DefaultComboBoxModel(); scannameModel = new DefaultComboBoxModel(); regex = new JTextField(); nameModel.addElement("<None>"); versionModel.addElement("<None>"); typeModel.addElement("<None>"); scannameModel.addElement("<None>"); nameBox = new JComboBox(nameModel); versionBox = new JComboBox(versionModel); typeBox = new JComboBox(typeModel); scannameBox = new JComboBox(scannameModel); Dimension d = new Dimension(100,30); nameBox.setPreferredSize(d); versionBox.setPreferredSize(d); Dimension d2 = new Dimension(60,30); typeBox.setPreferredSize(d2); scannameBox.setPreferredSize(d2); namePanel.add(nameBox,BorderLayout.CENTER); versionPanel.add(versionBox,BorderLayout.CENTER); typePanel.add(typeBox,BorderLayout.CENTER); scannamePanel.add(scannameBox,BorderLayout.CENTER); regexPanel.add(regex, BorderLayout.CENTER); namePanel.setBorder(new TitledBorder("Name")); versionPanel.setBorder(new TitledBorder("Version")); typePanel.setBorder(new TitledBorder("Type")); scannamePanel.setBorder(new TitledBorder("Scan Name")); setBorder(new TitledBorder("Weight Matrices:")); regexPanel.setBorder(new TitledBorder("Match Motif Scan")); GridBagConstraints c = new GridBagConstraints(); c.weightx = 1.0; c.weighty = 1.0; c.fill = GridBagConstraints.BOTH; c.gridwidth = 1; gridbag.setConstraints(namePanel,c); comboPanel.add(namePanel); c.gridwidth = GridBagConstraints.REMAINDER; gridbag.setConstraints(versionPanel,c); comboPanel.add(versionPanel); c.gridwidth = 1; gridbag.setConstraints(typePanel,c); comboPanel.add(typePanel); c.gridwidth = 1; gridbag.setConstraints(scannamePanel,c); comboPanel.add(scannamePanel); c.gridwidth = GridBagConstraints.REMAINDER; gridbag.setConstraints(regexPanel,c); comboPanel.add(regexPanel); return comboPanel; } public void filter() { if (getGenome() == null) {return;} filteredModel.clear(); String n, v, t, s; n = (String)nameBox.getSelectedItem(); v = (String)versionBox.getSelectedItem(); t = (String)typeBox.getSelectedItem(); s = (String)scannameBox.getSelectedItem(); if (n.equals("<None>")) {n = null;} if (v.equals("<None>")) {v = null;} if (t.equals("<None>")) {t = null;} if (s.equals("<None>")) {s = null;} filter(n,v,t,s); for (WeightMatrixScan wm : scans) { filteredModel.addObject(wm); } } public void filter(String n, String v, String t, String s) { scans.clear(); String reg = regex.getText().trim(); if(reg != null && reg.length() > 0) { Pattern patt = null; patt = Pattern.compile(reg); for (WeightMatrixScan scan : WeightMatrixScan.getScansForGenome(getGenome().getDBID(),n,v,t,s)) { if (patt.matcher(scan.toString()).find()) { scans.add(scan); } } } else { scans.addAll(WeightMatrixScan.getScansForGenome(getGenome().getDBID(),n,v,t,s)); } } public void retrieveData() { names = new TreeSet<String>(); versions = new TreeSet<String>(); types = new TreeSet<String>(); scannames = new TreeSet<String>(); names.addAll(WeightMatrixScan.getNames(getGenome().getDBID())); versions.addAll(WeightMatrixScan.getVersions(getGenome().getDBID())); types.addAll(WeightMatrixScan.getTypes(getGenome().getDBID())); scannames.addAll(WeightMatrixScan.getScanNames(getGenome().getDBID())); } public void updateComponents() { nameModel.removeAllElements(); nameModel.addElement("<None>"); for (String name : names) { nameModel.addElement(name); } versionModel.removeAllElements(); versionModel.addElement("<None>"); for (String version : versions) { versionModel.addElement(version); } typeModel.removeAllElements(); typeModel.addElement("<None>"); for (String type : types) { typeModel.addElement(type); } scannameModel.removeAllElements(); scannameModel.addElement("<None>"); for (String name: scannames) { scannameModel.addElement(name); } for (WeightMatrixScan wm : scans) { filteredModel.addObject(wm); } } }