home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / browser / tools / javasearch / javaindex.java < prev    next >
Text File  |  1995-08-11  |  6KB  |  185 lines

  1. /*
  2.  * @(#)javaindex.java    1.13 95/03/14 David A. Brown
  3.  *
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Permission to use, copy, modify, and distribute this software
  7.  * and its documentation for NON-COMMERCIAL purposes and without
  8.  * fee is hereby granted provided that this copyright notice
  9.  * appears in all copies. Please refer to the file "copyright.html"
  10.  * for further important copyright and licensing information.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  13.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  14.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  15.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  16.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  17.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  18.  */
  19.  
  20. package browser.tools.JavaSearch;
  21.  
  22. /** javaindex:  the JavaSearch indexer main program */
  23. class javaindex {
  24.  
  25.     // Bunch of static vars we use to keep track of performance stats
  26.     static int numSorts = 0;    // # times we sorted the index
  27.     static int sortTime = 0;    // how much time spent sorting
  28.     static int parseTime = 0;    // how much time spent parsing doc files
  29.     //
  30.     static int documentsSize = 0; // Total size of Documents in the index
  31.  
  32.     /** Show a usage message.
  33.      *  But see the file README in this directory for more info!
  34.      */
  35.     static void showUsage() {
  36.     System.out.println("  Usage:  java javaindex -db database_name [-trimprefix path_to_trim]");
  37.     System.out.println("\t [-stoplist stopfile] [-fileprefix path_prefix] [-urlprefix url_prefix]");
  38.     System.out.println("\t [-description \"Description of this database\"]");
  39.     System.out.println("\t filename filename ...");    
  40.     }
  41.  
  42.     public static void main(String args[]) {
  43.     int startTime = System.nowMillis();
  44.  
  45.     //
  46.     // Process args
  47.     //
  48.  
  49.     String arg;
  50.     int argc = 0;
  51.  
  52.     String dbname = null;
  53.     String trimprefix = null;
  54.     String fileprefix = "";
  55.     String urlprefix = null;
  56.     String stopfile = null;
  57.     String description = "JavaSearch database created with 'javaindex'";
  58.  
  59.     try {
  60.         while ((argc < args.length) && args[argc].startsWith("-")) {
  61.         if (args[argc].equals("-db")) {
  62.             dbname = args[++argc];
  63.         }
  64.         else if (args[argc].equals("-trimprefix")) {
  65.             trimprefix = args[++argc];
  66.         }
  67.         else if (args[argc].equals("-fileprefix")) {
  68.             fileprefix = args[++argc];
  69.         }
  70.         else if (args[argc].equals("-urlprefix")) {
  71.             urlprefix = args[++argc];
  72.         }
  73.         else if (args[argc].equals("-description")) {
  74.             description = args[++argc];
  75.         }
  76.         else if (args[argc].equals("-stoplist")) {
  77.             stopfile = args[++argc];
  78.         }
  79.         else {
  80.             System.out.println("  Unknown argument '"+args[argc]+"'!");
  81.             showUsage();
  82.             return;
  83.         }
  84.         argc++;
  85.         }
  86.     }
  87.     catch (ArrayIndexOutOfBoundsException e) {
  88.         showUsage();
  89.             return;
  90.     }
  91.  
  92.     // Make sure we got any required parameters, and that
  93.     //   we have at least one filename to index!
  94.     if (dbname == null) {
  95.         System.out.println("  No database_name specified!");
  96.         showUsage();
  97.         return;
  98.     }
  99.     if (argc >= args.length) {
  100.             System.out.println("  No filenames to index specified!");
  101.         showUsage();
  102.         return;
  103.     }
  104.  
  105.     Database db = Database.CreateNewDatabase(dbname);
  106.     db.docPathPrefix = fileprefix;
  107.     db.docURLPrefix = urlprefix;
  108.     db.description = description;
  109.     System.out.println(db);
  110.  
  111.     Index index = new Index(stopfile);
  112.     DocList doclist = new DocList();
  113.  
  114.     // Process each file
  115.     // Future:  feature to recursively index a
  116.     //    whole dir tree would be nice
  117.         do {
  118.         String filename = args[argc];
  119.         System.out.print("--> indexing file "+filename);
  120.  
  121.         // REMIND:  We need to handle IO Exceptions better
  122.         //   if they occur here, especially stuff we ought to
  123.         //   handle cleanly (like "File not found")
  124.         //   versus bad stuff like "I/O error".
  125.         // But to do this we need a better IOException model;
  126.         //   see Article 898 in fp.livejava (from csw, 18 Oct 1994)
  127.  
  128.         // Make a Doc out of the file
  129.         Doc doc = new Doc(filename);
  130.         doc.trimFilename(trimprefix);
  131.         doclist.addDoc(doc);
  132.         System.out.print("  [headline '"+doc.headline+"']");
  133.  
  134.         // Make an IndexingInputStream for the file
  135.             long start = System.nowMillis();
  136.         IndexingInputStream input = new IndexingInputStream(filename);
  137.         input.setDocType(doc.type);
  138.  
  139.         documentsSize += input.available();
  140.  
  141.         // Tell the index to associate this Doc with
  142.         //   all the words in this stream:
  143.         index.addDocToIndex(doc,input);
  144.             System.out.println(" ("+(System.nowMillis()-start)+"ms)");
  145.  
  146.         // Close the file
  147.         input.close();
  148.         } while (++argc < args.length);
  149.  
  150.     // Debugging:
  151.     System.out.println("-----");
  152.     doclist.dump();
  153.     index.sort();
  154.     //index.dump();
  155.  
  156.     index.saveAs(db);
  157.     doclist.saveAs(db);
  158.     db.saveInfoFile();
  159.  
  160.     // Show some final statistics:
  161.     int totalTime = System.nowMillis() - startTime;
  162.     int indexSize = db.indexSize();
  163.     int totalDBSize = db.totalDBSize();
  164.  
  165.     System.out.println("\njavaindex finished.  "+
  166.                doclist.size() + " document" +
  167.                ((doclist.size()==1?"":"s")) +
  168.                ", "+index.entries.size()+" words in index.");
  169.     System.out.println("   total time "+totalTime/1000+" sec.");
  170.     System.out.println("   sorted the index " +
  171.                numSorts + " time"+(numSorts==1?"":"s") +
  172.                ";  total time " + sortTime + " ms.");
  173.     System.out.println("   time processing documents:  " +
  174.                parseTime + " ms.");
  175.     System.out.println("   total size of documents: " +
  176.                documentsSize + " bytes, size of index: " +
  177.                indexSize + " bytes (" +
  178.                (indexSize*100/documentsSize) + "% of docs)");
  179.     System.out.println("                total size of this JavaSearch database: " +
  180.                            totalDBSize + " bytes (" +
  181.                            (totalDBSize*100/documentsSize) + "% of docs)");
  182.     }
  183.  
  184. }
  185.