1 58 package org.krysalis.barcode.saxon; 59 60 import javax.xml.transform.TransformerConfigurationException ; 61 import javax.xml.transform.TransformerException ; 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 ; 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 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 94 public void prepareAttributes() throws TransformerConfigurationException { 95 97 String msgAtt = attributeList.getValue("message"); 98 if (msgAtt == null) { 99 reportAbsence("message"); 100 } 101 message = makeAttributeValueTemplate(msgAtt); 102 } 103 104 105 108 public void process(Context context) throws TransformerException { 109 final Configuration cfg = ConfigurationUtil.buildConfiguration(this); 110 111 try { 112 final BarcodeGenerator gen = 114 BarcodeUtil.getInstance().createBarcodeGenerator(cfg, log); 115 116 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 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 saxe) { 135 throw new TransformerException (saxe); 136 } 137 } catch (BarcodeException be) { 138 throw new TransformerException (be); 139 } 140 } 141 142 143 146 public boolean isInstruction() { 147 return true; 148 } 149 150 } 151 | Popular Tags |