1998-09-09 04:52:38 +04:00
|
|
|
/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
|
|
*
|
|
|
|
* The contents of this file are subject to the Mozilla Public License
|
|
|
|
* Version 1.0 (the "License"); you may not use this file except in
|
|
|
|
* compliance with the License. You may obtain a copy of the License at
|
|
|
|
* http://www.mozilla.org/MPL/
|
|
|
|
*
|
|
|
|
* Software distributed under the License is distributed on an "AS IS"
|
|
|
|
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
|
|
|
* the License for the specific language governing rights and limitations
|
|
|
|
* under the License.
|
|
|
|
*
|
|
|
|
* The Original Code is the Grendel mail/news client.
|
|
|
|
*
|
|
|
|
* The Initial Developer of the Original Code is Netscape Communications
|
|
|
|
* Corporation. Portions created by Netscape are Copyright (C) 1997
|
|
|
|
* Netscape Communications Corporation. All Rights Reserved.
|
|
|
|
*/
|
|
|
|
|
|
|
|
package grendel.composition;
|
|
|
|
|
|
|
|
import java.util.Vector;
|
1999-01-09 06:55:32 +03:00
|
|
|
import javax.swing.event.*;
|
1998-09-09 04:52:38 +04:00
|
|
|
import netscape.orion.misc.*;
|
|
|
|
|
|
|
|
public class TestDataSource2 extends ATC_SourceAdapter {
|
|
|
|
String[] stringTable = {
|
|
|
|
"Bob Schenefelt",
|
|
|
|
"Tom Jones",
|
|
|
|
"Tim Smith",
|
|
|
|
"John Simon",
|
|
|
|
"Jim",
|
|
|
|
"Jimmy",
|
|
|
|
"Les",
|
|
|
|
"Lester",
|
|
|
|
"Lesters@netscape.com",
|
|
|
|
"Lester Schueler"
|
|
|
|
};
|
|
|
|
|
|
|
|
private Vector mSearchResults; //holds search results. (see search)
|
|
|
|
private int mCurrentIndex = 0; //current index if search results.
|
|
|
|
|
|
|
|
public TestDataSource2 () {
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* get the next match from the results vector.
|
|
|
|
*/
|
|
|
|
public String getNext () {
|
|
|
|
if (mSearchResults.size() > 0) {
|
|
|
|
mCurrentIndex = (mCurrentIndex + 1) % mSearchResults.size();
|
|
|
|
return (String) mSearchResults.elementAt(mCurrentIndex);
|
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* get the previous match from the results vector.
|
|
|
|
*/
|
|
|
|
public String getPrevious () {
|
|
|
|
if (mSearchResults.size() > 0) {
|
|
|
|
mCurrentIndex = mCurrentIndex + mSearchResults.size() - 1;
|
|
|
|
mCurrentIndex %= mSearchResults.size();
|
|
|
|
return (String) mSearchResults.elementAt(mCurrentIndex);
|
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gives notification the document has changed so perform a new search.
|
|
|
|
*/
|
|
|
|
public void documentChanged(ATC_Document doc) {
|
|
|
|
//get the text from the document to search on.
|
|
|
|
String textToSearchFor = getDocumentText(doc);
|
|
|
|
|
|
|
|
//find all matches for the string.
|
|
|
|
findAllMatches (textToSearchFor);
|
|
|
|
|
|
|
|
//Inform the document of how many strings were found.
|
|
|
|
doc.setQueryResults(mSearchResults.size());
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Find all partial matches for a search string.
|
|
|
|
* Store the result in the vector mSearchResults.
|
|
|
|
*/
|
|
|
|
private void findAllMatches (String subString) {
|
|
|
|
int subStringLength = subString.length();
|
|
|
|
|
|
|
|
//store search results in s vector for later
|
|
|
|
mSearchResults = new Vector ();
|
|
|
|
mCurrentIndex = 0;
|
|
|
|
|
|
|
|
//don't match emtpy substrings.
|
|
|
|
if ((null == subString) || (subString.equals ("")))
|
|
|
|
return;
|
|
|
|
|
|
|
|
for (int i = 0; i < stringTable.length; i++) {
|
|
|
|
if ((stringTable[i].length() >= subStringLength) &&
|
|
|
|
(stringTable[i].substring (0, subStringLength).equalsIgnoreCase (subString))) {
|
|
|
|
|
|
|
|
//matching substring
|
|
|
|
mSearchResults.addElement (stringTable[i].substring (subStringLength));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|