001 /* Copyright 2000, 2001, Compaq Computer Corporation */
002
003 package javafe.filespace;
004
005
006 import java.util.Enumeration;
007 import javafe.genericfile.*;
008
009
010 /**
011 * This module defines a very simple query interface for use in
012 * locating Java files according to a classpath.
013 */
014
015 public abstract class Query {
016
017 /***************************************************
018 * *
019 * Locating files: *
020 * *
021 **************************************************/
022
023 /**
024 * Return true iff the package P in the Java filespace is
025 * "accessible".<p>
026 *
027 * Warning: the definition of accessible is host system dependent
028 * and may in fact be defined as always true.<p>
029 */
030 //@ requires P != null;
031 //@ requires \nonnullelements(P);
032 public boolean accessable(String[] P) {
033 return true;
034 }
035
036
037 /**
038 * Attempt to locate the file typename+"."+extension in the package
039 * P in the Java filespace.<p>
040 *
041 * If such a file is found, then a (non-null) GenericFile
042 * representing it is returned. Otherwise, null is returned.<p>
043 */
044 //@ requires P != null;
045 //@ requires typename != null;
046 //@ requires extension != null;
047 //@ requires \nonnullelements(P);
048 public abstract GenericFile findFile(String[] P, String typename,
049 String extension);
050
051 //@ requires P != null;
052 //@ requires filename != null;
053 public abstract GenericFile findFile(String[] P, String filename);
054
055 /** Locates a file with given package, typename, and one of the given
056 * extensions; the first directory on the search path containing a
057 * candidate file is used - within that directory, extensions near the
058 * beginning of the extensions Vector take precedence.
059 */
060 //@ requires P != null;
061 //@ requires typename != null;
062 //@ requires extensions != null;
063 public abstract GenericFile findFile(String[] P, String typename,
064 String[] extensions);
065
066
067 /** Returns an Enumeration containing GenericFile objects representing
068 all the files in the given package P.
069 */
070 //@ requires P != null;
071 public abstract Enumeration findFiles(String[] P);
072
073 /***************************************************
074 * *
075 * Checking class/interface existence: *
076 * *
077 **************************************************/
078
079 /**
080 * Return true iff the fully-qualified outside type P.T exists in
081 * our Java file space.
082 */
083 //@ requires P != null;
084 //@ requires \nonnullelements(P);
085 public boolean exists(String[] P, String T) {
086 return (findFile(P, T, "java") != null)
087 || (findFile(P, T, "class") != null);
088 }
089 }