KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > idaremedia > antx > print > DiagnosticsValue


1 /**
2  * $Id: DiagnosticsValue.java 180 2007-03-15 12:56:38Z ssmc $
3  * Copyright 2003-2004 iDare Media, Inc. All rights reserved.
4  *
5  * Originally written by iDare Media, Inc. for release into the public domain. This
6  * library, source form and binary form, is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public License (LGPL) as published
8  * by the Free Software Foundation; either version 2.1 of the License, or (at your option)
9  * any later version.<p>
10  *
11  * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13  * See the GNU LGPL for more details.<p>
14  *
15  * You should have received a copy of the GNU Lesser General Public License along with this
16  * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite
17  * 330, Boston, MA 02111-1307 USA. The GNU LGPL can be found online at
18  * http://www.fsf.org/copyleft/lesser.html<p>
19  *
20  * This product has been influenced by several projects within the open-source community.
21  * The JWare developers wish to acknowledge the open-source community's support. For more
22  * information regarding the open-source products used within JWare, please visit the
23  * JWare website.
24  *----------------------------------------------------------------------------------------*
25  * WEBSITE- http://www.jware.info EMAIL- inquiries@jware.info
26  *----------------------------------------------------------------------------------------*
27  **/

28
29 package com.idaremedia.antx.print;
30
31 import java.io.ByteArrayOutputStream JavaDoc;
32 import java.io.IOException JavaDoc;
33
34 import org.apache.tools.ant.BuildException;
35 import org.apache.tools.ant.Project;
36
37 import com.idaremedia.antx.FlexString;
38 import com.idaremedia.antx.Stringifier;
39 import com.idaremedia.antx.helpers.Tk;
40
41
42 /**
43  * Special subclass of a FlexString that can use a {@linkplain PrinterRegistry}
44  * to handle project reference data (er) references. A lenient diagnostics value will
45  * always fallback to <span class="src">String.valueOf(...)</span> if it encounters
46  * any problems.
47  *
48  * @since JWare/AntX 0.4
49  * @author ssmc, &copy;2003-2004 <a HREF="http://www.jware.info">iDare&nbsp;Media,&nbsp;Inc.</a>
50  * @version 0.5
51  * @.safety single
52  * @.group impl,helper
53  * @see com.idaremedia.antx.feedback.EmitInclude EmitInclude
54  **/

55
56 public final class DiagnosticsValue extends FlexString
57 {
58     /**
59      * Create a new strict diagnostics value.
60      **/

61     public DiagnosticsValue()
62     {
63         super();
64     }
65
66
67     /**
68      * Create a new optionally lenient diagnostics value.
69      * @param lenient <i>true</i> to make lenient
70      **/

71     public DiagnosticsValue(boolean lenient)
72     {
73         super();
74         setLenient(lenient);
75     }
76
77
78     /**
79      * Figure out what to do with generic reference types.
80      * Never returns <i>null</i> (can return the string "null").
81      * @throws BuildException if printer throws one
82      **/

83     protected String JavaDoc stringFrom(Object JavaDoc o, Project P)
84     {
85         String JavaDoc s = Stringifier.get(false).stringFrom(o,P);
86         if (s==null) {
87             PrinterRegistry registry = PrinterRegistryContext.getPrinterRegistryNoNull();
88             if (registry==PrinterRegistryContext.getEmptyPrinterRegistry()) {
89                 s = Tk.stringFrom(o,P);
90             } else {
91                 ByteArrayOutputStream JavaDoc os = new ByteArrayOutputStream JavaDoc(100);
92                 DisplayRequest r = new DisplayRequest(o);
93                 try {
94                     registry.getPrinterForNoNull(o).print(r,os);
95                 } catch (IOException JavaDoc iox) {
96                     if (!isLenient()) {
97                         throw new BuildException(iox);
98                     }
99                     iox.printStackTrace(System.err);//NB:careful-4 loopback
100
return Tk.stringFrom(o,P);
101                 }
102                 r = null;
103                 s = os.toString();
104                 os = null;
105             }
106         }
107         return s;
108     }
109 }
110
111 /* end-of-DiagnosticsValue.java */
112
Popular Tags