<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    package org.apache.archiva.admin.repository.remote;<a name="line.1"></a>
<FONT color="green">002</FONT>    /*<a name="line.2"></a>
<FONT color="green">003</FONT>     * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
<FONT color="green">004</FONT>     * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
<FONT color="green">005</FONT>     * distributed with this work for additional information<a name="line.5"></a>
<FONT color="green">006</FONT>     * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
<FONT color="green">007</FONT>     * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
<FONT color="green">008</FONT>     * "License"); you may not use this file except in compliance<a name="line.8"></a>
<FONT color="green">009</FONT>     * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
<FONT color="green">010</FONT>     *<a name="line.10"></a>
<FONT color="green">011</FONT>     *   http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
<FONT color="green">012</FONT>     *<a name="line.12"></a>
<FONT color="green">013</FONT>     * Unless required by applicable law or agreed to in writing,<a name="line.13"></a>
<FONT color="green">014</FONT>     * software distributed under the License is distributed on an<a name="line.14"></a>
<FONT color="green">015</FONT>     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.15"></a>
<FONT color="green">016</FONT>     * KIND, either express or implied.  See the License for the<a name="line.16"></a>
<FONT color="green">017</FONT>     * specific language governing permissions and limitations<a name="line.17"></a>
<FONT color="green">018</FONT>     * under the License.<a name="line.18"></a>
<FONT color="green">019</FONT>     */<a name="line.19"></a>
<FONT color="green">020</FONT>    <a name="line.20"></a>
<FONT color="green">021</FONT>    import org.apache.archiva.admin.model.AuditInformation;<a name="line.21"></a>
<FONT color="green">022</FONT>    import org.apache.archiva.admin.model.RepositoryAdminException;<a name="line.22"></a>
<FONT color="green">023</FONT>    import org.apache.archiva.admin.model.beans.RemoteRepository;<a name="line.23"></a>
<FONT color="green">024</FONT>    import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin;<a name="line.24"></a>
<FONT color="green">025</FONT>    import org.apache.archiva.admin.repository.AbstractRepositoryAdmin;<a name="line.25"></a>
<FONT color="green">026</FONT>    import org.apache.archiva.audit.AuditEvent;<a name="line.26"></a>
<FONT color="green">027</FONT>    import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;<a name="line.27"></a>
<FONT color="green">028</FONT>    import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;<a name="line.28"></a>
<FONT color="green">029</FONT>    import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;<a name="line.29"></a>
<FONT color="green">030</FONT>    import org.apache.archiva.configuration.Configuration;<a name="line.30"></a>
<FONT color="green">031</FONT>    import org.apache.archiva.configuration.ProxyConnectorConfiguration;<a name="line.31"></a>
<FONT color="green">032</FONT>    import org.apache.archiva.configuration.RemoteRepositoryConfiguration;<a name="line.32"></a>
<FONT color="green">033</FONT>    import org.apache.commons.lang.StringUtils;<a name="line.33"></a>
<FONT color="green">034</FONT>    import org.apache.maven.index.NexusIndexer;<a name="line.34"></a>
<FONT color="green">035</FONT>    import org.apache.maven.index.context.IndexCreator;<a name="line.35"></a>
<FONT color="green">036</FONT>    import org.apache.maven.index.context.IndexingContext;<a name="line.36"></a>
<FONT color="green">037</FONT>    import org.apache.maven.index.context.UnsupportedExistingLuceneIndexException;<a name="line.37"></a>
<FONT color="green">038</FONT>    import org.springframework.stereotype.Service;<a name="line.38"></a>
<FONT color="green">039</FONT>    <a name="line.39"></a>
<FONT color="green">040</FONT>    import javax.annotation.PostConstruct;<a name="line.40"></a>
<FONT color="green">041</FONT>    import javax.annotation.PreDestroy;<a name="line.41"></a>
<FONT color="green">042</FONT>    import javax.inject.Inject;<a name="line.42"></a>
<FONT color="green">043</FONT>    import java.io.File;<a name="line.43"></a>
<FONT color="green">044</FONT>    import java.io.IOException;<a name="line.44"></a>
<FONT color="green">045</FONT>    import java.net.MalformedURLException;<a name="line.45"></a>
<FONT color="green">046</FONT>    import java.util.ArrayList;<a name="line.46"></a>
<FONT color="green">047</FONT>    import java.util.HashMap;<a name="line.47"></a>
<FONT color="green">048</FONT>    import java.util.List;<a name="line.48"></a>
<FONT color="green">049</FONT>    import java.util.Map;<a name="line.49"></a>
<FONT color="green">050</FONT>    <a name="line.50"></a>
<FONT color="green">051</FONT>    /**<a name="line.51"></a>
<FONT color="green">052</FONT>     * @author Olivier Lamy<a name="line.52"></a>
<FONT color="green">053</FONT>     * @since 1.4-M1<a name="line.53"></a>
<FONT color="green">054</FONT>     */<a name="line.54"></a>
<FONT color="green">055</FONT>    @Service ( "remoteRepositoryAdmin#default" )<a name="line.55"></a>
<FONT color="green">056</FONT>    public class DefaultRemoteRepositoryAdmin<a name="line.56"></a>
<FONT color="green">057</FONT>        extends AbstractRepositoryAdmin<a name="line.57"></a>
<FONT color="green">058</FONT>        implements RemoteRepositoryAdmin<a name="line.58"></a>
<FONT color="green">059</FONT>    {<a name="line.59"></a>
<FONT color="green">060</FONT>    <a name="line.60"></a>
<FONT color="green">061</FONT>        @Inject<a name="line.61"></a>
<FONT color="green">062</FONT>        private PlexusSisuBridge plexusSisuBridge;<a name="line.62"></a>
<FONT color="green">063</FONT>    <a name="line.63"></a>
<FONT color="green">064</FONT>        @Inject<a name="line.64"></a>
<FONT color="green">065</FONT>        private MavenIndexerUtils mavenIndexerUtils;<a name="line.65"></a>
<FONT color="green">066</FONT>    <a name="line.66"></a>
<FONT color="green">067</FONT>        // fields<a name="line.67"></a>
<FONT color="green">068</FONT>        List&lt;? extends IndexCreator&gt; indexCreators;<a name="line.68"></a>
<FONT color="green">069</FONT>    <a name="line.69"></a>
<FONT color="green">070</FONT>        NexusIndexer indexer;<a name="line.70"></a>
<FONT color="green">071</FONT>    <a name="line.71"></a>
<FONT color="green">072</FONT>        @PostConstruct<a name="line.72"></a>
<FONT color="green">073</FONT>        private void initialize()<a name="line.73"></a>
<FONT color="green">074</FONT>            throws RepositoryAdminException<a name="line.74"></a>
<FONT color="green">075</FONT>        {<a name="line.75"></a>
<FONT color="green">076</FONT>            try<a name="line.76"></a>
<FONT color="green">077</FONT>            {<a name="line.77"></a>
<FONT color="green">078</FONT>                indexCreators = mavenIndexerUtils.getAllIndexCreators();<a name="line.78"></a>
<FONT color="green">079</FONT>                indexer = plexusSisuBridge.lookup( NexusIndexer.class );<a name="line.79"></a>
<FONT color="green">080</FONT>            }<a name="line.80"></a>
<FONT color="green">081</FONT>            catch ( PlexusSisuBridgeException e )<a name="line.81"></a>
<FONT color="green">082</FONT>            {<a name="line.82"></a>
<FONT color="green">083</FONT>                throw new RepositoryAdminException( e.getMessage(), e );<a name="line.83"></a>
<FONT color="green">084</FONT>            }<a name="line.84"></a>
<FONT color="green">085</FONT>            for ( RemoteRepository remoteRepository : getRemoteRepositories() )<a name="line.85"></a>
<FONT color="green">086</FONT>            {<a name="line.86"></a>
<FONT color="green">087</FONT>                createIndexContext( remoteRepository );<a name="line.87"></a>
<FONT color="green">088</FONT>            }<a name="line.88"></a>
<FONT color="green">089</FONT>        }<a name="line.89"></a>
<FONT color="green">090</FONT>    <a name="line.90"></a>
<FONT color="green">091</FONT>        @PreDestroy<a name="line.91"></a>
<FONT color="green">092</FONT>        private void shutdown()<a name="line.92"></a>
<FONT color="green">093</FONT>            throws RepositoryAdminException<a name="line.93"></a>
<FONT color="green">094</FONT>        {<a name="line.94"></a>
<FONT color="green">095</FONT>            try<a name="line.95"></a>
<FONT color="green">096</FONT>            {<a name="line.96"></a>
<FONT color="green">097</FONT>                List&lt;RemoteRepository&gt; remoteRepositories = getRemoteRepositories();<a name="line.97"></a>
<FONT color="green">098</FONT>                // close index on shutdown<a name="line.98"></a>
<FONT color="green">099</FONT>                for ( RemoteRepository remoteRepository : remoteRepositories )<a name="line.99"></a>
<FONT color="green">100</FONT>                {<a name="line.100"></a>
<FONT color="green">101</FONT>                    IndexingContext context = indexer.getIndexingContexts().get( remoteRepository.getId() );<a name="line.101"></a>
<FONT color="green">102</FONT>                    if ( context != null )<a name="line.102"></a>
<FONT color="green">103</FONT>                    {<a name="line.103"></a>
<FONT color="green">104</FONT>                        indexer.removeIndexingContext( context, false );<a name="line.104"></a>
<FONT color="green">105</FONT>                    }<a name="line.105"></a>
<FONT color="green">106</FONT>                }<a name="line.106"></a>
<FONT color="green">107</FONT>            }<a name="line.107"></a>
<FONT color="green">108</FONT>            catch ( IOException e )<a name="line.108"></a>
<FONT color="green">109</FONT>            {<a name="line.109"></a>
<FONT color="green">110</FONT>                throw new RepositoryAdminException( e.getMessage(), e );<a name="line.110"></a>
<FONT color="green">111</FONT>            }<a name="line.111"></a>
<FONT color="green">112</FONT>        }<a name="line.112"></a>
<FONT color="green">113</FONT>    <a name="line.113"></a>
<FONT color="green">114</FONT>    <a name="line.114"></a>
<FONT color="green">115</FONT>        public List&lt;RemoteRepository&gt; getRemoteRepositories()<a name="line.115"></a>
<FONT color="green">116</FONT>            throws RepositoryAdminException<a name="line.116"></a>
<FONT color="green">117</FONT>        {<a name="line.117"></a>
<FONT color="green">118</FONT>            List&lt;RemoteRepository&gt; remoteRepositories = new ArrayList&lt;RemoteRepository&gt;(<a name="line.118"></a>
<FONT color="green">119</FONT>                getArchivaConfiguration().getConfiguration().getRemoteRepositories().size() );<a name="line.119"></a>
<FONT color="green">120</FONT>            for ( RemoteRepositoryConfiguration repositoryConfiguration : getArchivaConfiguration().getConfiguration().getRemoteRepositories() )<a name="line.120"></a>
<FONT color="green">121</FONT>            {<a name="line.121"></a>
<FONT color="green">122</FONT>                RemoteRepository remoteRepository =<a name="line.122"></a>
<FONT color="green">123</FONT>                    new RemoteRepository( repositoryConfiguration.getId(), repositoryConfiguration.getName(),<a name="line.123"></a>
<FONT color="green">124</FONT>                                          repositoryConfiguration.getUrl(), repositoryConfiguration.getLayout(),<a name="line.124"></a>
<FONT color="green">125</FONT>                                          repositoryConfiguration.getUsername(), repositoryConfiguration.getPassword(),<a name="line.125"></a>
<FONT color="green">126</FONT>                                          repositoryConfiguration.getTimeout() );<a name="line.126"></a>
<FONT color="green">127</FONT>                remoteRepository.setDownloadRemoteIndex( repositoryConfiguration.isDownloadRemoteIndex() );<a name="line.127"></a>
<FONT color="green">128</FONT>                remoteRepository.setRemoteIndexUrl( repositoryConfiguration.getRemoteIndexUrl() );<a name="line.128"></a>
<FONT color="green">129</FONT>                remoteRepository.setCronExpression( repositoryConfiguration.getRefreshCronExpression() );<a name="line.129"></a>
<FONT color="green">130</FONT>                remoteRepository.setIndexDirectory( repositoryConfiguration.getIndexDir() );<a name="line.130"></a>
<FONT color="green">131</FONT>                remoteRepository.setRemoteDownloadNetworkProxyId(<a name="line.131"></a>
<FONT color="green">132</FONT>                    repositoryConfiguration.getRemoteDownloadNetworkProxyId() );<a name="line.132"></a>
<FONT color="green">133</FONT>                remoteRepository.setRemoteDownloadTimeout( repositoryConfiguration.getRemoteDownloadTimeout() );<a name="line.133"></a>
<FONT color="green">134</FONT>                remoteRepository.setDownloadRemoteIndexOnStartup(<a name="line.134"></a>
<FONT color="green">135</FONT>                    repositoryConfiguration.isDownloadRemoteIndexOnStartup() );<a name="line.135"></a>
<FONT color="green">136</FONT>                remoteRepository.setDescription( repositoryConfiguration.getDescription() );<a name="line.136"></a>
<FONT color="green">137</FONT>                remoteRepository.setExtraHeaders( repositoryConfiguration.getExtraHeaders() );<a name="line.137"></a>
<FONT color="green">138</FONT>                remoteRepository.setExtraParameters( repositoryConfiguration.getExtraParameters() );<a name="line.138"></a>
<FONT color="green">139</FONT>                remoteRepositories.add( remoteRepository );<a name="line.139"></a>
<FONT color="green">140</FONT>            }<a name="line.140"></a>
<FONT color="green">141</FONT>            return remoteRepositories;<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 RemoteRepository getRemoteRepository( String repositoryId )<a name="line.144"></a>
<FONT color="green">145</FONT>            throws RepositoryAdminException<a name="line.145"></a>
<FONT color="green">146</FONT>        {<a name="line.146"></a>
<FONT color="green">147</FONT>            for ( RemoteRepository remoteRepository : getRemoteRepositories() )<a name="line.147"></a>
<FONT color="green">148</FONT>            {<a name="line.148"></a>
<FONT color="green">149</FONT>                if ( StringUtils.equals( repositoryId, remoteRepository.getId() ) )<a name="line.149"></a>
<FONT color="green">150</FONT>                {<a name="line.150"></a>
<FONT color="green">151</FONT>                    return remoteRepository;<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>            return null;<a name="line.154"></a>
<FONT color="green">155</FONT>        }<a name="line.155"></a>
<FONT color="green">156</FONT>    <a name="line.156"></a>
<FONT color="green">157</FONT>        public Boolean addRemoteRepository( RemoteRepository remoteRepository, AuditInformation auditInformation )<a name="line.157"></a>
<FONT color="green">158</FONT>            throws RepositoryAdminException<a name="line.158"></a>
<FONT color="green">159</FONT>        {<a name="line.159"></a>
<FONT color="green">160</FONT>            triggerAuditEvent( remoteRepository.getId(), null, AuditEvent.ADD_REMOTE_REPO, auditInformation );<a name="line.160"></a>
<FONT color="green">161</FONT>            getRepositoryCommonValidator().basicValidation( remoteRepository, false );<a name="line.161"></a>
<FONT color="green">162</FONT>    <a name="line.162"></a>
<FONT color="green">163</FONT>            //TODO we can validate it's a good uri/url<a name="line.163"></a>
<FONT color="green">164</FONT>            if ( StringUtils.isEmpty( remoteRepository.getUrl() ) )<a name="line.164"></a>
<FONT color="green">165</FONT>            {<a name="line.165"></a>
<FONT color="green">166</FONT>                throw new RepositoryAdminException( "url cannot be null" );<a name="line.166"></a>
<FONT color="green">167</FONT>            }<a name="line.167"></a>
<FONT color="green">168</FONT>    <a name="line.168"></a>
<FONT color="green">169</FONT>            //MRM-752 - url needs trimming<a name="line.169"></a>
<FONT color="green">170</FONT>            remoteRepository.setUrl( StringUtils.trim( remoteRepository.getUrl() ) );<a name="line.170"></a>
<FONT color="green">171</FONT>    <a name="line.171"></a>
<FONT color="green">172</FONT>            RemoteRepositoryConfiguration remoteRepositoryConfiguration =<a name="line.172"></a>
<FONT color="green">173</FONT>                getRemoteRepositoryConfiguration( remoteRepository );<a name="line.173"></a>
<FONT color="green">174</FONT>    <a name="line.174"></a>
<FONT color="green">175</FONT>            Configuration configuration = getArchivaConfiguration().getConfiguration();<a name="line.175"></a>
<FONT color="green">176</FONT>            configuration.addRemoteRepository( remoteRepositoryConfiguration );<a name="line.176"></a>
<FONT color="green">177</FONT>            saveConfiguration( configuration );<a name="line.177"></a>
<FONT color="green">178</FONT>    <a name="line.178"></a>
<FONT color="green">179</FONT>            return Boolean.TRUE;<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>        public Boolean deleteRemoteRepository( String repositoryId, AuditInformation auditInformation )<a name="line.182"></a>
<FONT color="green">183</FONT>            throws RepositoryAdminException<a name="line.183"></a>
<FONT color="green">184</FONT>        {<a name="line.184"></a>
<FONT color="green">185</FONT>    <a name="line.185"></a>
<FONT color="green">186</FONT>            triggerAuditEvent( repositoryId, null, AuditEvent.DELETE_REMOTE_REPO, auditInformation );<a name="line.186"></a>
<FONT color="green">187</FONT>    <a name="line.187"></a>
<FONT color="green">188</FONT>            Configuration configuration = getArchivaConfiguration().getConfiguration();<a name="line.188"></a>
<FONT color="green">189</FONT>    <a name="line.189"></a>
<FONT color="green">190</FONT>            RemoteRepositoryConfiguration remoteRepositoryConfiguration =<a name="line.190"></a>
<FONT color="green">191</FONT>                configuration.getRemoteRepositoriesAsMap().get( repositoryId );<a name="line.191"></a>
<FONT color="green">192</FONT>            if ( remoteRepositoryConfiguration == null )<a name="line.192"></a>
<FONT color="green">193</FONT>            {<a name="line.193"></a>
<FONT color="green">194</FONT>                throw new RepositoryAdminException(<a name="line.194"></a>
<FONT color="green">195</FONT>                    "remoteRepository with id " + repositoryId + " not exist cannot remove it" );<a name="line.195"></a>
<FONT color="green">196</FONT>            }<a name="line.196"></a>
<FONT color="green">197</FONT>    <a name="line.197"></a>
<FONT color="green">198</FONT>            configuration.removeRemoteRepository( remoteRepositoryConfiguration );<a name="line.198"></a>
<FONT color="green">199</FONT>    <a name="line.199"></a>
<FONT color="green">200</FONT>            // TODO use ProxyConnectorAdmin interface ?<a name="line.200"></a>
<FONT color="green">201</FONT>            // [MRM-520] Proxy Connectors are not deleted with the deletion of a Repository.<a name="line.201"></a>
<FONT color="green">202</FONT>            List&lt;ProxyConnectorConfiguration&gt; proxyConnectors =<a name="line.202"></a>
<FONT color="green">203</FONT>                new ArrayList&lt;ProxyConnectorConfiguration&gt;( configuration.getProxyConnectors() );<a name="line.203"></a>
<FONT color="green">204</FONT>            for ( ProxyConnectorConfiguration proxyConnector : proxyConnectors )<a name="line.204"></a>
<FONT color="green">205</FONT>            {<a name="line.205"></a>
<FONT color="green">206</FONT>                if ( StringUtils.equals( proxyConnector.getTargetRepoId(), repositoryId ) )<a name="line.206"></a>
<FONT color="green">207</FONT>                {<a name="line.207"></a>
<FONT color="green">208</FONT>                    configuration.removeProxyConnector( proxyConnector );<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>    <a name="line.211"></a>
<FONT color="green">212</FONT>            saveConfiguration( configuration );<a name="line.212"></a>
<FONT color="green">213</FONT>    <a name="line.213"></a>
<FONT color="green">214</FONT>            return Boolean.TRUE;<a name="line.214"></a>
<FONT color="green">215</FONT>        }<a name="line.215"></a>
<FONT color="green">216</FONT>    <a name="line.216"></a>
<FONT color="green">217</FONT>        public Boolean updateRemoteRepository( RemoteRepository remoteRepository, AuditInformation auditInformation )<a name="line.217"></a>
<FONT color="green">218</FONT>            throws RepositoryAdminException<a name="line.218"></a>
<FONT color="green">219</FONT>        {<a name="line.219"></a>
<FONT color="green">220</FONT>    <a name="line.220"></a>
<FONT color="green">221</FONT>            String repositoryId = remoteRepository.getId();<a name="line.221"></a>
<FONT color="green">222</FONT>    <a name="line.222"></a>
<FONT color="green">223</FONT>            triggerAuditEvent( repositoryId, null, AuditEvent.MODIFY_REMOTE_REPO, auditInformation );<a name="line.223"></a>
<FONT color="green">224</FONT>    <a name="line.224"></a>
<FONT color="green">225</FONT>            // update means : remove and add<a name="line.225"></a>
<FONT color="green">226</FONT>    <a name="line.226"></a>
<FONT color="green">227</FONT>            Configuration configuration = getArchivaConfiguration().getConfiguration();<a name="line.227"></a>
<FONT color="green">228</FONT>    <a name="line.228"></a>
<FONT color="green">229</FONT>            RemoteRepositoryConfiguration remoteRepositoryConfiguration =<a name="line.229"></a>
<FONT color="green">230</FONT>                configuration.getRemoteRepositoriesAsMap().get( repositoryId );<a name="line.230"></a>
<FONT color="green">231</FONT>            if ( remoteRepositoryConfiguration == null )<a name="line.231"></a>
<FONT color="green">232</FONT>            {<a name="line.232"></a>
<FONT color="green">233</FONT>                throw new RepositoryAdminException(<a name="line.233"></a>
<FONT color="green">234</FONT>                    "remoteRepository with id " + repositoryId + " not exist cannot remove it" );<a name="line.234"></a>
<FONT color="green">235</FONT>            }<a name="line.235"></a>
<FONT color="green">236</FONT>    <a name="line.236"></a>
<FONT color="green">237</FONT>            configuration.removeRemoteRepository( remoteRepositoryConfiguration );<a name="line.237"></a>
<FONT color="green">238</FONT>    <a name="line.238"></a>
<FONT color="green">239</FONT>            remoteRepositoryConfiguration = getRemoteRepositoryConfiguration( remoteRepository );<a name="line.239"></a>
<FONT color="green">240</FONT>            configuration.addRemoteRepository( remoteRepositoryConfiguration );<a name="line.240"></a>
<FONT color="green">241</FONT>            saveConfiguration( configuration );<a name="line.241"></a>
<FONT color="green">242</FONT>    <a name="line.242"></a>
<FONT color="green">243</FONT>            return Boolean.TRUE;<a name="line.243"></a>
<FONT color="green">244</FONT>        }<a name="line.244"></a>
<FONT color="green">245</FONT>    <a name="line.245"></a>
<FONT color="green">246</FONT>        public Map&lt;String, RemoteRepository&gt; getRemoteRepositoriesAsMap()<a name="line.246"></a>
<FONT color="green">247</FONT>            throws RepositoryAdminException<a name="line.247"></a>
<FONT color="green">248</FONT>        {<a name="line.248"></a>
<FONT color="green">249</FONT>            java.util.Map&lt;String, RemoteRepository&gt; map = new HashMap&lt;String, RemoteRepository&gt;();<a name="line.249"></a>
<FONT color="green">250</FONT>    <a name="line.250"></a>
<FONT color="green">251</FONT>            for ( RemoteRepository repo : getRemoteRepositories() )<a name="line.251"></a>
<FONT color="green">252</FONT>            {<a name="line.252"></a>
<FONT color="green">253</FONT>                map.put( repo.getId(), repo );<a name="line.253"></a>
<FONT color="green">254</FONT>            }<a name="line.254"></a>
<FONT color="green">255</FONT>    <a name="line.255"></a>
<FONT color="green">256</FONT>            return map;<a name="line.256"></a>
<FONT color="green">257</FONT>        }<a name="line.257"></a>
<FONT color="green">258</FONT>    <a name="line.258"></a>
<FONT color="green">259</FONT>        public IndexingContext createIndexContext( RemoteRepository remoteRepository )<a name="line.259"></a>
<FONT color="green">260</FONT>            throws RepositoryAdminException<a name="line.260"></a>
<FONT color="green">261</FONT>        {<a name="line.261"></a>
<FONT color="green">262</FONT>            try<a name="line.262"></a>
<FONT color="green">263</FONT>            {<a name="line.263"></a>
<FONT color="green">264</FONT>                String appServerBase = getRegistry().getString( "appserver.base" );<a name="line.264"></a>
<FONT color="green">265</FONT>    <a name="line.265"></a>
<FONT color="green">266</FONT>                String contextKey = "remote-" + remoteRepository.getId();<a name="line.266"></a>
<FONT color="green">267</FONT>                IndexingContext indexingContext = indexer.getIndexingContexts().get( contextKey );<a name="line.267"></a>
<FONT color="green">268</FONT>                if ( indexingContext != null )<a name="line.268"></a>
<FONT color="green">269</FONT>                {<a name="line.269"></a>
<FONT color="green">270</FONT>                    return indexingContext;<a name="line.270"></a>
<FONT color="green">271</FONT>                }<a name="line.271"></a>
<FONT color="green">272</FONT>                // create remote repository path<a name="line.272"></a>
<FONT color="green">273</FONT>                File repoDir = new File( appServerBase, "data/remotes/" + remoteRepository.getId() );<a name="line.273"></a>
<FONT color="green">274</FONT>                if ( !repoDir.exists() )<a name="line.274"></a>
<FONT color="green">275</FONT>                {<a name="line.275"></a>
<FONT color="green">276</FONT>                    repoDir.mkdirs();<a name="line.276"></a>
<FONT color="green">277</FONT>                }<a name="line.277"></a>
<FONT color="green">278</FONT>    <a name="line.278"></a>
<FONT color="green">279</FONT>                File indexDirectory = null;<a name="line.279"></a>
<FONT color="green">280</FONT>    <a name="line.280"></a>
<FONT color="green">281</FONT>                // is there configured indexDirectory ?<a name="line.281"></a>
<FONT color="green">282</FONT>                String indexDirectoryPath = remoteRepository.getIndexDirectory();<a name="line.282"></a>
<FONT color="green">283</FONT>    <a name="line.283"></a>
<FONT color="green">284</FONT>                if ( StringUtils.isNotBlank( indexDirectoryPath ) )<a name="line.284"></a>
<FONT color="green">285</FONT>                {<a name="line.285"></a>
<FONT color="green">286</FONT>                    if ( new File( indexDirectoryPath ).isAbsolute() )<a name="line.286"></a>
<FONT color="green">287</FONT>                    {<a name="line.287"></a>
<FONT color="green">288</FONT>                        indexDirectory = new File( indexDirectoryPath );<a name="line.288"></a>
<FONT color="green">289</FONT>                    }<a name="line.289"></a>
<FONT color="green">290</FONT>                    else<a name="line.290"></a>
<FONT color="green">291</FONT>                    {<a name="line.291"></a>
<FONT color="green">292</FONT>                        indexDirectory = new File( repoDir, indexDirectoryPath );<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>                // if not configured use a default value<a name="line.295"></a>
<FONT color="green">296</FONT>                if ( indexDirectory == null )<a name="line.296"></a>
<FONT color="green">297</FONT>                {<a name="line.297"></a>
<FONT color="green">298</FONT>                    indexDirectory = new File( repoDir, ".index" );<a name="line.298"></a>
<FONT color="green">299</FONT>                }<a name="line.299"></a>
<FONT color="green">300</FONT>                if ( !indexDirectory.exists() )<a name="line.300"></a>
<FONT color="green">301</FONT>                {<a name="line.301"></a>
<FONT color="green">302</FONT>                    indexDirectory.mkdirs();<a name="line.302"></a>
<FONT color="green">303</FONT>                }<a name="line.303"></a>
<FONT color="green">304</FONT>                return indexer.addIndexingContext( contextKey, remoteRepository.getId(), repoDir, indexDirectory,<a name="line.304"></a>
<FONT color="green">305</FONT>                                                   remoteRepository.getUrl(), calculateIndexRemoteUrl( remoteRepository ),<a name="line.305"></a>
<FONT color="green">306</FONT>                                                   mavenIndexerUtils.getAllIndexCreators() );<a name="line.306"></a>
<FONT color="green">307</FONT>            }<a name="line.307"></a>
<FONT color="green">308</FONT>            catch ( MalformedURLException e )<a name="line.308"></a>
<FONT color="green">309</FONT>            {<a name="line.309"></a>
<FONT color="green">310</FONT>                throw new RepositoryAdminException( e.getMessage(), e );<a name="line.310"></a>
<FONT color="green">311</FONT>            }<a name="line.311"></a>
<FONT color="green">312</FONT>            catch ( IOException e )<a name="line.312"></a>
<FONT color="green">313</FONT>            {<a name="line.313"></a>
<FONT color="green">314</FONT>                throw new RepositoryAdminException( e.getMessage(), e );<a name="line.314"></a>
<FONT color="green">315</FONT>            }<a name="line.315"></a>
<FONT color="green">316</FONT>            catch ( UnsupportedExistingLuceneIndexException e )<a name="line.316"></a>
<FONT color="green">317</FONT>            {<a name="line.317"></a>
<FONT color="green">318</FONT>                throw new RepositoryAdminException( e.getMessage(), e );<a name="line.318"></a>
<FONT color="green">319</FONT>            }<a name="line.319"></a>
<FONT color="green">320</FONT>    <a name="line.320"></a>
<FONT color="green">321</FONT>        }<a name="line.321"></a>
<FONT color="green">322</FONT>    <a name="line.322"></a>
<FONT color="green">323</FONT>        protected String calculateIndexRemoteUrl( RemoteRepository remoteRepository )<a name="line.323"></a>
<FONT color="green">324</FONT>        {<a name="line.324"></a>
<FONT color="green">325</FONT>            if ( StringUtils.startsWith( remoteRepository.getRemoteIndexUrl(), "http" ) )<a name="line.325"></a>
<FONT color="green">326</FONT>            {<a name="line.326"></a>
<FONT color="green">327</FONT>                String baseUrl = remoteRepository.getRemoteIndexUrl();<a name="line.327"></a>
<FONT color="green">328</FONT>                return baseUrl.endsWith( "/" ) ? StringUtils.substringBeforeLast( baseUrl, "/" ) : baseUrl;<a name="line.328"></a>
<FONT color="green">329</FONT>            }<a name="line.329"></a>
<FONT color="green">330</FONT>            String baseUrl = StringUtils.endsWith( remoteRepository.getUrl(), "/" ) ? StringUtils.substringBeforeLast(<a name="line.330"></a>
<FONT color="green">331</FONT>                remoteRepository.getUrl(), "/" ) : remoteRepository.getUrl();<a name="line.331"></a>
<FONT color="green">332</FONT>    <a name="line.332"></a>
<FONT color="green">333</FONT>            baseUrl = StringUtils.isEmpty( remoteRepository.getRemoteIndexUrl() )<a name="line.333"></a>
<FONT color="green">334</FONT>                ? baseUrl + "/.index"<a name="line.334"></a>
<FONT color="green">335</FONT>                : baseUrl + "/" + remoteRepository.getRemoteIndexUrl();<a name="line.335"></a>
<FONT color="green">336</FONT>            return baseUrl;<a name="line.336"></a>
<FONT color="green">337</FONT>    <a name="line.337"></a>
<FONT color="green">338</FONT>        }<a name="line.338"></a>
<FONT color="green">339</FONT>    <a name="line.339"></a>
<FONT color="green">340</FONT>        private RemoteRepositoryConfiguration getRemoteRepositoryConfiguration( RemoteRepository remoteRepository )<a name="line.340"></a>
<FONT color="green">341</FONT>        {<a name="line.341"></a>
<FONT color="green">342</FONT>            RemoteRepositoryConfiguration remoteRepositoryConfiguration = new RemoteRepositoryConfiguration();<a name="line.342"></a>
<FONT color="green">343</FONT>            remoteRepositoryConfiguration.setId( remoteRepository.getId() );<a name="line.343"></a>
<FONT color="green">344</FONT>            remoteRepositoryConfiguration.setPassword( remoteRepository.getPassword() );<a name="line.344"></a>
<FONT color="green">345</FONT>            remoteRepositoryConfiguration.setTimeout( remoteRepository.getTimeout() );<a name="line.345"></a>
<FONT color="green">346</FONT>            remoteRepositoryConfiguration.setUrl( remoteRepository.getUrl() );<a name="line.346"></a>
<FONT color="green">347</FONT>            remoteRepositoryConfiguration.setUsername( remoteRepository.getUserName() );<a name="line.347"></a>
<FONT color="green">348</FONT>            remoteRepositoryConfiguration.setLayout( remoteRepository.getLayout() );<a name="line.348"></a>
<FONT color="green">349</FONT>            remoteRepositoryConfiguration.setName( remoteRepository.getName() );<a name="line.349"></a>
<FONT color="green">350</FONT>            remoteRepositoryConfiguration.setDownloadRemoteIndex( remoteRepository.isDownloadRemoteIndex() );<a name="line.350"></a>
<FONT color="green">351</FONT>            remoteRepositoryConfiguration.setRemoteIndexUrl( remoteRepository.getRemoteIndexUrl() );<a name="line.351"></a>
<FONT color="green">352</FONT>            remoteRepositoryConfiguration.setRefreshCronExpression( remoteRepository.getCronExpression() );<a name="line.352"></a>
<FONT color="green">353</FONT>            remoteRepositoryConfiguration.setIndexDir( remoteRepository.getIndexDirectory() );<a name="line.353"></a>
<FONT color="green">354</FONT>            remoteRepositoryConfiguration.setRemoteDownloadNetworkProxyId(<a name="line.354"></a>
<FONT color="green">355</FONT>                remoteRepository.getRemoteDownloadNetworkProxyId() );<a name="line.355"></a>
<FONT color="green">356</FONT>            remoteRepositoryConfiguration.setRemoteDownloadTimeout( remoteRepository.getRemoteDownloadTimeout() );<a name="line.356"></a>
<FONT color="green">357</FONT>            remoteRepositoryConfiguration.setDownloadRemoteIndexOnStartup(<a name="line.357"></a>
<FONT color="green">358</FONT>                remoteRepository.isDownloadRemoteIndexOnStartup() );<a name="line.358"></a>
<FONT color="green">359</FONT>            remoteRepositoryConfiguration.setDescription( remoteRepository.getDescription() );<a name="line.359"></a>
<FONT color="green">360</FONT>            remoteRepositoryConfiguration.setExtraHeaders( remoteRepository.getExtraHeaders() );<a name="line.360"></a>
<FONT color="green">361</FONT>            remoteRepositoryConfiguration.setExtraParameters( remoteRepository.getExtraParameters() );<a name="line.361"></a>
<FONT color="green">362</FONT>            return remoteRepositoryConfiguration;<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>




























































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