<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: SerializerSwitcher.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.io.OutputStream;<a name="line.23"></a>
<FONT color="green">024</FONT>    import java.io.Writer;<a name="line.24"></a>
<FONT color="green">025</FONT>    import java.util.Properties;<a name="line.25"></a>
<FONT color="green">026</FONT>    <a name="line.26"></a>
<FONT color="green">027</FONT>    import javax.xml.transform.OutputKeys;<a name="line.27"></a>
<FONT color="green">028</FONT>    import javax.xml.transform.TransformerException;<a name="line.28"></a>
<FONT color="green">029</FONT>    <a name="line.29"></a>
<FONT color="green">030</FONT>    import org.apache.xml.serializer.Serializer;<a name="line.30"></a>
<FONT color="green">031</FONT>    import org.apache.xml.serializer.SerializerFactory;<a name="line.31"></a>
<FONT color="green">032</FONT>    import org.apache.xml.serializer.Method;<a name="line.32"></a>
<FONT color="green">033</FONT>    import org.apache.xalan.templates.OutputProperties;<a name="line.33"></a>
<FONT color="green">034</FONT>    <a name="line.34"></a>
<FONT color="green">035</FONT>    import org.xml.sax.ContentHandler;<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>     * This is a helper class that decides if Xalan needs to switch<a name="line.38"></a>
<FONT color="green">039</FONT>     * serializers, based on the first output element.<a name="line.39"></a>
<FONT color="green">040</FONT>     */<a name="line.40"></a>
<FONT color="green">041</FONT>    public class SerializerSwitcher<a name="line.41"></a>
<FONT color="green">042</FONT>    {<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>       * Switch to HTML serializer if element is HTML<a name="line.45"></a>
<FONT color="green">046</FONT>       *<a name="line.46"></a>
<FONT color="green">047</FONT>       *<a name="line.47"></a>
<FONT color="green">048</FONT>       * @param transformer Non-null transformer instance<a name="line.48"></a>
<FONT color="green">049</FONT>       * @param ns Namespace URI of the element<a name="line.49"></a>
<FONT color="green">050</FONT>       * @param localName Local part of name of element<a name="line.50"></a>
<FONT color="green">051</FONT>       *<a name="line.51"></a>
<FONT color="green">052</FONT>       * @throws TransformerException<a name="line.52"></a>
<FONT color="green">053</FONT>       */<a name="line.53"></a>
<FONT color="green">054</FONT>      public static void switchSerializerIfHTML(<a name="line.54"></a>
<FONT color="green">055</FONT>              TransformerImpl transformer, String ns, String localName)<a name="line.55"></a>
<FONT color="green">056</FONT>                throws TransformerException<a name="line.56"></a>
<FONT color="green">057</FONT>      {<a name="line.57"></a>
<FONT color="green">058</FONT>    <a name="line.58"></a>
<FONT color="green">059</FONT>        if (null == transformer)<a name="line.59"></a>
<FONT color="green">060</FONT>          return;<a name="line.60"></a>
<FONT color="green">061</FONT>    <a name="line.61"></a>
<FONT color="green">062</FONT>        if (((null == ns) || (ns.length() == 0))<a name="line.62"></a>
<FONT color="green">063</FONT>                &amp;&amp; localName.equalsIgnoreCase("html"))<a name="line.63"></a>
<FONT color="green">064</FONT>        {<a name="line.64"></a>
<FONT color="green">065</FONT>          // System.out.println("transformer.getOutputPropertyNoDefault(OutputKeys.METHOD): "+<a name="line.65"></a>
<FONT color="green">066</FONT>          //              transformer.getOutputPropertyNoDefault(OutputKeys.METHOD));     <a name="line.66"></a>
<FONT color="green">067</FONT>          // Access at level of hashtable to see if the method has been set.<a name="line.67"></a>
<FONT color="green">068</FONT>          if (null != transformer.getOutputPropertyNoDefault(OutputKeys.METHOD))<a name="line.68"></a>
<FONT color="green">069</FONT>            return;<a name="line.69"></a>
<FONT color="green">070</FONT>    <a name="line.70"></a>
<FONT color="green">071</FONT>          // Getting the output properties this way won't cause a clone of <a name="line.71"></a>
<FONT color="green">072</FONT>          // the properties.<a name="line.72"></a>
<FONT color="green">073</FONT>          Properties prevProperties = transformer.getOutputFormat().getProperties();<a name="line.73"></a>
<FONT color="green">074</FONT>          <a name="line.74"></a>
<FONT color="green">075</FONT>          // We have to make sure we get an output properties with the proper <a name="line.75"></a>
<FONT color="green">076</FONT>          // defaults for the HTML method.  The easiest way to do this is to <a name="line.76"></a>
<FONT color="green">077</FONT>          // have the OutputProperties class do it.<a name="line.77"></a>
<FONT color="green">078</FONT>          OutputProperties htmlOutputProperties = new OutputProperties(Method.HTML);<a name="line.78"></a>
<FONT color="green">079</FONT>    <a name="line.79"></a>
<FONT color="green">080</FONT>          htmlOutputProperties.copyFrom(prevProperties, true);<a name="line.80"></a>
<FONT color="green">081</FONT>          Properties htmlProperties = htmlOutputProperties.getProperties();<a name="line.81"></a>
<FONT color="green">082</FONT>    <a name="line.82"></a>
<FONT color="green">083</FONT>          try<a name="line.83"></a>
<FONT color="green">084</FONT>          {<a name="line.84"></a>
<FONT color="green">085</FONT>    //        Serializer oldSerializer = transformer.getSerializer();<a name="line.85"></a>
<FONT color="green">086</FONT>            Serializer oldSerializer = null;<a name="line.86"></a>
<FONT color="green">087</FONT>    <a name="line.87"></a>
<FONT color="green">088</FONT>            if (null != oldSerializer)<a name="line.88"></a>
<FONT color="green">089</FONT>            {<a name="line.89"></a>
<FONT color="green">090</FONT>              Serializer serializer =<a name="line.90"></a>
<FONT color="green">091</FONT>                SerializerFactory.getSerializer(htmlProperties);<a name="line.91"></a>
<FONT color="green">092</FONT>    <a name="line.92"></a>
<FONT color="green">093</FONT>              Writer writer = oldSerializer.getWriter();<a name="line.93"></a>
<FONT color="green">094</FONT>    <a name="line.94"></a>
<FONT color="green">095</FONT>              if (null != writer)<a name="line.95"></a>
<FONT color="green">096</FONT>                serializer.setWriter(writer);<a name="line.96"></a>
<FONT color="green">097</FONT>              else<a name="line.97"></a>
<FONT color="green">098</FONT>              {<a name="line.98"></a>
<FONT color="green">099</FONT>                OutputStream os = oldSerializer.getOutputStream();<a name="line.99"></a>
<FONT color="green">100</FONT>    <a name="line.100"></a>
<FONT color="green">101</FONT>                if (null != os)<a name="line.101"></a>
<FONT color="green">102</FONT>                  serializer.setOutputStream(os);<a name="line.102"></a>
<FONT color="green">103</FONT>              }<a name="line.103"></a>
<FONT color="green">104</FONT>    <a name="line.104"></a>
<FONT color="green">105</FONT>    //          transformer.setSerializer(serializer);<a name="line.105"></a>
<FONT color="green">106</FONT>    <a name="line.106"></a>
<FONT color="green">107</FONT>              ContentHandler ch = serializer.asContentHandler();<a name="line.107"></a>
<FONT color="green">108</FONT>    <a name="line.108"></a>
<FONT color="green">109</FONT>              transformer.setContentHandler(ch);<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>          catch (java.io.IOException e)<a name="line.112"></a>
<FONT color="green">113</FONT>          {<a name="line.113"></a>
<FONT color="green">114</FONT>            throw new TransformerException(e);<a name="line.114"></a>
<FONT color="green">115</FONT>          }<a name="line.115"></a>
<FONT color="green">116</FONT>        }<a name="line.116"></a>
<FONT color="green">117</FONT>      }<a name="line.117"></a>
<FONT color="green">118</FONT>      <a name="line.118"></a>
<FONT color="green">119</FONT>      /**<a name="line.119"></a>
<FONT color="green">120</FONT>       * Get the value of a property, without using the default properties.  This <a name="line.120"></a>
<FONT color="green">121</FONT>       * can be used to test if a property has been explicitly set by the stylesheet <a name="line.121"></a>
<FONT color="green">122</FONT>       * or user.<a name="line.122"></a>
<FONT color="green">123</FONT>       *<a name="line.123"></a>
<FONT color="green">124</FONT>       * @param name The property name, which is a fully-qualified URI.<a name="line.124"></a>
<FONT color="green">125</FONT>       *<a name="line.125"></a>
<FONT color="green">126</FONT>       * @return The value of the property, or null if not found.<a name="line.126"></a>
<FONT color="green">127</FONT>       *<a name="line.127"></a>
<FONT color="green">128</FONT>       * @throws IllegalArgumentException If the property is not supported, <a name="line.128"></a>
<FONT color="green">129</FONT>       * and is not namespaced.<a name="line.129"></a>
<FONT color="green">130</FONT>       */<a name="line.130"></a>
<FONT color="green">131</FONT>      private static String getOutputPropertyNoDefault(String qnameString, Properties props)<a name="line.131"></a>
<FONT color="green">132</FONT>        throws IllegalArgumentException<a name="line.132"></a>
<FONT color="green">133</FONT>      {    <a name="line.133"></a>
<FONT color="green">134</FONT>        String value = (String)props.get(qnameString);<a name="line.134"></a>
<FONT color="green">135</FONT>        <a name="line.135"></a>
<FONT color="green">136</FONT>        return value;<a name="line.136"></a>
<FONT color="green">137</FONT>      }<a name="line.137"></a>
<FONT color="green">138</FONT>      <a name="line.138"></a>
<FONT color="green">139</FONT>      /**<a name="line.139"></a>
<FONT color="green">140</FONT>       * Switch to HTML serializer if element is HTML<a name="line.140"></a>
<FONT color="green">141</FONT>       *<a name="line.141"></a>
<FONT color="green">142</FONT>       *<a name="line.142"></a>
<FONT color="green">143</FONT>       * @param ns Namespace URI of the element<a name="line.143"></a>
<FONT color="green">144</FONT>       * @param localName Local part of name of element<a name="line.144"></a>
<FONT color="green">145</FONT>       *<a name="line.145"></a>
<FONT color="green">146</FONT>       * @throws TransformerException<a name="line.146"></a>
<FONT color="green">147</FONT>       * @return new contentHandler.<a name="line.147"></a>
<FONT color="green">148</FONT>       */<a name="line.148"></a>
<FONT color="green">149</FONT>      public static Serializer switchSerializerIfHTML(<a name="line.149"></a>
<FONT color="green">150</FONT>              String ns, String localName, Properties props, Serializer oldSerializer)<a name="line.150"></a>
<FONT color="green">151</FONT>                throws TransformerException<a name="line.151"></a>
<FONT color="green">152</FONT>      {<a name="line.152"></a>
<FONT color="green">153</FONT>        Serializer newSerializer = oldSerializer;<a name="line.153"></a>
<FONT color="green">154</FONT>    <a name="line.154"></a>
<FONT color="green">155</FONT>        if (((null == ns) || (ns.length() == 0))<a name="line.155"></a>
<FONT color="green">156</FONT>                &amp;&amp; localName.equalsIgnoreCase("html"))<a name="line.156"></a>
<FONT color="green">157</FONT>        {<a name="line.157"></a>
<FONT color="green">158</FONT>          // System.out.println("transformer.getOutputPropertyNoDefault(OutputKeys.METHOD): "+<a name="line.158"></a>
<FONT color="green">159</FONT>          //              transformer.getOutputPropertyNoDefault(OutputKeys.METHOD));     <a name="line.159"></a>
<FONT color="green">160</FONT>          // Access at level of hashtable to see if the method has been set.<a name="line.160"></a>
<FONT color="green">161</FONT>          if (null != getOutputPropertyNoDefault(OutputKeys.METHOD, props))<a name="line.161"></a>
<FONT color="green">162</FONT>            return newSerializer;<a name="line.162"></a>
<FONT color="green">163</FONT>    <a name="line.163"></a>
<FONT color="green">164</FONT>          // Getting the output properties this way won't cause a clone of <a name="line.164"></a>
<FONT color="green">165</FONT>          // the properties.<a name="line.165"></a>
<FONT color="green">166</FONT>          Properties prevProperties = props;<a name="line.166"></a>
<FONT color="green">167</FONT>          <a name="line.167"></a>
<FONT color="green">168</FONT>          // We have to make sure we get an output properties with the proper <a name="line.168"></a>
<FONT color="green">169</FONT>          // defaults for the HTML method.  The easiest way to do this is to <a name="line.169"></a>
<FONT color="green">170</FONT>          // have the OutputProperties class do it.<a name="line.170"></a>
<FONT color="green">171</FONT>          OutputProperties htmlOutputProperties = new OutputProperties(Method.HTML);<a name="line.171"></a>
<FONT color="green">172</FONT>    <a name="line.172"></a>
<FONT color="green">173</FONT>          htmlOutputProperties.copyFrom(prevProperties, true);<a name="line.173"></a>
<FONT color="green">174</FONT>          Properties htmlProperties = htmlOutputProperties.getProperties();<a name="line.174"></a>
<FONT color="green">175</FONT>    <a name="line.175"></a>
<FONT color="green">176</FONT>    //      try<a name="line.176"></a>
<FONT color="green">177</FONT>          {<a name="line.177"></a>
<FONT color="green">178</FONT>            if (null != oldSerializer)<a name="line.178"></a>
<FONT color="green">179</FONT>            {<a name="line.179"></a>
<FONT color="green">180</FONT>              Serializer serializer =<a name="line.180"></a>
<FONT color="green">181</FONT>                SerializerFactory.getSerializer(htmlProperties);<a name="line.181"></a>
<FONT color="green">182</FONT>    <a name="line.182"></a>
<FONT color="green">183</FONT>              Writer writer = oldSerializer.getWriter();<a name="line.183"></a>
<FONT color="green">184</FONT>    <a name="line.184"></a>
<FONT color="green">185</FONT>              if (null != writer)<a name="line.185"></a>
<FONT color="green">186</FONT>                serializer.setWriter(writer);<a name="line.186"></a>
<FONT color="green">187</FONT>              else<a name="line.187"></a>
<FONT color="green">188</FONT>              {<a name="line.188"></a>
<FONT color="green">189</FONT>                OutputStream os = serializer.getOutputStream();<a name="line.189"></a>
<FONT color="green">190</FONT>    <a name="line.190"></a>
<FONT color="green">191</FONT>                if (null != os)<a name="line.191"></a>
<FONT color="green">192</FONT>                  serializer.setOutputStream(os);<a name="line.192"></a>
<FONT color="green">193</FONT>              }<a name="line.193"></a>
<FONT color="green">194</FONT>              newSerializer = serializer;<a name="line.194"></a>
<FONT color="green">195</FONT>            }<a name="line.195"></a>
<FONT color="green">196</FONT>          }<a name="line.196"></a>
<FONT color="green">197</FONT>    //      catch (java.io.IOException e)<a name="line.197"></a>
<FONT color="green">198</FONT>    //      {<a name="line.198"></a>
<FONT color="green">199</FONT>    //        throw new TransformerException(e);<a name="line.199"></a>
<FONT color="green">200</FONT>    //      }<a name="line.200"></a>
<FONT color="green">201</FONT>        }<a name="line.201"></a>
<FONT color="green">202</FONT>        return newSerializer;<a name="line.202"></a>
<FONT color="green">203</FONT>      }<a name="line.203"></a>
<FONT color="green">204</FONT>      <a name="line.204"></a>
<FONT color="green">205</FONT>    }<a name="line.205"></a>




























































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