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
{
/**
AlignmentI alignment;
- jalview.datamodel.SequenceGroup selection = null;
+ SequenceGroup selection = null;
- Vector idMatch = null;
+ Vector<SequenceI> idMatch = null;
boolean caseSensitive = false;
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;
{
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<SequenceI>();
String item = null;
boolean found = false;
int end = alignment.getHeight();
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))
{
}
- if (regex.search(seq.getName()))
+ if (regex.search(seq.getName()) && !idMatch.contains(seq))
{
idMatch.addElement(seq);
hasResults = true;
}
if (isIncludeDescription() && seq.getDescription() != null
- && regex.search(seq.getDescription()))
+ && regex.search(seq.getDescription())
+ && !idMatch.contains(seq))
{
idMatch.addElement(seq);
hasResults = true;
}
// /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<Integer> spaces = new ArrayList<Integer>();
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
{
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
}
/**
- * @return the idMatch
+ * Returns the (possibly empty) list of matching sequences (when search
+ * includes searching sequence names)
+ *
+ * @return
*/
- public Vector getIdMatch()
+ public Vector<SequenceI> getIdMatch()
{
return idMatch;
}
frame.repaint();
frame.addWindowListener(new WindowAdapter()
{
+ @Override
public void windowClosing(WindowEvent evt)
{
ap.highlightSearchResults(null);
textfield.requestFocus();
}
+ @Override
public void actionPerformed(ActionEvent evt)
{
if (evt.getSource() == textfield)
seqIndex = finder.getSeqIndex();
resIndex = finder.getResIndex();
searchResults = finder.getSearchResults();
- Vector idMatch = finder.getIdMatch();
+ Vector<SequenceI> idMatch = finder.getIdMatch();
boolean haveResults = false;
// set or reset the GUI
if ((idMatch.size() > 0))
textfield.setBounds(new Rectangle(40, 17, 133, 21));
textfield.addKeyListener(new java.awt.event.KeyAdapter()
{
+ @Override
public void keyTyped(KeyEvent e)
{
textfield_keyTyped(e);
KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Cancel");
getRootPane().getActionMap().put("Cancel", new AbstractAction()
{
+ @Override
public void actionPerformed(ActionEvent e)
{
escapeActionPerformed();
*
* @param e
*/
+ @Override
public void findNext_actionPerformed(ActionEvent e)
{
if (getFocusedViewport())
*
* @param e
*/
+ @Override
public void findAll_actionPerformed(ActionEvent e)
{
if (getFocusedViewport())
* @param e
* DOCUMENT ME!
*/
+ @Override
public void createNewGroup_actionPerformed(ActionEvent e)
{
SequenceI[] seqs = new SequenceI[searchResults.getSize()];
searchResults = finder.getSearchResults(); // find(regex,
// caseSensitive.isSelected(), )
- Vector idMatch = finder.getIdMatch();
+ Vector<SequenceI> idMatch = finder.getIdMatch();
boolean haveResults = false;
// set or reset the GUI
if ((idMatch.size() > 0))