home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2002 March / PCWMAR02.iso / software / windowsxp / ftgateoffice / ftgateoffice.exe / Main / webhelp.jar / hhapplet / FTSSearcher.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-11-07  |  4.8 KB  |  431 lines

  1. package hhapplet;
  2.  
  3. import java.applet.Applet;
  4. import java.util.Vector;
  5.  
  6. public class FTSSearcher {
  7.    protected Applet m_applet;
  8.    protected int m_nTopicCount = 0;
  9.    protected int m_nKeywordCount = 0;
  10.    protected int m_nStopWordCount = 0;
  11.    protected TopicData[] m_tdTopics;
  12.    protected KeywordData[] m_kdKeywords;
  13.    protected String[] m_strStopWords;
  14.    protected int[] m_aryTopicsFound;
  15.    protected int m_nTopicsFoundCount = 0;
  16.    private int[] m_charorder;
  17.    private boolean m_bEnglish = true;
  18.    private Vector m_searchResVector = null;
  19.  
  20.    public String getTopicURL(String var1) {
  21.       for(int var2 = 0; var2 < this.m_nTopicsFoundCount; ++var2) {
  22.          if (this.m_tdTopics[this.m_aryTopicsFound[var2]].m_strTitle.compareTo(var1) == 0) {
  23.             return this.m_tdTopics[this.m_aryTopicsFound[var2]].m_urlTopic;
  24.          }
  25.       }
  26.  
  27.       return "";
  28.    }
  29.  
  30.    public boolean setTopicData(int var1, String var2, String var3) {
  31.       if (var1 >= 0 && var1 < this.m_nTopicCount) {
  32.          this.m_tdTopics[var1] = new TopicData(this);
  33.          this.m_tdTopics[var1].m_strTitle = var2;
  34.          this.m_tdTopics[var1].m_urlTopic = var3;
  35.          return true;
  36.       } else {
  37.          return false;
  38.       }
  39.    }
  40.  
  41.    public int getKeywordCount() {
  42.       return this.m_nKeywordCount;
  43.    }
  44.  
  45.    public int setKeywordCount(int var1) {
  46.       this.m_kdKeywords = new KeywordData[var1];
  47.       this.m_nKeywordCount = var1;
  48.       return this.m_nKeywordCount;
  49.    }
  50.  
  51.    public int getStopWordCount() {
  52.       return this.m_nStopWordCount;
  53.    }
  54.  
  55.    public int setStopWordCount(int var1) {
  56.       this.m_strStopWords = new String[var1];
  57.       this.m_nStopWordCount = var1;
  58.       return this.m_nStopWordCount;
  59.    }
  60.  
  61.    public FTSSearcher(Applet var1) {
  62.       this.m_applet = var1;
  63.       String var2 = ResourceLib.GetRes("langorder");
  64.       String var3 = ResourceLib.GetRes("English");
  65.       var3 = var3.toLowerCase();
  66.       if (var3.compareTo("true") == 0) {
  67.          this.m_bEnglish = true;
  68.       } else {
  69.          this.m_bEnglish = false;
  70.       }
  71.  
  72.       if (var2 != null) {
  73.          this.m_charorder = new int[256];
  74.          int var4 = 0;
  75.          int var5 = var2.indexOf(44, var4);
  76.  
  77.          for(int var6 = 0; var5 != -1; var5 = var2.indexOf(44, var4)) {
  78.             String var7 = var2.substring(var4, var5);
  79.             if (var7 != null) {
  80.                this.m_charorder[var6] = Integer.parseInt(var7);
  81.                ++var6;
  82.             }
  83.  
  84.             var4 = var5 + 1;
  85.          }
  86.       }
  87.  
  88.    }
  89.  
  90.    public int getTopicCount() {
  91.       return this.m_nTopicCount;
  92.    }
  93.  
  94.    public int setTopicCount(int var1) {
  95.       this.m_tdTopics = new TopicData[var1];
  96.       this.m_nTopicCount = var1;
  97.       this.m_aryTopicsFound = new int[this.m_nTopicCount];
  98.       return this.m_nTopicCount;
  99.    }
  100.  
  101.    private void SortTopics(int[] var1, int var2, int var3) {
  102.       if (var3 - var2 > 0) {
  103.          int var5 = var2;
  104.  
  105.          for(int var6 = var2 + 1; var6 <= var3; ++var6) {
  106.             TopicData var7 = this.m_tdTopics[var1[var6]];
  107.             String var8 = var7.m_strTitle;
  108.             TopicData var9 = this.m_tdTopics[var1[var2]];
  109.             String var10 = var9.m_strTitle;
  110.             if (this.compareString(var8, var10) < 0) {
  111.                ++var5;
  112.                int var4 = var1[var6];
  113.                var1[var6] = var1[var5];
  114.                var1[var5] = var4;
  115.             }
  116.          }
  117.  
  118.          int var11 = var1[var2];
  119.          var1[var2] = var1[var5];
  120.          var1[var5] = var11;
  121.          this.SortTopics(var1, var2, var5);
  122.          this.SortTopics(var1, var5 + 1, var3);
  123.       }
  124.  
  125.    }
  126.  
  127.    private int compareString(String var1, String var2) {
  128.       if (this.m_charorder == null) {
  129.          String var5 = var1.toLowerCase();
  130.          String var4 = var2.toLowerCase();
  131.          return var5.compareTo(var4);
  132.       } else {
  133.          for(int var3 = 0; var3 < var1.length() && var3 < var2.length(); ++var3) {
  134.             if (this.m_charorder[var1.charAt(var3)] < this.m_charorder[var2.charAt(var3)]) {
  135.                return -1;
  136.             }
  137.  
  138.             if (this.m_charorder[var1.charAt(var3)] > this.m_charorder[var2.charAt(var3)]) {
  139.                return 1;
  140.             }
  141.          }
  142.  
  143.          if (var1.length() < var2.length()) {
  144.             return -1;
  145.          } else {
  146.             return var1.length() > var2.length() ? 1 : 0;
  147.          }
  148.       }
  149.    }
  150.  
  151.    public boolean doSearch(String var1, Vector var2) {
  152.       boolean var3 = false;
  153.       boolean var4 = false;
  154.       boolean var5 = false;
  155.       boolean var6 = true;
  156.       String var7 = "";
  157.       String var8 = "";
  158.       int var9 = 0;
  159.       int var10 = 0;
  160.       int var11 = 0;
  161.       int var12 = 0;
  162.       int var13 = 0;
  163.       this.m_searchResVector = var2;
  164.       if (this.m_searchResVector != null) {
  165.          this.m_searchResVector.removeAllElements();
  166.       }
  167.  
  168.       this.m_nTopicsFoundCount = 0;
  169.       String var14 = "\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=";
  170.       int var15 = var14.length();
  171.  
  172.       while(!var5 && var1.length() != 0) {
  173.          var9 = -1;
  174.  
  175.          for(int var16 = 0; var16 < var15 && var9 == -1; ++var16) {
  176.             var9 = var1.indexOf(var14.charAt(var16));
  177.          }
  178.  
  179.          if (var9 == -1) {
  180.             var7 = var1;
  181.             var1 = "";
  182.          } else {
  183.             var7 = var1.substring(0, var9);
  184.             if (var1.charAt(var9) == '~') {
  185.                var4 = true;
  186.             }
  187.  
  188.             var1 = var1.substring(var9 + 1);
  189.          }
  190.  
  191.          if (var7.length() == 0) {
  192.             if (var1.length() == 0) {
  193.                break;
  194.             }
  195.          } else if (!var7.equalsIgnoreCase("or") && var7.compareTo("|") != 0) {
  196.             if (!var7.equalsIgnoreCase("and") && var7.compareTo("&") != 0) {
  197.                if (!var7.equalsIgnoreCase("not") && var7.compareTo("~") != 0) {
  198.                   if (!this.IsStopWord(var7)) {
  199.                      if (var7.substring(0, 1) == "~") {
  200.                         var4 = true;
  201.                         var7 = var7.substring(1);
  202.                      }
  203.  
  204.                      var8 = this.GetStem(var7);
  205.                      var10 = (boolean)-1;
  206.                      var10 = this.FindKeyword(var8);
  207.                      if (var10 != -1) {
  208.                         int var33 = this.m_kdKeywords[var10].m_aryTopicLinks.length;
  209.                         if (!var3) {
  210.                            if (var4) {
  211.                               for(int var27 = 0; var27 < this.m_nTopicCount; ++var27) {
  212.                                  for(var13 = 0; var13 < var33 && this.m_kdKeywords[var10].m_aryTopicLinks[var13] != var27; ++var13) {
  213.                                  }
  214.  
  215.                                  if (var13 == var33) {
  216.                                     for(var11 = 0; var11 < this.m_nTopicsFoundCount && this.m_aryTopicsFound[var11] != var27; ++var11) {
  217.                                     }
  218.  
  219.                                     if (var11 == this.m_nTopicsFoundCount) {
  220.                                        this.m_aryTopicsFound[this.m_nTopicsFoundCount] = var27;
  221.                                        ++this.m_nTopicsFoundCount;
  222.                                     }
  223.                                  }
  224.                               }
  225.                            } else {
  226.                               for(int var28 = 0; var28 < var33; ++var28) {
  227.                                  int var17 = this.m_kdKeywords[var10].m_aryTopicLinks[var28];
  228.  
  229.                                  for(var11 = 0; var11 < this.m_nTopicsFoundCount && this.m_aryTopicsFound[var11] != var17; ++var11) {
  230.                                  }
  231.  
  232.                                  if (var11 == this.m_nTopicsFoundCount) {
  233.                                     this.m_aryTopicsFound[this.m_nTopicsFoundCount] = var17;
  234.                                     ++this.m_nTopicsFoundCount;
  235.                                  }
  236.                               }
  237.                            }
  238.                         } else if (var3) {
  239.                            if (var4) {
  240.                               for(int var29 = 0; var29 < var33; ++var29) {
  241.                                  for(int var25 = this.m_nTopicsFoundCount - 1; var25 >= 0; --var25) {
  242.                                     if (this.m_aryTopicsFound[var25] == this.m_kdKeywords[var10].m_aryTopicLinks[var29]) {
  243.                                        if (this.m_nTopicsFoundCount > 0) {
  244.                                           this.m_aryTopicsFound[var25] = this.m_aryTopicsFound[this.m_nTopicsFoundCount - 1];
  245.                                        }
  246.  
  247.                                        this.m_nTopicsFoundCount += -1;
  248.                                        break;
  249.                                     }
  250.                                  }
  251.                               }
  252.                            } else {
  253.                               for(int var26 = this.m_nTopicsFoundCount - 1; var26 >= 0; --var26) {
  254.                                  for(var12 = 0; var12 < var33 && this.m_aryTopicsFound[var26] != this.m_kdKeywords[var10].m_aryTopicLinks[var12]; ++var12) {
  255.                                  }
  256.  
  257.                                  if (var12 == var33) {
  258.                                     if (this.m_nTopicsFoundCount > 0) {
  259.                                        this.m_aryTopicsFound[var26] = this.m_aryTopicsFound[this.m_nTopicsFoundCount - 1];
  260.                                     }
  261.  
  262.                                     this.m_nTopicsFoundCount += -1;
  263.                                  }
  264.                               }
  265.                            }
  266.                         }
  267.                      } else if (var3 && !var4) {
  268.                         this.m_nTopicsFoundCount = 0;
  269.                      } else if (!var3 && var4) {
  270.                         this.m_nTopicsFoundCount = 0;
  271.  
  272.                         for(int var31 = 0; var31 < this.m_nTopicCount; ++var31) {
  273.                            this.m_aryTopicsFound[this.m_nTopicsFoundCount] = var31;
  274.                            ++this.m_nTopicsFoundCount;
  275.                         }
  276.                      }
  277.  
  278.                      if (var6) {
  279.                         var6 = false;
  280.                         var3 = true;
  281.                      }
  282.                   }
  283.                } else {
  284.                   var4 = true;
  285.                }
  286.             } else {
  287.                var3 = true;
  288.                var4 = false;
  289.             }
  290.          } else {
  291.             var3 = false;
  292.             var4 = false;
  293.          }
  294.       }
  295.  
  296.       this.SortTopics(this.m_aryTopicsFound, 0, this.m_nTopicsFoundCount - 1);
  297.       if (this.m_searchResVector != null) {
  298.          for(int var34 = 0; var34 < this.m_nTopicsFoundCount; ++var34) {
  299.             Vector var36 = new Vector();
  300.             var36.addElement(this.m_tdTopics[this.m_aryTopicsFound[var34]].m_strTitle);
  301.             var36.addElement(this.m_tdTopics[this.m_aryTopicsFound[var34]].m_urlTopic);
  302.             this.m_searchResVector.addElement(var36);
  303.          }
  304.       }
  305.  
  306.       if (this.m_nTopicsFoundCount == 0) {
  307.          Vector var35 = new Vector();
  308.          var35.addElement(ResourceLib.GetRes("TopicsNotFound"));
  309.          this.m_searchResVector.addElement(var35);
  310.          return false;
  311.       } else {
  312.          return true;
  313.       }
  314.    }
  315.  
  316.    public boolean setStopWord(int var1, String var2) {
  317.       if (var1 >= 0 && var1 < this.m_nStopWordCount) {
  318.          if (var2 == null) {
  319.             this.m_strStopWords[var1] = null;
  320.          } else {
  321.             this.m_strStopWords[var1] = var2.toLowerCase();
  322.          }
  323.  
  324.          return true;
  325.       } else {
  326.          return false;
  327.       }
  328.    }
  329.  
  330.    private int FindKeyword(String var1) {
  331.       int var2 = 0;
  332.       int var3 = this.m_nKeywordCount - 1;
  333.       int var4 = 0;
  334.       boolean var5 = false;
  335.       String var6 = "";
  336.       var1 = var1.toLowerCase();
  337.  
  338.       while(var2 <= var3) {
  339.          int var8 = var2 + var3;
  340.          var4 = var8 >> 1;
  341.          var6 = this.m_kdKeywords[var4].m_strKeyword;
  342.          if (var1.compareTo(var6) > 0) {
  343.             var2 = var2 == var4 ? var4 + 1 : var4;
  344.          } else {
  345.             if (var1.compareTo(var6) >= 0) {
  346.                var5 = true;
  347.                break;
  348.             }
  349.  
  350.             var3 = var3 == var4 ? var4 - 1 : var4;
  351.          }
  352.       }
  353.  
  354.       return var5 ? var4 : -1;
  355.    }
  356.  
  357.    public boolean setKeywordData(int var1, String var2, int[] var3) {
  358.       if (var1 >= 0 && var1 < this.m_nKeywordCount) {
  359.          this.m_kdKeywords[var1] = new KeywordData(this);
  360.          if (var2 == null) {
  361.             this.m_kdKeywords[var1].m_strKeyword = null;
  362.          } else {
  363.             this.m_kdKeywords[var1].m_strKeyword = var2.toLowerCase();
  364.          }
  365.  
  366.          this.m_kdKeywords[var1].m_aryTopicLinks = var3;
  367.          return true;
  368.       } else {
  369.          return false;
  370.       }
  371.    }
  372.  
  373.    private String GetStem(String var1) {
  374.       if (!this.m_bEnglish) {
  375.          return var1;
  376.       } else {
  377.          String[] var2 = new String[]{"ed", "es", "er", "s", "ingly", "ing", "ly", "e"};
  378.          int var3 = var2.length;
  379.          int var4 = 0;
  380.          String var5 = "";
  381.          String var6 = "";
  382.          var1 = var1.toLowerCase();
  383.  
  384.          for(int var7 = 0; var7 < var3; ++var7) {
  385.             var4 = var1.lastIndexOf(var2[var7]);
  386.             if (var4 > 0) {
  387.                var6 = var1.substring(var4);
  388.                if (var6.compareTo(var2[var7]) == 0) {
  389.                   if (var4 >= 2 && var1.charAt(var4 - 2) == var1.charAt(var4 - 1)) {
  390.                      var5 = var1.substring(0, var4 - 1);
  391.                   } else {
  392.                      var5 = var1.substring(0, var4);
  393.                   }
  394.  
  395.                   return var5;
  396.                }
  397.             }
  398.          }
  399.  
  400.          return var1;
  401.       }
  402.    }
  403.  
  404.    private boolean IsStopWord(String var1) {
  405.       int var2 = 0;
  406.       int var3 = this.m_nStopWordCount - 1;
  407.       int var4 = 0;
  408.       boolean var5 = false;
  409.       Object var6 = null;
  410.       var1.toLowerCase();
  411.  
  412.       while(var2 <= var3) {
  413.          var4 = var2 + var3;
  414.          var4 >>= 1;
  415.          String var9 = this.m_strStopWords[var4];
  416.          if (var1.compareTo(var9) > 0) {
  417.             var2 = var2 == var4 ? var4 + 1 : var4;
  418.          } else {
  419.             if (var1.compareTo(var9) >= 0) {
  420.                var5 = true;
  421.                break;
  422.             }
  423.  
  424.             var3 = var3 == var4 ? var4 - 1 : var4;
  425.          }
  426.       }
  427.  
  428.       return var5;
  429.    }
  430. }
  431.