KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > protomatter > syslog > xml > TimeRolloverLog_Helper


1 package com.protomatter.syslog.xml;
2
3 /**
4  * The Protomatter Software License, Version 1.0
5  * derived from The Apache Software License, Version 1.1
6  *
7  * Copyright (c) 1998-2002 Nate Sammons. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution,
22  * if any, must include the following acknowledgment:
23  * "This product includes software developed for the
24  * Protomatter Software Project
25  * (http://protomatter.sourceforge.net/)."
26  * Alternately, this acknowledgment may appear in the software itself,
27  * if and wherever such third-party acknowledgments normally appear.
28  *
29  * 4. The names "Protomatter" and "Protomatter Software Project" must
30  * not be used to endorse or promote products derived from this
31  * software without prior written permission. For written
32  * permission, please contact support@protomatter.com.
33  *
34  * 5. Products derived from this software may not be called "Protomatter",
35  * nor may "Protomatter" appear in their name, without prior written
36  * permission of the Protomatter Software Project
37  * (support@protomatter.com).
38  *
39  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
40  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
41  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
42  * DISCLAIMED. IN NO EVENT SHALL THE PROTOMATTER SOFTWARE PROJECT OR
43  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
45  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
46  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
47  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
48  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
49  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50  * SUCH DAMAGE.
51  */

52
53 import java.io.*;
54 import java.net.*;
55 import java.util.*;
56 import java.text.*;
57
58 import com.protomatter.xml.*;
59 import com.protomatter.syslog.*;
60 import org.jdom.*;
61
62 /**
63  * XML configuration helper for <tt>TimeRolloverLog</tt>.
64  */

