<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    /*<a name="line.1"></a>
<FONT color="green">002</FONT>     * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<FONT color="green">003</FONT>     * or more contributor license agreements. See the NOTICE file<a name="line.3"></a>
<FONT color="green">004</FONT>     * distributed with this work for additional information<a name="line.4"></a>
<FONT color="green">005</FONT>     * regarding copyright ownership. The ASF licenses this file<a name="line.5"></a>
<FONT color="green">006</FONT>     * to you under the Apache License, Version 2.0 (the  "License");<a name="line.6"></a>
<FONT color="green">007</FONT>     * you may not use this file except in compliance with the License.<a name="line.7"></a>
<FONT color="green">008</FONT>     * You may obtain a copy of the License at<a name="line.8"></a>
<FONT color="green">009</FONT>     *<a name="line.9"></a>
<FONT color="green">010</FONT>     *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<FONT color="green">011</FONT>     *<a name="line.11"></a>
<FONT color="green">012</FONT>     * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
<FONT color="green">013</FONT>     * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
<FONT color="green">014</FONT>     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
<FONT color="green">015</FONT>     * See the License for the specific language governing permissions and<a name="line.15"></a>
<FONT color="green">016</FONT>     * limitations under the License.<a name="line.16"></a>
<FONT color="green">017</FONT>     */<a name="line.17"></a>
<FONT color="green">018</FONT>    /*<a name="line.18"></a>
<FONT color="green">019</FONT>     * $Id: TransformStateSetter.java 468654 2006-10-28 07:09:23Z minchau $<a name="line.19"></a>
<FONT color="green">020</FONT>     */<a name="line.20"></a>
<FONT color="green">021</FONT>    package org.apache.xml.serializer;<a name="line.21"></a>
<FONT color="green">022</FONT>    <a name="line.22"></a>
<FONT color="green">023</FONT>    import javax.xml.transform.Transformer;<a name="line.23"></a>
<FONT color="green">024</FONT>    <a name="line.24"></a>
<FONT color="green">025</FONT>    import org.w3c.dom.Node;<a name="line.25"></a>
<FONT color="green">026</FONT>    /**<a name="line.26"></a>
<FONT color="green">027</FONT>     * This interface is meant to be used by a base interface to<a name="line.27"></a>
<FONT color="green">028</FONT>     * TransformState, but which as only the setters which have non Xalan<a name="line.28"></a>
<FONT color="green">029</FONT>     * specific types in their signature, so that there are no dependancies<a name="line.29"></a>
<FONT color="green">030</FONT>     * of the serializer on Xalan.<a name="line.30"></a>
<FONT color="green">031</FONT>     * <a name="line.31"></a>
<FONT color="green">032</FONT>     * This interface is not a public API, it is only public because it is<a name="line.32"></a>
<FONT color="green">033</FONT>     * used by Xalan.<a name="line.33"></a>
<FONT color="green">034</FONT>     * <a name="line.34"></a>
<FONT color="green">035</FONT>     * @see org.apache.xalan.transformer.TransformState<a name="line.35"></a>
<FONT color="green">036</FONT>     * @xsl.usage internal<a name="line.36"></a>
<FONT color="green">037</FONT>     */<a name="line.37"></a>
<FONT color="green">038</FONT>    public interface TransformStateSetter<a name="line.38"></a>
<FONT color="green">039</FONT>    {<a name="line.39"></a>
<FONT color="green">040</FONT>    <a name="line.40"></a>
<FONT color="green">041</FONT>    <a name="line.41"></a>
<FONT color="green">042</FONT>      /**<a name="line.42"></a>
<FONT color="green">043</FONT>       * Set the current node.<a name="line.43"></a>
<FONT color="green">044</FONT>       *<a name="line.44"></a>
<FONT color="green">045</FONT>       * @param n The current node.<a name="line.45"></a>
<FONT color="green">046</FONT>       */<a name="line.46"></a>
<FONT color="green">047</FONT>      void setCurrentNode(Node n);<a name="line.47"></a>
<FONT color="green">048</FONT>    <a name="line.48"></a>
<FONT color="green">049</FONT>      /**<a name="line.49"></a>
<FONT color="green">050</FONT>       * Reset the state on the given transformer object.<a name="line.50"></a>
<FONT color="green">051</FONT>       *<a name="line.51"></a>
<FONT color="green">052</FONT>       * @param transformer<a name="line.52"></a>
<FONT color="green">053</FONT>       */<a name="line.53"></a>
<FONT color="green">054</FONT>      void resetState(Transformer transformer);<a name="line.54"></a>
<FONT color="green">055</FONT>    <a name="line.55"></a>
<FONT color="green">056</FONT>    }<a name="line.56"></a>




























































</PRE>
</BODY>
</HTML>
