package ContextForest; import java.awt.Component; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.LinkedList; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.SwingUtilities; import moduls.frm.ContextLeaf; import moduls.frm.PostSearchAnalyses; import moduls.frm.QueryData; import moduls.frm.children.FrmSearchResults; public class Jpan_ViewResults extends JPanel implements ActionListener{ //Data private FrmScanOutputWindow fsow; //private LinkedList<QueryData> CurrentlySelectedQueries; //GUI components private JButton btnSelectQR, btnDrawCT; private JTextField selectQueryResults; private String strDrawCT = "Draw Context Trees"; private String strSelectQR = "Select Query Results"; //Fonts private Font fontStandard = new Font("Dialog", Font.BOLD, 10); private Font fontSearch = new Font("Dialog", Font.PLAIN, 14); //Constructor public Jpan_ViewResults(FrmScanOutputWindow fsow){ //Data this.fsow = fsow; //Create panel getPanel(); } //create panel public void getPanel(){ //initialize panel this.setLayout(new GridBagLayout()); this.setBorder(BorderFactory.createTitledBorder("Select Query Results")); final GridBagConstraints c = new GridBagConstraints(); //initial GridBagLayout parameters c.anchor = GridBagConstraints.FIRST_LINE_START; c.weightx = 1; //search for nodes bar c.gridx = 0; c.gridy = 0; c.gridwidth = 3; c.gridheight = 1; c.ipady = 7; c.fill = GridBagConstraints.HORIZONTAL; c.insets = new Insets(1,1,1,1); selectQueryResults = new JTextField(""); selectQueryResults.setFont(fontSearch); selectQueryResults.setPreferredSize(new Dimension(400, 26)); selectQueryResults.addActionListener(this); add(selectQueryResults, c); //search for nodes button c.ipady = 5; c.gridx = 3; c.gridy = 0; c.gridwidth = 1; c.gridheight = 1; c.fill = GridBagConstraints.HORIZONTAL; c.insets = new Insets(1,1,1,1); btnSelectQR = new JButton(strSelectQR); btnSelectQR.setFont(fontStandard); btnSelectQR.addActionListener(this); add(btnSelectQR, c); //Select All c.gridx = 4; c.gridy = 0; c.gridwidth = 1; c.gridheight = 1; c.fill = GridBagConstraints.HORIZONTAL; c.insets = new Insets(1, 1, 1, 1); btnDrawCT = new JButton(strDrawCT); btnDrawCT.addActionListener(this); btnDrawCT.setFont(fontStandard); add(btnDrawCT, c); } // ======== Actions ======== // //main actions @Override public void actionPerformed(ActionEvent e) { //Select Query Results if (e.getSource().equals(btnSelectQR) || e.getSource().equals(selectQueryResults)){ if (fsow.getPan_ScanResults() != null){ //Scan results SelectRowsInTable(); } else { //Context forest SelectLeaves(); } } //Draw Context Trees if (e.getSource().equals(btnDrawCT)){ if (fsow.getPan_ScanResults() != null){ //Scan results DrawContextTrees(RetrieveSelectedQueryResultsFromTable()); } else { //Context forest DrawContextTrees(RetrieveSelectedQueryResultsFromTree()); } } } //retrieve selected query sets from table public LinkedList<QueryData> RetrieveSelectedQueryResultsFromTable(){ //Initialize output LinkedList<QueryData> SelectedQS = new LinkedList<QueryData>(); LinkedList<String> SelectedQSNames = new LinkedList<String>(); //Retrieve names from table int[] SelectedRows = fsow.getPan_ScanResults().getTable().getSelectedRows(); for (int i = 0; i < SelectedRows.length; i++){ String query = (String) fsow.getPan_ScanResults().getTable().getValueAt(SelectedRows[i], 0); SelectedQSNames.add(query); } //Retrieve queries by name from QuerySet object for (QueryData QD : fsow.getQS().getContextTrees()){ if (SelectedQSNames.contains(QD.getName())){ SelectedQS.add(QD); } } return SelectedQS; } //retrieve selected query sets from tree public LinkedList<QueryData> RetrieveSelectedQueryResultsFromTree(){ //Initialize output LinkedList<QueryData> SelectedQS = new LinkedList<QueryData>(); LinkedList<String> SelectedQSNames = new LinkedList<String>(); //retrieve appropriate QS for (ContextLeaf CL : fsow.getfPiz().getCSD().getGraphicalContexts()) if (CL.isSelected()){ SelectedQSNames.add(CL.getContextForestOriginalName()); } //Retrieve queries by name from QuerySet object for (QueryData QD : fsow.getQS().getContextTrees()){ if (SelectedQSNames.contains(QD.getName())){ SelectedQS.add(QD); } } return SelectedQS; } //select rows in a table public void SelectRowsInTable(){ //recover query, split by semicolon, comma, or white space String Query = selectQueryResults.getText(); String[] Queries = Query.split(";"); if (Queries.length == 1){ Queries = Query.split(","); } if (Queries.length == 1) { Queries = Query.split("\\s+"); } //Determine queries to select LinkedList<String> SelectedQS = new LinkedList<String>(); for (String s : Queries){ for (QueryData QD : fsow.getQS().getContextTrees()){ if (QD.getName().contains(s)){ SelectedQS.add(QD.getName()); } } } //Deselect all fsow.getPan_ScanResults().getTable().clearSelection(); //Select queries for (int i = 0; i < fsow.getPan_ScanResults().getTable().getRowCount(); i++){ if (SelectedQS.contains(fsow.getPan_ScanResults().getTable().getValueAt(i,0))){ fsow.getPan_ScanResults().getTable().addRowSelectionInterval(i,i); } } } //select leaves on tree public void SelectLeaves(){ //recover query, split by semicolon, comma, or white space String Query = selectQueryResults.getText(); String[] Queries = Query.split(";"); if (Queries.length == 1){ Queries = Query.split(","); } if (Queries.length == 1) { Queries = Query.split("\\s+"); } //Determine queries to select LinkedList<String> SelectedQS = new LinkedList<String>(); for (String s : Queries){ for (ContextLeaf CL : fsow.getfPiz().getCSD().getGraphicalContexts()){ if (CL.getName().contains(s)){ CL.setSelected(true); } else { CL.setSelected(false); } } } //repaint fsow.getfPiz().repaint(); } //draw a bunch of context trees from selected queries public void DrawContextTrees(LinkedList<QueryData> L){ //switch cursor Component glassPane = getRootPane().getGlassPane(); glassPane.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); glassPane.setVisible(true); //Turn view context trees to on fsow.getF().getPanMenuTab().getJpo().getDrawContextTree().setSelected(true); fsow.getF().getPanDisplayOptions().getDrawContextTree().setSelected(true); for (QueryData QD : L){ //Adjust search analyses PostSearchAnalyses P = new PostSearchAnalyses( fsow.getF().getPanMenuTab().getJpo().getDrawSearchResults().isSelected(), //search results true, //draw context tree fsow.getF().getPanMenuTab().getJpo().getDrawContextGraph().isSelected(), //draw context graph fsow.getF().getPanMenuTab().getJpo().getDrawPhylogeneticTree().isSelected() //phylogeny ); //update query list QD.setAnalysesList(P); //Update aspects of drawing frame //search results frame - not available as a serialized object, need to remake if (QD.getSRF() != null){ fsow.getF().getPanBtn().setSearchResultsFrame(QD.getSRF()); } else { FrmSearchResults SRF = new FrmSearchResults(fsow.getF(), QD.getCSD()); fsow.getF().getPanBtn().setSearchResultsFrame(SRF); } fsow.getF().getPanBtn().setMultiDendro(QD.getMultiDendro()); fsow.getF().getPanBtn().setDe(QD.getDe()); //draw trees fsow.getF().getPanBtn().showCalls("Load", QD); } //switch cursor to normal glassPane.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); glassPane.setVisible(false); } }