<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: KeyManager.java 468645 2006-10-28 06:57:24Z minchau $<a name="line.19"></a>
<FONT color="green">020</FONT>     */<a name="line.20"></a>
<FONT color="green">021</FONT>    package org.apache.xalan.transformer;<a name="line.21"></a>
<FONT color="green">022</FONT>    <a name="line.22"></a>
<FONT color="green">023</FONT>    import java.util.Vector;<a name="line.23"></a>
<FONT color="green">024</FONT>    <a name="line.24"></a>
<FONT color="green">025</FONT>    import org.apache.xalan.templates.ElemTemplateElement;<a name="line.25"></a>
<FONT color="green">026</FONT>    import org.apache.xml.utils.PrefixResolver;<a name="line.26"></a>
<FONT color="green">027</FONT>    import org.apache.xml.utils.QName;<a name="line.27"></a>
<FONT color="green">028</FONT>    import org.apache.xml.utils.XMLString;<a name="line.28"></a>
<FONT color="green">029</FONT>    import org.apache.xpath.XPathContext;<a name="line.29"></a>
<FONT color="green">030</FONT>    import org.apache.xpath.objects.XNodeSet;<a name="line.30"></a>
<FONT color="green">031</FONT>    <a name="line.31"></a>
<FONT color="green">032</FONT>    /**<a name="line.32"></a>
<FONT color="green">033</FONT>     * This class manages the key tables.<a name="line.33"></a>
<FONT color="green">034</FONT>     */<a name="line.34"></a>
<FONT color="green">035</FONT>    public class KeyManager<a name="line.35"></a>
<FONT color="green">036</FONT>    {<a name="line.36"></a>
<FONT color="green">037</FONT>    <a name="line.37"></a>
<FONT color="green">038</FONT>      /**<a name="line.38"></a>
<FONT color="green">039</FONT>       * Table of tables of element keys.<a name="line.39"></a>
<FONT color="green">040</FONT>       * @see org.apache.xalan.transformer.KeyTable<a name="line.40"></a>
<FONT color="green">041</FONT>       */<a name="line.41"></a>
<FONT color="green">042</FONT>      private transient Vector m_key_tables = null;<a name="line.42"></a>
<FONT color="green">043</FONT>    <a name="line.43"></a>
<FONT color="green">044</FONT>      /**<a name="line.44"></a>
<FONT color="green">045</FONT>       * Given a valid element key, return the corresponding node list.<a name="line.45"></a>
<FONT color="green">046</FONT>       *<a name="line.46"></a>
<FONT color="green">047</FONT>       * @param xctxt The XPath runtime state<a name="line.47"></a>
<FONT color="green">048</FONT>       * @param doc The document node<a name="line.48"></a>
<FONT color="green">049</FONT>       * @param name The key element name<a name="line.49"></a>
<FONT color="green">050</FONT>       * @param ref The key value we're looking for <a name="line.50"></a>
<FONT color="green">051</FONT>       * @param nscontext The prefix resolver for the execution context<a name="line.51"></a>
<FONT color="green">052</FONT>       *<a name="line.52"></a>
<FONT color="green">053</FONT>       * @return A nodelist of nodes mathing the given key<a name="line.53"></a>
<FONT color="green">054</FONT>       *<a name="line.54"></a>
<FONT color="green">055</FONT>       * @throws javax.xml.transform.TransformerException<a name="line.55"></a>
<FONT color="green">056</FONT>       */<a name="line.56"></a>
<FONT color="green">057</FONT>      public XNodeSet getNodeSetDTMByKey(<a name="line.57"></a>
<FONT color="green">058</FONT>              XPathContext xctxt, int doc, QName name, XMLString ref, PrefixResolver nscontext)<a name="line.58"></a>
<FONT color="green">059</FONT>                throws javax.xml.transform.TransformerException<a name="line.59"></a>
<FONT color="green">060</FONT>      {<a name="line.60"></a>
<FONT color="green">061</FONT>    <a name="line.61"></a>
<FONT color="green">062</FONT>        XNodeSet nl = null;<a name="line.62"></a>
<FONT color="green">063</FONT>        ElemTemplateElement template = (ElemTemplateElement) nscontext;  // yuck -sb<a name="line.63"></a>
<FONT color="green">064</FONT>    <a name="line.64"></a>
<FONT color="green">065</FONT>        if ((null != template)<a name="line.65"></a>
<FONT color="green">066</FONT>                &amp;&amp; null != template.getStylesheetRoot().getKeysComposed())<a name="line.66"></a>
<FONT color="green">067</FONT>        {<a name="line.67"></a>
<FONT color="green">068</FONT>          boolean foundDoc = false;<a name="line.68"></a>
<FONT color="green">069</FONT>    <a name="line.69"></a>
<FONT color="green">070</FONT>          if (null == m_key_tables)<a name="line.70"></a>
<FONT color="green">071</FONT>          {<a name="line.71"></a>
<FONT color="green">072</FONT>            m_key_tables = new Vector(4);<a name="line.72"></a>
<FONT color="green">073</FONT>          }<a name="line.73"></a>
<FONT color="green">074</FONT>          else<a name="line.74"></a>
<FONT color="green">075</FONT>          {<a name="line.75"></a>
<FONT color="green">076</FONT>            int nKeyTables = m_key_tables.size();<a name="line.76"></a>
<FONT color="green">077</FONT>    <a name="line.77"></a>
<FONT color="green">078</FONT>            for (int i = 0; i &lt; nKeyTables; i++)<a name="line.78"></a>
<FONT color="green">079</FONT>            {<a name="line.79"></a>
<FONT color="green">080</FONT>              KeyTable kt = (KeyTable) m_key_tables.elementAt(i);<a name="line.80"></a>
<FONT color="green">081</FONT>    <a name="line.81"></a>
<FONT color="green">082</FONT>              if (kt.getKeyTableName().equals(name) &amp;&amp; doc == kt.getDocKey())<a name="line.82"></a>
<FONT color="green">083</FONT>              {<a name="line.83"></a>
<FONT color="green">084</FONT>                nl = kt.getNodeSetDTMByKey(name, ref);<a name="line.84"></a>
<FONT color="green">085</FONT>    <a name="line.85"></a>
<FONT color="green">086</FONT>                if (nl != null)<a name="line.86"></a>
<FONT color="green">087</FONT>                {<a name="line.87"></a>
<FONT color="green">088</FONT>                  foundDoc = true;<a name="line.88"></a>
<FONT color="green">089</FONT>    <a name="line.89"></a>
<FONT color="green">090</FONT>                  break;<a name="line.90"></a>
<FONT color="green">091</FONT>                }<a name="line.91"></a>
<FONT color="green">092</FONT>              }<a name="line.92"></a>
<FONT color="green">093</FONT>            }<a name="line.93"></a>
<FONT color="green">094</FONT>          }<a name="line.94"></a>
<FONT color="green">095</FONT>    <a name="line.95"></a>
<FONT color="green">096</FONT>          if ((null == nl) &amp;&amp;!foundDoc /* &amp;&amp; m_needToBuildKeysTable */)<a name="line.96"></a>
<FONT color="green">097</FONT>          {<a name="line.97"></a>
<FONT color="green">098</FONT>            KeyTable kt =<a name="line.98"></a>
<FONT color="green">099</FONT>              new KeyTable(doc, nscontext, name,<a name="line.99"></a>
<FONT color="green">100</FONT>                           template.getStylesheetRoot().getKeysComposed(),<a name="line.100"></a>
<FONT color="green">101</FONT>                           xctxt);<a name="line.101"></a>
<FONT color="green">102</FONT>    <a name="line.102"></a>
<FONT color="green">103</FONT>            m_key_tables.addElement(kt);<a name="line.103"></a>
<FONT color="green">104</FONT>    <a name="line.104"></a>
<FONT color="green">105</FONT>            if (doc == kt.getDocKey())<a name="line.105"></a>
<FONT color="green">106</FONT>            {<a name="line.106"></a>
<FONT color="green">107</FONT>              foundDoc = true;<a name="line.107"></a>
<FONT color="green">108</FONT>              nl = kt.getNodeSetDTMByKey(name, ref);<a name="line.108"></a>
<FONT color="green">109</FONT>            }<a name="line.109"></a>
<FONT color="green">110</FONT>          }<a name="line.110"></a>
<FONT color="green">111</FONT>        }<a name="line.111"></a>
<FONT color="green">112</FONT>    <a name="line.112"></a>
<FONT color="green">113</FONT>        return nl;<a name="line.113"></a>
<FONT color="green">114</FONT>      }<a name="line.114"></a>
<FONT color="green">115</FONT>    }<a name="line.115"></a>




























































</PRE>
</BODY>
</HTML>
