001 /* Copyright 2000, 2001, Compaq Computer Corporation */
002
003 package javafe.genericfile;
004
005
006 import java.io.IOException;
007 import java.io.InputStream;
008
009
010 /**
011 * Instances of UnopenableFile are {@link GenericFile}s that cannot
012 * be opened. <p>
013 *
014 * Their value lies solely in their associated naming, etc., info.<p>
015 *
016 * Example: {@link javafe.util.CorrelatedReader}'s keeps an open
017 * {@link InputStream} and an associated {@link GenericFile}. In the
018 * case of unreopenable streams like stdin, the associated {@link
019 * GenericFile} is an UnopenableFile with the name "stdin".
020 */
021
022 public class UnopenableFile implements GenericFile {
023
024 /***************************************************
025 * *
026 * Instance variables: *
027 * *
028 **************************************************/
029
030 //* Our human readable name:
031 /*@ non_null @*/ String humanName;
032
033 //* Are we a directory?
034 boolean isDir;
035
036
037 /***************************************************
038 * *
039 * Creation: *
040 * *
041 **************************************************/
042
043 /**
044 * Create a ordinary (aka, non-directory) UnopenableFile with
045 * human-name name.
046 *
047 * The resulting file has no modification date available and a
048 * local name of "".
049 */
050 public UnopenableFile(/*@ non_null @*/ String name) {
051 this(name, false);
052 }
053
054
055 /**
056 * Create an UnopenableFile with human-name name that is a
057 * directory iff isDir.
058 *
059 * The resulting file has no modification date available and a
060 * local name of "".
061 */
062 public UnopenableFile(/*@ non_null @*/ String name, boolean isDir) {
063 humanName = name;
064 this.isDir = isDir;
065 }
066
067
068 /***************************************************
069 * *
070 * GenericFile interface implementation: *
071 * *
072 **************************************************/
073
074 public String getHumanName() { return humanName; }
075
076 public String getCanonicalID() {
077 return "<javafe.filespace.UnopenableFile>" + humanName;
078 }
079
080 public String getLocalName() { return ""; }
081
082 public boolean isDirectory() { return isDir; }
083
084 public InputStream getInputStream() throws IOException {
085 throw new IOException(
086 "Attempt to open an unopenable genericfile");
087 }
088
089 public long lastModified() { return 0L; }
090
091 public GenericFile getSibling(/*@non_null*/String n) { return null; }
092 }