home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2004 May / DPPCPRO0504.ISO / May / Seatools / SeaTools.iso / tools / en / webhelp / webhelp.jar / hhapplet / FtsListView.class (.txt) < prev    next >
Encoding:
Java Class File  |  2002-04-17  |  6.3 KB  |  453 lines

  1. package hhapplet;
  2.  
  3. import XMLConsumer.Fts;
  4. import XMLConsumer.FtsEntry;
  5. import XMLConsumer.FtsTData;
  6. import XMLConsumer.FtsWData;
  7. import XMLConsumer.IEntry;
  8. import XMLConsumer.Topic;
  9. import java.awt.Component;
  10. import java.awt.Graphics;
  11. import java.awt.Image;
  12. import java.net.URL;
  13. import java.util.Enumeration;
  14. import java.util.Vector;
  15.  
  16. public class FtsListView extends ListView implements IChunkedDataListener {
  17.    private static final String m_sFtsBreakChars = "\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\u0085\u0092\u0093\u0094\u0095\u0096\u0097\u0099┬⌐┬«┬╖";
  18.    private static final int m_nFtsBreakCharsNum = "\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\u0085\u0092\u0093\u0094\u0095\u0096\u0097\u0099┬⌐┬«┬╖".length();
  19.    private Vector m_chunkedInfos;
  20.    private String m_sSearchingKey;
  21.    private String m_sBackSearchingKey;
  22.    private int m_nCurrentOp;
  23.    private boolean m_bFirst = true;
  24.    private boolean m_bNot = false;
  25.    private boolean m_bReady = false;
  26.    private String m_sCurrentWord;
  27.    private String m_sCheckKey;
  28.    private int m_nIndexNum;
  29.    private FtsWData[] m_aFtsContentsCon;
  30.    private int[] m_aProj;
  31.    private int m_nCheck;
  32.    private Vector m_aTopicInfo;
  33.    private Vector m_aTopicCheckInfo;
  34.    private int m_nTopicCheck;
  35.  
  36.    private Vector mergeTopics(Vector var1, Vector var2) {
  37.       int var3 = 0;
  38.       int var4 = 0;
  39.       int var5 = 0;
  40.       if (var1 != null) {
  41.          var5 = var1.size();
  42.       }
  43.  
  44.       int var6 = 0;
  45.       if (var2 != null) {
  46.          var6 = var2.size();
  47.       }
  48.  
  49.       Vector var7 = new Vector();
  50.  
  51.       while(var3 < var5 || var4 < var6) {
  52.          if (var3 < var5 && var4 < var6) {
  53.             if (Language.compare(((FtsEntry)var1.elementAt(var3)).getName(), ((FtsEntry)var2.elementAt(var4)).getName()) < 0) {
  54.                var7.addElement(var1.elementAt(var3++));
  55.             } else {
  56.                var7.addElement(var2.elementAt(var4++));
  57.             }
  58.          } else if (var3 < var5) {
  59.             var7.addElement(var1.elementAt(var3++));
  60.          } else if (var4 < var6) {
  61.             var7.addElement(var2.elementAt(var4++));
  62.          }
  63.       }
  64.  
  65.       return var7;
  66.    }
  67.  
  68.    private void clearList() {
  69.       ((ListView)this).setVerticalMax(0);
  70.       this.m_aTopicInfo.removeAllElements();
  71.       ((ListView)this).clearHightLighted();
  72.       ((ListView)this).clearSelected();
  73.    }
  74.  
  75.    private void findFTSKey() {
  76.       this.clearList();
  77.       this.m_nCurrentOp = 1;
  78.       this.m_bNot = false;
  79.       if (this.m_sSearchingKey != "") {
  80.          this.m_bFirst = true;
  81.          this.findOneKey();
  82.       }
  83.  
  84.    }
  85.  
  86.    private void findOneKey() {
  87.       if (this.m_sSearchingKey == "") {
  88.          this.displayTopics();
  89.          this.checkAgain();
  90.       } else {
  91.          String var1 = this.m_sSearchingKey;
  92.          String var2 = "";
  93.          int var3 = -1;
  94.          int var4 = 0;
  95.          int var5 = -1;
  96.  
  97.          for(int var6 = 0; var6 < m_nFtsBreakCharsNum; ++var6) {
  98.             var4 = var1.indexOf("\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\u0085\u0092\u0093\u0094\u0095\u0096\u0097\u0099┬⌐┬«┬╖".charAt(var6));
  99.             if (var4 != -1 && (var3 == -1 || var4 < var3)) {
  100.                var3 = var4;
  101.                var5 = var6;
  102.             }
  103.          }
  104.  
  105.          if (var3 == -1) {
  106.             var2 = var1;
  107.             var1 = "";
  108.          } else {
  109.             var2 = var1.substring(0, var3);
  110.             var1 = var1.substring(var3 + 1);
  111.          }
  112.  
  113.          this.m_sSearchingKey = var1;
  114.          if (var2.compareTo("or") != 0 && (var5 < 0 || "\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\u0085\u0092\u0093\u0094\u0095\u0096\u0097\u0099┬⌐┬«┬╖".charAt(var5) != '|')) {
  115.             if (var2.compareTo("and") != 0 && (var5 < 0 || "\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\u0085\u0092\u0093\u0094\u0095\u0096\u0097\u0099┬⌐┬«┬╖".charAt(var5) != '&')) {
  116.                if (var2.compareTo("not") == 0 || var5 >= 0 && "\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\u0085\u0092\u0093\u0094\u0095\u0096\u0097\u0099┬⌐┬«┬╖".charAt(var5) == '~') {
  117.                   this.m_bNot = !this.m_bNot;
  118.                } else if (var2.length() != 0 && !Language.isStopWord(var2)) {
  119.                   String var10 = Language.getStem(var2);
  120.                   this.m_sCurrentWord = var10;
  121.                   this.ftsFindKeyword();
  122.                   return;
  123.                }
  124.             } else {
  125.                this.m_nCurrentOp = 1;
  126.                this.m_bNot = false;
  127.             }
  128.          } else {
  129.             this.m_nCurrentOp = 0;
  130.             this.m_bNot = false;
  131.          }
  132.  
  133.          this.findOneKey();
  134.       }
  135.    }
  136.  
  137.    public void search(String var1) {
  138.       if (this.m_sSearchingKey == null) {
  139.          this.m_sSearchingKey = var1.toLowerCase();
  140.          ((ListView)this).setTimeout("findFTSKey", 1);
  141.       } else {
  142.          this.m_sBackSearchingKey = var1.toLowerCase();
  143.       }
  144.    }
  145.  
  146.    protected void listPaint(Graphics var1, Image var2) {
  147.       int var3 = this.getWidth(var1);
  148.       ((ListView)this).setHorizontalMax(var3);
  149.       int var4 = ((ListView)this).getTop();
  150.       int var5 = var4;
  151.  
  152.       while(var5 < this.m_aTopicInfo.size()) {
  153.          IEntry var6 = (IEntry)this.m_aTopicInfo.elementAt(var5);
  154.          var6.display(var1, var5 - var4, ((ListView)this).getUnitHeight(), ((Component)this).getBackground(), var2);
  155.          ++var5;
  156.          if (var5 >= var4 + ((ListView)this).getVisible()) {
  157.             break;
  158.          }
  159.       }
  160.  
  161.    }
  162.  
  163.    public FtsListView(Vector var1) {
  164.       this.m_chunkedInfos = var1;
  165.       this.m_aTopicInfo = new Vector();
  166.       this.clearList();
  167.    }
  168.  
  169.    private void checkAgain() {
  170.       this.m_sSearchingKey = this.m_sBackSearchingKey;
  171.       this.m_sBackSearchingKey = null;
  172.       if (this.m_sSearchingKey != null) {
  173.          ((ListView)this).setTimeout("findFTSKey", 1);
  174.       }
  175.  
  176.    }
  177.  
  178.    private Vector getTopics(FtsWData var1, int var2, String var3) {
  179.       Vector var4 = new Vector();
  180.       if (var1 != null) {
  181.          Vector var5 = var1.getTopics(var3);
  182.          if (var5 != null) {
  183.             for(int var6 = 0; var6 < var5.size(); ++var6) {
  184.                Fts var7 = (Fts)this.m_chunkedInfos.elementAt(var2);
  185.                FtsTData var8 = var7.getChunkedTopicData((Integer)var5.elementAt(var6));
  186.                if (var8 != null) {
  187.                   if (!var8.isLoaded()) {
  188.                      var8.load(this);
  189.                      return null;
  190.                   }
  191.  
  192.                   Vector var9 = var8.getTopics();
  193.  
  194.                   try {
  195.                      if (var9 != null) {
  196.                         var4.addElement(var9.elementAt((Integer)var5.elementAt(var6) - var8.getBegin()));
  197.                      }
  198.                   } catch (Exception var11) {
  199.                      ((Throwable)var11).printStackTrace();
  200.                   }
  201.                }
  202.             }
  203.          }
  204.       }
  205.  
  206.       return var4;
  207.    }
  208.  
  209.    public void accept(Vector var1) {
  210.       if (var1.size() == 1) {
  211.          URL var2 = (URL)var1.elementAt(0);
  212.          BsscHelpRedirector.showDoc(var2);
  213.       }
  214.  
  215.    }
  216.  
  217.    public void dispatchToDo(String var1) {
  218.       if (var1.equals("findFTSKey")) {
  219.          this.findFTSKey();
  220.       } else if (var1.equals("ftsFindKeyword")) {
  221.          this.ftsFindKeyword();
  222.       } else {
  223.          super.dispatchToDo(var1);
  224.       }
  225.    }
  226.  
  227.    public void putData(IChunkedData var1) {
  228.       ((ListView)this).setTimeout("ftsFindKeyword", 1);
  229.    }
  230.  
  231.    protected IEntry getEntryByPos(int var1) {
  232.       return this.m_aTopicInfo.size() > var1 ? (IEntry)this.m_aTopicInfo.elementAt(var1) : null;
  233.    }
  234.  
  235.    public void displayError(String var1) {
  236.       this.clearList();
  237.       this.m_aTopicInfo.addElement(new ErrEntry(var1));
  238.       ((ListView)this).setVerticalMax(this.m_aTopicInfo.size());
  239.       ((Component)this).repaint();
  240.    }
  241.  
  242.    private void insertTopic(FtsEntry var1) {
  243.       int var2 = 0;
  244.       int var3 = this.m_aTopicInfo.size() - 1;
  245.       if (var3 < 0) {
  246.          this.m_aTopicInfo.addElement(var1);
  247.       } else {
  248.          boolean var6 = false;
  249.  
  250.          int var4;
  251.          FtsEntry var5;
  252.          do {
  253.             var4 = var2 + var3 >> 1;
  254.             var5 = (FtsEntry)this.m_aTopicInfo.elementAt(var4);
  255.             if (Language.compare(((Topic)var5).getName(), ((Topic)var1).getName()) > 0) {
  256.                var3 = var4 - 1;
  257.             } else {
  258.                if (Language.compare(((Topic)var5).getName(), ((Topic)var1).getName()) >= 0) {
  259.                   var6 = true;
  260.                   break;
  261.                }
  262.  
  263.                var2 = var4 + 1;
  264.             }
  265.          } while(var2 <= var3);
  266.  
  267.          if (var6) {
  268.             this.m_aTopicInfo.insertElementAt(var1, var4);
  269.          } else if (Language.compare(((Topic)var5).getName(), ((Topic)var1).getName()) < 0) {
  270.             this.m_aTopicInfo.insertElementAt(var1, var4 + 1);
  271.          } else {
  272.             this.m_aTopicInfo.insertElementAt(var1, var4);
  273.          }
  274.       }
  275.    }
  276.  
  277.    protected int getWidth(Graphics var1) {
  278.       int var2 = 0;
  279.       int var3 = 0;
  280.       Enumeration var4 = this.m_aTopicInfo.elements();
  281.  
  282.       while(var4.hasMoreElements()) {
  283.          IEntry var5 = (IEntry)var4.nextElement();
  284.          var3 = var5.getWidth(var1);
  285.          if (var3 > var2) {
  286.             var2 = var3;
  287.          }
  288.       }
  289.  
  290.       return var2;
  291.    }
  292.  
  293.    private void displayTopics() {
  294.       if (this.m_aTopicInfo.size() == 0) {
  295.          this.m_aTopicInfo.addElement(new ErrEntry(ResourceLib.GetRes("TopicsNotFound")));
  296.       }
  297.  
  298.       ((Component)this).repaint();
  299.    }
  300.  
  301.    private boolean mergewithPreviousResult(Vector var1) {
  302.       if (var1 != null && var1.size() != 0) {
  303.          int var2 = var1.size();
  304.          if (this.m_nCurrentOp != 0 && !this.m_bFirst) {
  305.             if (this.m_nCurrentOp == 1) {
  306.                if (this.m_bNot) {
  307.                   int var10 = 0;
  308.  
  309.                   for(int var12 = 0; var12 < var2; ++var12) {
  310.                      FtsEntry var14 = (FtsEntry)var1.elementAt(var12);
  311.  
  312.                      for(int var16 = var10; var16 < this.m_aTopicInfo.size(); ++var16) {
  313.                         FtsEntry var18 = (FtsEntry)this.m_aTopicInfo.elementAt(var16);
  314.                         if (var14.equalTo(var18)) {
  315.                            this.m_aTopicInfo.removeElementAt(var16);
  316.                            var10 = var16;
  317.                            break;
  318.                         }
  319.                      }
  320.                   }
  321.                } else {
  322.                   int var9 = 0;
  323.  
  324.                   for(int var11 = 0; var11 < this.m_aTopicInfo.size(); ++var11) {
  325.                      boolean var13 = false;
  326.                      FtsEntry var15 = (FtsEntry)this.m_aTopicInfo.elementAt(var11);
  327.  
  328.                      for(int var17 = var9; var17 < var2; ++var17) {
  329.                         FtsEntry var19 = (FtsEntry)var1.elementAt(var17);
  330.                         if (var15.equalTo(var19)) {
  331.                            var13 = true;
  332.                            var9 = var17;
  333.                         }
  334.                      }
  335.  
  336.                      if (!var13) {
  337.                         this.m_aTopicInfo.removeElementAt(var11);
  338.                         --var11;
  339.                      }
  340.                   }
  341.                }
  342.             }
  343.          } else {
  344.             if (this.m_bNot) {
  345.                this.displayError(ResourceLib.GetRes("CantSearch"));
  346.                return false;
  347.             }
  348.  
  349.             int var3 = 0;
  350.  
  351.             for(int var4 = 0; var4 < var2; ++var4) {
  352.                boolean var5 = false;
  353.                FtsEntry var6 = (FtsEntry)var1.elementAt(var4);
  354.  
  355.                for(int var7 = var3; var7 < this.m_aTopicInfo.size(); ++var7) {
  356.                   FtsEntry var8 = (FtsEntry)this.m_aTopicInfo.elementAt(var7);
  357.                   if (var6.equalTo(var8)) {
  358.                      var5 = true;
  359.                      var3 = var7;
  360.                      break;
  361.                   }
  362.                }
  363.  
  364.                if (!var5) {
  365.                   this.insertTopic(var6);
  366.                }
  367.             }
  368.          }
  369.  
  370.          ((ListView)this).setVerticalMax(this.m_aTopicInfo.size());
  371.       } else if (this.m_nCurrentOp == 1 && !this.m_bNot) {
  372.          this.clearList();
  373.       } else if (this.m_nCurrentOp == 0 && this.m_bNot) {
  374.          this.displayError(ResourceLib.GetRes("CantSearch"));
  375.          return false;
  376.       }
  377.  
  378.       return true;
  379.    }
  380.  
  381.    private void ftsFindKeyword() {
  382.       String var1 = this.m_sCurrentWord;
  383.       int var2 = this.m_chunkedInfos.size();
  384.       boolean var3 = false;
  385.       int var6 = 0;
  386.       if (var1 != null) {
  387.          FtsWData[] var4;
  388.          int[] var5;
  389.          if (this.m_sCheckKey != null && !var1.equals(this.m_sCheckKey) && this.m_nIndexNum != 0) {
  390.             var6 = this.m_nIndexNum;
  391.             var4 = this.m_aFtsContentsCon;
  392.             var5 = this.m_aProj;
  393.          } else {
  394.             var4 = new FtsWData[var2];
  395.             var5 = new int[var2];
  396.             this.m_nCheck = 0;
  397.             this.m_nTopicCheck = 0;
  398.             this.m_aTopicCheckInfo = null;
  399.             this.m_sCheckKey = var1;
  400.          }
  401.  
  402.          for(int var7 = this.m_nCheck; var7 < var2; ++var7) {
  403.             Fts var8 = (Fts)this.m_chunkedInfos.elementAt(var7);
  404.             FtsWData var9 = var8.getChunkedData(var1);
  405.             if (var9 != null) {
  406.                if (!var9.isLoaded()) {
  407.                   var3 = true;
  408.                   this.m_nIndexNum = var6;
  409.                   this.m_nCheck = var7;
  410.                   this.m_aFtsContentsCon = var4;
  411.                   this.m_aProj = var5;
  412.                   var9.load(this);
  413.                   break;
  414.                }
  415.  
  416.                var5[var6] = var7;
  417.                var4[var6++] = var9;
  418.             }
  419.          }
  420.  
  421.          if (!var3) {
  422.             Vector var10 = this.m_aTopicCheckInfo;
  423.  
  424.             for(int var11 = this.m_nTopicCheck; var11 < var6; ++var11) {
  425.                Vector var12 = this.getTopics(var4[var11], var5[var11], var1);
  426.                if (var12 == null) {
  427.                   this.m_nCheck = this.m_chunkedInfos.size();
  428.                   this.m_nTopicCheck = var11;
  429.                   this.m_aTopicCheckInfo = var10;
  430.                   this.m_aFtsContentsCon = var4;
  431.                   return;
  432.                }
  433.  
  434.                if (var11 == 0) {
  435.                   var10 = var12;
  436.                } else {
  437.                   var10 = this.mergeTopics(var10, var12);
  438.                }
  439.             }
  440.  
  441.             if (this.mergewithPreviousResult(var10)) {
  442.                this.m_bFirst = false;
  443.                this.findOneKey();
  444.                return;
  445.             }
  446.  
  447.             this.checkAgain();
  448.          }
  449.  
  450.       }
  451.    }
  452. }
  453.