<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    package org.apache.archiva.xml;<a name="line.1"></a>
<FONT color="green">002</FONT>    <a name="line.2"></a>
<FONT color="green">003</FONT>    /*<a name="line.3"></a>
<FONT color="green">004</FONT>     * Licensed to the Apache Software Foundation (ASF) under one<a name="line.4"></a>
<FONT color="green">005</FONT>     * or more contributor license agreements.  See the NOTICE file<a name="line.5"></a>
<FONT color="green">006</FONT>     * distributed with this work for additional information<a name="line.6"></a>
<FONT color="green">007</FONT>     * regarding copyright ownership.  The ASF licenses this file<a name="line.7"></a>
<FONT color="green">008</FONT>     * to you under the Apache License, Version 2.0 (the<a name="line.8"></a>
<FONT color="green">009</FONT>     * "License"); you may not use this file except in compliance<a name="line.9"></a>
<FONT color="green">010</FONT>     * with the License.  You may obtain a copy of the License at<a name="line.10"></a>
<FONT color="green">011</FONT>     *<a name="line.11"></a>
<FONT color="green">012</FONT>     *  http://www.apache.org/licenses/LICENSE-2.0<a name="line.12"></a>
<FONT color="green">013</FONT>     *<a name="line.13"></a>
<FONT color="green">014</FONT>     * Unless required by applicable law or agreed to in writing,<a name="line.14"></a>
<FONT color="green">015</FONT>     * software distributed under the License is distributed on an<a name="line.15"></a>
<FONT color="green">016</FONT>     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.16"></a>
<FONT color="green">017</FONT>     * KIND, either express or implied.  See the License for the<a name="line.17"></a>
<FONT color="green">018</FONT>     * specific language governing permissions and limitations<a name="line.18"></a>
<FONT color="green">019</FONT>     * under the License.<a name="line.19"></a>
<FONT color="green">020</FONT>     */<a name="line.20"></a>
<FONT color="green">021</FONT>    <a name="line.21"></a>
<FONT color="green">022</FONT>    import java.io.BufferedReader;<a name="line.22"></a>
<FONT color="green">023</FONT>    import java.io.IOException;<a name="line.23"></a>
<FONT color="green">024</FONT>    import java.io.Reader;<a name="line.24"></a>
<FONT color="green">025</FONT>    import java.util.regex.Matcher;<a name="line.25"></a>
<FONT color="green">026</FONT>    import java.util.regex.Pattern;<a name="line.26"></a>
<FONT color="green">027</FONT>    <a name="line.27"></a>
<FONT color="green">028</FONT>    /**<a name="line.28"></a>
<FONT color="green">029</FONT>     * LatinEntityResolutionReader - Read a Character Stream.<a name="line.29"></a>
<FONT color="green">030</FONT>     *<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>    public class LatinEntityResolutionReader<a name="line.33"></a>
<FONT color="green">034</FONT>        extends Reader<a name="line.34"></a>
<FONT color="green">035</FONT>    {<a name="line.35"></a>
<FONT color="green">036</FONT>        private BufferedReader originalReader;<a name="line.36"></a>
<FONT color="green">037</FONT>    <a name="line.37"></a>
<FONT color="green">038</FONT>        private char leftover[];<a name="line.38"></a>
<FONT color="green">039</FONT>    <a name="line.39"></a>
<FONT color="green">040</FONT>        private Pattern entityPattern;<a name="line.40"></a>
<FONT color="green">041</FONT>    <a name="line.41"></a>
<FONT color="green">042</FONT>        public LatinEntityResolutionReader( Reader reader )<a name="line.42"></a>
<FONT color="green">043</FONT>        {<a name="line.43"></a>
<FONT color="green">044</FONT>            this.originalReader = new BufferedReader( reader );<a name="line.44"></a>
<FONT color="green">045</FONT>            this.entityPattern = Pattern.compile( "\\&amp;[a-zA-Z]+\\;" );<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>        /**<a name="line.48"></a>
<FONT color="green">049</FONT>         * Read characters into a portion of an array. This method will block until some input is available, <a name="line.49"></a>
<FONT color="green">050</FONT>         * an I/O error occurs, or the end of the stream is reached.<a name="line.50"></a>
<FONT color="green">051</FONT>         * <a name="line.51"></a>
<FONT color="green">052</FONT>         * @param destbuf Destination buffer<a name="line.52"></a>
<FONT color="green">053</FONT>         * @param offset Offset (in destination buffer) at which to start storing characters<a name="line.53"></a>
<FONT color="green">054</FONT>         * @param length Maximum number of characters to read<a name="line.54"></a>
<FONT color="green">055</FONT>         * @return The number of characters read, or -1 if the end of the stream has been reached<a name="line.55"></a>
<FONT color="green">056</FONT>         * @throws IOException if an I/O error occurs.<a name="line.56"></a>
<FONT color="green">057</FONT>         */<a name="line.57"></a>
<FONT color="green">058</FONT>        public int read( char[] destbuf, int offset, int length )<a name="line.58"></a>
<FONT color="green">059</FONT>            throws IOException<a name="line.59"></a>
<FONT color="green">060</FONT>        {<a name="line.60"></a>
<FONT color="green">061</FONT>            int tmpLength;<a name="line.61"></a>
<FONT color="green">062</FONT>            int currentRequestedOffset = offset;<a name="line.62"></a>
<FONT color="green">063</FONT>            int currentRequestedLength = length;<a name="line.63"></a>
<FONT color="green">064</FONT>    <a name="line.64"></a>
<FONT color="green">065</FONT>            // Drain leftover from last read request.<a name="line.65"></a>
<FONT color="green">066</FONT>            if ( leftover != null )<a name="line.66"></a>
<FONT color="green">067</FONT>            {<a name="line.67"></a>
<FONT color="green">068</FONT>                if ( leftover.length &gt; length )<a name="line.68"></a>
<FONT color="green">069</FONT>                {<a name="line.69"></a>
<FONT color="green">070</FONT>                    // Copy partial leftover.<a name="line.70"></a>
<FONT color="green">071</FONT>                    System.arraycopy( leftover, 0, destbuf, currentRequestedOffset, length );<a name="line.71"></a>
<FONT color="green">072</FONT>                    int copyLeftOverLength = leftover.length - length;<a name="line.72"></a>
<FONT color="green">073</FONT>    <a name="line.73"></a>
<FONT color="green">074</FONT>                    // Create new leftover of remaining.<a name="line.74"></a>
<FONT color="green">075</FONT>                    char tmp[] = new char[copyLeftOverLength];<a name="line.75"></a>
<FONT color="green">076</FONT>                    System.arraycopy( leftover, length, tmp, 0, copyLeftOverLength );<a name="line.76"></a>
<FONT color="green">077</FONT>                    leftover = new char[tmp.length];<a name="line.77"></a>
<FONT color="green">078</FONT>                    System.arraycopy( tmp, 0, leftover, 0, copyLeftOverLength );<a name="line.78"></a>
<FONT color="green">079</FONT>    <a name="line.79"></a>
<FONT color="green">080</FONT>                    // Return len<a name="line.80"></a>
<FONT color="green">081</FONT>                    return length;<a name="line.81"></a>
<FONT color="green">082</FONT>                }<a name="line.82"></a>
<FONT color="green">083</FONT>                else<a name="line.83"></a>
<FONT color="green">084</FONT>                {<a name="line.84"></a>
<FONT color="green">085</FONT>                    tmpLength = leftover.length;<a name="line.85"></a>
<FONT color="green">086</FONT>    <a name="line.86"></a>
<FONT color="green">087</FONT>                    // Copy full leftover<a name="line.87"></a>
<FONT color="green">088</FONT>                    System.arraycopy( leftover, 0, destbuf, currentRequestedOffset, tmpLength );<a name="line.88"></a>
<FONT color="green">089</FONT>    <a name="line.89"></a>
<FONT color="green">090</FONT>                    // Empty out leftover (as there is now none left)<a name="line.90"></a>
<FONT color="green">091</FONT>                    leftover = null;<a name="line.91"></a>
<FONT color="green">092</FONT>    <a name="line.92"></a>
<FONT color="green">093</FONT>                    // Adjust offset and lengths.<a name="line.93"></a>
<FONT color="green">094</FONT>                    currentRequestedOffset += tmpLength;<a name="line.94"></a>
<FONT color="green">095</FONT>                    currentRequestedLength -= tmpLength;<a name="line.95"></a>
<FONT color="green">096</FONT>                }<a name="line.96"></a>
<FONT color="green">097</FONT>            }<a name="line.97"></a>
<FONT color="green">098</FONT>    <a name="line.98"></a>
<FONT color="green">099</FONT>            StringBuilder sbuf = getExpandedBuffer( currentRequestedLength );<a name="line.99"></a>
<FONT color="green">100</FONT>    <a name="line.100"></a>
<FONT color="green">101</FONT>            // Have we reached the end of the buffer?<a name="line.101"></a>
<FONT color="green">102</FONT>            if ( sbuf == null )<a name="line.102"></a>
<FONT color="green">103</FONT>            {<a name="line.103"></a>
<FONT color="green">104</FONT>                // Do we have content?<a name="line.104"></a>
<FONT color="green">105</FONT>                if ( currentRequestedOffset &gt; offset )<a name="line.105"></a>
<FONT color="green">106</FONT>                {<a name="line.106"></a>
<FONT color="green">107</FONT>                    // Signal that we do, by calculating length.<a name="line.107"></a>
<FONT color="green">108</FONT>                    return ( currentRequestedOffset - offset );<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>                // No content. signal end of buffer.<a name="line.111"></a>
<FONT color="green">112</FONT>                return -1;<a name="line.112"></a>
<FONT color="green">113</FONT>            }<a name="line.113"></a>
<FONT color="green">114</FONT>    <a name="line.114"></a>
<FONT color="green">115</FONT>            // Copy from expanded buf whatever length we can accomodate.<a name="line.115"></a>
<FONT color="green">116</FONT>            tmpLength = Math.min( sbuf.length(), currentRequestedLength );<a name="line.116"></a>
<FONT color="green">117</FONT>            sbuf.getChars( 0, tmpLength, destbuf, currentRequestedOffset );<a name="line.117"></a>
<FONT color="green">118</FONT>    <a name="line.118"></a>
<FONT color="green">119</FONT>            // Create the leftover (if any)<a name="line.119"></a>
<FONT color="green">120</FONT>            if ( tmpLength &lt; sbuf.length() )<a name="line.120"></a>
<FONT color="green">121</FONT>            {<a name="line.121"></a>
<FONT color="green">122</FONT>                leftover = new char[sbuf.length() - tmpLength];<a name="line.122"></a>
<FONT color="green">123</FONT>                sbuf.getChars( tmpLength, tmpLength + leftover.length, leftover, 0 );<a name="line.123"></a>
<FONT color="green">124</FONT>            }<a name="line.124"></a>
<FONT color="green">125</FONT>    <a name="line.125"></a>
<FONT color="green">126</FONT>            // Calculate Actual Length and return.<a name="line.126"></a>
<FONT color="green">127</FONT>            return ( currentRequestedOffset - offset ) + tmpLength;<a name="line.127"></a>
<FONT color="green">128</FONT>        }<a name="line.128"></a>
<FONT color="green">129</FONT>    <a name="line.129"></a>
<FONT color="green">130</FONT>        private StringBuilder getExpandedBuffer( int minimumLength )<a name="line.130"></a>
<FONT color="green">131</FONT>            throws IOException<a name="line.131"></a>
<FONT color="green">132</FONT>        {<a name="line.132"></a>
<FONT color="green">133</FONT>            StringBuilder buf = null;<a name="line.133"></a>
<FONT color="green">134</FONT>            String line = this.originalReader.readLine();<a name="line.134"></a>
<FONT color="green">135</FONT>            boolean done = ( line == null );<a name="line.135"></a>
<FONT color="green">136</FONT>    <a name="line.136"></a>
<FONT color="green">137</FONT>            while ( !done )<a name="line.137"></a>
<FONT color="green">138</FONT>            {<a name="line.138"></a>
<FONT color="green">139</FONT>                if ( buf == null )<a name="line.139"></a>
<FONT color="green">140</FONT>                {<a name="line.140"></a>
<FONT color="green">141</FONT>                    buf = new StringBuilder();<a name="line.141"></a>
<FONT color="green">142</FONT>                }<a name="line.142"></a>
<FONT color="green">143</FONT>    <a name="line.143"></a>
<FONT color="green">144</FONT>                buf.append( expandLine( line ) );<a name="line.144"></a>
<FONT color="green">145</FONT>    <a name="line.145"></a>
<FONT color="green">146</FONT>                // Add newline only if there is more data.<a name="line.146"></a>
<FONT color="green">147</FONT>                if ( this.originalReader.ready() )<a name="line.147"></a>
<FONT color="green">148</FONT>                {<a name="line.148"></a>
<FONT color="green">149</FONT>                    buf.append( "\n" );<a name="line.149"></a>
<FONT color="green">150</FONT>                }<a name="line.150"></a>
<FONT color="green">151</FONT>    <a name="line.151"></a>
<FONT color="green">152</FONT>                if ( buf.length() &gt; minimumLength )<a name="line.152"></a>
<FONT color="green">153</FONT>                {<a name="line.153"></a>
<FONT color="green">154</FONT>                    done = true;<a name="line.154"></a>
<FONT color="green">155</FONT>                }<a name="line.155"></a>
<FONT color="green">156</FONT>                else<a name="line.156"></a>
<FONT color="green">157</FONT>                {<a name="line.157"></a>
<FONT color="green">158</FONT>                    line = this.originalReader.readLine();<a name="line.158"></a>
<FONT color="green">159</FONT>                    done = ( line == null );<a name="line.159"></a>
<FONT color="green">160</FONT>                }<a name="line.160"></a>
<FONT color="green">161</FONT>            }<a name="line.161"></a>
<FONT color="green">162</FONT>    <a name="line.162"></a>
<FONT color="green">163</FONT>            return buf;<a name="line.163"></a>
<FONT color="green">164</FONT>        }<a name="line.164"></a>
<FONT color="green">165</FONT>    <a name="line.165"></a>
<FONT color="green">166</FONT>        private String expandLine( String line )<a name="line.166"></a>
<FONT color="green">167</FONT>        {<a name="line.167"></a>
<FONT color="green">168</FONT>            StringBuilder ret = new StringBuilder();<a name="line.168"></a>
<FONT color="green">169</FONT>    <a name="line.169"></a>
<FONT color="green">170</FONT>            int offset = 0;<a name="line.170"></a>
<FONT color="green">171</FONT>            String entity;<a name="line.171"></a>
<FONT color="green">172</FONT>            Matcher mat = this.entityPattern.matcher( line );<a name="line.172"></a>
<FONT color="green">173</FONT>            while ( mat.find( offset ) )<a name="line.173"></a>
<FONT color="green">174</FONT>            {<a name="line.174"></a>
<FONT color="green">175</FONT>                ret.append( line.substring( offset, mat.start() ) );<a name="line.175"></a>
<FONT color="green">176</FONT>                entity = mat.group();<a name="line.176"></a>
<FONT color="green">177</FONT>                ret.append( LatinEntities.resolveEntity( entity ) );<a name="line.177"></a>
<FONT color="green">178</FONT>                offset = mat.start() + entity.length();<a name="line.178"></a>
<FONT color="green">179</FONT>            }<a name="line.179"></a>
<FONT color="green">180</FONT>            ret.append( line.substring( offset ) );<a name="line.180"></a>
<FONT color="green">181</FONT>    <a name="line.181"></a>
<FONT color="green">182</FONT>            return ret.toString();<a name="line.182"></a>
<FONT color="green">183</FONT>        }<a name="line.183"></a>
<FONT color="green">184</FONT>    <a name="line.184"></a>
<FONT color="green">185</FONT>        public void close()<a name="line.185"></a>
<FONT color="green">186</FONT>            throws IOException<a name="line.186"></a>
<FONT color="green">187</FONT>        {<a name="line.187"></a>
<FONT color="green">188</FONT>            this.originalReader.close();<a name="line.188"></a>
<FONT color="green">189</FONT>        }<a name="line.189"></a>
<FONT color="green">190</FONT>    }<a name="line.190"></a>




























































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