| Generierte Dokumentation der praktischen Arbeit von Simon Tiffert |
00001 /* 00002 * 00003 * Datei: Main.java 00004 * 00005 * --------------------------------- 00006 * 00007 * Datum: $Date: 2004/05/13 09:16:13 $ 00008 * Autor: Simon Tiffert 00009 * Prüfungsnummer: 40 00010 * Firma: T-Systems 00011 * eMail-Adresse: simon.tiffert@t-systems.com 00012 * Version: $Revision: 1.16 $ 00013 * 00014 * --------------------------------- 00015 * 00016 */ 00017 package main; 00018 00019 import java.io.BufferedWriter; 00020 import java.io.IOException; 00021 import main.ausgabe.Ausgabe; 00022 import main.ausgabe.FehlerAusgabe; 00023 import main.eingabe.Eingabe; 00024 import main.tools.file.OutputFile; 00025 import main.verarbeitung.Matrix; 00026 import main.verarbeitung.Verarbeitung; 00027 00028 /** 00029 * Diese Klasse steuert den Ablauf des Programms. 00030 * Hier kann man in der main-Funktion den Ablauf des EVA Prinzips 00031 * erkennen. Da hier auch zentral Fehler abgefangen werden, war es 00032 * nötig, die Ausgabedatei schon sehr früh im Programmablauf zu öffnen, 00033 * da Exceptions sonst nicht in Datei geschrieben werden könnten. 00034 * In dieser Klasse befindet sich auch das zentrale Matrix-Element, 00035 * welches per Referenz an die Unterteile Eingabe, Verarbeitung und 00036 * Ausgabe übergeben wird.<br><br> 00037 * Zudem befindet sich hier der Parser für die Eingabeparameter. 00038 * Dieser sorgt dafür, dass wichtige Flags in dieser Klasse gesetzt 00039 * sind. 00040 * Abgefangen werden: 00041 * <ul> 00042 * <li> 00043 * -d DATEINAME (erkennt den Parameter und setzt den Dateinamen) 00044 * </li> 00045 * 00046 * <li> 00047 * -debug (setzt das Programm in den Debugmodus, bei dem die 00048 * Ausgaben auch auf dem Bildschirm ausgegeben werden). 00049 * </li> 00050 * 00051 * <li> 00052 * -overwrite (überschreibt eine vorhandene Ausgabedatei. Dies 00053 * erleichtert das Testen, kann aber im normalen 00054 * Ablauf unerwünscht sein) 00055 * </li> 00056 * 00057 * <li> 00058 * -h (zeigt die Hilfe an, wie das Programm aufgerufen wird. Die 00059 * Hilfe wird auch automatisch angezeigt, wenn Parameter falsch 00060 * angegeben wurden) 00061 * </li> 00062 * </ul> 00063 * 00064 * 00065 * @version $Revision: 1.16 $ 00066 * @author Simon Tiffert 00067 */ 00068 public class Main 00069 { 00070 /** maximale Größe der Matrix */ 00071 public static final int maxDimension = 6; 00072 00073 /** setzt den Debug-Modus */ 00074 public static boolean debug = false; 00075 00076 /** setzt den Overwrite-Modus */ 00077 public static boolean overwrite = false; 00078 00079 /** Die zentrale Datenstruktur mit der Matrix */ 00080 public static Matrix matrix = new Matrix(); 00081 00082 /** 00083 * main-Funktion des Programms. 00084 * Hier wird die Verarbeitung des Programms gesteuert und 00085 * die Fehlerabfrage durchgeführt, die zur weiteren Verarbeitung 00086 * weitergereicht wird. 00087 * 00088 * @param args Programmparameter -d DATEINAME [-h] 00089 * [-debug][-overwrite] 00090 */ 00091 public static void main(String[] args) 00092 { 00093 // Dateiname der Eingabedatei 00094 String dateiName = null; 00095 00096 // Erstelle einen Writer, für die Ausgabedatei 00097 BufferedWriter bw = null; 00098 00099 try 00100 { 00101 // Überprüft, ob ein Dateiname mit angegeben wurde. 00102 dateiName = parameterParser(args); 00103 00104 // öffne Ausgabedatei und setze den Writer darauf 00105 bw = new OutputFile(dateiName, ".out").getAusgabeDatei(); 00106 00107 // EVA-Prinzip: 00108 00109 // Erstelle eine Instanz der Eingabe 00110 new Eingabe(matrix, dateiName); 00111 00112 // rufe die Verarbeitung mit den RoesselSprüngen auf 00113 new Verarbeitung(matrix); 00114 00115 // erzeuge die Ausgabe 00116 new Ausgabe(matrix, bw); 00117 00118 } 00119 catch (Exception e) 00120 { 00121 // die Fehler werden dann in der Datei ausgewertet 00122 new FehlerAusgabe(bw, e, dateiName); 00123 } 00124 finally 00125 { 00126 // schliesse die Ausgabedatei und fange einen Fehler dabei auf 00127 try 00128 { 00129 if (bw != null) 00130 { 00131 bw.close(); 00132 } 00133 } 00134 catch (IOException e) 00135 { 00136 System.err.println( 00137 "Ausgabedatei konnte nicht geschrieben werden."); 00138 } 00139 } 00140 00141 } 00142 00143 /** 00144 * Diese Funktion parst die Eingabeparameter. Dabei wird überprüft, 00145 * ob eine Eingabedatei angegeben wurde. Zudem werden weitere 00146 * Parameter erkannt und fehlerhafte sowie doppelte Parameter werden 00147 * erkannt und als Exception geworfen. 00148 * <br /> 00149 * Erkannt werden: 00150 * <ul> 00151 * <li>-d DATEINAME (Pflichtparameter)</li> 00152 * <li>-h (Hilfe)</li> 00153 * <li>-debug (Debugmodus)</li> 00154 * <li>-overwrite (Overwrite-Modus, der die Ausgabedatei 00155 * überschreibt)</li> 00156 * </ul> 00157 * 00158 * 00159 * @param parameter Übergabeparameter der main-Funktion 00160 * @return Übergebenen Dateinamen 00161 * @throws WrongParameterException Fehlerhafte Parameter 00162 * @throws NoInputException Fehlende Parameter 00163 */ 00164 private static String parameterParser(String[] parameter) 00165 throws WrongParameterException, NoInputException 00166 { 00167 // Dateiname der Eingabedatei 00168 String dateiName = null; 00169 00170 // Flagge für Anzeige der Hilfe 00171 boolean hilfe = false; 00172 00173 // überprüft, ob überhaupt Parameter angegeben wurden 00174 if (parameter.length == 0) 00175 { 00176 // werfe eigene Exception 00177 throw new NoInputException(); 00178 } 00179 00180 // laufe über alle Parameter 00181 for (int i = 0; i < parameter.length; i++) 00182 { 00183 // -d für Dateiname 00184 if (parameter[i].equalsIgnoreCase("-d")) 00185 { 00186 // wenn der Dateiname noch nicht gesetzt ist 00187 if (dateiName == null) 00188 { 00189 // setze den nächsten Parameter als Dateinamen, wenn noch 00190 // Parameter vorhanden sind. Ansonsten werfe Fehler, dass 00191 // der Dateiname fehlt 00192 if (i < parameter.length - 1) 00193 { 00194 dateiName = parameter[++i]; 00195 } 00196 else 00197 { 00198 throw new WrongParameterException( 00199 "Falscher Parameter - Dateiname fehlt"); 00200 } 00201 00202 // Falls danach wieder ein Parameter folgt, fehlt der 00203 // Dateiname 00204 if (dateiName.startsWith("-")) 00205 { 00206 throw new WrongParameterException( 00207 "Falscher Parameter - Dateiname fehlt"); 00208 } 00209 } 00210 // wenn der Dateiname schon gesetzt ist, wäre er doppelt 00211 // definiert. Um Fehlern vorzubeugen wird hier eine Exception 00212 // geworfen 00213 else 00214 { 00215 throw new WrongParameterException( 00216 "Doppelter Parameter - Dateiname schon angegeben"); 00217 } 00218 } 00219 00220 // -debug Debug-Modus 00221 else if (parameter[i].equalsIgnoreCase("-debug")) 00222 { 00223 // wenn der Debugmodus noch nicht gesetzt ist, setze ihn jetzt 00224 if (debug == false) 00225 { 00226 debug = true; 00227 } 00228 // doppelter Parameter, der zu einer Exception führt 00229 else 00230 { 00231 throw new WrongParameterException( 00232 "Doppelter Parameter -debug"); 00233 } 00234 } 00235 00236 // -overwrite Overwrite-Modus 00237 else if (parameter[i].equalsIgnoreCase("-overwrite")) 00238 { 00239 // Wenn der Overwritemodus noch nicht gesetzt ist, setze ihn 00240 // jetzt 00241 if (overwrite == false) 00242 { 00243 overwrite = true; 00244 } 00245 // doppelter Parameter, der zu einer Exception führt 00246 else 00247 { 00248 throw new WrongParameterException( 00249 "Doppelter Parameter -overwrite"); 00250 } 00251 } 00252 00253 // -h Hilfe 00254 else if (parameter[i].equalsIgnoreCase("-h")) 00255 { 00256 // überprüfe, ob die Hilfe schon angezeigt werden soll. 00257 // Ansonsten setze Flag zur Anzeige 00258 if (hilfe == false) 00259 { 00260 hilfe = true; 00261 } 00262 // doppelter Parameter, der zu einer Exception führt 00263 else 00264 { 00265 throw new WrongParameterException("Doppelter Parameter -h"); 00266 } 00267 } 00268 00269 // unbekannter Parameter, der zu einer Exception führt 00270 else 00271 { 00272 throw new WrongParameterException( 00273 "Fehlerhafter Parameter - " + parameter[i]); 00274 } 00275 00276 } 00277 00278 // wenn die Hilfe angezeigt werden soll, so unterbreche den 00279 // Programmfluss mit einer Exception, die allerdings keinen Fehler 00280 // erzeugt, sondern die Hilfe anzeigt 00281 if (hilfe == true) 00282 { 00283 throw new WrongParameterException(""); 00284 } 00285 // ist der Dateiname noch nicht gesetzt worden, so ist keine 00286 // weitere Verarbeitung möglich und das Programm wird mit einer 00287 // Exception abgebrochen 00288 else if (dateiName == null) 00289 { 00290 throw new WrongParameterException( 00291 "Falscher Aufruf - keine Eingabedatei angegeben"); 00292 } 00293 00294 // wenn alles richtig verarbeitet wurde, gib den Dateinamen zurück 00295 return dateiName; 00296 } 00297 00298 }
|
|
|
| Documentation created with Doxygen 1.3.6 | Fri May 14 11:15:26 2004 |