<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    package org.apache.archiva.metadata.repository.stats;<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 org.apache.archiva.metadata.model.MetadataFacet;<a name="line.22"></a>
<FONT color="green">023</FONT>    <a name="line.23"></a>
<FONT color="green">024</FONT>    import java.text.SimpleDateFormat;<a name="line.24"></a>
<FONT color="green">025</FONT>    import java.util.Date;<a name="line.25"></a>
<FONT color="green">026</FONT>    import java.util.HashMap;<a name="line.26"></a>
<FONT color="green">027</FONT>    import java.util.Map;<a name="line.27"></a>
<FONT color="green">028</FONT>    import java.util.TimeZone;<a name="line.28"></a>
<FONT color="green">029</FONT>    <a name="line.29"></a>
<FONT color="green">030</FONT>    public class RepositoryStatistics<a name="line.30"></a>
<FONT color="green">031</FONT>        implements MetadataFacet<a name="line.31"></a>
<FONT color="green">032</FONT>    {<a name="line.32"></a>
<FONT color="green">033</FONT>        private Date scanEndTime;<a name="line.33"></a>
<FONT color="green">034</FONT>    <a name="line.34"></a>
<FONT color="green">035</FONT>        private Date scanStartTime;<a name="line.35"></a>
<FONT color="green">036</FONT>    <a name="line.36"></a>
<FONT color="green">037</FONT>        private long totalArtifactCount;<a name="line.37"></a>
<FONT color="green">038</FONT>    <a name="line.38"></a>
<FONT color="green">039</FONT>        private long totalArtifactFileSize;<a name="line.39"></a>
<FONT color="green">040</FONT>    <a name="line.40"></a>
<FONT color="green">041</FONT>        private long totalFileCount;<a name="line.41"></a>
<FONT color="green">042</FONT>    <a name="line.42"></a>
<FONT color="green">043</FONT>        private long totalGroupCount;<a name="line.43"></a>
<FONT color="green">044</FONT>    <a name="line.44"></a>
<FONT color="green">045</FONT>        private long totalProjectCount;<a name="line.45"></a>
<FONT color="green">046</FONT>    <a name="line.46"></a>
<FONT color="green">047</FONT>        private long newFileCount;<a name="line.47"></a>
<FONT color="green">048</FONT>    <a name="line.48"></a>
<FONT color="green">049</FONT>        public static String FACET_ID = "org.apache.archiva.metadata.repository.stats";<a name="line.49"></a>
<FONT color="green">050</FONT>    <a name="line.50"></a>
<FONT color="green">051</FONT>        static final String SCAN_TIMESTAMP_FORMAT = "yyyy/MM/dd/HHmmss.SSS";<a name="line.51"></a>
<FONT color="green">052</FONT>    <a name="line.52"></a>
<FONT color="green">053</FONT>        private Map&lt;String, Long&gt; totalCountForType = new ZeroForNullHashMap&lt;String, Long&gt;();<a name="line.53"></a>
<FONT color="green">054</FONT>    <a name="line.54"></a>
<FONT color="green">055</FONT>        private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC" );<a name="line.55"></a>
<FONT color="green">056</FONT>    <a name="line.56"></a>
<FONT color="green">057</FONT>        private String repositoryId;<a name="line.57"></a>
<FONT color="green">058</FONT>    <a name="line.58"></a>
<FONT color="green">059</FONT>        public Date getScanEndTime()<a name="line.59"></a>
<FONT color="green">060</FONT>        {<a name="line.60"></a>
<FONT color="green">061</FONT>            return scanEndTime;<a name="line.61"></a>
<FONT color="green">062</FONT>        }<a name="line.62"></a>
<FONT color="green">063</FONT>    <a name="line.63"></a>
<FONT color="green">064</FONT>        public void setScanEndTime( Date scanEndTime )<a name="line.64"></a>
<FONT color="green">065</FONT>        {<a name="line.65"></a>
<FONT color="green">066</FONT>            this.scanEndTime = scanEndTime;<a name="line.66"></a>
<FONT color="green">067</FONT>        }<a name="line.67"></a>
<FONT color="green">068</FONT>    <a name="line.68"></a>
<FONT color="green">069</FONT>        public Date getScanStartTime()<a name="line.69"></a>
<FONT color="green">070</FONT>        {<a name="line.70"></a>
<FONT color="green">071</FONT>            return scanStartTime;<a name="line.71"></a>
<FONT color="green">072</FONT>        }<a name="line.72"></a>
<FONT color="green">073</FONT>    <a name="line.73"></a>
<FONT color="green">074</FONT>        public void setScanStartTime( Date scanStartTime )<a name="line.74"></a>
<FONT color="green">075</FONT>        {<a name="line.75"></a>
<FONT color="green">076</FONT>            this.scanStartTime = scanStartTime;<a name="line.76"></a>
<FONT color="green">077</FONT>        }<a name="line.77"></a>
<FONT color="green">078</FONT>    <a name="line.78"></a>
<FONT color="green">079</FONT>        public long getTotalArtifactCount()<a name="line.79"></a>
<FONT color="green">080</FONT>        {<a name="line.80"></a>
<FONT color="green">081</FONT>            return totalArtifactCount;<a name="line.81"></a>
<FONT color="green">082</FONT>        }<a name="line.82"></a>
<FONT color="green">083</FONT>    <a name="line.83"></a>
<FONT color="green">084</FONT>        public void setTotalArtifactCount( long totalArtifactCount )<a name="line.84"></a>
<FONT color="green">085</FONT>        {<a name="line.85"></a>
<FONT color="green">086</FONT>            this.totalArtifactCount = totalArtifactCount;<a name="line.86"></a>
<FONT color="green">087</FONT>        }<a name="line.87"></a>
<FONT color="green">088</FONT>    <a name="line.88"></a>
<FONT color="green">089</FONT>        public long getTotalArtifactFileSize()<a name="line.89"></a>
<FONT color="green">090</FONT>        {<a name="line.90"></a>
<FONT color="green">091</FONT>            return totalArtifactFileSize;<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>        public void setTotalArtifactFileSize( long totalArtifactFileSize )<a name="line.94"></a>
<FONT color="green">095</FONT>        {<a name="line.95"></a>
<FONT color="green">096</FONT>            this.totalArtifactFileSize = totalArtifactFileSize;<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>        public long getTotalFileCount()<a name="line.99"></a>
<FONT color="green">100</FONT>        {<a name="line.100"></a>
<FONT color="green">101</FONT>            return totalFileCount;<a name="line.101"></a>
<FONT color="green">102</FONT>        }<a name="line.102"></a>
<FONT color="green">103</FONT>    <a name="line.103"></a>
<FONT color="green">104</FONT>        public void setTotalFileCount( long totalFileCount )<a name="line.104"></a>
<FONT color="green">105</FONT>        {<a name="line.105"></a>
<FONT color="green">106</FONT>            this.totalFileCount = totalFileCount;<a name="line.106"></a>
<FONT color="green">107</FONT>        }<a name="line.107"></a>
<FONT color="green">108</FONT>    <a name="line.108"></a>
<FONT color="green">109</FONT>        public long getTotalGroupCount()<a name="line.109"></a>
<FONT color="green">110</FONT>        {<a name="line.110"></a>
<FONT color="green">111</FONT>            return totalGroupCount;<a name="line.111"></a>
<FONT color="green">112</FONT>        }<a name="line.112"></a>
<FONT color="green">113</FONT>    <a name="line.113"></a>
<FONT color="green">114</FONT>        public void setTotalGroupCount( long totalGroupCount )<a name="line.114"></a>
<FONT color="green">115</FONT>        {<a name="line.115"></a>
<FONT color="green">116</FONT>            this.totalGroupCount = totalGroupCount;<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>        public long getTotalProjectCount()<a name="line.119"></a>
<FONT color="green">120</FONT>        {<a name="line.120"></a>
<FONT color="green">121</FONT>            return totalProjectCount;<a name="line.121"></a>
<FONT color="green">122</FONT>        }<a name="line.122"></a>
<FONT color="green">123</FONT>    <a name="line.123"></a>
<FONT color="green">124</FONT>        public void setTotalProjectCount( long totalProjectCount )<a name="line.124"></a>
<FONT color="green">125</FONT>        {<a name="line.125"></a>
<FONT color="green">126</FONT>            this.totalProjectCount = totalProjectCount;<a name="line.126"></a>
<FONT color="green">127</FONT>        }<a name="line.127"></a>
<FONT color="green">128</FONT>    <a name="line.128"></a>
<FONT color="green">129</FONT>        public void setNewFileCount( long newFileCount )<a name="line.129"></a>
<FONT color="green">130</FONT>        {<a name="line.130"></a>
<FONT color="green">131</FONT>            this.newFileCount = newFileCount;<a name="line.131"></a>
<FONT color="green">132</FONT>        }<a name="line.132"></a>
<FONT color="green">133</FONT>    <a name="line.133"></a>
<FONT color="green">134</FONT>        public long getNewFileCount()<a name="line.134"></a>
<FONT color="green">135</FONT>        {<a name="line.135"></a>
<FONT color="green">136</FONT>            return newFileCount;<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>        public long getDuration()<a name="line.139"></a>
<FONT color="green">140</FONT>        {<a name="line.140"></a>
<FONT color="green">141</FONT>            return scanEndTime.getTime() - scanStartTime.getTime();<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>        public String getRepositoryId()<a name="line.144"></a>
<FONT color="green">145</FONT>        {<a name="line.145"></a>
<FONT color="green">146</FONT>            return repositoryId;<a name="line.146"></a>
<FONT color="green">147</FONT>        }<a name="line.147"></a>
<FONT color="green">148</FONT>    <a name="line.148"></a>
<FONT color="green">149</FONT>        public void setRepositoryId( String repositoryId )<a name="line.149"></a>
<FONT color="green">150</FONT>        {<a name="line.150"></a>
<FONT color="green">151</FONT>            this.repositoryId = repositoryId;<a name="line.151"></a>
<FONT color="green">152</FONT>        }<a name="line.152"></a>
<FONT color="green">153</FONT>    <a name="line.153"></a>
<FONT color="green">154</FONT>        public String getFacetId()<a name="line.154"></a>
<FONT color="green">155</FONT>        {<a name="line.155"></a>
<FONT color="green">156</FONT>            return FACET_ID;<a name="line.156"></a>
<FONT color="green">157</FONT>        }<a name="line.157"></a>
<FONT color="green">158</FONT>    <a name="line.158"></a>
<FONT color="green">159</FONT>        public String getName()<a name="line.159"></a>
<FONT color="green">160</FONT>        {<a name="line.160"></a>
<FONT color="green">161</FONT>            return createNameFormat().format( scanStartTime );<a name="line.161"></a>
<FONT color="green">162</FONT>        }<a name="line.162"></a>
<FONT color="green">163</FONT>    <a name="line.163"></a>
<FONT color="green">164</FONT>        private static SimpleDateFormat createNameFormat()<a name="line.164"></a>
<FONT color="green">165</FONT>        {<a name="line.165"></a>
<FONT color="green">166</FONT>            SimpleDateFormat fmt = new SimpleDateFormat( SCAN_TIMESTAMP_FORMAT );<a name="line.166"></a>
<FONT color="green">167</FONT>            fmt.setTimeZone( UTC_TIME_ZONE );<a name="line.167"></a>
<FONT color="green">168</FONT>            return fmt;<a name="line.168"></a>
<FONT color="green">169</FONT>        }<a name="line.169"></a>
<FONT color="green">170</FONT>    <a name="line.170"></a>
<FONT color="green">171</FONT>        public Map&lt;String, String&gt; toProperties()<a name="line.171"></a>
<FONT color="green">172</FONT>        {<a name="line.172"></a>
<FONT color="green">173</FONT>            Map&lt;String, String&gt; properties = new HashMap&lt;String, String&gt;();<a name="line.173"></a>
<FONT color="green">174</FONT>            properties.put( "scanEndTime", String.valueOf( scanEndTime.getTime() ) );<a name="line.174"></a>
<FONT color="green">175</FONT>            properties.put( "scanStartTime", String.valueOf( scanStartTime.getTime() ) );<a name="line.175"></a>
<FONT color="green">176</FONT>            properties.put( "totalArtifactCount", String.valueOf( totalArtifactCount ) );<a name="line.176"></a>
<FONT color="green">177</FONT>            properties.put( "totalArtifactFileSize", String.valueOf( totalArtifactFileSize ) );<a name="line.177"></a>
<FONT color="green">178</FONT>            properties.put( "totalFileCount", String.valueOf( totalFileCount ) );<a name="line.178"></a>
<FONT color="green">179</FONT>            properties.put( "totalGroupCount", String.valueOf( totalGroupCount ) );<a name="line.179"></a>
<FONT color="green">180</FONT>            properties.put( "totalProjectCount", String.valueOf( totalProjectCount ) );<a name="line.180"></a>
<FONT color="green">181</FONT>            properties.put( "newFileCount", String.valueOf( newFileCount ) );<a name="line.181"></a>
<FONT color="green">182</FONT>            properties.put( "repositoryId", repositoryId );<a name="line.182"></a>
<FONT color="green">183</FONT>            for ( Map.Entry&lt;String, Long&gt; entry : totalCountForType.entrySet() )<a name="line.183"></a>
<FONT color="green">184</FONT>            {<a name="line.184"></a>
<FONT color="green">185</FONT>                properties.put( "count-" + entry.getKey(), String.valueOf( entry.getValue() ) );<a name="line.185"></a>
<FONT color="green">186</FONT>            }<a name="line.186"></a>
<FONT color="green">187</FONT>            return properties;<a name="line.187"></a>
<FONT color="green">188</FONT>        }<a name="line.188"></a>
<FONT color="green">189</FONT>    <a name="line.189"></a>
<FONT color="green">190</FONT>        public void fromProperties( Map&lt;String, String&gt; properties )<a name="line.190"></a>
<FONT color="green">191</FONT>        {<a name="line.191"></a>
<FONT color="green">192</FONT>            scanEndTime = new Date( Long.parseLong( properties.get( "scanEndTime" ) ) );<a name="line.192"></a>
<FONT color="green">193</FONT>            scanStartTime = new Date( Long.parseLong( properties.get( "scanStartTime" ) ) );<a name="line.193"></a>
<FONT color="green">194</FONT>            totalArtifactCount = Long.parseLong( properties.get( "totalArtifactCount" ) );<a name="line.194"></a>
<FONT color="green">195</FONT>            totalArtifactFileSize = Long.parseLong( properties.get( "totalArtifactFileSize" ) );<a name="line.195"></a>
<FONT color="green">196</FONT>            totalFileCount = Long.parseLong( properties.get( "totalFileCount" ) );<a name="line.196"></a>
<FONT color="green">197</FONT>            totalGroupCount = Long.parseLong( properties.get( "totalGroupCount" ) );<a name="line.197"></a>
<FONT color="green">198</FONT>            totalProjectCount = Long.parseLong( properties.get( "totalProjectCount" ) );<a name="line.198"></a>
<FONT color="green">199</FONT>            newFileCount = Long.parseLong( properties.get( "newFileCount" ) );<a name="line.199"></a>
<FONT color="green">200</FONT>            repositoryId = properties.get( "repositoryId" );<a name="line.200"></a>
<FONT color="green">201</FONT>            totalCountForType.clear();<a name="line.201"></a>
<FONT color="green">202</FONT>            for ( Map.Entry&lt;String, String&gt; entry : properties.entrySet() )<a name="line.202"></a>
<FONT color="green">203</FONT>            {<a name="line.203"></a>
<FONT color="green">204</FONT>                if ( entry.getKey().startsWith( "count-" ) )<a name="line.204"></a>
<FONT color="green">205</FONT>                {<a name="line.205"></a>
<FONT color="green">206</FONT>                    totalCountForType.put( entry.getKey().substring( 6 ), Long.valueOf( entry.getValue() ) );<a name="line.206"></a>
<FONT color="green">207</FONT>                }<a name="line.207"></a>
<FONT color="green">208</FONT>            }<a name="line.208"></a>
<FONT color="green">209</FONT>        }<a name="line.209"></a>
<FONT color="green">210</FONT>    <a name="line.210"></a>
<FONT color="green">211</FONT>        @Override<a name="line.211"></a>
<FONT color="green">212</FONT>        public boolean equals( Object o )<a name="line.212"></a>
<FONT color="green">213</FONT>        {<a name="line.213"></a>
<FONT color="green">214</FONT>            if ( this == o )<a name="line.214"></a>
<FONT color="green">215</FONT>            {<a name="line.215"></a>
<FONT color="green">216</FONT>                return true;<a name="line.216"></a>
<FONT color="green">217</FONT>            }<a name="line.217"></a>
<FONT color="green">218</FONT>            if ( o == null || getClass() != o.getClass() )<a name="line.218"></a>
<FONT color="green">219</FONT>            {<a name="line.219"></a>
<FONT color="green">220</FONT>                return false;<a name="line.220"></a>
<FONT color="green">221</FONT>            }<a name="line.221"></a>
<FONT color="green">222</FONT>    <a name="line.222"></a>
<FONT color="green">223</FONT>            RepositoryStatistics that = (RepositoryStatistics) o;<a name="line.223"></a>
<FONT color="green">224</FONT>    <a name="line.224"></a>
<FONT color="green">225</FONT>            if ( newFileCount != that.newFileCount )<a name="line.225"></a>
<FONT color="green">226</FONT>            {<a name="line.226"></a>
<FONT color="green">227</FONT>                return false;<a name="line.227"></a>
<FONT color="green">228</FONT>            }<a name="line.228"></a>
<FONT color="green">229</FONT>            if ( totalArtifactCount != that.totalArtifactCount )<a name="line.229"></a>
<FONT color="green">230</FONT>            {<a name="line.230"></a>
<FONT color="green">231</FONT>                return false;<a name="line.231"></a>
<FONT color="green">232</FONT>            }<a name="line.232"></a>
<FONT color="green">233</FONT>            if ( totalArtifactFileSize != that.totalArtifactFileSize )<a name="line.233"></a>
<FONT color="green">234</FONT>            {<a name="line.234"></a>
<FONT color="green">235</FONT>                return false;<a name="line.235"></a>
<FONT color="green">236</FONT>            }<a name="line.236"></a>
<FONT color="green">237</FONT>            if ( totalFileCount != that.totalFileCount )<a name="line.237"></a>
<FONT color="green">238</FONT>            {<a name="line.238"></a>
<FONT color="green">239</FONT>                return false;<a name="line.239"></a>
<FONT color="green">240</FONT>            }<a name="line.240"></a>
<FONT color="green">241</FONT>            if ( totalGroupCount != that.totalGroupCount )<a name="line.241"></a>
<FONT color="green">242</FONT>            {<a name="line.242"></a>
<FONT color="green">243</FONT>                return false;<a name="line.243"></a>
<FONT color="green">244</FONT>            }<a name="line.244"></a>
<FONT color="green">245</FONT>            if ( totalProjectCount != that.totalProjectCount )<a name="line.245"></a>
<FONT color="green">246</FONT>            {<a name="line.246"></a>
<FONT color="green">247</FONT>                return false;<a name="line.247"></a>
<FONT color="green">248</FONT>            }<a name="line.248"></a>
<FONT color="green">249</FONT>            if ( !scanEndTime.equals( that.scanEndTime ) )<a name="line.249"></a>
<FONT color="green">250</FONT>            {<a name="line.250"></a>
<FONT color="green">251</FONT>                return false;<a name="line.251"></a>
<FONT color="green">252</FONT>            }<a name="line.252"></a>
<FONT color="green">253</FONT>            if ( !scanStartTime.equals( that.scanStartTime ) )<a name="line.253"></a>
<FONT color="green">254</FONT>            {<a name="line.254"></a>
<FONT color="green">255</FONT>                return false;<a name="line.255"></a>
<FONT color="green">256</FONT>            }<a name="line.256"></a>
<FONT color="green">257</FONT>            if ( !totalCountForType.equals( that.totalCountForType ) )<a name="line.257"></a>
<FONT color="green">258</FONT>            {<a name="line.258"></a>
<FONT color="green">259</FONT>                return false;<a name="line.259"></a>
<FONT color="green">260</FONT>            }<a name="line.260"></a>
<FONT color="green">261</FONT>            if ( !repositoryId.equals( that.repositoryId ) )<a name="line.261"></a>
<FONT color="green">262</FONT>            {<a name="line.262"></a>
<FONT color="green">263</FONT>                return false;<a name="line.263"></a>
<FONT color="green">264</FONT>            }<a name="line.264"></a>
<FONT color="green">265</FONT>    <a name="line.265"></a>
<FONT color="green">266</FONT>            return true;<a name="line.266"></a>
<FONT color="green">267</FONT>        }<a name="line.267"></a>
<FONT color="green">268</FONT>    <a name="line.268"></a>
<FONT color="green">269</FONT>        @Override<a name="line.269"></a>
<FONT color="green">270</FONT>        public int hashCode()<a name="line.270"></a>
<FONT color="green">271</FONT>        {<a name="line.271"></a>
<FONT color="green">272</FONT>            int result = scanEndTime.hashCode();<a name="line.272"></a>
<FONT color="green">273</FONT>            result = 31 * result + scanStartTime.hashCode();<a name="line.273"></a>
<FONT color="green">274</FONT>            result = 31 * result + (int) ( totalArtifactCount ^ ( totalArtifactCount &gt;&gt;&gt; 32 ) );<a name="line.274"></a>
<FONT color="green">275</FONT>            result = 31 * result + (int) ( totalArtifactFileSize ^ ( totalArtifactFileSize &gt;&gt;&gt; 32 ) );<a name="line.275"></a>
<FONT color="green">276</FONT>            result = 31 * result + (int) ( totalFileCount ^ ( totalFileCount &gt;&gt;&gt; 32 ) );<a name="line.276"></a>
<FONT color="green">277</FONT>            result = 31 * result + (int) ( totalGroupCount ^ ( totalGroupCount &gt;&gt;&gt; 32 ) );<a name="line.277"></a>
<FONT color="green">278</FONT>            result = 31 * result + (int) ( totalProjectCount ^ ( totalProjectCount &gt;&gt;&gt; 32 ) );<a name="line.278"></a>
<FONT color="green">279</FONT>            result = 31 * result + (int) ( newFileCount ^ ( newFileCount &gt;&gt;&gt; 32 ) );<a name="line.279"></a>
<FONT color="green">280</FONT>            result = 31 * result + totalCountForType.hashCode();<a name="line.280"></a>
<FONT color="green">281</FONT>            result = 31 * result + repositoryId.hashCode();<a name="line.281"></a>
<FONT color="green">282</FONT>            return result;<a name="line.282"></a>
<FONT color="green">283</FONT>        }<a name="line.283"></a>
<FONT color="green">284</FONT>    <a name="line.284"></a>
<FONT color="green">285</FONT>        @Override<a name="line.285"></a>
<FONT color="green">286</FONT>        public String toString()<a name="line.286"></a>
<FONT color="green">287</FONT>        {<a name="line.287"></a>
<FONT color="green">288</FONT>            return "RepositoryStatistics{" + "scanEndTime=" + scanEndTime + ", scanStartTime=" + scanStartTime +<a name="line.288"></a>
<FONT color="green">289</FONT>                ", totalArtifactCount=" + totalArtifactCount + ", totalArtifactFileSize=" + totalArtifactFileSize +<a name="line.289"></a>
<FONT color="green">290</FONT>                ", totalFileCount=" + totalFileCount + ", totalGroupCount=" + totalGroupCount + ", totalProjectCount=" +<a name="line.290"></a>
<FONT color="green">291</FONT>                totalProjectCount + ", newFileCount=" + newFileCount + ", totalCountForType=" + totalCountForType + ", " +<a name="line.291"></a>
<FONT color="green">292</FONT>                "repositoryId=" + repositoryId + '}';<a name="line.292"></a>
<FONT color="green">293</FONT>        }<a name="line.293"></a>
<FONT color="green">294</FONT>    <a name="line.294"></a>
<FONT color="green">295</FONT>        public Map&lt;String, Long&gt; getTotalCountForType()<a name="line.295"></a>
<FONT color="green">296</FONT>        {<a name="line.296"></a>
<FONT color="green">297</FONT>            return totalCountForType;<a name="line.297"></a>
<FONT color="green">298</FONT>        }<a name="line.298"></a>
<FONT color="green">299</FONT>    <a name="line.299"></a>
<FONT color="green">300</FONT>        public long getTotalCountForType( String type )<a name="line.300"></a>
<FONT color="green">301</FONT>        {<a name="line.301"></a>
<FONT color="green">302</FONT>            return totalCountForType.get( type );<a name="line.302"></a>
<FONT color="green">303</FONT>        }<a name="line.303"></a>
<FONT color="green">304</FONT>    <a name="line.304"></a>
<FONT color="green">305</FONT>        public void setTotalCountForType( String type, long count )<a name="line.305"></a>
<FONT color="green">306</FONT>        {<a name="line.306"></a>
<FONT color="green">307</FONT>            totalCountForType.put( type.replaceAll( "-", "_" ).replaceAll( "\\.", "_" ), count );<a name="line.307"></a>
<FONT color="green">308</FONT>        }<a name="line.308"></a>
<FONT color="green">309</FONT>        <a name="line.309"></a>
<FONT color="green">310</FONT>        private static final class ZeroForNullHashMap&lt;K, V extends Long&gt; extends HashMap&lt;K, V&gt;<a name="line.310"></a>
<FONT color="green">311</FONT>        {   <a name="line.311"></a>
<FONT color="green">312</FONT>            @Override<a name="line.312"></a>
<FONT color="green">313</FONT>            public V get(Object key) {<a name="line.313"></a>
<FONT color="green">314</FONT>                V value = super.get( key );<a name="line.314"></a>
<FONT color="green">315</FONT>                <a name="line.315"></a>
<FONT color="green">316</FONT>                return value != null ? value : ( V ) Long.valueOf( 0L );<a name="line.316"></a>
<FONT color="green">317</FONT>            }<a name="line.317"></a>
<FONT color="green">318</FONT>        }<a name="line.318"></a>
<FONT color="green">319</FONT>    }<a name="line.319"></a>




























































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