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

  1. /*
  2.  * @(#)DocumentInfo.java    1.31 95/03/18 Jonathan Payne
  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;
  21.  
  22. import net.www.http.UnauthorizedHttpRequestException;
  23. import net.www.http.HttpClient;
  24. import java.util.*;
  25. import net.www.html.URL;
  26. import net.www.html.ContentHandler;
  27. import java.io.*;
  28.  
  29. /**
  30.  * Class DocumentInfo maintains a bunch of information about a
  31.  * Document, such as how this document was reached, the URL of the
  32.  * document, current status (KNOWN, RESIDENT, etc.), its scroll
  33.  * position the last time this document was displayed.
  34.  * @see DocumentManager
  35.  * @see WRWindow
  36.  * @version 1.31, 18 Mar 1995
  37.  * @author Jonathan Payne
  38.  */
  39.  
  40. class DocumentInfo {
  41.     DocumentRef        doc;        /* where we are */
  42.     URL            url;        /* URL for before we create doc */
  43.     int            scrollY;        /* scroll position when last visited */
  44.     boolean        cacheable = true;    /* true if this document can be cached */
  45.     boolean        emptyDocument = false;    /* some "documents" are empty.
  46.                        mailto: is the common case */
  47.     String        title = null;
  48.  
  49.     /**
  50.      * Creates a new DocumentInfo from the specified URL and the
  51.      * specified Document that referenced this new Document.  The
  52.      * Document is not fetched at this time.
  53.      */
  54.     public DocumentInfo(Document doc, URL url) {
  55.     this(new DocumentRef(doc, url), url);
  56.     }
  57.  
  58.     public DocumentInfo(DocumentRef ref, URL url) {
  59.     if (ref == null) {
  60.         ref = new DocumentRef(null, url);
  61.     }
  62.     doc = ref;
  63.     this.url = url;
  64.     scrollY = 1;            /* > 0 means not set, so don't scroll */
  65.     }
  66.  
  67.     public String toString() {
  68.     return "DocumentInfo[doc=" + doc + ", url = " + url + "]";
  69.     }
  70.  
  71.     public boolean canCache() {
  72.     return cacheable;
  73.     }
  74.  
  75.     public String getTitle() {
  76.     if (title == null) {
  77.         try {
  78.         title = ((Document) getContent()).getTitle();
  79.         } catch (Exception e) {}
  80.         if (title == null)
  81.         title = "Untitled, " + url.toExternalForm();
  82.     }
  83.     return title;
  84.     }
  85.  
  86.     public Object getContent() {
  87.     if (doc != null && !emptyDocument) {
  88.         Object result = doc.get();
  89.         if (result == null) {    /* avoid double fetches of empty documents */
  90.         title = "Untitled, " + url.toExternalForm();
  91.         emptyDocument = true;
  92.         };
  93.         return result;
  94.     }
  95.     else
  96.         return null;
  97.     }
  98.  
  99.     public void clearDoc() {
  100.     if (doc != null) {
  101.         doc.setThing(null);
  102.     }
  103.     title = null;
  104.     }
  105.  
  106.     public boolean isResident() {
  107.     return !(doc == null || doc.check() == null);
  108.     }
  109.  
  110.     public void setDocument(Document d) {
  111.     doc = new DocumentRef(d, null);
  112.     }
  113.  
  114.     public void setCacheable(boolean cc) {
  115.     if (cc == cacheable)
  116.         return;
  117.     cacheable = cc;
  118.     if (!cc && url != null){
  119.         DocumentManager.unCacheDocument(url);
  120.         doc = null;
  121.     }
  122.     }
  123.  
  124.     /**
  125.      * Compares this DocumentInfo to another one, and returns true
  126.      * if they reference the same file.
  127.      */
  128.     public boolean sameAs(DocumentInfo other) {
  129.     return other != null && other.url.sameFile(url);
  130.     }
  131.  
  132.     /**
  133.      * Handles this document being closed by the WRWindow.  This
  134.      * salts away the scroll position.
  135.      */
  136.     public void close(WRWindow w) { 
  137.     scrollY = w.getScrollY();
  138.     }
  139.  
  140.     /**
  141.      * Handles this document being opened by the WRWindow.  This
  142.      * scrolls the window to salted scroll position from close.
  143.      */
  144.     public void open(WRWindow w) {
  145.     if (scrollY <= 0) {
  146.         w.scrollAbsolute(0, -scrollY);
  147.     }
  148.     }
  149. }
  150.