// 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: Controller.java package com.icl.saxon; import com.icl.saxon.expr.Expression; import com.icl.saxon.expr.FunctionProxy; import com.icl.saxon.expr.LastPositionFinder; import com.icl.saxon.expr.LookaheadEnumerator; import com.icl.saxon.expr.SingletonNodeSet; import com.icl.saxon.expr.StandaloneContext; import com.icl.saxon.expr.StringValue; import com.icl.saxon.om.Builder; import com.icl.saxon.om.DocumentInfo; import com.icl.saxon.om.DocumentPool; import com.icl.saxon.om.NamePool; import com.icl.saxon.om.NodeEnumeration; import com.icl.saxon.om.NodeInfo; import com.icl.saxon.om.Stripper; import com.icl.saxon.output.ContentHandlerProxy; import com.icl.saxon.output.Emitter; import com.icl.saxon.output.GeneralOutputter; import com.icl.saxon.output.Outputter; import com.icl.saxon.output.ProxyEmitter; import com.icl.saxon.output.SaxonOutputKeys; import com.icl.saxon.output.StringOutputter; import com.icl.saxon.pattern.AnyNodeTest; import com.icl.saxon.sort.NodeOrderComparer; import com.icl.saxon.style.TerminationException; import com.icl.saxon.style.XSLStyleSheet; import com.icl.saxon.tinytree.TinyBuilder; import com.icl.saxon.trace.SaxonEventMulticaster; import com.icl.saxon.trace.TraceListener; import com.icl.saxon.tree.DocumentImpl; import com.icl.saxon.tree.TreeBuilder; import java.util.*; import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.sax.TransformerHandler; import org.w3c.dom.Node; import org.xml.sax.SAXParseException; // Referenced classes of package com.icl.saxon: // TransformerFactoryImpl, Bindery, StandardURIResolver, StandardErrorListener, // Context, Mode, ParameterSet, RuleManager, // NodeHandler, PreparedStyleSheet, Loader, DecimalFormatManager, // KeyManager public class Controller extends Transformer implements NodeOrderComparer { public static final int RECOVER_SILENTLY = 0; public static final int RECOVER_WITH_WARNINGS = 1; public static final int DO_NOT_RECOVER = 2; private TransformerFactoryImpl factory; private Bindery bindery; private NamePool namePool; private DecimalFormatManager decimalFormatManager; private Emitter messageEmitter; private RuleManager ruleManager; private Properties outputProperties; private Outputter currentOutputter; private ParameterSet parameters; private PreparedStyleSheet preparedStyleSheet; private TraceListener traceListener; private boolean tracingIsSuspended; private URIResolver standardURIResolver; private URIResolver userURIResolver; private ErrorListener errorListener; private XSLStyleSheet styleSheetElement; private int recoveryPolicy; private int treeModel; private boolean disableStripping; private DocumentPool sourceDocumentPool; private Hashtable userDataTable; private boolean lineNumbering; private boolean preview; private String diagnosticName; public Controller() { /* 81*/ this(new TransformerFactoryImpl()); /* 82*/ bindery = new Bindery(); } protected Controller(TransformerFactoryImpl transformerfactoryimpl) { /* 59*/ tracingIsSuspended = false; /* 64*/ recoveryPolicy = 1; /* 65*/ treeModel = 1; /* 66*/ disableStripping = false; /* 72*/ diagnosticName = null; /* 92*/ factory = transformerfactoryimpl; /* 93*/ namePool = NamePool.getDefaultNamePool(); /* 94*/ standardURIResolver = new StandardURIResolver(transformerfactoryimpl); /* 95*/ userURIResolver = transformerfactoryimpl.getURIResolver(); /* 97*/ errorListener = transformerfactoryimpl.getErrorListener(); /* 98*/ if(errorListener instanceof StandardErrorListener) /* 99*/ ((StandardErrorListener)errorListener).setRecoveryPolicy(((Integer)transformerfactoryimpl.getAttribute("http://icl.com/saxon/feature/recoveryPolicy")).intValue()); /* 103*/ sourceDocumentPool = new DocumentPool(); /* 104*/ userDataTable = new Hashtable(); /* 106*/ TraceListener tracelistener = (TraceListener)transformerfactoryimpl.getAttribute("http://icl.com/saxon/feature/traceListener"); /* 107*/ if(tracelistener != null) /* 108*/ addTraceListener(tracelistener); /* 111*/ Boolean boolean1 = (Boolean)transformerfactoryimpl.getAttribute("http://icl.com/saxon/feature/linenumbering"); /* 112*/ if(boolean1 != null && boolean1.booleanValue()) /* 113*/ setLineNumbering(true); /* 116*/ Integer integer = (Integer)transformerfactoryimpl.getAttribute("http://icl.com/saxon/feature/treeModel"); /* 117*/ if(integer != null) /* 118*/ setTreeModel(integer.intValue()); } public void reset() { /* 147*/ clearParameters(); /* 148*/ namePool = NamePool.getDefaultNamePool(); /* 149*/ standardURIResolver = new StandardURIResolver(factory); /* 150*/ userURIResolver = factory.getURIResolver(); /* 151*/ currentOutputter = null; /* 152*/ messageEmitter = null; /* 153*/ outputProperties = null; /* 155*/ errorListener = factory.getErrorListener(); /* 156*/ if(errorListener instanceof StandardErrorListener) /* 157*/ ((StandardErrorListener)errorListener).setRecoveryPolicy(((Integer)factory.getAttribute("http://icl.com/saxon/feature/recoveryPolicy")).intValue()); /* 161*/ userDataTable = new Hashtable(); /* 163*/ TraceListener tracelistener = (TraceListener)factory.getAttribute("http://icl.com/saxon/feature/traceListener"); /* 164*/ if(tracelistener != null) /* 165*/ addTraceListener(tracelistener); /* 168*/ Boolean boolean1 = (Boolean)factory.getAttribute("http://icl.com/saxon/feature/linenumbering"); /* 169*/ if(boolean1 != null && boolean1.booleanValue()) /* 170*/ setLineNumbering(true); /* 173*/ Integer integer = (Integer)factory.getAttribute("http://icl.com/saxon/feature/treeModel"); /* 174*/ if(integer != null) /* 175*/ setTreeModel(integer.intValue()); } public TransformerFactoryImpl getTransformerFactory() { /* 181*/ return factory; } public void setDiagnosticName(String s) { /* 189*/ diagnosticName = s; } public String toString() { /* 193*/ if(diagnosticName == null) /* 194*/ return super.toString(); /* 196*/ else /* 196*/ return diagnosticName; } public void run(NodeInfo nodeinfo) throws TransformerException { /* 219*/ Context context = makeContext(nodeinfo); /* 220*/ applyTemplates(context, new SingletonNodeSet(nodeinfo), getRuleManager().getMode(-1), null); } public void applyTemplates(Context context, Expression expression, Mode mode, ParameterSet parameterset) throws TransformerException { Object obj; /* 245*/ if(expression == null) /* 246*/ obj = context.getCurrentNodeInfo().getEnumeration((byte)3, AnyNodeTest.getInstance()); /* 248*/ else /* 248*/ obj = expression.enumerate(context, false); /* 253*/ if(!(obj instanceof LastPositionFinder)) /* 254*/ obj = new LookaheadEnumerator(((NodeEnumeration) (obj))); /* 257*/ int i = 1; /* 258*/ Context context1 = context.newContext(); /* 259*/ context1.setLastPositionFinder((LastPositionFinder)obj); /* 260*/ context1.setMode(mode); /* 262*/ while(((NodeEnumeration) (obj)).hasMoreElements()) { /* 262*/ NodeInfo nodeinfo = ((NodeEnumeration) (obj)).nextElement(); /* 268*/ context1.setCurrentNode(nodeinfo); /* 269*/ context1.setContextNode(nodeinfo); /* 270*/ context1.setPosition(i++); /* 274*/ NodeHandler nodehandler = ruleManager.getHandler(nodeinfo, mode, context1); /* 276*/ if(nodehandler == null) /* 278*/ defaultAction(nodeinfo, context1); /* 281*/ else /* 281*/ if(nodehandler.needsStackFrame()) { /* 282*/ bindery.openStackFrame(parameterset); /* 283*/ if(isTracing()) { /* 284*/ traceListener.enterSource(nodehandler, context1); /* 285*/ nodehandler.start(nodeinfo, context1); /* 286*/ traceListener.leaveSource(nodehandler, context1); } else { /* 288*/ nodehandler.start(nodeinfo, context1); } /* 290*/ bindery.closeStackFrame(); } else /* 292*/ if(isTracing()) { /* 293*/ traceListener.enterSource(nodehandler, context1); /* 294*/ nodehandler.start(nodeinfo, context1); /* 295*/ traceListener.leaveSource(nodehandler, context1); } else { /* 297*/ nodehandler.start(nodeinfo, context1); } } } private void defaultAction(NodeInfo nodeinfo, Context context) throws TransformerException { /* 310*/ switch(nodeinfo.getNodeType()) { /* 313*/ case 1: // '\001' /* 313*/ case 9: // '\t' /* 313*/ applyTemplates(context, null, context.getMode(), null); /* 314*/ return; /* 317*/ case 2: // '\002' /* 317*/ case 3: // '\003' /* 317*/ nodeinfo.copyStringValue(getOutputter()); /* 318*/ return; /* 323*/ case 7: // '\007' /* 323*/ case 8: // '\b' /* 323*/ case 13: // '\r' /* 323*/ return; /* 325*/ case 4: // '\004' /* 325*/ case 5: // '\005' /* 325*/ case 6: // '\006' /* 325*/ case 10: // '\n' /* 325*/ case 11: // '\013' /* 325*/ case 12: // '\f' /* 325*/ default: /* 325*/ return; } } public void applyImports(Context context, Mode mode, int i, int j, ParameterSet parameterset) throws TransformerException { /* 333*/ NodeInfo nodeinfo = context.getCurrentNodeInfo(); /* 334*/ NodeHandler nodehandler = ruleManager.getHandler(nodeinfo, mode, i, j, context); /* 336*/ if(nodehandler == null) { /* 337*/ defaultAction(nodeinfo, context); } else { /* 339*/ bindery.openStackFrame(parameterset); /* 340*/ nodehandler.start(nodeinfo, context); /* 341*/ bindery.closeStackFrame(); } } public int compare(NodeInfo nodeinfo, NodeInfo nodeinfo1) { /* 355*/ if(sourceDocumentPool.getNumberOfDocuments() == 1) /* 356*/ return nodeinfo.compareOrder(nodeinfo1); /* 358*/ int i = sourceDocumentPool.getDocumentNumber(nodeinfo.getDocumentRoot()); /* 359*/ int j = sourceDocumentPool.getDocumentNumber(nodeinfo1.getDocumentRoot()); /* 360*/ if(i == j) /* 361*/ return nodeinfo.compareOrder(nodeinfo1); /* 363*/ else /* 363*/ return i - j; } public void setOutputProperties(Properties properties) { String s; /* 379*/ for(Enumeration enumeration = properties.keys(); enumeration.hasMoreElements(); setOutputProperty(s, (String)properties.get(s))) /* 381*/ s = (String)enumeration.nextElement(); } public Properties getOutputProperties() { /* 391*/ if(outputProperties == null) { /* 392*/ if(preparedStyleSheet == null) /* 393*/ return new Properties(); /* 395*/ outputProperties = preparedStyleSheet.getOutputProperties(); } /* 401*/ Properties properties = new Properties(); String s; /* 402*/ for(Enumeration enumeration = outputProperties.keys(); enumeration.hasMoreElements(); properties.put(s, (String)outputProperties.get(s))) /* 404*/ s = (String)enumeration.nextElement(); /* 407*/ return properties; } public void setOutputProperty(String s, String s1) { /* 415*/ if(outputProperties == null) /* 416*/ outputProperties = getOutputProperties(); /* 418*/ if(!SaxonOutputKeys.isValidOutputKey(s)) { /* 419*/ throw new IllegalArgumentException(s); } else { /* 421*/ outputProperties.put(s, s1); /* 422*/ return; } } public String getOutputProperty(String s) { /* 429*/ if(outputProperties == null) /* 430*/ outputProperties = getOutputProperties(); /* 432*/ return outputProperties.getProperty(s); } public void changeOutputDestination(Properties properties, Result result) throws TransformerException { /* 446*/ GeneralOutputter generaloutputter = new GeneralOutputter(namePool); /* 447*/ generaloutputter.setOutputDestination(properties, result); /* 448*/ currentOutputter = generaloutputter; } public void changeToTextOutputDestination(StringBuffer stringbuffer) { /* 457*/ StringOutputter stringoutputter = new StringOutputter(stringbuffer); /* 458*/ stringoutputter.setErrorListener(errorListener); /* 459*/ currentOutputter = stringoutputter; } public Outputter getOutputter() { /* 467*/ return currentOutputter; } public void resetOutputDestination(Outputter outputter) throws TransformerException { /* 477*/ if(currentOutputter == null) { /* 478*/ throw new TransformerException("No outputter has been allocated"); } else { /* 480*/ currentOutputter.close(); /* 481*/ currentOutputter = outputter; /* 482*/ return; } } public Emitter makeMessageEmitter() throws TransformerException { /* 492*/ String s = (String)factory.getAttribute("http://icl.com/saxon/feature/messageEmitterClass"); /* 494*/ Object obj = Loader.getInstance(s); /* 495*/ if(!(obj instanceof Emitter)) { /* 496*/ throw new TransformerException(s + " is not an Emitter"); } else { /* 498*/ messageEmitter = (Emitter)obj; /* 499*/ return messageEmitter; } } public void setMessageEmitter(Emitter emitter) { /* 507*/ messageEmitter = emitter; } public Emitter getMessageEmitter() { /* 515*/ return messageEmitter; } public void setRecoveryPolicy(int i) { /* 523*/ recoveryPolicy = i; /* 524*/ if(errorListener instanceof StandardErrorListener) /* 525*/ ((StandardErrorListener)errorListener).setRecoveryPolicy(i); } public int getRecoveryPolicy() { /* 534*/ return recoveryPolicy; } public void setErrorListener(ErrorListener errorlistener) { /* 542*/ errorListener = errorlistener; } public ErrorListener getErrorListener() { /* 550*/ return errorListener; } public void reportRecoverableError(String s, SourceLocator sourcelocator) throws TransformerException { /* 560*/ if(sourcelocator == null) { /* 561*/ errorListener.warning(new TransformerException(s)); } else { /* 563*/ TransformerException transformerexception = new TransformerException(s, sourcelocator); /* 564*/ errorListener.warning(transformerexception); } } public void reportRecoverableError(TransformerException transformerexception) throws TransformerException { /* 575*/ errorListener.warning(transformerexception); } public DocumentPool getDocumentPool() { /* 588*/ return sourceDocumentPool; } public void clearDocumentPool() { /* 598*/ sourceDocumentPool = new DocumentPool(); } public void setLineNumbering(boolean flag) { /* 606*/ lineNumbering = flag; } public boolean isLineNumbering() { /* 614*/ return lineNumbering; } public Context makeContext(NodeInfo nodeinfo) { /* 623*/ Context context = new Context(this); /* 624*/ context.setCurrentNode(nodeinfo); /* 625*/ context.setContextNode(nodeinfo); /* 626*/ context.setPosition(1); /* 627*/ context.setLast(1); /* 628*/ return context; } public Bindery getBindery() { /* 636*/ return bindery; } public URIResolver getURIResolver() { /* 646*/ return userURIResolver != null ? userURIResolver : standardURIResolver; } public URIResolver getStandardURIResolver() { /* 655*/ return standardURIResolver; } public KeyManager getKeyManager() { /* 664*/ return styleSheetElement.getKeyManager(); } public void setNamePool(NamePool namepool) { /* 672*/ namePool = namepool; } public NamePool getNamePool() { /* 680*/ return namePool; } public void setTreeModel(int i) { /* 688*/ treeModel = i; } public int getTreeModel() { /* 696*/ return treeModel; } public void disableWhitespaceStripping(boolean flag) { /* 704*/ disableStripping = flag; } public boolean isWhitespaceStrippingDisabled() { /* 712*/ return disableStripping; } public Builder makeBuilder() { Object obj; /* 721*/ if(treeModel == 1) /* 722*/ obj = new TinyBuilder(); /* 724*/ else /* 724*/ obj = new TreeBuilder(); /* 726*/ Boolean boolean1 = (Boolean)factory.getAttribute("http://icl.com/saxon/feature/timing"); /* 727*/ ((Builder) (obj)).setTiming(boolean1 != null ? boolean1.booleanValue() : false); /* 728*/ ((Emitter) (obj)).setNamePool(namePool); /* 729*/ ((Builder) (obj)).setLineNumbering(lineNumbering); /* 730*/ ((Builder) (obj)).setErrorListener(errorListener); /* 732*/ Stripper stripper = makeStripper(((Builder) (obj))); /* 733*/ return ((Builder) (obj)); } public Stripper makeStripper(Builder builder) { Stripper stripper; /* 738*/ if(styleSheetElement == null) /* 739*/ stripper = new Stripper(new Mode()); /* 741*/ else /* 741*/ stripper = styleSheetElement.newStripper(); /* 743*/ stripper.setController(this); /* 744*/ stripper.setUnderlyingEmitter(builder); /* 745*/ builder.setStripper(stripper); /* 746*/ return stripper; } public void setDecimalFormatManager(DecimalFormatManager decimalformatmanager) { /* 755*/ decimalFormatManager = decimalformatmanager; } public DecimalFormatManager getDecimalFormatManager() { /* 759*/ return decimalFormatManager; } public void setRuleManager(RuleManager rulemanager) { /* 767*/ ruleManager = rulemanager; } public RuleManager getRuleManager() { /* 771*/ return ruleManager; } public void setTraceListener(TraceListener tracelistener) { /* 779*/ traceListener = tracelistener; } public TraceListener getTraceListener() { /* 783*/ return traceListener; } public final boolean isTracing() { /* 787*/ return traceListener != null && !tracingIsSuspended; } public void pauseTracing(boolean flag) { /* 791*/ tracingIsSuspended = flag; } public void setPreparedStyleSheet(PreparedStyleSheet preparedstylesheet) { /* 799*/ preparedStyleSheet = preparedstylesheet; /* 800*/ styleSheetElement = (XSLStyleSheet)preparedstylesheet.getStyleSheetDocument().getDocumentElement(); /* 801*/ preview = styleSheetElement.getPreviewManager() != null; } protected boolean usesPreviewMode() { /* 811*/ return preview; } private void initializeController() { /* 819*/ setRuleManager(styleSheetElement.getRuleManager()); /* 820*/ setDecimalFormatManager(styleSheetElement.getDecimalFormatManager()); /* 822*/ if(traceListener != null) /* 823*/ traceListener.open(); /* 828*/ bindery = new Bindery(); /* 829*/ styleSheetElement.initialiseBindery(bindery); /* 833*/ bindery.defineGlobalParameters(parameters); } public void addTraceListener(TraceListener tracelistener) { /* 844*/ traceListener = SaxonEventMulticaster.add(traceListener, tracelistener); } public void removeTraceListener(TraceListener tracelistener) { /* 854*/ traceListener = SaxonEventMulticaster.remove(traceListener, tracelistener); } public Object getUserData(NodeInfo nodeinfo, String s) { /* 870*/ String s1 = s + ' ' + getDocumentPool().getDocumentNumber(nodeinfo.getDocumentRoot()) + nodeinfo.generateId(); /* 872*/ return userDataTable.get(s1); } public void setUserData(NodeInfo nodeinfo, String s, Object obj) { /* 884*/ String s1 = s + ' ' + getDocumentPool().getDocumentNumber(nodeinfo.getDocumentRoot()) + nodeinfo.generateId(); /* 886*/ if(obj == null) /* 887*/ userDataTable.remove(s1); /* 889*/ else /* 889*/ userDataTable.put(s1, obj); } public void transform(Source source, Result result) throws TransformerException { /* 908*/ if(preparedStyleSheet == null) /* 909*/ throw new TransformerException("Stylesheet has not been prepared"); /* 912*/ PreviewManager previewmanager = styleSheetElement.getPreviewManager(); /* 913*/ preview = previewmanager != null; /* 915*/ String s = "/"; /* 918*/ try { /* 918*/ if(source instanceof NodeInfo) /* 920*/ if(preview) { /* 921*/ throw new TransformerException("Preview mode requires serial input"); } else { /* 923*/ transformDocument((NodeInfo)source, result); /* 924*/ return; } /* 926*/ if(source instanceof DOMSource) { /* 927*/ DOMSource domsource = (DOMSource)source; /* 929*/ if(preview) /* 930*/ throw new TransformerException("Preview mode requires serial input"); /* 932*/ if((disableStripping || !styleSheetElement.stripsWhitespace()) && (domsource.getNode() instanceof NodeInfo)) { /* 938*/ transformDocument((NodeInfo)domsource.getNode(), result); /* 939*/ return; } /* 942*/ s = getPathToNode(domsource.getNode()); } /* 946*/ SAXSource saxsource = factory.getSAXSource(source, false); /* 950*/ if(preview) { /* 952*/ initializeController(); /* 959*/ if(outputProperties == null) /* 960*/ outputProperties = new Properties(); /* 962*/ changeOutputDestination(outputProperties, result); /* 964*/ Builder builder = makeBuilder(); /* 965*/ builder.setController(this); /* 966*/ builder.setPreviewManager(previewmanager); /* 967*/ builder.setNamePool(namePool); /* 968*/ DocumentInfo documentinfo = builder.build(saxsource); /* 969*/ sourceDocumentPool.add(documentinfo, null); /* 970*/ builder = null; /* 972*/ transformDocument(documentinfo, result); /* 973*/ resetOutputDestination(null); } else { /* 976*/ Builder builder1 = makeBuilder(); /* 977*/ DocumentInfo documentinfo1 = builder1.build(saxsource); /* 979*/ sourceDocumentPool.add(documentinfo1, null); /* 980*/ builder1 = null; /* 982*/ Object obj = documentinfo1; /* 983*/ if(!s.equals("/")) { /* 984*/ Expression expression = Expression.make(s, new StandaloneContext(namePool)); /* 985*/ Context context = makeContext(documentinfo1); /* 986*/ NodeEnumeration nodeenumeration = expression.enumerate(context, false); /* 987*/ if(nodeenumeration.hasMoreElements()) /* 988*/ obj = nodeenumeration.nextElement(); /* 990*/ else /* 990*/ throw new TransformerException("Problem finding the start node after converting DOM to Saxon tree"); } /* 994*/ transformDocument(((NodeInfo) (obj)), result); } } /* 998*/ catch(TerminationException terminationexception) { /* 998*/ throw terminationexception; } /*1000*/ catch(TransformerException transformerexception) { /*1000*/ Throwable throwable = transformerexception.getException(); /*1001*/ if(throwable == null || !(throwable instanceof SAXParseException)) /*1004*/ errorListener.fatalError(transformerexception); /*1006*/ throw transformerexception; } } private String getPathToNode(Node node) throws TransformerException { /*1015*/ short word0 = node.getNodeType(); String s; /*1017*/ if(word0 == 9) /*1018*/ s = "/"; /*1019*/ else /*1019*/ if(word0 == 1) { /*1020*/ s = ""; /*1021*/ Node node1 = node; /*1023*/ while(word0 == 1) { /*1023*/ int i = 1; /*1024*/ for(Node node2 = node1.getPreviousSibling(); node2 != null; node2 = node2.getPreviousSibling()) { /*1026*/ short word1 = node2.getNodeType(); /*1027*/ if(word1 == 1) /*1028*/ i++; /*1029*/ else /*1029*/ if(word1 == 4 || word1 == 5) /*1031*/ throw new TransformerException("Document contains CDATA or Entity nodes: can only transform starting at root"); } /*1036*/ if(!s.equals("")) /*1037*/ s = '/' + s; /*1039*/ s = "*[" + i + ']' + s; /*1041*/ node1 = node1.getParentNode(); /*1042*/ if(node1 == null) /*1043*/ throw new TransformerException("Supplied element is not within a Document"); /*1045*/ word0 = node1.getNodeType(); /*1046*/ if(word0 == 9) /*1047*/ s = '/' + s; /*1048*/ else /*1048*/ if(word0 == 4 || word0 == 5) /*1050*/ throw new TransformerException("Document contains CDATA or Entity nodes: can only transform starting at root"); } } else { /*1055*/ throw new TransformerException("Start node must be either the root or an element"); } /*1057*/ return s; } public void transformDocument(NodeInfo nodeinfo, Result result) throws TransformerException { DocumentInfo documentinfo; /*1073*/ if(nodeinfo instanceof DocumentInfo) /*1074*/ documentinfo = (DocumentInfo)nodeinfo; /*1076*/ else /*1076*/ documentinfo = nodeinfo.getDocumentRoot(); /*1079*/ if(styleSheetElement == null) /*1080*/ throw new TransformerException("Stylesheet has not been prepared"); /*1083*/ if(documentinfo.getNamePool() == null) /*1085*/ documentinfo.setNamePool(preparedStyleSheet.getNamePool()); /*1088*/ if(documentinfo.getNamePool() != preparedStyleSheet.getNamePool()) /*1089*/ throw new TransformerException("Source document and stylesheet must use the same name pool"); /*1092*/ Context context = makeContext(documentinfo); /*1094*/ if(!preview) { /*1095*/ initializeController(); /*1096*/ Properties properties = new Properties(); /*1097*/ styleSheetElement.updateOutputProperties(properties, context); /*1099*/ if(outputProperties != null) { String s1; String s3; /*1100*/ for(Enumeration enumeration = outputProperties.propertyNames(); enumeration.hasMoreElements(); properties.put(s1, s3)) { /*1102*/ s1 = (String)enumeration.nextElement(); /*1103*/ s3 = outputProperties.getProperty(s1); } } /*1109*/ String s = properties.getProperty("{http://icl.com/saxon}next-in-chain"); /*1110*/ if(s != null) { /*1111*/ String s2 = properties.getProperty("{http://icl.com/saxon}next-in-chain-base-uri"); /*1112*/ result = prepareNextStylesheet(s, s2, result); } /*1115*/ changeOutputDestination(properties, result); } /*1121*/ styleSheetElement.process(context); /*1125*/ run(nodeinfo); /*1127*/ if(traceListener != null) /*1128*/ traceListener.close(); /*1131*/ if(!preview) /*1132*/ resetOutputDestination(null); } private Result prepareNextStylesheet(String s, String s1, Result result) throws TransformerException { /*1149*/ Source source = getURIResolver().resolve(s, s1); /*1150*/ SAXSource saxsource = factory.getSAXSource(source, true); /*1152*/ javax.xml.transform.Templates templates = factory.newTemplates(source); /*1153*/ TransformerHandler transformerhandler = factory.newTransformerHandler(templates); /*1155*/ ContentHandlerProxy contenthandlerproxy = new ContentHandlerProxy(); /*1156*/ contenthandlerproxy.setUnderlyingContentHandler(transformerhandler); /*1157*/ contenthandlerproxy.setSystemId(saxsource.getSystemId()); /*1158*/ contenthandlerproxy.setRequireWellFormed(false); /*1159*/ transformerhandler.setResult(result); /*1161*/ return contenthandlerproxy; } public void setParameter(String s, Object obj) { /*1177*/ if(parameters == null) /*1178*/ parameters = new ParameterSet(); Object obj1; /*1183*/ try { /*1183*/ obj1 = FunctionProxy.convertJavaObjectToXPath(obj, this); } /*1185*/ catch(TransformerException transformerexception) { /*1185*/ obj1 = new StringValue(obj.toString()); } /*1187*/ int i = getFingerprintForExpandedName(s); /*1188*/ parameters.put(i, ((com.icl.saxon.expr.Value) (obj1))); } public void setParams(ParameterSet parameterset) { /*1199*/ parameters = parameterset; } private int getFingerprintForExpandedName(String s) { String s1; String s2; /*1210*/ if(s.charAt(0) == '{') { /*1211*/ int i = s.indexOf('}'); /*1212*/ if(i < 0) /*1213*/ throw new IllegalArgumentException("No closing '}' in parameter name"); /*1215*/ s2 = s.substring(1, i); /*1216*/ if(i == s.length()) /*1217*/ throw new IllegalArgumentException("Missing local part in parameter name"); /*1219*/ s1 = s.substring(i + 1); } else { /*1221*/ s2 = ""; /*1222*/ s1 = s; } /*1225*/ return namePool.allocate("", s2, s1); } public void clearParameters() { /*1233*/ parameters = null; } public Object getParameter(String s) { /*1241*/ if(parameters == null) { /*1241*/ return null; } else { /*1242*/ int i = getFingerprintForExpandedName(s); /*1243*/ return parameters.get(i); } } public void setURIResolver(URIResolver uriresolver) { /*1254*/ userURIResolver = uriresolver; } }