<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    package org.apache.archiva.configuration;<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.configuration.functors.ProxyConnectorConfigurationOrderComparator;<a name="line.22"></a>
<FONT color="green">023</FONT>    import org.apache.archiva.configuration.io.registry.ConfigurationRegistryReader;<a name="line.23"></a>
<FONT color="green">024</FONT>    import org.apache.archiva.configuration.io.registry.ConfigurationRegistryWriter;<a name="line.24"></a>
<FONT color="green">025</FONT>    import org.apache.archiva.policies.AbstractUpdatePolicy;<a name="line.25"></a>
<FONT color="green">026</FONT>    import org.apache.archiva.policies.CachedFailuresPolicy;<a name="line.26"></a>
<FONT color="green">027</FONT>    import org.apache.archiva.policies.ChecksumPolicy;<a name="line.27"></a>
<FONT color="green">028</FONT>    import org.apache.archiva.policies.DownloadErrorPolicy;<a name="line.28"></a>
<FONT color="green">029</FONT>    import org.apache.archiva.policies.Policy;<a name="line.29"></a>
<FONT color="green">030</FONT>    import org.apache.archiva.policies.PostDownloadPolicy;<a name="line.30"></a>
<FONT color="green">031</FONT>    import org.apache.archiva.policies.PreDownloadPolicy;<a name="line.31"></a>
<FONT color="green">032</FONT>    import org.apache.archiva.redback.components.evaluator.DefaultExpressionEvaluator;<a name="line.32"></a>
<FONT color="green">033</FONT>    import org.apache.archiva.redback.components.evaluator.EvaluatorException;<a name="line.33"></a>
<FONT color="green">034</FONT>    import org.apache.archiva.redback.components.evaluator.ExpressionEvaluator;<a name="line.34"></a>
<FONT color="green">035</FONT>    import org.apache.archiva.redback.components.evaluator.sources.SystemPropertyExpressionSource;<a name="line.35"></a>
<FONT color="green">036</FONT>    import org.apache.archiva.redback.components.registry.Registry;<a name="line.36"></a>
<FONT color="green">037</FONT>    import org.apache.archiva.redback.components.registry.RegistryException;<a name="line.37"></a>
<FONT color="green">038</FONT>    import org.apache.archiva.redback.components.registry.RegistryListener;<a name="line.38"></a>
<FONT color="green">039</FONT>    import org.apache.archiva.redback.components.registry.commons.CommonsConfigurationRegistry;<a name="line.39"></a>
<FONT color="green">040</FONT>    import org.apache.archiva.redback.components.springutils.ComponentContainer;<a name="line.40"></a>
<FONT color="green">041</FONT>    import org.apache.commons.collections.CollectionUtils;<a name="line.41"></a>
<FONT color="green">042</FONT>    import org.apache.commons.collections.ListUtils;<a name="line.42"></a>
<FONT color="green">043</FONT>    import org.apache.commons.collections.MapUtils;<a name="line.43"></a>
<FONT color="green">044</FONT>    import org.apache.commons.configuration.BaseConfiguration;<a name="line.44"></a>
<FONT color="green">045</FONT>    import org.apache.commons.io.FileUtils;<a name="line.45"></a>
<FONT color="green">046</FONT>    import org.apache.commons.lang.StringUtils;<a name="line.46"></a>
<FONT color="green">047</FONT>    import org.slf4j.Logger;<a name="line.47"></a>
<FONT color="green">048</FONT>    import org.slf4j.LoggerFactory;<a name="line.48"></a>
<FONT color="green">049</FONT>    import org.springframework.stereotype.Service;<a name="line.49"></a>
<FONT color="green">050</FONT>    <a name="line.50"></a>
<FONT color="green">051</FONT>    import javax.annotation.PostConstruct;<a name="line.51"></a>
<FONT color="green">052</FONT>    import javax.inject.Inject;<a name="line.52"></a>
<FONT color="green">053</FONT>    import javax.inject.Named;<a name="line.53"></a>
<FONT color="green">054</FONT>    import java.io.File;<a name="line.54"></a>
<FONT color="green">055</FONT>    import java.io.IOException;<a name="line.55"></a>
<FONT color="green">056</FONT>    import java.util.ArrayList;<a name="line.56"></a>
<FONT color="green">057</FONT>    import java.util.Arrays;<a name="line.57"></a>
<FONT color="green">058</FONT>    import java.util.Collection;<a name="line.58"></a>
<FONT color="green">059</FONT>    import java.util.Collections;<a name="line.59"></a>
<FONT color="green">060</FONT>    import java.util.HashMap;<a name="line.60"></a>
<FONT color="green">061</FONT>    import java.util.HashSet;<a name="line.61"></a>
<FONT color="green">062</FONT>    import java.util.Iterator;<a name="line.62"></a>
<FONT color="green">063</FONT>    import java.util.List;<a name="line.63"></a>
<FONT color="green">064</FONT>    import java.util.Map;<a name="line.64"></a>
<FONT color="green">065</FONT>    import java.util.Map.Entry;<a name="line.65"></a>
<FONT color="green">066</FONT>    import java.util.Set;<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>     * &lt;p&gt;<a name="line.69"></a>
<FONT color="green">070</FONT>     * Implementation of configuration holder that retrieves it from the registry.<a name="line.70"></a>
<FONT color="green">071</FONT>     * &lt;/p&gt;<a name="line.71"></a>
<FONT color="green">072</FONT>     * &lt;p&gt;<a name="line.72"></a>
<FONT color="green">073</FONT>     * The registry layers and merges the 2 configuration files: user, and application server.<a name="line.73"></a>
<FONT color="green">074</FONT>     * &lt;/p&gt;<a name="line.74"></a>
<FONT color="green">075</FONT>     * &lt;p&gt;<a name="line.75"></a>
<FONT color="green">076</FONT>     * Instead of relying on the model defaults, if the registry is empty a default configuration file is loaded and<a name="line.76"></a>
<FONT color="green">077</FONT>     * applied from a resource. The defaults are not loaded into the registry as the lists (eg repositories) could no longer<a name="line.77"></a>
<FONT color="green">078</FONT>     * be removed if that was the case.<a name="line.78"></a>
<FONT color="green">079</FONT>     * &lt;/p&gt;<a name="line.79"></a>
<FONT color="green">080</FONT>     * &lt;p&gt;<a name="line.80"></a>
<FONT color="green">081</FONT>     * When saving the configuration, it is saved to the location it was read from. If it was read from the defaults, it<a name="line.81"></a>
<FONT color="green">082</FONT>     * will be saved to the user location.<a name="line.82"></a>
<FONT color="green">083</FONT>     * However, if the configuration contains information from both sources, an exception is raised as this is currently<a name="line.83"></a>
<FONT color="green">084</FONT>     * unsupported. The reason for this is that it is not possible to identify where to re-save elements, and can result<a name="line.84"></a>
<FONT color="green">085</FONT>     * in list configurations (eg repositories) becoming inconsistent.<a name="line.85"></a>
<FONT color="green">086</FONT>     * &lt;/p&gt;<a name="line.86"></a>
<FONT color="green">087</FONT>     * &lt;p&gt;<a name="line.87"></a>
<FONT color="green">088</FONT>     * If the configuration is outdated, it will be upgraded when it is loaded. This is done by checking the version flag<a name="line.88"></a>
<FONT color="green">089</FONT>     * before reading it from the registry.<a name="line.89"></a>
<FONT color="green">090</FONT>     * &lt;/p&gt;<a name="line.90"></a>
<FONT color="green">091</FONT>     */<a name="line.91"></a>
<FONT color="green">092</FONT>    @Service ( "archivaConfiguration#default" )<a name="line.92"></a>
<FONT color="green">093</FONT>    public class DefaultArchivaConfiguration<a name="line.93"></a>
<FONT color="green">094</FONT>        implements ArchivaConfiguration, RegistryListener<a name="line.94"></a>
<FONT color="green">095</FONT>    {<a name="line.95"></a>
<FONT color="green">096</FONT>        private Logger log = LoggerFactory.getLogger( DefaultArchivaConfiguration.class );<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>         * Plexus registry to read the configuration from.<a name="line.99"></a>
<FONT color="green">100</FONT>         */<a name="line.100"></a>
<FONT color="green">101</FONT>        @Inject<a name="line.101"></a>
<FONT color="green">102</FONT>        @Named ( value = "commons-configuration" )<a name="line.102"></a>
<FONT color="green">103</FONT>        private Registry registry;<a name="line.103"></a>
<FONT color="green">104</FONT>    <a name="line.104"></a>
<FONT color="green">105</FONT>        @Inject<a name="line.105"></a>
<FONT color="green">106</FONT>        private ComponentContainer componentContainer;<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>         * The configuration that has been converted.<a name="line.109"></a>
<FONT color="green">110</FONT>         */<a name="line.110"></a>
<FONT color="green">111</FONT>        private Configuration configuration;<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>         * see #initialize<a name="line.114"></a>
<FONT color="green">115</FONT>         *<a name="line.115"></a>
<FONT color="green">116</FONT>         * @todo these don't strictly belong in here<a name="line.116"></a>
<FONT color="green">117</FONT>         */<a name="line.117"></a>
<FONT color="green">118</FONT>        private Map&lt;String, PreDownloadPolicy&gt; prePolicies;<a name="line.118"></a>
<FONT color="green">119</FONT>    <a name="line.119"></a>
<FONT color="green">120</FONT>        /**<a name="line.120"></a>
<FONT color="green">121</FONT>         * see #initialize<a name="line.121"></a>
<FONT color="green">122</FONT>         *<a name="line.122"></a>
<FONT color="green">123</FONT>         * @todo these don't strictly belong in here<a name="line.123"></a>
<FONT color="green">124</FONT>         */<a name="line.124"></a>
<FONT color="green">125</FONT>        private Map&lt;String, PostDownloadPolicy&gt; postPolicies;<a name="line.125"></a>
<FONT color="green">126</FONT>    <a name="line.126"></a>
<FONT color="green">127</FONT>        /**<a name="line.127"></a>
<FONT color="green">128</FONT>         * see #initialize<a name="line.128"></a>
<FONT color="green">129</FONT>         *<a name="line.129"></a>
<FONT color="green">130</FONT>         * @todo these don't strictly belong in here<a name="line.130"></a>
<FONT color="green">131</FONT>         */<a name="line.131"></a>
<FONT color="green">132</FONT>        private Map&lt;String, DownloadErrorPolicy&gt; downloadErrorPolicies;<a name="line.132"></a>
<FONT color="green">133</FONT>    <a name="line.133"></a>
<FONT color="green">134</FONT>    <a name="line.134"></a>
<FONT color="green">135</FONT>        /**<a name="line.135"></a>
<FONT color="green">136</FONT>         * see #initialize<a name="line.136"></a>
<FONT color="green">137</FONT>         * default-value="${user.home}/.m2/archiva.xml"<a name="line.137"></a>
<FONT color="green">138</FONT>         */<a name="line.138"></a>
<FONT color="green">139</FONT>        private String userConfigFilename = "${user.home}/.m2/archiva.xml";<a name="line.139"></a>
<FONT color="green">140</FONT>    <a name="line.140"></a>
<FONT color="green">141</FONT>        /**<a name="line.141"></a>
<FONT color="green">142</FONT>         * see #initialize<a name="line.142"></a>
<FONT color="green">143</FONT>         * default-value="${appserver.base}/conf/archiva.xml"<a name="line.143"></a>
<FONT color="green">144</FONT>         */<a name="line.144"></a>
<FONT color="green">145</FONT>        private String altConfigFilename = "${appserver.base}/conf/archiva.xml";<a name="line.145"></a>
<FONT color="green">146</FONT>    <a name="line.146"></a>
<FONT color="green">147</FONT>        /**<a name="line.147"></a>
<FONT color="green">148</FONT>         * Configuration Listeners we've registered.<a name="line.148"></a>
<FONT color="green">149</FONT>         */<a name="line.149"></a>
<FONT color="green">150</FONT>        private Set&lt;ConfigurationListener&gt; listeners = new HashSet&lt;ConfigurationListener&gt;();<a name="line.150"></a>
<FONT color="green">151</FONT>    <a name="line.151"></a>
<FONT color="green">152</FONT>        /**<a name="line.152"></a>
<FONT color="green">153</FONT>         * Registry Listeners we've registered.<a name="line.153"></a>
<FONT color="green">154</FONT>         */<a name="line.154"></a>
<FONT color="green">155</FONT>        private Set&lt;RegistryListener&gt; registryListeners = new HashSet&lt;RegistryListener&gt;();<a name="line.155"></a>
<FONT color="green">156</FONT>    <a name="line.156"></a>
<FONT color="green">157</FONT>        /**<a name="line.157"></a>
<FONT color="green">158</FONT>         * Boolean to help determine if the configuration exists as a result of pulling in<a name="line.158"></a>
<FONT color="green">159</FONT>         * the default-archiva.xml<a name="line.159"></a>
<FONT color="green">160</FONT>         */<a name="line.160"></a>
<FONT color="green">161</FONT>        private boolean isConfigurationDefaulted = false;<a name="line.161"></a>
<FONT color="green">162</FONT>    <a name="line.162"></a>
<FONT color="green">163</FONT>        private static final String KEY = "org.apache.archiva";<a name="line.163"></a>
<FONT color="green">164</FONT>    <a name="line.164"></a>
<FONT color="green">165</FONT>        public Configuration getConfiguration()<a name="line.165"></a>
<FONT color="green">166</FONT>        {<a name="line.166"></a>
<FONT color="green">167</FONT>            return loadConfiguration();<a name="line.167"></a>
<FONT color="green">168</FONT>        }<a name="line.168"></a>
<FONT color="green">169</FONT>    <a name="line.169"></a>
<FONT color="green">170</FONT>        private synchronized Configuration loadConfiguration()<a name="line.170"></a>
<FONT color="green">171</FONT>        {<a name="line.171"></a>
<FONT color="green">172</FONT>            if ( configuration == null )<a name="line.172"></a>
<FONT color="green">173</FONT>            {<a name="line.173"></a>
<FONT color="green">174</FONT>                configuration = load();<a name="line.174"></a>
<FONT color="green">175</FONT>                configuration = unescapeExpressions( configuration );<a name="line.175"></a>
<FONT color="green">176</FONT>                if ( isConfigurationDefaulted )<a name="line.176"></a>
<FONT color="green">177</FONT>                {<a name="line.177"></a>
<FONT color="green">178</FONT>                    configuration = checkRepositoryLocations( configuration );<a name="line.178"></a>
<FONT color="green">179</FONT>                }<a name="line.179"></a>
<FONT color="green">180</FONT>            }<a name="line.180"></a>
<FONT color="green">181</FONT>    <a name="line.181"></a>
<FONT color="green">182</FONT>            return configuration;<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>        @SuppressWarnings ( "unchecked" )<a name="line.185"></a>
<FONT color="green">186</FONT>        private Configuration load()<a name="line.186"></a>
<FONT color="green">187</FONT>        {<a name="line.187"></a>
<FONT color="green">188</FONT>            // TODO: should this be the same as section? make sure unnamed sections still work (eg, sys properties)<a name="line.188"></a>
<FONT color="green">189</FONT>            Registry subset = registry.getSubset( KEY );<a name="line.189"></a>
<FONT color="green">190</FONT>            if ( subset.getString( "version" ) == null )<a name="line.190"></a>
<FONT color="green">191</FONT>            {<a name="line.191"></a>
<FONT color="green">192</FONT>                // a little autodetection of v1, even if version is omitted (this was previously allowed)<a name="line.192"></a>
<FONT color="green">193</FONT>                if ( subset.getSubset( "repositoryScanning" ).isEmpty() )<a name="line.193"></a>
<FONT color="green">194</FONT>                {<a name="line.194"></a>
<FONT color="green">195</FONT>                    // only for empty, or v &lt; 1<a name="line.195"></a>
<FONT color="green">196</FONT>                    subset = readDefaultConfiguration();<a name="line.196"></a>
<FONT color="green">197</FONT>                }<a name="line.197"></a>
<FONT color="green">198</FONT>            }<a name="line.198"></a>
<FONT color="green">199</FONT>    <a name="line.199"></a>
<FONT color="green">200</FONT>            Configuration config = new ConfigurationRegistryReader().read( subset );<a name="line.200"></a>
<FONT color="green">201</FONT>    <a name="line.201"></a>
<FONT color="green">202</FONT>            config.getRepositoryGroups();<a name="line.202"></a>
<FONT color="green">203</FONT>            config.getRepositoryGroupsAsMap();<a name="line.203"></a>
<FONT color="green">204</FONT>            if ( !config.getRepositories().isEmpty() )<a name="line.204"></a>
<FONT color="green">205</FONT>            {<a name="line.205"></a>
<FONT color="green">206</FONT>                for ( Iterator&lt;V1RepositoryConfiguration&gt; i = config.getRepositories().iterator(); i.hasNext(); )<a name="line.206"></a>
<FONT color="green">207</FONT>                {<a name="line.207"></a>
<FONT color="green">208</FONT>                    V1RepositoryConfiguration r = i.next();<a name="line.208"></a>
<FONT color="green">209</FONT>                    r.setScanned( r.isIndexed() );<a name="line.209"></a>
<FONT color="green">210</FONT>    <a name="line.210"></a>
<FONT color="green">211</FONT>                    if ( StringUtils.startsWith( r.getUrl(), "file://" ) )<a name="line.211"></a>
<FONT color="green">212</FONT>                    {<a name="line.212"></a>
<FONT color="green">213</FONT>                        r.setLocation( r.getUrl().substring( 7 ) );<a name="line.213"></a>
<FONT color="green">214</FONT>                        config.addManagedRepository( r );<a name="line.214"></a>
<FONT color="green">215</FONT>                    }<a name="line.215"></a>
<FONT color="green">216</FONT>                    else if ( StringUtils.startsWith( r.getUrl(), "file:" ) )<a name="line.216"></a>
<FONT color="green">217</FONT>                    {<a name="line.217"></a>
<FONT color="green">218</FONT>                        r.setLocation( r.getUrl().substring( 5 ) );<a name="line.218"></a>
<FONT color="green">219</FONT>                        config.addManagedRepository( r );<a name="line.219"></a>
<FONT color="green">220</FONT>                    }<a name="line.220"></a>
<FONT color="green">221</FONT>                    else if ( StringUtils.isEmpty( r.getUrl() ) )<a name="line.221"></a>
<FONT color="green">222</FONT>                    {<a name="line.222"></a>
<FONT color="green">223</FONT>                        // in case of empty url we can consider it as a managed one<a name="line.223"></a>
<FONT color="green">224</FONT>                        // check if location is null<a name="line.224"></a>
<FONT color="green">225</FONT>                        //file://${appserver.base}/repositories/${id}<a name="line.225"></a>
<FONT color="green">226</FONT>                        if ( StringUtils.isEmpty( r.getLocation() ) )<a name="line.226"></a>
<FONT color="green">227</FONT>                        {<a name="line.227"></a>
<FONT color="green">228</FONT>                            r.setLocation( "file://${appserver.base}/repositories/" + r.getId() );<a name="line.228"></a>
<FONT color="green">229</FONT>                        }<a name="line.229"></a>
<FONT color="green">230</FONT>                        config.addManagedRepository( r );<a name="line.230"></a>
<FONT color="green">231</FONT>                    }<a name="line.231"></a>
<FONT color="green">232</FONT>                    else<a name="line.232"></a>
<FONT color="green">233</FONT>                    {<a name="line.233"></a>
<FONT color="green">234</FONT>                        RemoteRepositoryConfiguration repo = new RemoteRepositoryConfiguration();<a name="line.234"></a>
<FONT color="green">235</FONT>                        repo.setId( r.getId() );<a name="line.235"></a>
<FONT color="green">236</FONT>                        repo.setLayout( r.getLayout() );<a name="line.236"></a>
<FONT color="green">237</FONT>                        repo.setName( r.getName() );<a name="line.237"></a>
<FONT color="green">238</FONT>                        repo.setUrl( r.getUrl() );<a name="line.238"></a>
<FONT color="green">239</FONT>                        config.addRemoteRepository( repo );<a name="line.239"></a>
<FONT color="green">240</FONT>                    }<a name="line.240"></a>
<FONT color="green">241</FONT>                }<a name="line.241"></a>
<FONT color="green">242</FONT>    <a name="line.242"></a>
<FONT color="green">243</FONT>                // Prevent duplicate repositories from showing up.<a name="line.243"></a>
<FONT color="green">244</FONT>                config.getRepositories().clear();<a name="line.244"></a>
<FONT color="green">245</FONT>    <a name="line.245"></a>
<FONT color="green">246</FONT>                registry.removeSubset( KEY + ".repositories" );<a name="line.246"></a>
<FONT color="green">247</FONT>            }<a name="line.247"></a>
<FONT color="green">248</FONT>    <a name="line.248"></a>
<FONT color="green">249</FONT>            if ( !CollectionUtils.isEmpty( config.getRemoteRepositories() ) )<a name="line.249"></a>
<FONT color="green">250</FONT>            {<a name="line.250"></a>
<FONT color="green">251</FONT>                List&lt;RemoteRepositoryConfiguration&gt; remoteRepos = config.getRemoteRepositories();<a name="line.251"></a>
<FONT color="green">252</FONT>                for ( RemoteRepositoryConfiguration repo : remoteRepos )<a name="line.252"></a>
<FONT color="green">253</FONT>                {<a name="line.253"></a>
<FONT color="green">254</FONT>                    // [MRM-582] Remote Repositories with empty &lt;username&gt; and &lt;password&gt; fields shouldn't be created in configuration.<a name="line.254"></a>
<FONT color="green">255</FONT>                    if ( StringUtils.isBlank( repo.getUsername() ) )<a name="line.255"></a>
<FONT color="green">256</FONT>                    {<a name="line.256"></a>
<FONT color="green">257</FONT>                        repo.setUsername( null );<a name="line.257"></a>
<FONT color="green">258</FONT>                    }<a name="line.258"></a>
<FONT color="green">259</FONT>    <a name="line.259"></a>
<FONT color="green">260</FONT>                    if ( StringUtils.isBlank( repo.getPassword() ) )<a name="line.260"></a>
<FONT color="green">261</FONT>                    {<a name="line.261"></a>
<FONT color="green">262</FONT>                        repo.setPassword( null );<a name="line.262"></a>
<FONT color="green">263</FONT>                    }<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>    <a name="line.266"></a>
<FONT color="green">267</FONT>            if ( !config.getProxyConnectors().isEmpty() )<a name="line.267"></a>
<FONT color="green">268</FONT>            {<a name="line.268"></a>
<FONT color="green">269</FONT>                // Fix Proxy Connector Settings.<a name="line.269"></a>
<FONT color="green">270</FONT>    <a name="line.270"></a>
<FONT color="green">271</FONT>                // Create a copy of the list to read from (to prevent concurrent modification exceptions)<a name="line.271"></a>
<FONT color="green">272</FONT>                List&lt;ProxyConnectorConfiguration&gt; proxyConnectorList =<a name="line.272"></a>
<FONT color="green">273</FONT>                    new ArrayList&lt;ProxyConnectorConfiguration&gt;( config.getProxyConnectors() );<a name="line.273"></a>
<FONT color="green">274</FONT>                // Remove the old connector list.<a name="line.274"></a>
<FONT color="green">275</FONT>                config.getProxyConnectors().clear();<a name="line.275"></a>
<FONT color="green">276</FONT>    <a name="line.276"></a>
<FONT color="green">277</FONT>                for ( ProxyConnectorConfiguration connector : proxyConnectorList )<a name="line.277"></a>
<FONT color="green">278</FONT>                {<a name="line.278"></a>
<FONT color="green">279</FONT>                    // Fix policies<a name="line.279"></a>
<FONT color="green">280</FONT>                    boolean connectorValid = true;<a name="line.280"></a>
<FONT color="green">281</FONT>    <a name="line.281"></a>
<FONT color="green">282</FONT>                    Map&lt;String, String&gt; policies = new HashMap&lt;String, String&gt;();<a name="line.282"></a>
<FONT color="green">283</FONT>                    // Make copy of policies<a name="line.283"></a>
<FONT color="green">284</FONT>                    policies.putAll( connector.getPolicies() );<a name="line.284"></a>
<FONT color="green">285</FONT>                    // Clear out policies<a name="line.285"></a>
<FONT color="green">286</FONT>                    connector.getPolicies().clear();<a name="line.286"></a>
<FONT color="green">287</FONT>    <a name="line.287"></a>
<FONT color="green">288</FONT>                    // Work thru policies. cleaning them up.<a name="line.288"></a>
<FONT color="green">289</FONT>                    for ( Entry&lt;String, String&gt; entry : policies.entrySet() )<a name="line.289"></a>
<FONT color="green">290</FONT>                    {<a name="line.290"></a>
<FONT color="green">291</FONT>                        String policyId = entry.getKey();<a name="line.291"></a>
<FONT color="green">292</FONT>                        String setting = entry.getValue();<a name="line.292"></a>
<FONT color="green">293</FONT>    <a name="line.293"></a>
<FONT color="green">294</FONT>                        // Upgrade old policy settings.<a name="line.294"></a>
<FONT color="green">295</FONT>                        if ( "releases".equals( policyId ) || "snapshots".equals( policyId ) )<a name="line.295"></a>
<FONT color="green">296</FONT>                        {<a name="line.296"></a>
<FONT color="green">297</FONT>                            if ( "ignored".equals( setting ) )<a name="line.297"></a>
<FONT color="green">298</FONT>                            {<a name="line.298"></a>
<FONT color="green">299</FONT>                                setting = AbstractUpdatePolicy.ALWAYS;<a name="line.299"></a>
<FONT color="green">300</FONT>                            }<a name="line.300"></a>
<FONT color="green">301</FONT>                            else if ( "disabled".equals( setting ) )<a name="line.301"></a>
<FONT color="green">302</FONT>                            {<a name="line.302"></a>
<FONT color="green">303</FONT>                                setting = AbstractUpdatePolicy.NEVER;<a name="line.303"></a>
<FONT color="green">304</FONT>                            }<a name="line.304"></a>
<FONT color="green">305</FONT>                        }<a name="line.305"></a>
<FONT color="green">306</FONT>                        else if ( "cache-failures".equals( policyId ) )<a name="line.306"></a>
<FONT color="green">307</FONT>                        {<a name="line.307"></a>
<FONT color="green">308</FONT>                            if ( "ignored".equals( setting ) )<a name="line.308"></a>
<FONT color="green">309</FONT>                            {<a name="line.309"></a>
<FONT color="green">310</FONT>                                setting = CachedFailuresPolicy.NO;<a name="line.310"></a>
<FONT color="green">311</FONT>                            }<a name="line.311"></a>
<FONT color="green">312</FONT>                            else if ( "cached".equals( setting ) )<a name="line.312"></a>
<FONT color="green">313</FONT>                            {<a name="line.313"></a>
<FONT color="green">314</FONT>                                setting = CachedFailuresPolicy.YES;<a name="line.314"></a>
<FONT color="green">315</FONT>                            }<a name="line.315"></a>
<FONT color="green">316</FONT>                        }<a name="line.316"></a>
<FONT color="green">317</FONT>                        else if ( "checksum".equals( policyId ) )<a name="line.317"></a>
<FONT color="green">318</FONT>                        {<a name="line.318"></a>
<FONT color="green">319</FONT>                            if ( "ignored".equals( setting ) )<a name="line.319"></a>
<FONT color="green">320</FONT>                            {<a name="line.320"></a>
<FONT color="green">321</FONT>                                setting = ChecksumPolicy.IGNORE;<a name="line.321"></a>
<FONT color="green">322</FONT>                            }<a name="line.322"></a>
<FONT color="green">323</FONT>                        }<a name="line.323"></a>
<FONT color="green">324</FONT>    <a name="line.324"></a>
<FONT color="green">325</FONT>                        // Validate existance of policy key.<a name="line.325"></a>
<FONT color="green">326</FONT>                        if ( policyExists( policyId ) )<a name="line.326"></a>
<FONT color="green">327</FONT>                        {<a name="line.327"></a>
<FONT color="green">328</FONT>                            Policy policy = findPolicy( policyId );<a name="line.328"></a>
<FONT color="green">329</FONT>                            // Does option exist?<a name="line.329"></a>
<FONT color="green">330</FONT>                            if ( !policy.getOptions().contains( setting ) )<a name="line.330"></a>
<FONT color="green">331</FONT>                            {<a name="line.331"></a>
<FONT color="green">332</FONT>                                setting = policy.getDefaultOption();<a name="line.332"></a>
<FONT color="green">333</FONT>                            }<a name="line.333"></a>
<FONT color="green">334</FONT>                            connector.addPolicy( policyId, setting );<a name="line.334"></a>
<FONT color="green">335</FONT>                        }<a name="line.335"></a>
<FONT color="green">336</FONT>                        else<a name="line.336"></a>
<FONT color="green">337</FONT>                        {<a name="line.337"></a>
<FONT color="green">338</FONT>                            // Policy key doesn't exist. Don't add it to golden version.<a name="line.338"></a>
<FONT color="green">339</FONT>                            log.warn( "Policy [" + policyId + "] does not exist." );<a name="line.339"></a>
<FONT color="green">340</FONT>                        }<a name="line.340"></a>
<FONT color="green">341</FONT>                    }<a name="line.341"></a>
<FONT color="green">342</FONT>    <a name="line.342"></a>
<FONT color="green">343</FONT>                    if ( connectorValid )<a name="line.343"></a>
<FONT color="green">344</FONT>                    {<a name="line.344"></a>
<FONT color="green">345</FONT>                        config.addProxyConnector( connector );<a name="line.345"></a>
<FONT color="green">346</FONT>                    }<a name="line.346"></a>
<FONT color="green">347</FONT>                }<a name="line.347"></a>
<FONT color="green">348</FONT>    <a name="line.348"></a>
<FONT color="green">349</FONT>                // Normalize the order fields in the proxy connectors.<a name="line.349"></a>
<FONT color="green">350</FONT>                Map&lt;String, java.util.List&lt;ProxyConnectorConfiguration&gt;&gt; proxyConnectorMap =<a name="line.350"></a>
<FONT color="green">351</FONT>                    config.getProxyConnectorAsMap();<a name="line.351"></a>
<FONT color="green">352</FONT>    <a name="line.352"></a>
<FONT color="green">353</FONT>                for ( List&lt;ProxyConnectorConfiguration&gt; connectors : proxyConnectorMap.values() )<a name="line.353"></a>
<FONT color="green">354</FONT>                {<a name="line.354"></a>
<FONT color="green">355</FONT>                    // Sort connectors by order field.<a name="line.355"></a>
<FONT color="green">356</FONT>                    Collections.sort( connectors, ProxyConnectorConfigurationOrderComparator.getInstance() );<a name="line.356"></a>
<FONT color="green">357</FONT>    <a name="line.357"></a>
<FONT color="green">358</FONT>                    // Normalize the order field values.<a name="line.358"></a>
<FONT color="green">359</FONT>                    int order = 1;<a name="line.359"></a>
<FONT color="green">360</FONT>                    for ( ProxyConnectorConfiguration connector : connectors )<a name="line.360"></a>
<FONT color="green">361</FONT>                    {<a name="line.361"></a>
<FONT color="green">362</FONT>                        connector.setOrder( order++ );<a name="line.362"></a>
<FONT color="green">363</FONT>                    }<a name="line.363"></a>
<FONT color="green">364</FONT>                }<a name="line.364"></a>
<FONT color="green">365</FONT>            }<a name="line.365"></a>
<FONT color="green">366</FONT>    <a name="line.366"></a>
<FONT color="green">367</FONT>            return config;<a name="line.367"></a>
<FONT color="green">368</FONT>        }<a name="line.368"></a>
<FONT color="green">369</FONT>    <a name="line.369"></a>
<FONT color="green">370</FONT>        private Policy findPolicy( String policyId )<a name="line.370"></a>
<FONT color="green">371</FONT>        {<a name="line.371"></a>
<FONT color="green">372</FONT>            if ( MapUtils.isEmpty( prePolicies ) )<a name="line.372"></a>
<FONT color="green">373</FONT>            {<a name="line.373"></a>
<FONT color="green">374</FONT>                log.error( "No PreDownloadPolicies found!" );<a name="line.374"></a>
<FONT color="green">375</FONT>                return null;<a name="line.375"></a>
<FONT color="green">376</FONT>            }<a name="line.376"></a>
<FONT color="green">377</FONT>    <a name="line.377"></a>
<FONT color="green">378</FONT>            if ( MapUtils.isEmpty( postPolicies ) )<a name="line.378"></a>
<FONT color="green">379</FONT>            {<a name="line.379"></a>
<FONT color="green">380</FONT>                log.error( "No PostDownloadPolicies found!" );<a name="line.380"></a>
<FONT color="green">381</FONT>                return null;<a name="line.381"></a>
<FONT color="green">382</FONT>            }<a name="line.382"></a>
<FONT color="green">383</FONT>    <a name="line.383"></a>
<FONT color="green">384</FONT>            Policy policy;<a name="line.384"></a>
<FONT color="green">385</FONT>    <a name="line.385"></a>
<FONT color="green">386</FONT>            policy = prePolicies.get( policyId );<a name="line.386"></a>
<FONT color="green">387</FONT>            if ( policy != null )<a name="line.387"></a>
<FONT color="green">388</FONT>            {<a name="line.388"></a>
<FONT color="green">389</FONT>                return policy;<a name="line.389"></a>
<FONT color="green">390</FONT>            }<a name="line.390"></a>
<FONT color="green">391</FONT>    <a name="line.391"></a>
<FONT color="green">392</FONT>            policy = postPolicies.get( policyId );<a name="line.392"></a>
<FONT color="green">393</FONT>            if ( policy != null )<a name="line.393"></a>
<FONT color="green">394</FONT>            {<a name="line.394"></a>
<FONT color="green">395</FONT>                return policy;<a name="line.395"></a>
<FONT color="green">396</FONT>            }<a name="line.396"></a>
<FONT color="green">397</FONT>    <a name="line.397"></a>
<FONT color="green">398</FONT>            policy = downloadErrorPolicies.get( policyId );<a name="line.398"></a>
<FONT color="green">399</FONT>            if ( policy != null )<a name="line.399"></a>
<FONT color="green">400</FONT>            {<a name="line.400"></a>
<FONT color="green">401</FONT>                return policy;<a name="line.401"></a>
<FONT color="green">402</FONT>            }<a name="line.402"></a>
<FONT color="green">403</FONT>    <a name="line.403"></a>
<FONT color="green">404</FONT>            return null;<a name="line.404"></a>
<FONT color="green">405</FONT>        }<a name="line.405"></a>
<FONT color="green">406</FONT>    <a name="line.406"></a>
<FONT color="green">407</FONT>        private boolean policyExists( String policyId )<a name="line.407"></a>
<FONT color="green">408</FONT>        {<a name="line.408"></a>
<FONT color="green">409</FONT>            if ( MapUtils.isEmpty( prePolicies ) )<a name="line.409"></a>
<FONT color="green">410</FONT>            {<a name="line.410"></a>
<FONT color="green">411</FONT>                log.error( "No PreDownloadPolicies found!" );<a name="line.411"></a>
<FONT color="green">412</FONT>                return false;<a name="line.412"></a>
<FONT color="green">413</FONT>            }<a name="line.413"></a>
<FONT color="green">414</FONT>    <a name="line.414"></a>
<FONT color="green">415</FONT>            if ( MapUtils.isEmpty( postPolicies ) )<a name="line.415"></a>
<FONT color="green">416</FONT>            {<a name="line.416"></a>
<FONT color="green">417</FONT>                log.error( "No PostDownloadPolicies found!" );<a name="line.417"></a>
<FONT color="green">418</FONT>                return false;<a name="line.418"></a>
<FONT color="green">419</FONT>            }<a name="line.419"></a>
<FONT color="green">420</FONT>    <a name="line.420"></a>
<FONT color="green">421</FONT>            return ( prePolicies.containsKey( policyId ) || postPolicies.containsKey( policyId )<a name="line.421"></a>
<FONT color="green">422</FONT>                || downloadErrorPolicies.containsKey( policyId ) );<a name="line.422"></a>
<FONT color="green">423</FONT>        }<a name="line.423"></a>
<FONT color="green">424</FONT>    <a name="line.424"></a>
<FONT color="green">425</FONT>        private Registry readDefaultConfiguration()<a name="line.425"></a>
<FONT color="green">426</FONT>        {<a name="line.426"></a>
<FONT color="green">427</FONT>            // if it contains some old configuration, remove it (Archiva 0.9)<a name="line.427"></a>
<FONT color="green">428</FONT>            registry.removeSubset( KEY );<a name="line.428"></a>
<FONT color="green">429</FONT>    <a name="line.429"></a>
<FONT color="green">430</FONT>            try<a name="line.430"></a>
<FONT color="green">431</FONT>            {<a name="line.431"></a>
<FONT color="green">432</FONT>                registry.addConfigurationFromResource( "org/apache/archiva/configuration/default-archiva.xml", KEY );<a name="line.432"></a>
<FONT color="green">433</FONT>                this.isConfigurationDefaulted = true;<a name="line.433"></a>
<FONT color="green">434</FONT>            }<a name="line.434"></a>
<FONT color="green">435</FONT>            catch ( RegistryException e )<a name="line.435"></a>
<FONT color="green">436</FONT>            {<a name="line.436"></a>
<FONT color="green">437</FONT>                throw new ConfigurationRuntimeException(<a name="line.437"></a>
<FONT color="green">438</FONT>                    "Fatal error: Unable to find the built-in default configuration and load it into the registry", e );<a name="line.438"></a>
<FONT color="green">439</FONT>            }<a name="line.439"></a>
<FONT color="green">440</FONT>            return registry.getSubset( KEY );<a name="line.440"></a>
<FONT color="green">441</FONT>        }<a name="line.441"></a>
<FONT color="green">442</FONT>    <a name="line.442"></a>
<FONT color="green">443</FONT>        @SuppressWarnings ( "unchecked" )<a name="line.443"></a>
<FONT color="green">444</FONT>        public synchronized void save( Configuration configuration )<a name="line.444"></a>
<FONT color="green">445</FONT>            throws IndeterminateConfigurationException, RegistryException<a name="line.445"></a>
<FONT color="green">446</FONT>        {<a name="line.446"></a>
<FONT color="green">447</FONT>            Registry section = registry.getSection( KEY + ".user" );<a name="line.447"></a>
<FONT color="green">448</FONT>            Registry baseSection = registry.getSection( KEY + ".base" );<a name="line.448"></a>
<FONT color="green">449</FONT>            if ( section == null )<a name="line.449"></a>
<FONT color="green">450</FONT>            {<a name="line.450"></a>
<FONT color="green">451</FONT>                section = baseSection;<a name="line.451"></a>
<FONT color="green">452</FONT>                if ( section == null )<a name="line.452"></a>
<FONT color="green">453</FONT>                {<a name="line.453"></a>
<FONT color="green">454</FONT>                    section = createDefaultConfigurationFile();<a name="line.454"></a>
<FONT color="green">455</FONT>                }<a name="line.455"></a>
<FONT color="green">456</FONT>            }<a name="line.456"></a>
<FONT color="green">457</FONT>            else if ( baseSection != null )<a name="line.457"></a>
<FONT color="green">458</FONT>            {<a name="line.458"></a>
<FONT color="green">459</FONT>                Collection&lt;String&gt; keys = baseSection.getKeys();<a name="line.459"></a>
<FONT color="green">460</FONT>                boolean foundList = false;<a name="line.460"></a>
<FONT color="green">461</FONT>                for ( Iterator&lt;String&gt; i = keys.iterator(); i.hasNext() &amp;&amp; !foundList; )<a name="line.461"></a>
<FONT color="green">462</FONT>                {<a name="line.462"></a>
<FONT color="green">463</FONT>                    String key = i.next();<a name="line.463"></a>
<FONT color="green">464</FONT>    <a name="line.464"></a>
<FONT color="green">465</FONT>                    // a little aggressive with the repositoryScanning and databaseScanning - should be no need to split<a name="line.465"></a>
<FONT color="green">466</FONT>                    // that configuration<a name="line.466"></a>
<FONT color="green">467</FONT>                    if ( key.startsWith( "repositories" ) || key.startsWith( "proxyConnectors" ) || key.startsWith(<a name="line.467"></a>
<FONT color="green">468</FONT>                        "networkProxies" ) || key.startsWith( "repositoryScanning" ) || key.startsWith(<a name="line.468"></a>
<FONT color="green">469</FONT>                        "remoteRepositories" ) || key.startsWith( "managedRepositories" ) || key.startsWith(<a name="line.469"></a>
<FONT color="green">470</FONT>                        "repositoryGroups" ) )<a name="line.470"></a>
<FONT color="green">471</FONT>                    {<a name="line.471"></a>
<FONT color="green">472</FONT>                        foundList = true;<a name="line.472"></a>
<FONT color="green">473</FONT>                    }<a name="line.473"></a>
<FONT color="green">474</FONT>                }<a name="line.474"></a>
<FONT color="green">475</FONT>    <a name="line.475"></a>
<FONT color="green">476</FONT>                if ( foundList )<a name="line.476"></a>
<FONT color="green">477</FONT>                {<a name="line.477"></a>
<FONT color="green">478</FONT>                    this.configuration = null;<a name="line.478"></a>
<FONT color="green">479</FONT>    <a name="line.479"></a>
<FONT color="green">480</FONT>                    throw new IndeterminateConfigurationException(<a name="line.480"></a>
<FONT color="green">481</FONT>                        "Configuration can not be saved when it is loaded from two sources" );<a name="line.481"></a>
<FONT color="green">482</FONT>                }<a name="line.482"></a>
<FONT color="green">483</FONT>            }<a name="line.483"></a>
<FONT color="green">484</FONT>    <a name="line.484"></a>
<FONT color="green">485</FONT>            // escape all cron expressions to handle ','<a name="line.485"></a>
<FONT color="green">486</FONT>            escapeCronExpressions( configuration );<a name="line.486"></a>
<FONT color="green">487</FONT>    <a name="line.487"></a>
<FONT color="green">488</FONT>            // [MRM-661] Due to a bug in the modello registry writer, we need to take these out by hand. They'll be put back by the writer.<a name="line.488"></a>
<FONT color="green">489</FONT>            if ( configuration.getManagedRepositories().isEmpty() &amp;&amp; section != null )<a name="line.489"></a>
<FONT color="green">490</FONT>            {<a name="line.490"></a>
<FONT color="green">491</FONT>                section.removeSubset( "managedRepositories" );<a name="line.491"></a>
<FONT color="green">492</FONT>            }<a name="line.492"></a>
<FONT color="green">493</FONT>            if ( configuration.getRemoteRepositories().isEmpty() &amp;&amp; section != null )<a name="line.493"></a>
<FONT color="green">494</FONT>            {<a name="line.494"></a>
<FONT color="green">495</FONT>                section.removeSubset( "remoteRepositories" );<a name="line.495"></a>
<FONT color="green">496</FONT>    <a name="line.496"></a>
<FONT color="green">497</FONT>            }<a name="line.497"></a>
<FONT color="green">498</FONT>            if ( configuration.getProxyConnectors().isEmpty() &amp;&amp; section != null )<a name="line.498"></a>
<FONT color="green">499</FONT>            {<a name="line.499"></a>
<FONT color="green">500</FONT>                section.removeSubset( "proxyConnectors" );<a name="line.500"></a>
<FONT color="green">501</FONT>            }<a name="line.501"></a>
<FONT color="green">502</FONT>            if ( configuration.getNetworkProxies().isEmpty() &amp;&amp; section != null )<a name="line.502"></a>
<FONT color="green">503</FONT>            {<a name="line.503"></a>
<FONT color="green">504</FONT>                section.removeSubset( "networkProxies" );<a name="line.504"></a>
<FONT color="green">505</FONT>            }<a name="line.505"></a>
<FONT color="green">506</FONT>            if ( configuration.getLegacyArtifactPaths().isEmpty() &amp;&amp; section != null )<a name="line.506"></a>
<FONT color="green">507</FONT>            {<a name="line.507"></a>
<FONT color="green">508</FONT>                section.removeSubset( "legacyArtifactPaths" );<a name="line.508"></a>
<FONT color="green">509</FONT>            }<a name="line.509"></a>
<FONT color="green">510</FONT>            if ( configuration.getRepositoryGroups().isEmpty() &amp;&amp; section != null )<a name="line.510"></a>
<FONT color="green">511</FONT>            {<a name="line.511"></a>
<FONT color="green">512</FONT>                section.removeSubset( "repositoryGroups" );<a name="line.512"></a>
<FONT color="green">513</FONT>            }<a name="line.513"></a>
<FONT color="green">514</FONT>            if ( configuration.getRepositoryScanning() != null )<a name="line.514"></a>
<FONT color="green">515</FONT>            {<a name="line.515"></a>
<FONT color="green">516</FONT>                if ( configuration.getRepositoryScanning().getKnownContentConsumers().isEmpty() &amp;&amp; section != null )<a name="line.516"></a>
<FONT color="green">517</FONT>                {<a name="line.517"></a>
<FONT color="green">518</FONT>                    section.removeSubset( "repositoryScanning.knownContentConsumers" );<a name="line.518"></a>
<FONT color="green">519</FONT>                }<a name="line.519"></a>
<FONT color="green">520</FONT>                if ( configuration.getRepositoryScanning().getInvalidContentConsumers().isEmpty() &amp;&amp; section != null )<a name="line.520"></a>
<FONT color="green">521</FONT>                {<a name="line.521"></a>
<FONT color="green">522</FONT>                    section.removeSubset( "repositoryScanning.invalidContentConsumers" );<a name="line.522"></a>
<FONT color="green">523</FONT>                }<a name="line.523"></a>
<FONT color="green">524</FONT>            }<a name="line.524"></a>
<FONT color="green">525</FONT>    <a name="line.525"></a>
<FONT color="green">526</FONT>            new ConfigurationRegistryWriter().write( configuration, section );<a name="line.526"></a>
<FONT color="green">527</FONT>            section.save();<a name="line.527"></a>
<FONT color="green">528</FONT>    <a name="line.528"></a>
<FONT color="green">529</FONT>            this.configuration = unescapeExpressions( configuration );<a name="line.529"></a>
<FONT color="green">530</FONT>    <a name="line.530"></a>
<FONT color="green">531</FONT>            triggerEvent( ConfigurationEvent.SAVED );<a name="line.531"></a>
<FONT color="green">532</FONT>        }<a name="line.532"></a>
<FONT color="green">533</FONT>    <a name="line.533"></a>
<FONT color="green">534</FONT>        private void escapeCronExpressions( Configuration configuration )<a name="line.534"></a>
<FONT color="green">535</FONT>        {<a name="line.535"></a>
<FONT color="green">536</FONT>            for ( ManagedRepositoryConfiguration c : configuration.getManagedRepositories() )<a name="line.536"></a>
<FONT color="green">537</FONT>            {<a name="line.537"></a>
<FONT color="green">538</FONT>                c.setRefreshCronExpression( escapeCronExpression( c.getRefreshCronExpression() ) );<a name="line.538"></a>
<FONT color="green">539</FONT>            }<a name="line.539"></a>
<FONT color="green">540</FONT>    <a name="line.540"></a>
<FONT color="green">541</FONT>    <a name="line.541"></a>
<FONT color="green">542</FONT>        }<a name="line.542"></a>
<FONT color="green">543</FONT>    <a name="line.543"></a>
<FONT color="green">544</FONT>        private Registry createDefaultConfigurationFile()<a name="line.544"></a>
<FONT color="green">545</FONT>            throws RegistryException<a name="line.545"></a>
<FONT color="green">546</FONT>        {<a name="line.546"></a>
<FONT color="green">547</FONT>            // TODO: may not be needed under commons-configuration 1.4 - check<a name="line.547"></a>
<FONT color="green">548</FONT>    <a name="line.548"></a>
<FONT color="green">549</FONT>            String contents = "&lt;configuration /&gt;";<a name="line.549"></a>
<FONT color="green">550</FONT>    <a name="line.550"></a>
<FONT color="green">551</FONT>            String fileLocation = userConfigFilename;<a name="line.551"></a>
<FONT color="green">552</FONT>    <a name="line.552"></a>
<FONT color="green">553</FONT>            if ( !writeFile( "user configuration", userConfigFilename, contents ) )<a name="line.553"></a>
<FONT color="green">554</FONT>            {<a name="line.554"></a>
<FONT color="green">555</FONT>                fileLocation = altConfigFilename;<a name="line.555"></a>
<FONT color="green">556</FONT>                if ( !writeFile( "alternative configuration", altConfigFilename, contents ) )<a name="line.556"></a>
<FONT color="green">557</FONT>                {<a name="line.557"></a>
<FONT color="green">558</FONT>                    throw new RegistryException(<a name="line.558"></a>
<FONT color="green">559</FONT>                        "Unable to create configuration file in either user [" + userConfigFilename + "] or alternative ["<a name="line.559"></a>
<FONT color="green">560</FONT>                            + altConfigFilename<a name="line.560"></a>
<FONT color="green">561</FONT>                            + "] locations on disk, usually happens when not allowed to write to those locations." );<a name="line.561"></a>
<FONT color="green">562</FONT>                }<a name="line.562"></a>
<FONT color="green">563</FONT>            }<a name="line.563"></a>
<FONT color="green">564</FONT>    <a name="line.564"></a>
<FONT color="green">565</FONT>            // olamy hackish I know :-)<a name="line.565"></a>
<FONT color="green">566</FONT>            contents = "&lt;configuration&gt;&lt;xml fileName=\"" + fileLocation<a name="line.566"></a>
<FONT color="green">567</FONT>                + "\" config-forceCreate=\"true\" config-name=\"org.apache.archiva.user\"/&gt;" + "&lt;/configuration&gt;";<a name="line.567"></a>
<FONT color="green">568</FONT>    <a name="line.568"></a>
<FONT color="green">569</FONT>            ( (CommonsConfigurationRegistry) registry ).setProperties( contents );<a name="line.569"></a>
<FONT color="green">570</FONT>    <a name="line.570"></a>
<FONT color="green">571</FONT>            registry.initialize();<a name="line.571"></a>
<FONT color="green">572</FONT>    <a name="line.572"></a>
<FONT color="green">573</FONT>            for ( RegistryListener regListener : registryListeners )<a name="line.573"></a>
<FONT color="green">574</FONT>            {<a name="line.574"></a>
<FONT color="green">575</FONT>                addRegistryChangeListener( regListener );<a name="line.575"></a>
<FONT color="green">576</FONT>            }<a name="line.576"></a>
<FONT color="green">577</FONT>    <a name="line.577"></a>
<FONT color="green">578</FONT>            triggerEvent( ConfigurationEvent.SAVED );<a name="line.578"></a>
<FONT color="green">579</FONT>    <a name="line.579"></a>
<FONT color="green">580</FONT>            Registry section = registry.getSection( KEY + ".user" );<a name="line.580"></a>
<FONT color="green">581</FONT>            return section == null ? new CommonsConfigurationRegistry( new BaseConfiguration() ) : section;<a name="line.581"></a>
<FONT color="green">582</FONT>        }<a name="line.582"></a>
<FONT color="green">583</FONT>    <a name="line.583"></a>
<FONT color="green">584</FONT>        /**<a name="line.584"></a>
<FONT color="green">585</FONT>         * Attempts to write the contents to a file, if an IOException occurs, return false.<a name="line.585"></a>
<FONT color="green">586</FONT>         * &lt;p/&gt;<a name="line.586"></a>
<FONT color="green">587</FONT>         * The file will be created if the directory to the file exists, otherwise this will return false.<a name="line.587"></a>
<FONT color="green">588</FONT>         *<a name="line.588"></a>
<FONT color="green">589</FONT>         * @param filetype the filetype (freeform text) to use in logging messages when failure to write.<a name="line.589"></a>
<FONT color="green">590</FONT>         * @param path     the path to write to.<a name="line.590"></a>
<FONT color="green">591</FONT>         * @param contents the contents to write.<a name="line.591"></a>
<FONT color="green">592</FONT>         * @return true if write successful.<a name="line.592"></a>
<FONT color="green">593</FONT>         */<a name="line.593"></a>
<FONT color="green">594</FONT>        private boolean writeFile( String filetype, String path, String contents )<a name="line.594"></a>
<FONT color="green">595</FONT>        {<a name="line.595"></a>
<FONT color="green">596</FONT>            File file = new File( path );<a name="line.596"></a>
<FONT color="green">597</FONT>    <a name="line.597"></a>
<FONT color="green">598</FONT>            try<a name="line.598"></a>
<FONT color="green">599</FONT>            {<a name="line.599"></a>
<FONT color="green">600</FONT>                // Check parent directory (if it is declared)<a name="line.600"></a>
<FONT color="green">601</FONT>                if ( file.getParentFile() != null )<a name="line.601"></a>
<FONT color="green">602</FONT>                {<a name="line.602"></a>
<FONT color="green">603</FONT>                    // Check that directory exists<a name="line.603"></a>
<FONT color="green">604</FONT>                    if ( ! file.getParentFile().isDirectory() )<a name="line.604"></a>
<FONT color="green">605</FONT>                    {<a name="line.605"></a>
<FONT color="green">606</FONT>                        // Directory to file must exist for file to be created<a name="line.606"></a>
<FONT color="green">607</FONT>                        return false;<a name="line.607"></a>
<FONT color="green">608</FONT>                    }<a name="line.608"></a>
<FONT color="green">609</FONT>                }<a name="line.609"></a>
<FONT color="green">610</FONT>    <a name="line.610"></a>
<FONT color="green">611</FONT>                FileUtils.writeStringToFile( file, contents, "UTF-8" );<a name="line.611"></a>
<FONT color="green">612</FONT>                return true;<a name="line.612"></a>
<FONT color="green">613</FONT>            }<a name="line.613"></a>
<FONT color="green">614</FONT>            catch ( IOException e )<a name="line.614"></a>
<FONT color="green">615</FONT>            {<a name="line.615"></a>
<FONT color="green">616</FONT>                log.error( "Unable to create " + filetype + " file: " + e.getMessage(), e );<a name="line.616"></a>
<FONT color="green">617</FONT>                return false;<a name="line.617"></a>
<FONT color="green">618</FONT>            }<a name="line.618"></a>
<FONT color="green">619</FONT>        }<a name="line.619"></a>
<FONT color="green">620</FONT>    <a name="line.620"></a>
<FONT color="green">621</FONT>        private void triggerEvent( int type )<a name="line.621"></a>
<FONT color="green">622</FONT>        {<a name="line.622"></a>
<FONT color="green">623</FONT>            ConfigurationEvent evt = new ConfigurationEvent( type );<a name="line.623"></a>
<FONT color="green">624</FONT>            for ( ConfigurationListener listener : listeners )<a name="line.624"></a>
<FONT color="green">625</FONT>            {<a name="line.625"></a>
<FONT color="green">626</FONT>                listener.configurationEvent( evt );<a name="line.626"></a>
<FONT color="green">627</FONT>            }<a name="line.627"></a>
<FONT color="green">628</FONT>        }<a name="line.628"></a>
<FONT color="green">629</FONT>    <a name="line.629"></a>
<FONT color="green">630</FONT>        public void addListener( ConfigurationListener listener )<a name="line.630"></a>
<FONT color="green">631</FONT>        {<a name="line.631"></a>
<FONT color="green">632</FONT>            if ( listener == null )<a name="line.632"></a>
<FONT color="green">633</FONT>            {<a name="line.633"></a>
<FONT color="green">634</FONT>                return;<a name="line.634"></a>
<FONT color="green">635</FONT>            }<a name="line.635"></a>
<FONT color="green">636</FONT>    <a name="line.636"></a>
<FONT color="green">637</FONT>            listeners.add( listener );<a name="line.637"></a>
<FONT color="green">638</FONT>        }<a name="line.638"></a>
<FONT color="green">639</FONT>    <a name="line.639"></a>
<FONT color="green">640</FONT>        public void removeListener( ConfigurationListener listener )<a name="line.640"></a>
<FONT color="green">641</FONT>        {<a name="line.641"></a>
<FONT color="green">642</FONT>            if ( listener == null )<a name="line.642"></a>
<FONT color="green">643</FONT>            {<a name="line.643"></a>
<FONT color="green">644</FONT>                return;<a name="line.644"></a>
<FONT color="green">645</FONT>            }<a name="line.645"></a>
<FONT color="green">646</FONT>    <a name="line.646"></a>
<FONT color="green">647</FONT>            listeners.remove( listener );<a name="line.647"></a>
<FONT color="green">648</FONT>        }<a name="line.648"></a>
<FONT color="green">649</FONT>    <a name="line.649"></a>
<FONT color="green">650</FONT>        public void addChangeListener( RegistryListener listener )<a name="line.650"></a>
<FONT color="green">651</FONT>        {<a name="line.651"></a>
<FONT color="green">652</FONT>            addRegistryChangeListener( listener );<a name="line.652"></a>
<FONT color="green">653</FONT>    <a name="line.653"></a>
<FONT color="green">654</FONT>            // keep track for later<a name="line.654"></a>
<FONT color="green">655</FONT>            registryListeners.add( listener );<a name="line.655"></a>
<FONT color="green">656</FONT>        }<a name="line.656"></a>
<FONT color="green">657</FONT>    <a name="line.657"></a>
<FONT color="green">658</FONT>        private void addRegistryChangeListener( RegistryListener listener )<a name="line.658"></a>
<FONT color="green">659</FONT>        {<a name="line.659"></a>
<FONT color="green">660</FONT>            Registry section = registry.getSection( KEY + ".user" );<a name="line.660"></a>
<FONT color="green">661</FONT>            if ( section != null )<a name="line.661"></a>
<FONT color="green">662</FONT>            {<a name="line.662"></a>
<FONT color="green">663</FONT>                section.addChangeListener( listener );<a name="line.663"></a>
<FONT color="green">664</FONT>            }<a name="line.664"></a>
<FONT color="green">665</FONT>            section = registry.getSection( KEY + ".base" );<a name="line.665"></a>
<FONT color="green">666</FONT>            if ( section != null )<a name="line.666"></a>
<FONT color="green">667</FONT>            {<a name="line.667"></a>
<FONT color="green">668</FONT>                section.addChangeListener( listener );<a name="line.668"></a>
<FONT color="green">669</FONT>            }<a name="line.669"></a>
<FONT color="green">670</FONT>        }<a name="line.670"></a>
<FONT color="green">671</FONT>    <a name="line.671"></a>
<FONT color="green">672</FONT>        @PostConstruct<a name="line.672"></a>
<FONT color="green">673</FONT>        public void initialize()<a name="line.673"></a>
<FONT color="green">674</FONT>        {<a name="line.674"></a>
<FONT color="green">675</FONT>    <a name="line.675"></a>
<FONT color="green">676</FONT>            this.postPolicies = componentContainer.buildMapWithRole( PostDownloadPolicy.class );<a name="line.676"></a>
<FONT color="green">677</FONT>            this.prePolicies = componentContainer.buildMapWithRole( PreDownloadPolicy.class );<a name="line.677"></a>
<FONT color="green">678</FONT>            this.downloadErrorPolicies = componentContainer.buildMapWithRole( DownloadErrorPolicy.class );<a name="line.678"></a>
<FONT color="green">679</FONT>            // Resolve expressions in the userConfigFilename and altConfigFilename<a name="line.679"></a>
<FONT color="green">680</FONT>            try<a name="line.680"></a>
<FONT color="green">681</FONT>            {<a name="line.681"></a>
<FONT color="green">682</FONT>                ExpressionEvaluator expressionEvaluator = new DefaultExpressionEvaluator();<a name="line.682"></a>
<FONT color="green">683</FONT>                expressionEvaluator.addExpressionSource( new SystemPropertyExpressionSource() );<a name="line.683"></a>
<FONT color="green">684</FONT>                String userConfigFileNameSysProps = System.getProperty( "archiva.user.configFileName" );<a name="line.684"></a>
<FONT color="green">685</FONT>                if ( StringUtils.isNotBlank( userConfigFileNameSysProps ) )<a name="line.685"></a>
<FONT color="green">686</FONT>                {<a name="line.686"></a>
<FONT color="green">687</FONT>                    userConfigFilename = userConfigFileNameSysProps;<a name="line.687"></a>
<FONT color="green">688</FONT>                }<a name="line.688"></a>
<FONT color="green">689</FONT>                else<a name="line.689"></a>
<FONT color="green">690</FONT>                {<a name="line.690"></a>
<FONT color="green">691</FONT>                    userConfigFilename = expressionEvaluator.expand( userConfigFilename );<a name="line.691"></a>
<FONT color="green">692</FONT>                }<a name="line.692"></a>
<FONT color="green">693</FONT>                altConfigFilename = expressionEvaluator.expand( altConfigFilename );<a name="line.693"></a>
<FONT color="green">694</FONT>                loadConfiguration();<a name="line.694"></a>
<FONT color="green">695</FONT>                handleUpgradeConfiguration();<a name="line.695"></a>
<FONT color="green">696</FONT>            }<a name="line.696"></a>
<FONT color="green">697</FONT>            catch ( IndeterminateConfigurationException e )<a name="line.697"></a>
<FONT color="green">698</FONT>            {<a name="line.698"></a>
<FONT color="green">699</FONT>                throw new RuntimeException( "failed during upgrade from previous version" + e.getMessage(), e );<a name="line.699"></a>
<FONT color="green">700</FONT>            }<a name="line.700"></a>
<FONT color="green">701</FONT>            catch ( RegistryException e )<a name="line.701"></a>
<FONT color="green">702</FONT>            {<a name="line.702"></a>
<FONT color="green">703</FONT>                throw new RuntimeException( "failed during upgrade from previous version" + e.getMessage(), e );<a name="line.703"></a>
<FONT color="green">704</FONT>            }<a name="line.704"></a>
<FONT color="green">705</FONT>            catch ( EvaluatorException e )<a name="line.705"></a>
<FONT color="green">706</FONT>            {<a name="line.706"></a>
<FONT color="green">707</FONT>                throw new RuntimeException(<a name="line.707"></a>
<FONT color="green">708</FONT>                    "Unable to evaluate expressions found in " + "userConfigFilename or altConfigFilename.", e);<a name="line.708"></a>
<FONT color="green">709</FONT>            }<a name="line.709"></a>
<FONT color="green">710</FONT>            registry.addChangeListener( this );<a name="line.710"></a>
<FONT color="green">711</FONT>        }<a name="line.711"></a>
<FONT color="green">712</FONT>    <a name="line.712"></a>
<FONT color="green">713</FONT>        /**<a name="line.713"></a>
<FONT color="green">714</FONT>         * upgrade from 1.3<a name="line.714"></a>
<FONT color="green">715</FONT>         */<a name="line.715"></a>
<FONT color="green">716</FONT>        private void handleUpgradeConfiguration()<a name="line.716"></a>
<FONT color="green">717</FONT>            throws RegistryException, IndeterminateConfigurationException<a name="line.717"></a>
<FONT color="green">718</FONT>        {<a name="line.718"></a>
<FONT color="green">719</FONT>    <a name="line.719"></a>
<FONT color="green">720</FONT>            List&lt;String&gt; dbConsumers = Arrays.asList( "update-db-artifact", "update-db-repository-metadata" );<a name="line.720"></a>
<FONT color="green">721</FONT>    <a name="line.721"></a>
<FONT color="green">722</FONT>            // remove database consumers if here<a name="line.722"></a>
<FONT color="green">723</FONT>            List&lt;String&gt; intersec =<a name="line.723"></a>
<FONT color="green">724</FONT>                ListUtils.intersection( dbConsumers, configuration.getRepositoryScanning().getKnownContentConsumers() );<a name="line.724"></a>
<FONT color="green">725</FONT>    <a name="line.725"></a>
<FONT color="green">726</FONT>            if ( !intersec.isEmpty() )<a name="line.726"></a>
<FONT color="green">727</FONT>            {<a name="line.727"></a>
<FONT color="green">728</FONT>    <a name="line.728"></a>
<FONT color="green">729</FONT>                List&lt;String&gt; knowContentConsumers =<a name="line.729"></a>
<FONT color="green">730</FONT>                    new ArrayList&lt;String&gt;( configuration.getRepositoryScanning().getKnownContentConsumers().size() );<a name="line.730"></a>
<FONT color="green">731</FONT>                for ( String knowContentConsumer : configuration.getRepositoryScanning().getKnownContentConsumers() )<a name="line.731"></a>
<FONT color="green">732</FONT>                {<a name="line.732"></a>
<FONT color="green">733</FONT>                    if ( !dbConsumers.contains( knowContentConsumer ) )<a name="line.733"></a>
<FONT color="green">734</FONT>                    {<a name="line.734"></a>
<FONT color="green">735</FONT>                        knowContentConsumers.add( knowContentConsumer );<a name="line.735"></a>
<FONT color="green">736</FONT>                    }<a name="line.736"></a>
<FONT color="green">737</FONT>                }<a name="line.737"></a>
<FONT color="green">738</FONT>    <a name="line.738"></a>
<FONT color="green">739</FONT>                configuration.getRepositoryScanning().setKnownContentConsumers( knowContentConsumers );<a name="line.739"></a>
<FONT color="green">740</FONT>            }<a name="line.740"></a>
<FONT color="green">741</FONT>    <a name="line.741"></a>
<FONT color="green">742</FONT>            // ensure create-archiva-metadata is here<a name="line.742"></a>
<FONT color="green">743</FONT>            if ( !configuration.getRepositoryScanning().getKnownContentConsumers().contains( "create-archiva-metadata" ) )<a name="line.743"></a>
<FONT color="green">744</FONT>            {<a name="line.744"></a>
<FONT color="green">745</FONT>                List&lt;String&gt; knowContentConsumers =<a name="line.745"></a>
<FONT color="green">746</FONT>                    new ArrayList&lt;String&gt;( configuration.getRepositoryScanning().getKnownContentConsumers() );<a name="line.746"></a>
<FONT color="green">747</FONT>                knowContentConsumers.add( "create-archiva-metadata" );<a name="line.747"></a>
<FONT color="green">748</FONT>                configuration.getRepositoryScanning().setKnownContentConsumers( knowContentConsumers );<a name="line.748"></a>
<FONT color="green">749</FONT>            }<a name="line.749"></a>
<FONT color="green">750</FONT>    <a name="line.750"></a>
<FONT color="green">751</FONT>            // ensure duplicate-artifacts is here<a name="line.751"></a>
<FONT color="green">752</FONT>            if ( !configuration.getRepositoryScanning().getKnownContentConsumers().contains( "duplicate-artifacts" ) )<a name="line.752"></a>
<FONT color="green">753</FONT>            {<a name="line.753"></a>
<FONT color="green">754</FONT>                List&lt;String&gt; knowContentConsumers =<a name="line.754"></a>
<FONT color="green">755</FONT>                    new ArrayList&lt;String&gt;( configuration.getRepositoryScanning().getKnownContentConsumers() );<a name="line.755"></a>
<FONT color="green">756</FONT>                knowContentConsumers.add( "duplicate-artifacts" );<a name="line.756"></a>
<FONT color="green">757</FONT>                configuration.getRepositoryScanning().setKnownContentConsumers( knowContentConsumers );<a name="line.757"></a>
<FONT color="green">758</FONT>            }<a name="line.758"></a>
<FONT color="green">759</FONT>            // save ??<a name="line.759"></a>
<FONT color="green">760</FONT>            //save( configuration );<a name="line.760"></a>
<FONT color="green">761</FONT>        }<a name="line.761"></a>
<FONT color="green">762</FONT>    <a name="line.762"></a>
<FONT color="green">763</FONT>        public void reload()<a name="line.763"></a>
<FONT color="green">764</FONT>        {<a name="line.764"></a>
<FONT color="green">765</FONT>            this.configuration = null;<a name="line.765"></a>
<FONT color="green">766</FONT>            try<a name="line.766"></a>
<FONT color="green">767</FONT>            {<a name="line.767"></a>
<FONT color="green">768</FONT>                this.registry.initialize();<a name="line.768"></a>
<FONT color="green">769</FONT>            }<a name="line.769"></a>
<FONT color="green">770</FONT>            catch ( RegistryException e )<a name="line.770"></a>
<FONT color="green">771</FONT>            {<a name="line.771"></a>
<FONT color="green">772</FONT>                throw new ConfigurationRuntimeException( e.getMessage(), e );<a name="line.772"></a>
<FONT color="green">773</FONT>            }<a name="line.773"></a>
<FONT color="green">774</FONT>            this.initialize();<a name="line.774"></a>
<FONT color="green">775</FONT>        }<a name="line.775"></a>
<FONT color="green">776</FONT>    <a name="line.776"></a>
<FONT color="green">777</FONT>        public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )<a name="line.777"></a>
<FONT color="green">778</FONT>        {<a name="line.778"></a>
<FONT color="green">779</FONT>            // nothing to do here<a name="line.779"></a>
<FONT color="green">780</FONT>        }<a name="line.780"></a>
<FONT color="green">781</FONT>    <a name="line.781"></a>
<FONT color="green">782</FONT>        public synchronized void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )<a name="line.782"></a>
<FONT color="green">783</FONT>        {<a name="line.783"></a>
<FONT color="green">784</FONT>            configuration = null;<a name="line.784"></a>
<FONT color="green">785</FONT>        }<a name="line.785"></a>
<FONT color="green">786</FONT>    <a name="line.786"></a>
<FONT color="green">787</FONT>        private String removeExpressions( String directory )<a name="line.787"></a>
<FONT color="green">788</FONT>        {<a name="line.788"></a>
<FONT color="green">789</FONT>            String value = StringUtils.replace( directory, "${appserver.base}",<a name="line.789"></a>
<FONT color="green">790</FONT>                                                registry.getString( "appserver.base", "${appserver.base}" ) );<a name="line.790"></a>
<FONT color="green">791</FONT>            value = StringUtils.replace( value, "${appserver.home}",<a name="line.791"></a>
<FONT color="green">792</FONT>                                         registry.getString( "appserver.home", "${appserver.home}" ) );<a name="line.792"></a>
<FONT color="green">793</FONT>            return value;<a name="line.793"></a>
<FONT color="green">794</FONT>        }<a name="line.794"></a>
<FONT color="green">795</FONT>    <a name="line.795"></a>
<FONT color="green">796</FONT>        private String unescapeCronExpression( String cronExpression )<a name="line.796"></a>
<FONT color="green">797</FONT>        {<a name="line.797"></a>
<FONT color="green">798</FONT>            return StringUtils.replace( cronExpression, "\\,", "," );<a name="line.798"></a>
<FONT color="green">799</FONT>        }<a name="line.799"></a>
<FONT color="green">800</FONT>    <a name="line.800"></a>
<FONT color="green">801</FONT>        private String escapeCronExpression( String cronExpression )<a name="line.801"></a>
<FONT color="green">802</FONT>        {<a name="line.802"></a>
<FONT color="green">803</FONT>            return StringUtils.replace( cronExpression, ",", "\\," );<a name="line.803"></a>
<FONT color="green">804</FONT>        }<a name="line.804"></a>
<FONT color="green">805</FONT>    <a name="line.805"></a>
<FONT color="green">806</FONT>        private Configuration unescapeExpressions( Configuration config )<a name="line.806"></a>
<FONT color="green">807</FONT>        {<a name="line.807"></a>
<FONT color="green">808</FONT>            // TODO: for commons-configuration 1.3 only<a name="line.808"></a>
<FONT color="green">809</FONT>            for ( Iterator&lt;ManagedRepositoryConfiguration&gt; i = config.getManagedRepositories().iterator(); i.hasNext(); )<a name="line.809"></a>
<FONT color="green">810</FONT>            {<a name="line.810"></a>
<FONT color="green">811</FONT>                ManagedRepositoryConfiguration c = i.next();<a name="line.811"></a>
<FONT color="green">812</FONT>                c.setLocation( removeExpressions( c.getLocation() ) );<a name="line.812"></a>
<FONT color="green">813</FONT>                c.setRefreshCronExpression( unescapeCronExpression( c.getRefreshCronExpression() ) );<a name="line.813"></a>
<FONT color="green">814</FONT>            }<a name="line.814"></a>
<FONT color="green">815</FONT>    <a name="line.815"></a>
<FONT color="green">816</FONT>            return config;<a name="line.816"></a>
<FONT color="green">817</FONT>        }<a name="line.817"></a>
<FONT color="green">818</FONT>    <a name="line.818"></a>
<FONT color="green">819</FONT>        private Configuration checkRepositoryLocations( Configuration config )<a name="line.819"></a>
<FONT color="green">820</FONT>        {<a name="line.820"></a>
<FONT color="green">821</FONT>            // additional check for [MRM-789], ensure that the location of the default repositories <a name="line.821"></a>
<FONT color="green">822</FONT>            // are not installed in the server installation        <a name="line.822"></a>
<FONT color="green">823</FONT>            for ( ManagedRepositoryConfiguration repo : (List&lt;ManagedRepositoryConfiguration&gt;) config.getManagedRepositories() )<a name="line.823"></a>
<FONT color="green">824</FONT>            {<a name="line.824"></a>
<FONT color="green">825</FONT>                String repoPath = repo.getLocation();<a name="line.825"></a>
<FONT color="green">826</FONT>                File repoLocation = new File( repoPath );<a name="line.826"></a>
<FONT color="green">827</FONT>    <a name="line.827"></a>
<FONT color="green">828</FONT>                if ( repoLocation.exists() &amp;&amp; repoLocation.isDirectory() &amp;&amp; !repoPath.endsWith(<a name="line.828"></a>
<FONT color="green">829</FONT>                    "data/repositories/" + repo.getId() ) )<a name="line.829"></a>
<FONT color="green">830</FONT>                {<a name="line.830"></a>
<FONT color="green">831</FONT>                    repo.setLocation( repoPath + "/data/repositories/" + repo.getId() );<a name="line.831"></a>
<FONT color="green">832</FONT>                }<a name="line.832"></a>
<FONT color="green">833</FONT>            }<a name="line.833"></a>
<FONT color="green">834</FONT>    <a name="line.834"></a>
<FONT color="green">835</FONT>            return config;<a name="line.835"></a>
<FONT color="green">836</FONT>        }<a name="line.836"></a>
<FONT color="green">837</FONT>    <a name="line.837"></a>
<FONT color="green">838</FONT>        public String getUserConfigFilename()<a name="line.838"></a>
<FONT color="green">839</FONT>        {<a name="line.839"></a>
<FONT color="green">840</FONT>            return userConfigFilename;<a name="line.840"></a>
<FONT color="green">841</FONT>        }<a name="line.841"></a>
<FONT color="green">842</FONT>    <a name="line.842"></a>
<FONT color="green">843</FONT>        public String getAltConfigFilename()<a name="line.843"></a>
<FONT color="green">844</FONT>        {<a name="line.844"></a>
<FONT color="green">845</FONT>            return altConfigFilename;<a name="line.845"></a>
<FONT color="green">846</FONT>        }<a name="line.846"></a>
<FONT color="green">847</FONT>    <a name="line.847"></a>
<FONT color="green">848</FONT>        public boolean isDefaulted()<a name="line.848"></a>
<FONT color="green">849</FONT>        {<a name="line.849"></a>
<FONT color="green">850</FONT>            return this.isConfigurationDefaulted;<a name="line.850"></a>
<FONT color="green">851</FONT>        }<a name="line.851"></a>
<FONT color="green">852</FONT>    <a name="line.852"></a>
<FONT color="green">853</FONT>        public Registry getRegistry()<a name="line.853"></a>
<FONT color="green">854</FONT>        {<a name="line.854"></a>
<FONT color="green">855</FONT>            return registry;<a name="line.855"></a>
<FONT color="green">856</FONT>        }<a name="line.856"></a>
<FONT color="green">857</FONT>    <a name="line.857"></a>
<FONT color="green">858</FONT>        public void setRegistry( Registry registry )<a name="line.858"></a>
<FONT color="green">859</FONT>        {<a name="line.859"></a>
<FONT color="green">860</FONT>            this.registry = registry;<a name="line.860"></a>
<FONT color="green">861</FONT>        }<a name="line.861"></a>
<FONT color="green">862</FONT>    <a name="line.862"></a>
<FONT color="green">863</FONT>    <a name="line.863"></a>
<FONT color="green">864</FONT>        public void setUserConfigFilename( String userConfigFilename )<a name="line.864"></a>
<FONT color="green">865</FONT>        {<a name="line.865"></a>
<FONT color="green">866</FONT>            this.userConfigFilename = userConfigFilename;<a name="line.866"></a>
<FONT color="green">867</FONT>        }<a name="line.867"></a>
<FONT color="green">868</FONT>    <a name="line.868"></a>
<FONT color="green">869</FONT>        public void setAltConfigFilename( String altConfigFilename )<a name="line.869"></a>
<FONT color="green">870</FONT>        {<a name="line.870"></a>
<FONT color="green">871</FONT>            this.altConfigFilename = altConfigFilename;<a name="line.871"></a>
<FONT color="green">872</FONT>        }<a name="line.872"></a>
<FONT color="green">873</FONT>    }<a name="line.873"></a>




























































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