KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > krysalis > barcode > saxon > BarcodeStyleElement


1 /*
2  * $Id: BarcodeStyleElement.java,v 1.3 2003/10/29 07:50:27 jmaerki Exp $
3  * ============================================================================
4  * The Krysalis Patchy Software License, Version 1.1_01
5  * Copyright (c) 2003 Nicola Ken Barozzi. All rights reserved.
6  *
7  * This Licence is compatible with the BSD licence as described and
8  * approved by http://www.opensource.org/, and is based on the
9  * Apache Software Licence Version 1.1.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  *
15  * 1. Redistributions of source code must retain the above copyright
16  * notice, this list of conditions and the following disclaimer.
17  *
18  * 2. Redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions and the following disclaimer in
20  * the documentation and/or other materials provided with the
21  * distribution.
22  *
23  * 3. The end-user documentation included with the redistribution,
24  * if any, must include the following acknowledgment:
25  * "This product includes software developed for project
26  * Krysalis (http://www.krysalis.org/)."
27  * Alternately, this acknowledgment may appear in the software itself,
28  * if and wherever such third-party acknowledgments normally appear.
29  *
30  * 4. The names "Krysalis" and "Nicola Ken Barozzi" and
31  * "Krysalis Barcode" must not be used to endorse or promote products
32  * derived from this software without prior written permission. For
33  * written permission, please contact nicolaken@krysalis.org.
34  *
35  * 5. Products derived from this software may not be called "Krysalis",
36  * "Krysalis Barcode", nor may "Krysalis" appear in their name,
37  * without prior written permission of Nicola Ken Barozzi.
38  *
39  * 6. This software may contain voluntary contributions made by many
40  * individuals, who decided to donate the code to this project in
41  * respect of this licence, and was originally created by
42  * Jeremias Maerki <jeremias@maerki.org>.
43  *
44  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
45  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
46  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
47  * DISCLAIMED. IN NO EVENT SHALL THE KRYSALIS PROJECT OR
48  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
49  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
50  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
51  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
52  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
53  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
54  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
55  * SUCH DAMAGE.
56  * ====================================================================
57  */

58 package org.krysalis.barcode.saxon;
59
60 import javax.xml.transform.TransformerConfigurationException JavaDoc;
61 import javax.xml.transform.TransformerException JavaDoc;
62
63 import org.apache.avalon.framework.configuration.Configuration;
64 import org.apache.avalon.framework.logger.Logger;
65 import org.krysalis.barcode.BarcodeException;
66 import org.krysalis.barcode.BarcodeGenerator;
67 import org.krysalis.barcode.BarcodeUtil;
68 import org.krysalis.barcode.output.svg.SVGCanvasProvider;
69 import org.krysalis.barcode.tools.ConfigurationUtil;
70 import org.xml.sax.SAXException JavaDoc;
71
72 import com.icl.saxon.ContentEmitter;
73 import com.icl.saxon.Context;
74 import com.icl.saxon.DOMDriver;
75 import com.icl.saxon.expr.Expression;
76 import com.icl.saxon.om.NamePool;
77 import com.icl.saxon.style.StyleElement;
78
79 /**
80  * This represents the main barcode element.
81  *
82  * @author Jeremias Maerki
83  */

84 public class BarcodeStyleElement extends StyleElement {
85
86     private Logger log = new org.apache.avalon.framework.logger.ConsoleLogger();
87
88     private Expression message;
89
90
91     /**
92      * @see com.icl.saxon.style.StyleElement#prepareAttributes()
93      */

94     public void prepareAttributes() throws TransformerConfigurationException JavaDoc {
95         // Get mandatory message attribute
96

97         String JavaDoc msgAtt = attributeList.getValue("message");
98         if (msgAtt == null) {
99             reportAbsence("message");
100         }
101         message = makeAttributeValueTemplate(msgAtt);
102     }
103
104
105     /**
106      * @see com.icl.saxon.style.StyleElement#process(com.icl.saxon.Context)
107      */

108     public void process(Context context) throws TransformerException JavaDoc {
109         final Configuration cfg = ConfigurationUtil.buildConfiguration(this);
110
111         try {
112             //Acquire BarcodeGenerator
113
final BarcodeGenerator gen =
114                     BarcodeUtil.getInstance().createBarcodeGenerator(cfg, log);
115     
116             //Setup Canvas
117
final SVGCanvasProvider svg;
118             if (cfg.getAttributeAsBoolean("useNamespace", true)) {
119                 svg = new SVGCanvasProvider(cfg.getAttribute("prefix", "svg"));
120             } else {
121                 svg = new SVGCanvasProvider(false);
122             }
123             //Generate barcode
124
gen.generateBarcode(svg, message.evaluateAsString(context));
125             
126             ContentEmitter ce = new ContentEmitter();
127             ce.setEmitter(context.getOutputter().getEmitter());
128             ce.setNamePool(NamePool.getDefaultNamePool());
129             try {
130                 DOMDriver domdriver = new DOMDriver();
131                 domdriver.setStartNode(svg.getDOMFragment());
132                 domdriver.setContentHandler(ce);
133                 domdriver.parse();
134             } catch (SAXException JavaDoc saxe) {
135                 throw new TransformerException JavaDoc(saxe);
136             }
137         } catch (BarcodeException be) {
138             throw new TransformerException JavaDoc(be);
139         }
140     }
141    
142
143     /**
144      * @see com.icl.saxon.style.StyleElement#isInstruction()
145      */

146     public boolean isInstruction() {
147         return true;
148     }
149
150 }
151
Popular Tags