19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/* 29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one 39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or more contributor license agreements. See the NOTICE file 49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed with this work for additional information 59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * regarding copyright ownership. The ASF licenses this file 69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to you under the Apache License, Version 2.0 (the "License"); 79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * you may not use this file except in compliance with the License. 89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * You may obtain a copy of the License at 99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Unless required by applicable law or agreed to in writing, software 139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * See the License for the specific language governing permissions and 169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * limitations under the License. 179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/* 199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * $Id: XalanTransformState.java 468645 2006-10-28 06:57:24Z minchau $ 209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xalan.transformer; 239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.Transformer; 259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.templates.ElemTemplate; 279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.templates.ElemTemplateElement; 289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.dtm.DTM; 299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.dtm.DTMIterator; 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.Node; 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.traversal.NodeIterator; 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Before the serializer merge, the TransformState interface was 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * implemented by ResultTreeHandler. 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic class XalanTransformState 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson implements TransformState { 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Node m_node = null; 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ElemTemplateElement m_currentElement = null; 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ElemTemplate m_currentTemplate = null; 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ElemTemplate m_matchedTemplate = null; 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int m_currentNodeHandle = DTM.NULL; 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Node m_currentNode = null; 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int m_matchedNode = DTM.NULL; 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DTMIterator m_contextNodeList = null; 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean m_elemPending = false; 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson TransformerImpl m_transformer = null; 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.apache.xml.serializer.TransformStateSetter#setCurrentNode(Node) 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setCurrentNode(Node n) { 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_node = n; 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.apache.xml.serializer.TransformStateSetter#resetState(Transformer) 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void resetState(Transformer transformer) { 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ((transformer != null) && (transformer instanceof TransformerImpl)) { 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_transformer = (TransformerImpl)transformer; 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_currentElement = m_transformer.getCurrentElement(); 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_currentTemplate = m_transformer.getCurrentTemplate(); 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_matchedTemplate = m_transformer.getMatchedTemplate(); 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int currentNodeHandle = m_transformer.getCurrentNode(); 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DTM dtm = m_transformer.getXPathContext().getDTM(currentNodeHandle); 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_currentNode = dtm.getNode(currentNodeHandle); 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_matchedNode = m_transformer.getMatchedNode(); 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_contextNodeList = m_transformer.getContextNodeList(); 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.apache.xalan.transformer.TransformState#getCurrentElement() 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public ElemTemplateElement getCurrentElement() { 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_elemPending) 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_currentElement; 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_transformer.getCurrentElement(); 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.apache.xalan.transformer.TransformState#getCurrentNode() 879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Node getCurrentNode() { 899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_currentNode != null) { 909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_currentNode; 919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } else { 929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DTM dtm = m_transformer.getXPathContext().getDTM(m_transformer.getCurrentNode()); 939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return dtm.getNode(m_transformer.getCurrentNode()); 949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.apache.xalan.transformer.TransformState#getCurrentTemplate() 999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public ElemTemplate getCurrentTemplate() { 1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_elemPending) 1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_currentTemplate; 1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_transformer.getCurrentTemplate(); 1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.apache.xalan.transformer.TransformState#getMatchedTemplate() 1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public ElemTemplate getMatchedTemplate() { 1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_elemPending) 1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_matchedTemplate; 1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_transformer.getMatchedTemplate(); 1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.apache.xalan.transformer.TransformState#getMatchedNode() 1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Node getMatchedNode() { 1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_elemPending) { 1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DTM dtm = m_transformer.getXPathContext().getDTM(m_matchedNode); 1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return dtm.getNode(m_matchedNode); 1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } else { 1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DTM dtm = m_transformer.getXPathContext().getDTM(m_transformer.getMatchedNode()); 1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return dtm.getNode(m_transformer.getMatchedNode()); 1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.apache.xalan.transformer.TransformState#getContextNodeList() 1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NodeIterator getContextNodeList() { 1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_elemPending) { 1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new org.apache.xml.dtm.ref.DTMNodeIterator(m_contextNodeList); 1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } else { 1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new org.apache.xml.dtm.ref.DTMNodeIterator(m_transformer.getContextNodeList()); 1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see org.apache.xalan.transformer.TransformState#getTransformer() 1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Transformer getTransformer() { 1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_transformer; 1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 149