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

  1. package hhapplet;
  2.  
  3. import java.applet.Applet;
  4. import java.awt.Label;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.net.URL;
  8. import java.util.Vector;
  9. import java.util.zip.ZipEntry;
  10. import java.util.zip.ZipInputStream;
  11. import sitemap.MyBufferedInputStream;
  12.  
  13. public class FTSParser extends Thread {
  14.    protected Applet m_applet;
  15.    protected FTSPane m_spSearch;
  16.    protected FTSSearcher m_ftsSearcher;
  17.    protected Thread m_Thread;
  18.    protected MyBufferedInputStream m_is;
  19.    protected int m_nTotalBytesRead;
  20.    protected int m_nOffset = 0;
  21.    protected String m_strFileName;
  22.    protected URL m_urlDocBase;
  23.    private InputStream m_ZipIs = null;
  24.    protected boolean m_bZipSupport = false;
  25.    private boolean m_bZipFileLoaded = false;
  26.    protected String m_strTopicTitle = null;
  27.    protected String m_strTopicURL = null;
  28.  
  29.    public FTSSearcher getSearcher() {
  30.       return this.m_ftsSearcher;
  31.    }
  32.  
  33.    public void parse() {
  34.       this.run();
  35.    }
  36.  
  37.    public Thread parseInSeparateThread(String var1, URL var2) {
  38.       this.m_strFileName = var1;
  39.       this.m_urlDocBase = var2;
  40.       ((Thread)this).setPriority(4);
  41.       ((Thread)this).start();
  42.       return this;
  43.    }
  44.  
  45.    protected boolean advancePastQuoteInStream() {
  46.       try {
  47.          byte var1;
  48.          do {
  49.             var1 = (byte)this.m_is.read();
  50.             ++this.m_nTotalBytesRead;
  51.          } while(var1 != 10 && var1 != 34);
  52.  
  53.          if (var1 == 34) {
  54.             return true;
  55.          } else {
  56.             return false;
  57.          }
  58.       } catch (IOException var3) {
  59.          ((Throwable)var3).printStackTrace();
  60.          return false;
  61.       }
  62.    }
  63.  
  64.    protected boolean advancePastCommaInStream() {
  65.       try {
  66.          byte var1;
  67.          do {
  68.             var1 = (byte)this.m_is.read();
  69.             ++this.m_nTotalBytesRead;
  70.          } while(var1 != 10 && var1 != 44);
  71.  
  72.          if (var1 == 44) {
  73.             return true;
  74.          } else {
  75.             return false;
  76.          }
  77.       } catch (IOException var3) {
  78.          ((Throwable)var3).printStackTrace();
  79.          return false;
  80.       }
  81.    }
  82.  
  83.    public FTSParser(Applet var1) {
  84.       this.m_applet = var1;
  85.       this.m_ftsSearcher = new FTSSearcher(this.m_applet);
  86.       this.m_spSearch = new FTSPane(this.m_applet, this.m_ftsSearcher);
  87.  
  88.       try {
  89.          Class.forName("java.util.zip.ZipFile");
  90.          this.m_bZipSupport = true;
  91.       } catch (ClassNotFoundException var3) {
  92.          ((Throwable)var3).printStackTrace();
  93.          this.m_bZipSupport = false;
  94.       }
  95.    }
  96.  
  97.    protected boolean advancePastEOLInStream() {
  98.       try {
  99.          byte var1;
  100.          do {
  101.             var1 = (byte)this.m_is.read();
  102.             ++this.m_nTotalBytesRead;
  103.          } while(var1 != 10);
  104.  
  105.          return true;
  106.       } catch (IOException var3) {
  107.          ((Throwable)var3).printStackTrace();
  108.          return false;
  109.       }
  110.    }
  111.  
  112.    protected String getStringFromStream() {
  113.       String var1 = new String();
  114.  
  115.       try {
  116.          byte var2 = (byte)this.m_is.read();
  117.          ++this.m_nTotalBytesRead;
  118.          if (var2 == 34) {
  119.             var2 = (byte)this.m_is.read();
  120.             ++this.m_nTotalBytesRead;
  121.          }
  122.  
  123.          while(var2 != 34) {
  124.             if (var2 < 0) {
  125.                var1 = var1 + (char)(var2 + 256);
  126.             } else {
  127.                var1 = var1 + (char)var2;
  128.             }
  129.  
  130.             var2 = (byte)this.m_is.read();
  131.             ++this.m_nTotalBytesRead;
  132.          }
  133.  
  134.          return var1;
  135.       } catch (IOException var4) {
  136.          ((Throwable)var4).printStackTrace();
  137.          return null;
  138.       }
  139.    }
  140.  
  141.    protected String getStopWordFromStream() {
  142.       new String();
  143.       String var1 = this.getStringFromStream();
  144.       this.advancePastEOLInStream();
  145.       return var1;
  146.    }
  147.  
  148.    protected String getKeywordNameFromStream() {
  149.       String var1 = this.getStringFromStream();
  150.       this.advancePastCommaInStream();
  151.       return var1;
  152.    }
  153.  
  154.    protected void getTopicTitleandURL() {
  155.       String var1 = new String();
  156.  
  157.       try {
  158.          while(true) {
  159.             byte var2 = (byte)this.m_is.read();
  160.             if (var2 < 0) {
  161.                var1 = var1 + (char)(var2 + 256);
  162.             } else {
  163.                var1 = var1 + (char)var2;
  164.             }
  165.  
  166.             ++this.m_nTotalBytesRead;
  167.             if (var2 == 10) {
  168.                int var3 = var1.lastIndexOf("\",\"");
  169.                if (var3 != -1) {
  170.                   this.m_strTopicTitle = var1.substring(1, var3);
  171.                   this.m_strTopicURL = var1.substring(var3 + 3);
  172.                   int var4 = this.m_strTopicURL.lastIndexOf("\"");
  173.                   if (var4 != -1) {
  174.                      this.m_strTopicURL = this.m_strTopicURL.substring(0, var4);
  175.                      return;
  176.                   }
  177.                }
  178.                break;
  179.             }
  180.          }
  181.       } catch (IOException var5) {
  182.          ((Throwable)var5).printStackTrace();
  183.       }
  184.  
  185.    }
  186.  
  187.    public void UpdateStreamStatus() {
  188.       this.m_applet.showStatus(ResourceLib.GetRes("LoadingFTS") + " [" + this.m_nTotalBytesRead + "]");
  189.    }
  190.  
  191.    public void run() {
  192.       try {
  193.          this.m_spSearch.getEditBox().enable(false);
  194.          if (this.m_bZipSupport && this.m_strFileName.toLowerCase().endsWith(".zip")) {
  195.             try {
  196.                InputStream var1 = URLFileHandler.makeURL(this.m_urlDocBase, this.m_strFileName, (String)null).openStream();
  197.                ZipInputStream var2 = new ZipInputStream(var1);
  198.  
  199.                ZipEntry var3;
  200.                do {
  201.                   var3 = var2.getNextEntry();
  202.                } while(!var3.getName().toLowerCase().endsWith(".hhs"));
  203.  
  204.                this.m_is = new MyBufferedInputStream(var2);
  205.                this.m_ZipIs = var2;
  206.                this.m_bZipFileLoaded = true;
  207.             } catch (Exception var13) {
  208.             }
  209.          }
  210.  
  211.          if (!this.m_bZipFileLoaded) {
  212.             try {
  213.                this.m_is = new MyBufferedInputStream(URLFileHandler.makeURL(this.m_urlDocBase, this.m_strFileName, (String)null).openStream());
  214.             } catch (Exception var12) {
  215.                this.m_applet.add("Center", new Label(ResourceLib.GetRes("CantOpenURLorFile") + " " + ((Throwable)var12).getMessage()));
  216.                ((Throwable)var12).printStackTrace();
  217.                return;
  218.             }
  219.          }
  220.  
  221.          this.m_nTotalBytesRead = 0;
  222.          int var4 = this.getCountFromStream("TOPICS=");
  223.          this.UpdateStreamStatus();
  224.          this.m_ftsSearcher.setTopicCount(var4);
  225.  
  226.          for(int var15 = 0; var15 < var4; ++var15) {
  227.             this.getTopicTitleandURL();
  228.             String var18 = this.m_strTopicTitle;
  229.             String var19 = this.m_strTopicURL;
  230.             this.m_ftsSearcher.setTopicData(var15, var18, var19);
  231.             if (var15 % 200 == 0) {
  232.                this.UpdateStreamStatus();
  233.             }
  234.          }
  235.  
  236.          int var7 = this.getCountFromStream("KEYWORDS=");
  237.          this.UpdateStreamStatus();
  238.          this.m_ftsSearcher.setKeywordCount(var7);
  239.  
  240.          for(int var16 = 0; var16 < var7; ++var16) {
  241.             String var6 = this.getKeywordNameFromStream();
  242.             if (var6 == null) {
  243.                Object var8 = null;
  244.             } else {
  245.                String var20 = var6.toLowerCase();
  246.             }
  247.  
  248.             int[] var5 = this.getKeywordLinksFromStream();
  249.             this.m_ftsSearcher.setKeywordData(var16, var6, var5);
  250.             if (var16 % 200 == 0) {
  251.                this.UpdateStreamStatus();
  252.             }
  253.          }
  254.  
  255.          int var9 = this.getCountFromStream("STOPWORDS=");
  256.          this.UpdateStreamStatus();
  257.          this.m_ftsSearcher.setStopWordCount(var9);
  258.  
  259.          for(int var17 = 0; var17 < var9; ++var17) {
  260.             String var21 = this.getStopWordFromStream();
  261.             this.m_ftsSearcher.setStopWord(var17, var21);
  262.             if (var17 % 200 == 0) {
  263.                this.UpdateStreamStatus();
  264.             }
  265.          }
  266.  
  267.          if (this.m_spSearch != null && this.m_spSearch.getList() != null) {
  268.             this.m_spSearch.getList().clear();
  269.          }
  270.  
  271.          if (this.m_spSearch != null && this.m_spSearch.getforappleList() != null) {
  272.             this.m_spSearch.getforappleList().clear();
  273.             this.m_spSearch.paintComponents(this.m_spSearch.getGraphics());
  274.          }
  275.  
  276.          this.m_spSearch.ShowList();
  277.          this.m_applet.showStatus(ResourceLib.GetRes("Done"));
  278.          if (this.m_is != null) {
  279.             try {
  280.                this.m_is.close();
  281.                this.m_is = null;
  282.             } catch (Exception var11) {
  283.             }
  284.          }
  285.  
  286.          if (this.m_ZipIs != null) {
  287.             try {
  288.                this.m_ZipIs.close();
  289.                this.m_ZipIs = null;
  290.             } catch (Exception var10) {
  291.             }
  292.          }
  293.  
  294.          this.m_spSearch.getEditBox().enable(true);
  295.          this.m_spSearch.getEditBox().requestFocus();
  296.       } catch (Exception var14) {
  297.          ((Throwable)var14).printStackTrace();
  298.       }
  299.    }
  300.  
  301.    public FTSPane getFTS() {
  302.       return this.m_spSearch;
  303.    }
  304.  
  305.    protected Integer getIntegerFromStream() {
  306.       String var1 = new String();
  307.  
  308.       try {
  309.          byte var2 = (byte)this.m_is.read();
  310.          ++this.m_nTotalBytesRead;
  311.  
  312.          while(var2 == 32) {
  313.             var2 = (byte)this.m_is.read();
  314.             ++this.m_nTotalBytesRead;
  315.          }
  316.  
  317.          while(var2 >= 48 && var2 <= 57) {
  318.             if (var2 < 0) {
  319.                var1 = var1 + (char)(var2 + 256);
  320.             } else {
  321.                var1 = var1 + (char)var2;
  322.             }
  323.  
  324.             var2 = (byte)this.m_is.read();
  325.             ++this.m_nTotalBytesRead;
  326.          }
  327.  
  328.          if (var2 == 10) {
  329.             return null;
  330.          } else {
  331.             Object var3 = null;
  332.  
  333.             try {
  334.                var7 = new Integer(var1);
  335.             } catch (NumberFormatException var5) {
  336.                var7 = null;
  337.                System.out.println("Error at Byte #" + this.m_nTotalBytesRead + " in stream.");
  338.                ((Throwable)var5).printStackTrace();
  339.             }
  340.  
  341.             return var7;
  342.          }
  343.       } catch (IOException var6) {
  344.          ((Throwable)var6).printStackTrace();
  345.          return null;
  346.       }
  347.    }
  348.  
  349.    protected int getCountFromStream(String var1) {
  350.       String var2 = new String();
  351.       boolean var4 = false;
  352.       int var5 = 0;
  353.  
  354.       try {
  355.          byte var3 = (byte)this.m_is.read();
  356.          ++this.m_nTotalBytesRead;
  357.  
  358.          while(!var4) {
  359.             while(var3 != 91) {
  360.                var3 = (byte)this.m_is.read();
  361.                ++this.m_nTotalBytesRead;
  362.             }
  363.  
  364.             var3 = (byte)this.m_is.read();
  365.             ++this.m_nTotalBytesRead;
  366.  
  367.             while(var5 < var1.length() && var3 == var1.charAt(var5) && var3 != 93) {
  368.                var3 = (byte)this.m_is.read();
  369.                ++this.m_nTotalBytesRead;
  370.                ++var5;
  371.             }
  372.  
  373.             if (var5 == var1.length()) {
  374.                var4 = true;
  375.             } else {
  376.                var5 = 0;
  377.             }
  378.          }
  379.  
  380.          while(var3 >= 48 && var3 <= 57) {
  381.             if (var3 < 0) {
  382.                var2 = var2 + (char)(var3 + 256);
  383.             } else {
  384.                var2 = var2 + (char)var3;
  385.             }
  386.  
  387.             var3 = (byte)this.m_is.read();
  388.             ++this.m_nTotalBytesRead;
  389.          }
  390.  
  391.          if (var3 == 10) {
  392.             return 0;
  393.          } else {
  394.             this.advancePastEOLInStream();
  395.             return Integer.parseInt(var2);
  396.          }
  397.       } catch (IOException var7) {
  398.          ((Throwable)var7).printStackTrace();
  399.          return 0;
  400.       }
  401.    }
  402.  
  403.    protected int[] getKeywordLinksFromStream() {
  404.       Vector var1 = new Vector();
  405.       Object var2 = null;
  406.  
  407.       do {
  408.          var5 = this.getIntegerFromStream();
  409.          if (var5 != null) {
  410.             var1.addElement(var5);
  411.          }
  412.       } while(var5 != null);
  413.  
  414.       int[] var3 = new int[var1.size()];
  415.  
  416.       for(int var4 = 0; var4 < var3.length; ++var4) {
  417.          var3[var4] = (Integer)var1.elementAt(var4);
  418.       }
  419.  
  420.       return var3;
  421.    }
  422. }
  423.