home *** CD-ROM | disk | FTP | other *** search
- package hhapplet;
-
- import java.applet.Applet;
- import java.util.Vector;
-
- public class FTSSearcher {
- protected Applet m_applet;
- protected int m_nTopicCount = 0;
- protected int m_nKeywordCount = 0;
- protected int m_nStopWordCount = 0;
- protected TopicData[] m_tdTopics;
- protected KeywordData[] m_kdKeywords;
- protected String[] m_strStopWords;
- protected int[] m_aryTopicsFound;
- protected int m_nTopicsFoundCount = 0;
- private int[] m_charorder;
- private boolean m_bEnglish = true;
- private Vector m_searchResVector = null;
-
- public String getTopicURL(String var1) {
- for(int var2 = 0; var2 < this.m_nTopicsFoundCount; ++var2) {
- if (this.m_tdTopics[this.m_aryTopicsFound[var2]].m_strTitle.compareTo(var1) == 0) {
- return this.m_tdTopics[this.m_aryTopicsFound[var2]].m_urlTopic;
- }
- }
-
- return "";
- }
-
- public boolean setTopicData(int var1, String var2, String var3) {
- if (var1 >= 0 && var1 < this.m_nTopicCount) {
- this.m_tdTopics[var1] = new TopicData(this);
- this.m_tdTopics[var1].m_strTitle = var2;
- this.m_tdTopics[var1].m_urlTopic = var3;
- return true;
- } else {
- return false;
- }
- }
-
- public int getKeywordCount() {
- return this.m_nKeywordCount;
- }
-
- public int setKeywordCount(int var1) {
- this.m_kdKeywords = new KeywordData[var1];
- this.m_nKeywordCount = var1;
- return this.m_nKeywordCount;
- }
-
- public int getStopWordCount() {
- return this.m_nStopWordCount;
- }
-
- public int setStopWordCount(int var1) {
- this.m_strStopWords = new String[var1];
- this.m_nStopWordCount = var1;
- return this.m_nStopWordCount;
- }
-
- public FTSSearcher(Applet var1) {
- this.m_applet = var1;
- String var2 = ResourceLib.GetRes("langorder");
- String var3 = ResourceLib.GetRes("English");
- var3 = var3.toLowerCase();
- if (var3.compareTo("true") == 0) {
- this.m_bEnglish = true;
- } else {
- this.m_bEnglish = false;
- }
-
- if (var2 != null) {
- this.m_charorder = new int[256];
- int var4 = 0;
- int var5 = var2.indexOf(44, var4);
-
- for(int var6 = 0; var5 != -1; var5 = var2.indexOf(44, var4)) {
- String var7 = var2.substring(var4, var5);
- if (var7 != null) {
- this.m_charorder[var6] = Integer.parseInt(var7);
- ++var6;
- }
-
- var4 = var5 + 1;
- }
- }
-
- }
-
- public int getTopicCount() {
- return this.m_nTopicCount;
- }
-
- public int setTopicCount(int var1) {
- this.m_tdTopics = new TopicData[var1];
- this.m_nTopicCount = var1;
- this.m_aryTopicsFound = new int[this.m_nTopicCount];
- return this.m_nTopicCount;
- }
-
- private void SortTopics(int[] var1, int var2, int var3) {
- if (var3 - var2 > 0) {
- int var5 = var2;
-
- for(int var6 = var2 + 1; var6 <= var3; ++var6) {
- TopicData var7 = this.m_tdTopics[var1[var6]];
- String var8 = var7.m_strTitle;
- TopicData var9 = this.m_tdTopics[var1[var2]];
- String var10 = var9.m_strTitle;
- if (this.compareString(var8, var10) < 0) {
- ++var5;
- int var4 = var1[var6];
- var1[var6] = var1[var5];
- var1[var5] = var4;
- }
- }
-
- int var11 = var1[var2];
- var1[var2] = var1[var5];
- var1[var5] = var11;
- this.SortTopics(var1, var2, var5);
- this.SortTopics(var1, var5 + 1, var3);
- }
-
- }
-
- private int compareString(String var1, String var2) {
- if (this.m_charorder == null) {
- String var5 = var1.toLowerCase();
- String var4 = var2.toLowerCase();
- return var5.compareTo(var4);
- } else {
- for(int var3 = 0; var3 < var1.length() && var3 < var2.length(); ++var3) {
- if (this.m_charorder[var1.charAt(var3)] < this.m_charorder[var2.charAt(var3)]) {
- return -1;
- }
-
- if (this.m_charorder[var1.charAt(var3)] > this.m_charorder[var2.charAt(var3)]) {
- return 1;
- }
- }
-
- if (var1.length() < var2.length()) {
- return -1;
- } else {
- return var1.length() > var2.length() ? 1 : 0;
- }
- }
- }
-
- public boolean doSearch(String var1, Vector var2) {
- boolean var3 = false;
- boolean var4 = false;
- boolean var5 = false;
- boolean var6 = true;
- String var7 = "";
- String var8 = "";
- int var9 = 0;
- int var10 = 0;
- int var11 = 0;
- int var12 = 0;
- int var13 = 0;
- this.m_searchResVector = var2;
- if (this.m_searchResVector != null) {
- this.m_searchResVector.removeAllElements();
- }
-
- this.m_nTopicsFoundCount = 0;
- String var14 = "\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=";
- int var15 = var14.length();
-
- while(!var5 && var1.length() != 0) {
- var9 = -1;
-
- for(int var16 = 0; var16 < var15 && var9 == -1; ++var16) {
- var9 = var1.indexOf(var14.charAt(var16));
- }
-
- if (var9 == -1) {
- var7 = var1;
- var1 = "";
- } else {
- var7 = var1.substring(0, var9);
- if (var1.charAt(var9) == '~') {
- var4 = true;
- }
-
- var1 = var1.substring(var9 + 1);
- }
-
- if (var7.length() == 0) {
- if (var1.length() == 0) {
- break;
- }
- } else if (!var7.equalsIgnoreCase("or") && var7.compareTo("|") != 0) {
- if (!var7.equalsIgnoreCase("and") && var7.compareTo("&") != 0) {
- if (!var7.equalsIgnoreCase("not") && var7.compareTo("~") != 0) {
- if (!this.IsStopWord(var7)) {
- if (var7.substring(0, 1) == "~") {
- var4 = true;
- var7 = var7.substring(1);
- }
-
- var8 = this.GetStem(var7);
- var10 = (boolean)-1;
- var10 = this.FindKeyword(var8);
- if (var10 != -1) {
- int var33 = this.m_kdKeywords[var10].m_aryTopicLinks.length;
- if (!var3) {
- if (var4) {
- for(int var27 = 0; var27 < this.m_nTopicCount; ++var27) {
- for(var13 = 0; var13 < var33 && this.m_kdKeywords[var10].m_aryTopicLinks[var13] != var27; ++var13) {
- }
-
- if (var13 == var33) {
- for(var11 = 0; var11 < this.m_nTopicsFoundCount && this.m_aryTopicsFound[var11] != var27; ++var11) {
- }
-
- if (var11 == this.m_nTopicsFoundCount) {
- this.m_aryTopicsFound[this.m_nTopicsFoundCount] = var27;
- ++this.m_nTopicsFoundCount;
- }
- }
- }
- } else {
- for(int var28 = 0; var28 < var33; ++var28) {
- int var17 = this.m_kdKeywords[var10].m_aryTopicLinks[var28];
-
- for(var11 = 0; var11 < this.m_nTopicsFoundCount && this.m_aryTopicsFound[var11] != var17; ++var11) {
- }
-
- if (var11 == this.m_nTopicsFoundCount) {
- this.m_aryTopicsFound[this.m_nTopicsFoundCount] = var17;
- ++this.m_nTopicsFoundCount;
- }
- }
- }
- } else if (var3) {
- if (var4) {
- for(int var29 = 0; var29 < var33; ++var29) {
- for(int var25 = this.m_nTopicsFoundCount - 1; var25 >= 0; --var25) {
- if (this.m_aryTopicsFound[var25] == this.m_kdKeywords[var10].m_aryTopicLinks[var29]) {
- if (this.m_nTopicsFoundCount > 0) {
- this.m_aryTopicsFound[var25] = this.m_aryTopicsFound[this.m_nTopicsFoundCount - 1];
- }
-
- this.m_nTopicsFoundCount += -1;
- break;
- }
- }
- }
- } else {
- for(int var26 = this.m_nTopicsFoundCount - 1; var26 >= 0; --var26) {
- for(var12 = 0; var12 < var33 && this.m_aryTopicsFound[var26] != this.m_kdKeywords[var10].m_aryTopicLinks[var12]; ++var12) {
- }
-
- if (var12 == var33) {
- if (this.m_nTopicsFoundCount > 0) {
- this.m_aryTopicsFound[var26] = this.m_aryTopicsFound[this.m_nTopicsFoundCount - 1];
- }
-
- this.m_nTopicsFoundCount += -1;
- }
- }
- }
- }
- } else if (var3 && !var4) {
- this.m_nTopicsFoundCount = 0;
- } else if (!var3 && var4) {
- this.m_nTopicsFoundCount = 0;
-
- for(int var31 = 0; var31 < this.m_nTopicCount; ++var31) {
- this.m_aryTopicsFound[this.m_nTopicsFoundCount] = var31;
- ++this.m_nTopicsFoundCount;
- }
- }
-
- if (var6) {
- var6 = false;
- var3 = true;
- }
- }
- } else {
- var4 = true;
- }
- } else {
- var3 = true;
- var4 = false;
- }
- } else {
- var3 = false;
- var4 = false;
- }
- }
-
- this.SortTopics(this.m_aryTopicsFound, 0, this.m_nTopicsFoundCount - 1);
- if (this.m_searchResVector != null) {
- for(int var34 = 0; var34 < this.m_nTopicsFoundCount; ++var34) {
- Vector var36 = new Vector();
- var36.addElement(this.m_tdTopics[this.m_aryTopicsFound[var34]].m_strTitle);
- var36.addElement(this.m_tdTopics[this.m_aryTopicsFound[var34]].m_urlTopic);
- this.m_searchResVector.addElement(var36);
- }
- }
-
- if (this.m_nTopicsFoundCount == 0) {
- Vector var35 = new Vector();
- var35.addElement(ResourceLib.GetRes("TopicsNotFound"));
- this.m_searchResVector.addElement(var35);
- return false;
- } else {
- return true;
- }
- }
-
- public boolean setStopWord(int var1, String var2) {
- if (var1 >= 0 && var1 < this.m_nStopWordCount) {
- if (var2 == null) {
- this.m_strStopWords[var1] = null;
- } else {
- this.m_strStopWords[var1] = var2.toLowerCase();
- }
-
- return true;
- } else {
- return false;
- }
- }
-
- private int FindKeyword(String var1) {
- int var2 = 0;
- int var3 = this.m_nKeywordCount - 1;
- int var4 = 0;
- boolean var5 = false;
- String var6 = "";
- var1 = var1.toLowerCase();
-
- while(var2 <= var3) {
- int var8 = var2 + var3;
- var4 = var8 >> 1;
- var6 = this.m_kdKeywords[var4].m_strKeyword;
- if (var1.compareTo(var6) > 0) {
- var2 = var2 == var4 ? var4 + 1 : var4;
- } else {
- if (var1.compareTo(var6) >= 0) {
- var5 = true;
- break;
- }
-
- var3 = var3 == var4 ? var4 - 1 : var4;
- }
- }
-
- return var5 ? var4 : -1;
- }
-
- public boolean setKeywordData(int var1, String var2, int[] var3) {
- if (var1 >= 0 && var1 < this.m_nKeywordCount) {
- this.m_kdKeywords[var1] = new KeywordData(this);
- if (var2 == null) {
- this.m_kdKeywords[var1].m_strKeyword = null;
- } else {
- this.m_kdKeywords[var1].m_strKeyword = var2.toLowerCase();
- }
-
- this.m_kdKeywords[var1].m_aryTopicLinks = var3;
- return true;
- } else {
- return false;
- }
- }
-
- private String GetStem(String var1) {
- if (!this.m_bEnglish) {
- return var1;
- } else {
- String[] var2 = new String[]{"ed", "es", "er", "s", "ingly", "ing", "ly", "e"};
- int var3 = var2.length;
- int var4 = 0;
- String var5 = "";
- String var6 = "";
- var1 = var1.toLowerCase();
-
- for(int var7 = 0; var7 < var3; ++var7) {
- var4 = var1.lastIndexOf(var2[var7]);
- if (var4 > 0) {
- var6 = var1.substring(var4);
- if (var6.compareTo(var2[var7]) == 0) {
- if (var4 >= 2 && var1.charAt(var4 - 2) == var1.charAt(var4 - 1)) {
- var5 = var1.substring(0, var4 - 1);
- } else {
- var5 = var1.substring(0, var4);
- }
-
- return var5;
- }
- }
- }
-
- return var1;
- }
- }
-
- private boolean IsStopWord(String var1) {
- int var2 = 0;
- int var3 = this.m_nStopWordCount - 1;
- int var4 = 0;
- boolean var5 = false;
- Object var6 = null;
- var1.toLowerCase();
-
- while(var2 <= var3) {
- var4 = var2 + var3;
- var4 >>= 1;
- String var9 = this.m_strStopWords[var4];
- if (var1.compareTo(var9) > 0) {
- var2 = var2 == var4 ? var4 + 1 : var4;
- } else {
- if (var1.compareTo(var9) >= 0) {
- var5 = true;
- break;
- }
-
- var3 = var3 == var4 ? var4 - 1 : var4;
- }
- }
-
- return var5;
- }
- }
-