KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > webman > stager > Stager


1 package webman.stager;
2
3 import java.io.*;
4 import java.net.*;
5 import java.util.*;
6 import org.apache.log4j.*;
7
8 /**
9  * Diese Klasse stellt gemeinsame Funkionalität für SiteTransmitter und SiteReceiver bereit
10  * @author $author$
11  * @version $revision$
12  */

13 public abstract class Stager
14 {
15     /**Das Logfile*/
16     protected FileWriter logfile = null;
17
18     /**Zeilenumbruchszeichen*/
19     protected static final String JavaDoc NEWLINE = System.getProperty("line.separator");
20     /**Log4J-Categor<*/
21     protected static Category CAT = Category.getInstance(Stager.class); //wird in den Subklassen geeignet überschrieben
22
/**Ausgabestrom*/
23     protected PrintStream outStream = null;
24     
25     /**initialisiert die Log4J-Umgebung*/
26     static
27     {
28         //DOMConfigurator.configure(Stager.class.getResource("stager_log4j.xml"));
29
URL url = Stager.class.getResource("Stager_log4j.properties");
30         //Dieser Umweg ist scheinbar erforderlich,um einen merkwürdigen Bug auf Jaheira zu umgehen:
31
//Exception in thread "main" java.lang.ExceptionInInitializerError: java.lang.NullPointerException
32
//at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:428)
33
//at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:329)
34
//at webman.stager.Stager.(Stager.java:20)
35
PropertyConfigurator.configure(url);
36     }
37     
38     /**
39      * markiert einen String in HTML als Datei (durch Kursivschrift)
40      * @param str der zu markierende String
41      * @return der markierte String
42      */

43     protected String JavaDoc markAsFile(String JavaDoc str)
44     {
45         return "\"<i>" + str + "</i>\"";
46     }
47     // ============== socket operations ==================
48

49     /**
50      * schreibt einen String in ein Socket
51      * @param s das Socket
52      * @param message der String
53      * @throws Exception wenn was beim Schreiben schief geht
54      */

55     protected void printToSocket(Socket s, String JavaDoc message) throws Exception JavaDoc
56     {
57         PrintWriter out = null;
58         try
59         {
60             out = new PrintWriter(s.getOutputStream());
61             out.println(message);
62             out.flush();
63         }
64         catch(Exception JavaDoc e)
65         {
66             throw new Exception JavaDoc("Unable to write to socket: " + e);
67         }
68     }
69
70     /**
71      * liest einen String vom Socket
72      * @param s das Socket
73      * @return der gelesene String
74      * @throws Exception wenn was beim Lesen schief geht
75      */

76     protected String JavaDoc readFromSocket(Socket s) throws Exception JavaDoc
77     {
78         BufferedReader in = null;
79         String JavaDoc line = null;
80         in = new BufferedReader(new InputStreamReader(s.getInputStream()));
81         line = in.readLine();
82         return line;
83     }
84
85     // ------------- logging --------------------
86

87     /**
88      * öffnet eine Datei als Logfile
89      * @param filename der Dateiname
90      * @param append wenn true, dann wird eine bestehende Datei nicht überschrieben, sondern daran angeknüpft
91      * @return einen FileWriter auf das geöffnete Logfile (null, wenn kein Logfile geöffnet wurde)
92      */

93     protected FileWriter openLog(String JavaDoc filename, boolean append)
94     {
95         try
96         {
97             return new FileWriter(filename,append);
98         }
99         catch (Exception JavaDoc e)
100         {
101             CAT.error("Unable to open logfile: ",e);
102         }
103         return null;
104     }
105
106     /**
107      * schreibt einen String in das Logfile
108      * @param str der auszugebene String
109      */

110     protected void log(String JavaDoc str)
111     {
112         CAT.info("log(): " + str);
113         if ( logfile != null )
114         {
115             if ( !str.endsWith(NEWLINE) )
116             {
117                 str += NEWLINE;
118             }
119             try
120             {
121                 logfile.write(str);
122                 logfile.flush();
123             }
124             catch (Exception JavaDoc e)
125             {
126                 CAT.error("Could not write to logfile: ",e);
127             }
128         }
129     }
130     
131     /**
132      * schließt das logfile
133      */

134     protected void closeLog()
135     {
136         if ( logfile != null )
137         {
138             try
139             {
140                 logfile.flush();
141                 logfile.close();
142                 logfile = null; //als Kennzeichen, dass man nicht mehr reinschreiben kann
143
}
144             catch (Exception JavaDoc e)
145             {
146                 CAT.warn("Unable to close logfile",e);
147             }
148         }
149     }
150    
151     /**
152      * registriert einen SSL-Provider (Standard: SUN)
153      * @return einen String mit einer evenutellen Fehlermeldung, ansonsten null
154      */

155     protected String JavaDoc initSSL()
156     {
157         try
158         {
159            // Dynamic registration of JSSE provider
160
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
161         }
162         catch (Exception JavaDoc e)
163         {
164             return "unable to init ssl: " + e;
165         }
166         return null;
167     }
168     
169     /**
170      * berechnet aus 2 Pfaden einen absoluten Pfad
171      * @param docroot der Ausgangspfad; relativ zu diesem wird filename ausgewertet
172      * @param filename der Pfad relativ zur docroot
173      * @return der zusammengefasste Pfad von docroot und filename, es sei denn, filename ist schon absolut; dann wird filename zurückgegeben
174      * @throws IllegalArgumentException wenn filename relativ ist aber docroot nicht angegeben wurde
175      * @throws IOException wenn beim Filehandling irgendwas schief geht
176      */

177     protected String JavaDoc getAbsoluteName(String JavaDoc docroot, String JavaDoc filename) throws IllegalArgumentException JavaDoc, IOException
178     {
179         if ( new File(filename).isAbsolute() )
180         {
181             return new File(filename).getCanonicalPath();
182         }
183         if ( docroot == null )
184         {
185             throw new IllegalArgumentException JavaDoc("docroot must be provided if filename is relative");
186         }
187         return new File(docroot,filename).getCanonicalPath();
188     }
189
190     /**
191      * schreibt einen String in den Ausgabestrom sowie in das Logfile
192      * @param str der auszugebene String
193      */

194     protected abstract void logAndPrint(String JavaDoc str);
195     
196     /**
197      * markiert einen String (in HTML) als Fehler (durch rote Schriftfarbe) und gibt ihn im Logfile und in Log4J aus
198      * @param str der auszugebene Fehlerstring
199      */

200     protected void error(String JavaDoc str)
201     {
202         logAndPrint("<FONT color=#ff5555>" + str + "</FONT>");
203         CAT.error(str);
204     }
205     
206     /**
207      * markiert einen String (in HTML) als Fehler (durch rote Schriftfarbe) und gibt ihn im Logfile und in Log4J aus
208      * @param str der auszugebene Fehlerstring
209      * @param t verursachende Exception
210      */

211     protected void error(String JavaDoc str, Throwable JavaDoc t)
212     {
213         logAndPrint("<FONT color=#ff5555>" + str + " [" + t.toString() + "]</FONT>");
214         CAT.error(str,t);
215     }
216
217     /**
218      * wertet den Rückgabewert einer Methode aus; schreibt dabei eine Fehlermeldung mit error() und eine Erfolgsmeldung mit logAndPrint()
219      * @param result der Rückgabestring einer Methode (null oder Fehlermeldung)
220      * @param msg die mit der Auswertung auszugebene Message
221      * @return true wenn die Methode fehlerlos war (also result == null)
222      */

223     boolean methodSucceed(String JavaDoc result, String JavaDoc msg)
224     {
225         if ( result != null )
226         {
227             error("<B>" + msg + " ... failed: " + result + "</B><BR><BR>");
228             CAT.error(msg + " failed: " + result);
229             return false;
230         }
231         logAndPrint("<B>" + msg + " ... done" + "</B><BR><BR>");
232         return true;
233     }
234     
235     /**
236      * wertet den Rückgabewert einer Methode aus; schreibt dabei eine Fehlermeldung mit error() und eine Erfolgsmeldung mit logAndPrint()
237      * @param result der Rückgabestring einer Methode (null oder Fehlermeldung)
238      * @return true wenn die Methode fehlerlos war (also result == null)
239      */

240     boolean methodSucceed(String JavaDoc result)
241     {
242         return methodSucceed(result,"");
243     }
244     
245    /**
246     * liefert InputStream auf eine Resource, deren Pfad relativ zum Pfad einer Klasse angegeben wird
247     * @param baseClass die Klasse, deren Pfad als Basis für die Pfadberechnung dient
248     * @param path der relative oder absolute (der wird dann so belassen) Dateipfad
249     * @return ein InputStream zu dieser Resource
250     * @throws IOException wenn die Resource nicht vorhanden ist oder sonstige Fehler auftreten
251     */

252     public static InputStream getResourceInputStream(Class JavaDoc baseClass, String JavaDoc path) throws IOException
253     {
254         if ( !(new File(path).isAbsolute()) )
255         {
256             //Klassennamen bestimmen (getName() liefert noch Klassenpfad (Packagestruktur) mit)
257
String JavaDoc base = baseClass.getName().substring(baseClass.getName().lastIndexOf(".") + 1);
258             //aus dem eigentlichen Klassennamen ne URL für den (Klassen)-Pfad basteln
259
base = new File(baseClass.getResource(base + ".class").getFile()).getParent();
260             path = new File(base,path).getCanonicalPath();
261         }
262         try
263         {
264             return (new URL("file:" + path)).openStream();
265         }
266         catch(Exception JavaDoc e)
267         {
268             throw new IOException(e.toString());
269         }
270     }
271  }
272
Popular Tags