|
Juno |
|
1 // joi/6/juno/Juno.java 2 // 3 // 4 // Copyright 2003 Bill Campbell and Ethan Bolker 5 6 import java.io.*; 7 import java.util.*; 8 import java.lang.*; 9 10 /** 11 * Juno (Juno's Unix NOt) mimics a command line operating system 12 * like Unix. 13 * <p> 14 * A Juno system has a name, a set of Users, a JFile system, 15 * a login process and a set of shell commands. 16 * 17 * @see User 18 * @see JFile 19 * @see ShellCommand 20 * 21 * @version 6 22 */ 23 24 public class Juno 25 { 26 private final static String os = "Juno"; 27 private final static String version = "6"; 28 29 private String hostName; // host machine name 30 private Map users; // lookup table for Users 31 private Terminal console; // for input and output 32 33 private Directory slash; // root of JFile system 34 private Directory userHomes; // for home directories 35 36 private ShellCommandTable commandTable; // shell commands 37 38 /** 39 * Construct a Juno (operating system) object. 40 * 41 * @param hostName the name of the host on which it's running. 42 * @param echoInput should all input be echoed as output? 43 */ 44 45 public Juno( String hostName, boolean echoInput ) 46 { 47 // initialize the Juno environment ... 48 49 this.hostName = hostName; 50 console = new Terminal( echoInput ); 51 users = new TreeMap(); // for registered Users 52 commandTable = new ShellCommandTable(); // for shell commands 53 54 // the file system 55 56 slash = new Directory( "", null, null ); 57 User root = new User( "root", slash, "Rick Martin" ); 58 users.put( "root", root ); 59 slash.setOwner(root); 60 userHomes = new Directory( "users", root, slash ); 61 62 // create, then start a command line login interpreter 63 64 LoginInterpreter interpreter 65 = new LoginInterpreter( this, console ); 66 interpreter.CLILogin(); 67 } 68 69 /** 70 * The name of the host computer on which this system 71 * is running. 72 * 73 * @return the host computer name. 74 */ 75 76 public String getHostName() 77 { 78 return hostName; 79 } 80 81 /** 82 * The name of this operating system. 83 * 84 * @return the operating system name. 85 */ 86 87 public String getOS() 88 { 89 return os; 90 } 91 92 /** 93 * The version number for this system. 94 * 95 * @return the version number. 96 */ 97 98 public String getVersion() 99 { 100 return version; 101 } 102 103 /** 104 * The directory containing all user homes for this system. 105 * 106 * @return the directory containing user homes. 107 */ 108 109 public Directory getUserHomes() 110 { 111 return userHomes; 112 } 113 114 /** 115 * The shell command table for this system. 116 * 117 * @return the shell command table. 118 */ 119 120 public ShellCommandTable getCommandTable() 121 { 122 return commandTable; 123 } 124 125 /** 126 * Look up a user by user name. 127 * 128 * @param username the user's name. 129 * @return the appropriate User object. 130 */ 131 132 public User lookupUser( String username ) 133 { 134 return (User) users.get( username ); 135 } 136 137 /** 138 * Create a new User. 139 * 140 * @param userName the User's login name. 141 * @param home her home Directory. 142 * @param realName her real name. 143 * @return newly created User. 144 */ 145 146 public User createUser( String userName, Directory home, 147 String realName ) 148 { 149 User newUser = new User( userName, home, realName ); 150 users.put( userName, newUser ); 151 return newUser; 152 } 153 154 /** 155 * The Juno system may be given the following command line 156 * arguments. 157 * <pre> 158 * 159 * -e: Echo all input (useful for testing). 160 * 161 * -version: Report the version number and exit. 162 * 163 * [hostname]: The name of the host on which 164 * Juno is running (optional). 165 * </pre> 166 */ 167 168 public static void main( String[] args ) 169 { 170 // Parse command line options 171 172 boolean echoInput = false; 173 String hostName = "mars"; 174 175 for (int i=0; i < args.length; i++) { 176 if (args[i].equals("-version")) { 177 System.out.println( os + " version " + version ); 178 System.exit(0); 179 } 180 if (args[i].equals("-e")) { 181 echoInput = true; 182 } 183 else { 184 hostName = args[i]; 185 } 186 } 187 188 // create a Juno instance, which will start itself 189 190 new Juno( hostName, echoInput ); 191 } 192 } 193
|
Juno |
|