From 29c4cd117483f6bbeaab21a24c4a5811b7fcf915 Mon Sep 17 00:00:00 2001 From: gmungoc Date: Thu, 3 Nov 2016 13:30:23 +0000 Subject: [PATCH] JAL-2310 don't double-count sequence matches; code tidying --- src/jalview/analysis/Finder.java | 57 +++++++++++++++++++------------------ src/jalview/appletgui/Finder.java | 5 +++- src/jalview/gui/Finder.java | 6 +++- 3 files changed, 39 insertions(+), 29 deletions(-) diff --git a/src/jalview/analysis/Finder.java b/src/jalview/analysis/Finder.java index ff03788..25ee7d2 100644 --- a/src/jalview/analysis/Finder.java +++ b/src/jalview/analysis/Finder.java @@ -24,11 +24,16 @@ import jalview.datamodel.AlignmentI; import jalview.datamodel.SearchResultMatchI; import jalview.datamodel.SearchResults; import jalview.datamodel.SearchResultsI; -import jalview.datamodel.Sequence; import jalview.datamodel.SequenceGroup; +import jalview.datamodel.SequenceI; +import jalview.util.Comparison; +import java.util.ArrayList; +import java.util.List; import java.util.Vector; +import com.stevesoft.pat.Regex; + public class Finder { /** @@ -38,9 +43,9 @@ public class Finder AlignmentI alignment; - jalview.datamodel.SequenceGroup selection = null; + SequenceGroup selection = null; - Vector idMatch = null; + Vector idMatch = null; boolean caseSensitive = false; @@ -48,10 +53,10 @@ public class Finder boolean findAll = false; - com.stevesoft.pat.Regex regex = null; + Regex regex = null; /** - * hold's last-searched position between calles to find(false) + * holds last-searched position between calls to find(false) */ int seqIndex = 0, resIndex = -1; @@ -85,11 +90,10 @@ public class Finder { searchString = searchString.toUpperCase(); } - regex = new com.stevesoft.pat.Regex(searchString); + regex = new Regex(searchString); regex.setIgnoreCase(!caseSensitive); searchResults = new SearchResults(); - idMatch = new Vector(); - Sequence seq; + idMatch = new Vector(); String item = null; boolean found = false; int end = alignment.getHeight(); @@ -108,7 +112,7 @@ public class Finder while (!found && (seqIndex < end)) { - seq = (Sequence) alignment.getSequenceAt(seqIndex); + SequenceI seq = alignment.getSequenceAt(seqIndex); if ((selection != null && selection.getSize() > 0) && !selection.getSequences(null).contains(seq)) @@ -143,7 +147,7 @@ public class Finder { } - if (regex.search(seq.getName())) + if (regex.search(seq.getName()) && !idMatch.contains(seq)) { idMatch.addElement(seq); hasResults = true; @@ -156,7 +160,8 @@ public class Finder } if (isIncludeDescription() && seq.getDescription() != null - && regex.search(seq.getDescription())) + && regex.search(seq.getDescription()) + && !idMatch.contains(seq)) { idMatch.addElement(seq); hasResults = true; @@ -177,16 +182,16 @@ public class Finder } // /Shall we ignore gaps???? - JBPNote: Add Flag for forcing this or not - StringBuffer noGapsSB = new StringBuffer(); + StringBuilder noGapsSB = new StringBuilder(); int insertCount = 0; - Vector spaces = new Vector(); + List spaces = new ArrayList(); for (int j = 0; j < item.length(); j++) { - if (!jalview.util.Comparison.isGap(item.charAt(j))) + if (!Comparison.isGap(item.charAt(j))) { noGapsSB.append(item.charAt(j)); - spaces.addElement(new Integer(insertCount)); + spaces.add(Integer.valueOf(insertCount)); } else { @@ -203,20 +208,15 @@ public class Finder resIndex = regex.matchedFrom(); if ((selection != null && selection.getSize() > 0) - && ((resIndex + Integer.parseInt(spaces.elementAt( - resIndex).toString())) < selection.getStartRes())) + && (resIndex + spaces.get(resIndex) < selection + .getStartRes())) { continue; } // if invalid string used, then regex has no matched to/from - int sres = seq - .findPosition(resIndex - + Integer.parseInt(spaces.elementAt(resIndex) - .toString())); - int eres = seq.findPosition(regex.matchedTo() - - 1 - + Integer.parseInt(spaces - .elementAt(regex.matchedTo() - 1).toString())); + int sres = seq.findPosition(resIndex + spaces.get(resIndex)); + int eres = seq.findPosition(regex.matchedTo() - 1 + + (spaces.get(regex.matchedTo() - 1))); // only add result if not contained in previous result if (lastm == null || (lastm.getSequence() != seq || (!(lastm.getStart() <= sres && lastm @@ -327,9 +327,12 @@ public class Finder } /** - * @return the idMatch + * Returns the (possibly empty) list of matching sequences (when search + * includes searching sequence names) + * + * @return */ - public Vector getIdMatch() + public Vector getIdMatch() { return idMatch; } diff --git a/src/jalview/appletgui/Finder.java b/src/jalview/appletgui/Finder.java index fdfc00f..d18295c 100644 --- a/src/jalview/appletgui/Finder.java +++ b/src/jalview/appletgui/Finder.java @@ -76,6 +76,7 @@ public class Finder extends Panel implements ActionListener frame.repaint(); frame.addWindowListener(new WindowAdapter() { + @Override public void windowClosing(WindowEvent evt) { ap.highlightSearchResults(null); @@ -84,6 +85,7 @@ public class Finder extends Panel implements ActionListener textfield.requestFocus(); } + @Override public void actionPerformed(ActionEvent evt) { if (evt.getSource() == textfield) @@ -152,7 +154,7 @@ public class Finder extends Panel implements ActionListener seqIndex = finder.getSeqIndex(); resIndex = finder.getResIndex(); searchResults = finder.getSearchResults(); - Vector idMatch = finder.getIdMatch(); + Vector idMatch = finder.getIdMatch(); boolean haveResults = false; // set or reset the GUI if ((idMatch.size() > 0)) @@ -246,6 +248,7 @@ public class Finder extends Panel implements ActionListener textfield.setBounds(new Rectangle(40, 17, 133, 21)); textfield.addKeyListener(new java.awt.event.KeyAdapter() { + @Override public void keyTyped(KeyEvent e) { textfield_keyTyped(e); diff --git a/src/jalview/gui/Finder.java b/src/jalview/gui/Finder.java index a73728a..5d039a1 100755 --- a/src/jalview/gui/Finder.java +++ b/src/jalview/gui/Finder.java @@ -109,6 +109,7 @@ public class Finder extends GFinder KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Cancel"); getRootPane().getActionMap().put("Cancel", new AbstractAction() { + @Override public void actionPerformed(ActionEvent e) { escapeActionPerformed(); @@ -130,6 +131,7 @@ public class Finder extends GFinder * * @param e */ + @Override public void findNext_actionPerformed(ActionEvent e) { if (getFocusedViewport()) @@ -143,6 +145,7 @@ public class Finder extends GFinder * * @param e */ + @Override public void findAll_actionPerformed(ActionEvent e) { if (getFocusedViewport()) @@ -198,6 +201,7 @@ public class Finder extends GFinder * @param e * DOCUMENT ME! */ + @Override public void createNewGroup_actionPerformed(ActionEvent e) { SequenceI[] seqs = new SequenceI[searchResults.getSize()]; @@ -256,7 +260,7 @@ public class Finder extends GFinder searchResults = finder.getSearchResults(); // find(regex, // caseSensitive.isSelected(), ) - Vector idMatch = finder.getIdMatch(); + Vector idMatch = finder.getIdMatch(); boolean haveResults = false; // set or reset the GUI if ((idMatch.size() > 0)) -- 1.7.10.2