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