65 public class TimeRolloverLog_Helper
66 extends BasicLogger_Helper
67 {
68   /**
69    * Configure this logger given the XML element.
70    * The <tt>&lt;Logger&gt;</tt> element should look like this:<P>
71    *
72    * <TABLE BORDER=1 CELLPADDING=4 CELLSPACING=0 WIDTH="90%">
73    * <TR><TD>
74    * <PRE><B>
75    *
76    * &lt;Logger class="com.protomatter.syslog.TimeRolloverLog" &gt;
77    *
78    * <font color="#888888">&lt;!--
79    * Config params from {@link BasicLogger_Helper#configure(Object,Element) BasicLogger_Helper} can
80    * get inserted here.
81    * --&gt;</font>
82    *
83    * &lt;baseName&gt;<i>BaseFileName</i>&lt;/baseName&gt;
84    * &lt;extension&gt;<i>FilenameExtension</i>&lt;/extension&gt;
85    * &lt;nameFormat&gt;<i>FileDateFormat</i>&lt;/nameFormat&gt;
86    * &lt;append&gt;<i>true|false</i>&lt;/append&gt;
87    * &lt;autoFlush&gt;<i>true|false</i>&lt;/autoFlush&gt;
88    * &lt;roll&gt;<i>RollConstant</i>&lt;/roll&gt;
89    * &lt;weeklyRollDay&gt;<i>RollDayConstant</i>&lt;/weeklyRollDay&gt;
90    *
91    * &lt;/Logger&gt;
92    * </B></PRE>
93    * </TD></TR></TABLE><P>
94    *
95    * <TABLE BORDER=1 CELLPADDING=2 CELLSPACING=0 WIDTH="90%">
96    * <TR CLASS="TableHeadingColor">
97    * <TD COLSPAN=3><B>Element</B></TD>
98    * </TR>
99    * <TR CLASS="TableHeadingColor">
100    * <TD><B>name</B></TD>
101    * <TD><B>value</B></TD>
102    * <TD><B>required</B></TD>
103    * </TR>
104    *
105    * <TR CLASS="TableRowColor">
106    * <TD VALIGN=TOP><TT>baseName</TT></TD>
107    * <TD VALIGN=TOP>The base name of the file to write to.
108    * </TD>
109    * <TD VALIGN=TOP>yes</TD>
110    * </TR>
111    *
112    * <TR CLASS="TableRowColor">
113    * <TD VALIGN=TOP><TT>extension</TT></TD>
114    * <TD VALIGN=TOP>The filename extension to use.
115    * </TD>
116    * <TD VALIGN=TOP>no</TD>
117    * </TR>
118    *
119    * <TR CLASS="TableRowColor">
120    * <TD VALIGN=TOP><TT>nameFormat</TT></TD>
121    * <TD VALIGN=TOP>A date format that can be understood by the
122    * <tt>java.text.SimpleDateFormat</tt> formatting class.
123    * </TD>
124    * <TD VALIGN=TOP>no (default is "<TT>yyyy.MM.dd-HH.mm.ss</TT>")</TD>
125    * </TR>
126    *
127    * <TR CLASS="TableRowColor">
128    * <TD VALIGN=TOP><TT>roll</TT></TD>
129    * <TD VALIGN=TOP>The roll interval. Must be <TT>ROLL_MINUTELY</TT>,
130    * <TT>ROLL_HOURLY</TT>, <TT>ROLL_DAILY</TT>, <TT>ROLL_WEEKLY</TT>
131    * or <TT>ROLL_MONTHLY</TT>
132    * </TD>
133    * <TD VALIGN=TOP>yes</TD>
134    * </TR>
135    *
136    * <TR CLASS="TableRowColor">
137    * <TD VALIGN=TOP><TT>weeklyRollDay</TT></TD>
138    * <TD VALIGN=TOP>The day of week to roll if the <tt>roll</tt>
139    * setting is <tt>ROLL_WEEKLY</tt>. Must be <TT>MONDAY</TT>,
140    * <TT>TUESDAY</TT>, <TT>WEDNESDAY</TT>, <tt>THURSDAY</tt>,
141    * <TT>FRIDAY</TT>, <TT>SATURDAY</TT> or <TT>SUNDAY</TT>.
142    * </TD>
143    * <TD VALIGN=TOP>no (default is "<tt>MONDAY</tt>"</TD>
144    * </TR>
145    *
146    * <TR CLASS="TableRowColor">
147    * <TD VALIGN=TOP><TT>append</TT></TD>
148    * <TD><tt>true</tt> or <tt>false</tt> -- decide if the file
149    * should be appended to (or overwritten).
150    * </TD>
151    * <TD VALIGN=TOP>no (default is <tt>true</tt>)</TD>
152    * </TR>
153    *
154    * <TR CLASS="TableRowColor">
155    * <TD VALIGN=TOP><TT>autoFlush</TT></TD>
156    * <TD><tt>true</tt> or <tt>false</tt> -- decide if we
157    * should always flush the stream every time it's written or not.
158    * Setting this to <tt>false</tt> (the default) will make things
159    * fast, and setting it to <tt>true</tt> will make the log
160    * always up-to-date.
161    * </TD>
162    * <TD VALIGN=TOP>no (default is <tt>false</tt>)</TD>
163    * </TR>
164    *
165    * </TABLE><P>
166    *
167    */

168   public void configure(Object JavaDoc o, Element e)
169   throws SyslogInitException
170   {
171     super.configure(o, e);
172
173     TimeRolloverLog log = (TimeRolloverLog)o;
174
175     String JavaDoc tmp = e.getChildTextTrim("baseName", e.getNamespace());
176     if (tmp != null)
177     {
178       log.setBaseFilename(tmp);
179     }
180     else
181     {
182       throw new IllegalArgumentException JavaDoc(MessageFormat.format(
183         Syslog.getResourceString(MessageConstants.XML_MUST_SPECIFY_PARAM_MESSAGE),
184         new Object JavaDoc[] { "baseName" } ));
185     }
186
187     tmp = e.getChildTextTrim("append", e.getNamespace());
188     log.setAppend("true".equalsIgnoreCase(tmp));
189
190     tmp = e.getChildTextTrim("autoFlush", e.getNamespace());
191     log.setAutoFlush("true".equalsIgnoreCase(tmp));
192
193     log.setFileExtension(e.getChildTextTrim("extension", e.getNamespace()));
194
195     tmp = e.getChildTextTrim("nameFormat", e.getNamespace());
196     if (tmp != null)
197       log.setNameFormat(tmp);
198     else
199       log.setNameFormat("yyyy.MM.dd-HH.mm.ss");
200
201     tmp = e.getChildTextTrim("roll", e.getNamespace());
202     if (tmp != null)
203     {
204       try
205       {
206         int r = Integer.parseInt(tmp);
207         log.setRollType(r);
208       }
209       catch (NumberFormatException JavaDoc x)
210       {
211         if (tmp.equals("ROLL_MINUTELY"))
212         {
213           log.setRollType(TimeRolloverLog.ROLL_MINUTELY);
214         }
215         else if (tmp.equals("ROLL_HOURLY"))
216         {
217           log.setRollType(TimeRolloverLog.ROLL_HOURLY);
218         }
219         else if (tmp.equals("ROLL_DAILY"))
220         {
221           log.setRollType(TimeRolloverLog.ROLL_DAILY);
222         }
223         else if (tmp.equals("ROLL_MONTHLY"))
224         {
225           log.setRollType(TimeRolloverLog.ROLL_MONTHLY);
226         }
227         else if (tmp.equals("ROLL_WEEKLY"))
228         {
229           log.setRollType(TimeRolloverLog.ROLL_WEEKLY);
230           String JavaDoc rollDay = e.getChildTextTrim("weeklyRollDay", e.getNamespace());
231           if (rollDay != null)
232           {
233               if ("MONDAY".equals(rollDay))
234                   log.setWeeklyRollDay(Calendar.MONDAY);
235               else if ("TUESDAY".equals(rollDay))
236                   log.setWeeklyRollDay(Calendar.TUESDAY);
237               else if ("WEDNESDAY".equals(rollDay))
238                   log.setWeeklyRollDay(Calendar.WEDNESDAY);
239               else if ("THURSDAY".equals(rollDay))
240                   log.setWeeklyRollDay(Calendar.THURSDAY);
241               else if ("FRIDAY".equals(rollDay))
242                   log.setWeeklyRollDay(Calendar.FRIDAY);
243               else if ("SATURDAY".equals(rollDay))
244                   log.setWeeklyRollDay(Calendar.SATURDAY);
245               else if ("SUNDAY".equals(rollDay))
246                   log.setWeeklyRollDay(Calendar.SUNDAY);
247               else
248                   throw new IllegalArgumentException JavaDoc(MessageFormat.format(
249                     Syslog.getResourceString(MessageConstants.TIMEROLLOVERLOG_BAD_ROLL_DAY_VALUE_MESSAGE),
250                     new Object JavaDoc[] { "MONDAY", "SUNDAY" }));
251           }
252         }
253         else
254         {
255           throw new IllegalArgumentException JavaDoc(MessageFormat.format(
256             Syslog.getResourceString(MessageConstants.TIMEROLLOVER_ILLEGAL_ROLL_VALUE_MESSAGE),
257             new Object JavaDoc[] { "roll", "ROLL_MINUTELY", "ROLL_HOURLY", "ROLL_DAILY", "ROLL_MONTHLY", "ROLL_WEEKLY" }));
258         }
259       }
260     }
261     else
262     {
263       throw new IllegalArgumentException JavaDoc(MessageFormat.format(
264         Syslog.getResourceString(MessageConstants.XML_MUST_SPECIFY_PARAM_MESSAGE),
265         new Object JavaDoc[] { "roll" } ));
266     }
267
268     log.rollover(new Date());
269   }
270
271   public Element getConfiguration(Object JavaDoc o, Element element)
272   {
273     Element e = super.getConfiguration(o, element);
274
275     TimeRolloverLog log = (TimeRolloverLog)o;
276
277     Element file = new Element("baseName");
278     file.setText(log.getBaseFilename());
279     e.getChildren().add(file);
280
281     if (log.getFileExtension() != null)
282     {
283       Element ext = new Element("extension");
284       ext.setText(log.getFileExtension());
285       e.getChildren().add(ext);
286     }
287
288     Element append = new Element("append");
289     append.setText(String.valueOf(log.getAppend()));
290     e.getChildren().add(append);
291
292     Element af = new Element("autoFlush");
293     af.setText(String.valueOf(log.getAutoFlush()));
294     e.getChildren().add(af);
295
296     Element roll = new Element("roll");
297     if (log.getRollType() == TimeRolloverLog.ROLL_MINUTELY)
298       roll.setText("ROLL_MINUTELY");
299     if (log.getRollType() == TimeRolloverLog.ROLL_HOURLY)
300       roll.setText("ROLL_HOURLY");
301     if (log.getRollType() == TimeRolloverLog.ROLL_DAILY)
302       roll.setText("ROLL_DAILY");
303     if (log.getRollType() == TimeRolloverLog.ROLL_MONTHLY)
304       roll.setText("ROLL_MONTHLY");
305     if (log.getRollType() == TimeRolloverLog.ROLL_WEEKLY)
306       roll.setText("ROLL_WEEKLY");
307     e.getChildren().add(roll);
308
309     if (log.getRollType() == TimeRolloverLog.ROLL_WEEKLY)
310     {
311         Element rollDay = new Element("weeklyRollDay");
312         switch (log.getWeeklyRollDay())
313         {
314             case Calendar.MONDAY:
315                 rollDay.setText("MONDAY");
316                 break;
317             case Calendar.TUESDAY:
318                 rollDay.setText("TUESDAY");
319                 break;
320             case Calendar.WEDNESDAY:
321                 rollDay.setText("WEDNESDAY");
322                 break;
323             case Calendar.THURSDAY:
324                 rollDay.setText("THURSDAY");
325                 break;
326             case Calendar.FRIDAY:
327                 rollDay.setText("FRIDAY");
328                 break;
329             case Calendar.SATURDAY:
330                 rollDay.setText("SATURDAY");
331                 break;
332             case Calendar.SUNDAY:
333                 rollDay.setText("SUNDAY");
334                 break;
335         }
336         e.getChildren().add(rollDay);
337     }
338
339     return e;
340   }
341 }
342
Popular Tags