// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/kpdus/jad.html // Decompiler options: packimports(3) fieldsfirst lnc // Source File Name: TransformerFactoryImpl.java package com.icl.saxon; import com.icl.saxon.om.NodeInfo; import com.icl.saxon.trace.TraceListener; import java.io.*; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.sax.*; import javax.xml.transform.stream.StreamSource; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.xml.sax.*; import org.xml.sax.helpers.ParserAdapter; // Referenced classes of package com.icl.saxon: // StandardURIResolver, StandardErrorListener, IdentityTransformer, PreparedStyleSheet, // TreeDriver, DOMDriver, PIGrabber, Controller, // TransformerHandlerImpl, IdentityTransformerHandler, TemplatesHandlerImpl, Filter, // Loader public class TransformerFactoryImpl extends SAXTransformerFactory { private URIResolver resolver; private ErrorListener listener; private int treeModel; private boolean lineNumbering; private TraceListener traceListener; private int recoveryPolicy; private String messageEmitterClass; private String sourceParserClass; private String styleParserClass; private boolean timing; private boolean allowExternalFunctions; public TransformerFactoryImpl() { /* 38*/ resolver = new StandardURIResolver(this); /* 39*/ listener = new StandardErrorListener(); /* 40*/ treeModel = 1; /* 41*/ lineNumbering = false; /* 42*/ traceListener = null; /* 43*/ recoveryPolicy = 1; /* 44*/ messageEmitterClass = "com.icl.saxon.output.MessageEmitter"; /* 47*/ timing = false; /* 48*/ allowExternalFunctions = true; } public Transformer newTransformer(Source source) throws TransformerConfigurationException { /* 72*/ Templates templates = newTemplates(source); /* 73*/ Transformer transformer = templates.newTransformer(); /* 76*/ return transformer; } public Transformer newTransformer() throws TransformerConfigurationException { /* 94*/ return new IdentityTransformer(this); } public Templates newTemplates(Source source) throws TransformerConfigurationException { /* 118*/ PreparedStyleSheet preparedstylesheet = new PreparedStyleSheet(this); /* 119*/ SAXSource saxsource = getSAXSource(source, true); /* 120*/ preparedstylesheet.prepare(saxsource); /* 121*/ return preparedstylesheet; } public SAXSource getSAXSource(Source source, boolean flag) { /* 133*/ if(source instanceof SAXSource) /* 134*/ if(((SAXSource)source).getXMLReader() == null) { /* 135*/ SAXSource saxsource = new SAXSource(); /* 136*/ saxsource.setInputSource(((SAXSource)source).getInputSource()); /* 137*/ saxsource.setSystemId(source.getSystemId()); /* 138*/ saxsource.setXMLReader(flag ? getStyleParser() : getSourceParser()); /* 139*/ return saxsource; } else { /* 141*/ return (SAXSource)source; } /* 152*/ if(source instanceof DOMSource) { /* 153*/ InputSource inputsource = new InputSource("dummy"); /* 154*/ Node node = ((DOMSource)source).getNode(); Document document; /* 156*/ if(node instanceof Document) /* 157*/ document = (Document)node; /* 159*/ else /* 159*/ document = node.getOwnerDocument(); Object obj; /* 162*/ if(node instanceof NodeInfo) /* 163*/ obj = new TreeDriver(); /* 165*/ else /* 165*/ obj = new DOMDriver(); /* 167*/ ((DOMDriver) (obj)).setStartNode(document); /* 168*/ inputsource.setSystemId(source.getSystemId()); /* 169*/ ((DOMDriver) (obj)).setSystemId(source.getSystemId()); /* 170*/ return new SAXSource(((XMLReader) (obj)), inputsource); } /* 171*/ if(source instanceof StreamSource) { /* 172*/ StreamSource streamsource = (StreamSource)source; /* 181*/ String s = source.getSystemId(); /* 186*/ InputSource inputsource1 = new InputSource(s); /* 187*/ inputsource1.setCharacterStream(streamsource.getReader()); /* 188*/ inputsource1.setByteStream(streamsource.getInputStream()); /* 189*/ return new SAXSource(flag ? getStyleParser() : getSourceParser(), inputsource1); } else { /* 193*/ throw new IllegalArgumentException("Unknown type of source"); } } public Source getAssociatedStylesheet(Source source, String s, String s1, String s2) throws TransformerConfigurationException { /* 223*/ PIGrabber pigrabber = new PIGrabber(); /* 224*/ pigrabber.setCriteria(s, s1, s2); /* 225*/ pigrabber.setBaseURI(source.getSystemId()); /* 226*/ pigrabber.setURIResolver(resolver); /* 228*/ SAXSource saxsource = getSAXSource(source, false); /* 229*/ XMLReader xmlreader = saxsource.getXMLReader(); /* 231*/ xmlreader.setContentHandler(pigrabber); /* 233*/ try { /* 233*/ xmlreader.parse(saxsource.getInputSource()); } /* 235*/ catch(SAXException saxexception) { /* 235*/ if(!saxexception.getMessage().equals("#start#")) { /* 239*/ System.err.println("Failed while looking for xml-stylesheet PI"); /* 240*/ System.err.println(saxexception.getMessage()); /* 241*/ if(saxexception.getException() != null) /* 242*/ saxexception.getException().printStackTrace(); /* 244*/ if(saxexception instanceof SAXParseException) { /* 245*/ SAXParseException saxparseexception = (SAXParseException)saxexception; /* 246*/ System.err.println("At line " + saxparseexception.getLineNumber() + " in " + saxparseexception.getSystemId()); } /* 248*/ throw new TransformerConfigurationException(saxexception); } } /* 251*/ catch(IOException ioexception) { /* 251*/ System.err.println(ioexception.getMessage()); /* 252*/ throw new TransformerConfigurationException("XML parsing failure while looking for <?xml-stylesheet?>"); } /* 256*/ try { /* 256*/ SAXSource asaxsource[] = pigrabber.getAssociatedStylesheets(); /* 257*/ if(asaxsource == null) /* 258*/ throw new TransformerConfigurationException("No matching <?xml-stylesheet?> processing instruction found"); /* 261*/ else /* 261*/ return compositeStylesheet(asaxsource); } /* 263*/ catch(TransformerException transformerexception) { /* 263*/ if(transformerexception instanceof TransformerConfigurationException) /* 264*/ throw (TransformerConfigurationException)transformerexception; /* 266*/ else /* 266*/ throw new TransformerConfigurationException(transformerexception); } } public Source compositeStylesheet(SAXSource asaxsource[]) throws TransformerConfigurationException { /* 285*/ if(asaxsource.length == 1) /* 286*/ return asaxsource[0]; /* 287*/ if(asaxsource.length == 0) /* 288*/ throw new TransformerConfigurationException("No stylesheets were supplied"); /* 294*/ StringBuffer stringbuffer = new StringBuffer(); /* 295*/ stringbuffer.append("<xsl:stylesheet version='1.0' "); /* 296*/ stringbuffer.append(" xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>"); /* 297*/ for(int i = 0; i < asaxsource.length; i++) /* 298*/ stringbuffer.append("<xsl:import href='" + asaxsource[i].getInputSource().getSystemId() + "'/>"); /* 300*/ stringbuffer.append("</xsl:stylesheet>"); /* 301*/ InputSource inputsource = new InputSource(); /* 302*/ inputsource.setCharacterStream(new StringReader(stringbuffer.toString())); /* 303*/ return new SAXSource(getSourceParser(), inputsource); } public void setURIResolver(URIResolver uriresolver) { /* 315*/ resolver = uriresolver; } public URIResolver getURIResolver() { /* 326*/ return resolver; } public void setFeature(String s, boolean flag) throws TransformerConfigurationException { /* 370*/ if(s.equals("http://javax.xml.XMLConstants/feature/secure-processing") && !flag) /* 371*/ return; /* 373*/ else /* 373*/ throw new TransformerConfigurationException("Unsupported feature: " + s); } public boolean getFeature(String s) { /* 385*/ if(s.equals("http://javax.xml.transform.sax.SAXSource/feature")) /* 385*/ return true; /* 386*/ if(s.equals("http://javax.xml.transform.sax.SAXResult/feature")) /* 386*/ return true; /* 387*/ if(s.equals("http://javax.xml.transform.dom.DOMSource/feature")) /* 387*/ return true; /* 388*/ if(s.equals("http://javax.xml.transform.dom.DOMResult/feature")) /* 388*/ return true; /* 389*/ if(s.equals("http://javax.xml.transform.stream.StreamSource/feature")) /* 389*/ return true; /* 390*/ if(s.equals("http://javax.xml.transform.stream.StreamResult/feature")) /* 390*/ return true; /* 391*/ if(s.equals("http://javax.xml.transform.sax.SAXTransformerFactory/feature")) /* 391*/ return true; /* 392*/ if(s.equals("http://javax.xml.transform.sax.SAXTransformerFactory/feature/xmlfilter")) /* 392*/ return true; /* 393*/ else /* 393*/ throw new IllegalArgumentException("Unknown feature " + s); } public void setAttribute(String s, Object obj) throws IllegalArgumentException { /* 410*/ if(s.equals("http://icl.com/saxon/feature/treeModel")) { /* 411*/ if(!(obj instanceof Integer)) /* 412*/ throw new IllegalArgumentException("Tree model must be an Integer"); /* 414*/ treeModel = ((Integer)obj).intValue(); } else /* 416*/ if(s.equals("http://icl.com/saxon/feature/allow-external-functions")) { /* 417*/ if(!(obj instanceof Boolean)) /* 418*/ throw new IllegalArgumentException("allow-external-functions must be a boolean"); /* 420*/ allowExternalFunctions = ((Boolean)obj).booleanValue(); } else /* 422*/ if(s.equals("http://icl.com/saxon/feature/timing")) { /* 423*/ if(!(obj instanceof Boolean)) /* 424*/ throw new IllegalArgumentException("Timing must be a boolean"); /* 426*/ timing = ((Boolean)obj).booleanValue(); } else /* 428*/ if(s.equals("http://icl.com/saxon/feature/traceListener")) { /* 429*/ if(!(obj instanceof TraceListener)) /* 430*/ throw new IllegalArgumentException("Trace listener is of wrong class"); /* 432*/ traceListener = (TraceListener)obj; } else /* 434*/ if(s.equals("http://icl.com/saxon/feature/linenumbering")) { /* 435*/ if(!(obj instanceof Boolean)) /* 436*/ throw new IllegalArgumentException("Line Numbering value must be Boolean"); /* 438*/ lineNumbering = ((Boolean)obj).booleanValue(); } else /* 440*/ if(s.equals("http://icl.com/saxon/feature/recoveryPolicy")) { /* 441*/ if(!(obj instanceof Integer)) /* 442*/ throw new IllegalArgumentException("Recovery Policy value must be Integer"); /* 444*/ recoveryPolicy = ((Integer)obj).intValue(); } else /* 446*/ if(s.equals("http://icl.com/saxon/feature/messageEmitterClass")) { /* 447*/ if(!(obj instanceof String)) /* 448*/ throw new IllegalArgumentException("Message Emitter class must be a String"); /* 450*/ messageEmitterClass = (String)obj; } else /* 452*/ if(s.equals("http://icl.com/saxon/feature/sourceParserClass")) { /* 453*/ if(!(obj instanceof String)) /* 454*/ throw new IllegalArgumentException("Source Parser class must be a String"); /* 456*/ sourceParserClass = (String)obj; } else /* 458*/ if(s.equals("http://icl.com/saxon/feature/styleParserClass")) { /* 459*/ if(!(obj instanceof String)) /* 460*/ throw new IllegalArgumentException("Style Parser class must be a String"); /* 462*/ styleParserClass = (String)obj; } else { /* 465*/ throw new IllegalArgumentException("Unknown attribute " + s); } } public Object getAttribute(String s) throws IllegalArgumentException { /* 479*/ if(s.equals("http://icl.com/saxon/feature/treeModel")) /* 480*/ return new Integer(treeModel); /* 482*/ if(s.equals("http://icl.com/saxon/feature/timing")) /* 483*/ return new Boolean(timing); /* 485*/ if(s.equals("http://icl.com/saxon/feature/allow-external-functions")) /* 486*/ return new Boolean(allowExternalFunctions); /* 488*/ if(s.equals("http://icl.com/saxon/feature/traceListener")) /* 489*/ return traceListener; /* 491*/ if(s.equals("http://icl.com/saxon/feature/linenumbering")) /* 492*/ return new Boolean(lineNumbering); /* 494*/ if(s.equals("http://icl.com/saxon/feature/recoveryPolicy")) /* 495*/ return new Integer(recoveryPolicy); /* 497*/ if(s.equals("http://icl.com/saxon/feature/messageEmitterClass")) /* 498*/ return messageEmitterClass; /* 500*/ if(s.equals("http://icl.com/saxon/feature/sourceParserClass")) /* 501*/ return sourceParserClass; /* 503*/ if(s.equals("http://icl.com/saxon/feature/styleParserClass")) /* 504*/ return styleParserClass; /* 507*/ else /* 507*/ throw new IllegalArgumentException("Unknown attribute " + s); } public void setErrorListener(ErrorListener errorlistener) throws IllegalArgumentException { /* 522*/ listener = errorlistener; } public ErrorListener getErrorListener() { /* 531*/ return listener; } public XMLReader getSourceParser() throws TransformerFactoryConfigurationError { /* 539*/ if(sourceParserClass != null) /* 540*/ return makeParser(sourceParserClass); /* 543*/ try { /* 543*/ return SAXParserFactory.newInstance().newSAXParser().getXMLReader(); } /* 545*/ catch(Exception exception) { /* 545*/ throw new TransformerFactoryConfigurationError(exception); } } public XMLReader getStyleParser() throws TransformerFactoryConfigurationError { /* 555*/ if(styleParserClass != null) /* 556*/ return makeParser(styleParserClass); /* 559*/ try { /* 559*/ return SAXParserFactory.newInstance().newSAXParser().getXMLReader(); } /* 561*/ catch(Exception exception) { /* 561*/ throw new TransformerFactoryConfigurationError(exception); } } public static XMLReader makeParser(String s) throws TransformerFactoryConfigurationError { Object obj; /* 585*/ try { /* 585*/ obj = Loader.getInstance(s); } /* 587*/ catch(TransformerException transformerexception) { /* 587*/ throw new TransformerFactoryConfigurationError(transformerexception); } /* 589*/ if(obj instanceof XMLReader) /* 590*/ return (XMLReader)obj; /* 592*/ if(obj instanceof Parser) /* 593*/ return new ParserAdapter((Parser)obj); /* 595*/ else /* 595*/ throw new TransformerFactoryConfigurationError("Class " + s + " is neither a SAX1 Parser nor a SAX2 XMLReader"); } public TransformerHandler newTransformerHandler(Source source) throws TransformerConfigurationException { /* 618*/ Templates templates = newTemplates(source); /* 619*/ return newTransformerHandler(templates); } public TransformerHandler newTransformerHandler(Templates templates) throws TransformerConfigurationException { /* 636*/ if(!(templates instanceof PreparedStyleSheet)) /* 637*/ throw new TransformerConfigurationException("Templates object was not created by Saxon"); /* 639*/ Controller controller = (Controller)templates.newTransformer(); /* 640*/ if(controller.usesPreviewMode()) { /* 641*/ throw new TransformerConfigurationException("Preview mode is not available with a TransformerHandler"); } else { /* 643*/ TransformerHandlerImpl transformerhandlerimpl = new TransformerHandlerImpl(controller); /* 644*/ return transformerhandlerimpl; } } public TransformerHandler newTransformerHandler() throws TransformerConfigurationException { /* 662*/ IdentityTransformer identitytransformer = new IdentityTransformer(this); /* 663*/ return new IdentityTransformerHandler(identitytransformer); } public TemplatesHandler newTemplatesHandler() throws TransformerConfigurationException { /* 679*/ return new TemplatesHandlerImpl(this); } public XMLFilter newXMLFilter(Source source) throws TransformerConfigurationException { /* 696*/ Templates templates = newTemplates(source); /* 697*/ return newXMLFilter(templates); } public XMLFilter newXMLFilter(Templates templates) throws TransformerConfigurationException { /* 713*/ if(!(templates instanceof PreparedStyleSheet)) { /* 714*/ throw new TransformerConfigurationException("Supplied Templates object was not created using Saxon"); } else { /* 716*/ Controller controller = (Controller)templates.newTransformer(); /* 717*/ return new Filter(controller); } } }