<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>package org.apache.archiva.metadata.repository.storage.maven2;<a name="line.1"></a>
<span class="sourceLineNo">002</span><a name="line.2"></a>
<span class="sourceLineNo">003</span>/*<a name="line.3"></a>
<span class="sourceLineNo">004</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.4"></a>
<span class="sourceLineNo">005</span> * or more contributor license agreements.  See the NOTICE file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * distributed with this work for additional information<a name="line.6"></a>
<span class="sourceLineNo">007</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.7"></a>
<span class="sourceLineNo">008</span> * to you under the Apache License, Version 2.0 (the<a name="line.8"></a>
<span class="sourceLineNo">009</span> * "License"); you may not use this file except in compliance<a name="line.9"></a>
<span class="sourceLineNo">010</span> * with the License.  You may obtain a copy of the License at<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> *   http://www.apache.org/licenses/LICENSE-2.0<a name="line.12"></a>
<span class="sourceLineNo">013</span> *<a name="line.13"></a>
<span class="sourceLineNo">014</span> * Unless required by applicable law or agreed to in writing,<a name="line.14"></a>
<span class="sourceLineNo">015</span> * software distributed under the License is distributed on an<a name="line.15"></a>
<span class="sourceLineNo">016</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.16"></a>
<span class="sourceLineNo">017</span> * KIND, either express or implied.  See the License for the<a name="line.17"></a>
<span class="sourceLineNo">018</span> * specific language governing permissions and limitations<a name="line.18"></a>
<span class="sourceLineNo">019</span> * under the License.<a name="line.19"></a>
<span class="sourceLineNo">020</span> */<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.archiva.admin.model.beans.ManagedRepository;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.archiva.admin.model.beans.NetworkProxy;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.archiva.admin.model.beans.RemoteRepository;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.archiva.common.utils.VersionUtil;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.archiva.maven2.metadata.MavenMetadataReader;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.archiva.model.ArchivaRepositoryMetadata;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.archiva.model.SnapshotVersion;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.archiva.proxy.common.WagonFactory;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.archiva.proxy.common.WagonFactoryException;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.archiva.proxy.common.WagonFactoryRequest;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.archiva.xml.XMLException;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.commons.io.FileUtils;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.commons.lang.StringUtils;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.maven.model.Repository;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.maven.model.building.FileModelSource;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.maven.model.building.ModelSource;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.maven.model.resolution.InvalidRepositoryException;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.apache.maven.model.resolution.ModelResolver;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.apache.maven.model.resolution.UnresolvableModelException;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import org.apache.maven.wagon.ConnectionException;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.maven.wagon.ResourceDoesNotExistException;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.maven.wagon.TransferFailedException;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import org.apache.maven.wagon.Wagon;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import org.apache.maven.wagon.authentication.AuthenticationException;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.apache.maven.wagon.authentication.AuthenticationInfo;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.maven.wagon.authorization.AuthorizationException;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import org.apache.maven.wagon.proxy.ProxyInfo;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import org.slf4j.Logger;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import org.slf4j.LoggerFactory;<a name="line.51"></a>
<span class="sourceLineNo">052</span><a name="line.52"></a>
<span class="sourceLineNo">053</span>import java.io.File;<a name="line.53"></a>
<span class="sourceLineNo">054</span>import java.io.IOException;<a name="line.54"></a>
<span class="sourceLineNo">055</span>import java.nio.file.Files;<a name="line.55"></a>
<span class="sourceLineNo">056</span>import java.util.List;<a name="line.56"></a>
<span class="sourceLineNo">057</span>import java.util.Map;<a name="line.57"></a>
<span class="sourceLineNo">058</span><a name="line.58"></a>
<span class="sourceLineNo">059</span>public class RepositoryModelResolver<a name="line.59"></a>
<span class="sourceLineNo">060</span>    implements ModelResolver<a name="line.60"></a>
<span class="sourceLineNo">061</span>{<a name="line.61"></a>
<span class="sourceLineNo">062</span>    private File basedir;<a name="line.62"></a>
<span class="sourceLineNo">063</span><a name="line.63"></a>
<span class="sourceLineNo">064</span>    private RepositoryPathTranslator pathTranslator;<a name="line.64"></a>
<span class="sourceLineNo">065</span><a name="line.65"></a>
<span class="sourceLineNo">066</span>    private WagonFactory wagonFactory;<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
<span class="sourceLineNo">068</span>    private List&lt;RemoteRepository&gt; remoteRepositories;<a name="line.68"></a>
<span class="sourceLineNo">069</span><a name="line.69"></a>
<span class="sourceLineNo">070</span>    private ManagedRepository targetRepository;<a name="line.70"></a>
<span class="sourceLineNo">071</span><a name="line.71"></a>
<span class="sourceLineNo">072</span>    private static final Logger log = LoggerFactory.getLogger( RepositoryModelResolver.class );<a name="line.72"></a>
<span class="sourceLineNo">073</span><a name="line.73"></a>
<span class="sourceLineNo">074</span>    private static final String METADATA_FILENAME = "maven-metadata.xml";<a name="line.74"></a>
<span class="sourceLineNo">075</span><a name="line.75"></a>
<span class="sourceLineNo">076</span>    // key/value: remote repo ID/network proxy<a name="line.76"></a>
<span class="sourceLineNo">077</span>    Map&lt;String, NetworkProxy&gt; networkProxyMap;<a name="line.77"></a>
<span class="sourceLineNo">078</span><a name="line.78"></a>
<span class="sourceLineNo">079</span>    private ManagedRepository managedRepository;<a name="line.79"></a>
<span class="sourceLineNo">080</span><a name="line.80"></a>
<span class="sourceLineNo">081</span>    public RepositoryModelResolver( File basedir, RepositoryPathTranslator pathTranslator )<a name="line.81"></a>
<span class="sourceLineNo">082</span>    {<a name="line.82"></a>
<span class="sourceLineNo">083</span>        this.basedir = basedir;<a name="line.83"></a>
<span class="sourceLineNo">084</span><a name="line.84"></a>
<span class="sourceLineNo">085</span>        this.pathTranslator = pathTranslator;<a name="line.85"></a>
<span class="sourceLineNo">086</span>    }<a name="line.86"></a>
<span class="sourceLineNo">087</span><a name="line.87"></a>
<span class="sourceLineNo">088</span>    public RepositoryModelResolver( ManagedRepository managedRepository, RepositoryPathTranslator pathTranslator,<a name="line.88"></a>
<span class="sourceLineNo">089</span>                                    WagonFactory wagonFactory, List&lt;RemoteRepository&gt; remoteRepositories,<a name="line.89"></a>
<span class="sourceLineNo">090</span>                                    Map&lt;String, NetworkProxy&gt; networkProxiesMap, ManagedRepository targetRepository )<a name="line.90"></a>
<span class="sourceLineNo">091</span>    {<a name="line.91"></a>
<span class="sourceLineNo">092</span>        this( new File( managedRepository.getLocation() ), pathTranslator );<a name="line.92"></a>
<span class="sourceLineNo">093</span><a name="line.93"></a>
<span class="sourceLineNo">094</span>        this.managedRepository = managedRepository;<a name="line.94"></a>
<span class="sourceLineNo">095</span><a name="line.95"></a>
<span class="sourceLineNo">096</span>        this.wagonFactory = wagonFactory;<a name="line.96"></a>
<span class="sourceLineNo">097</span><a name="line.97"></a>
<span class="sourceLineNo">098</span>        this.remoteRepositories = remoteRepositories;<a name="line.98"></a>
<span class="sourceLineNo">099</span><a name="line.99"></a>
<span class="sourceLineNo">100</span>        this.networkProxyMap = networkProxiesMap;<a name="line.100"></a>
<span class="sourceLineNo">101</span><a name="line.101"></a>
<span class="sourceLineNo">102</span>        this.targetRepository = targetRepository;<a name="line.102"></a>
<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
<span class="sourceLineNo">104</span><a name="line.104"></a>
<span class="sourceLineNo">105</span>    @Override<a name="line.105"></a>
<span class="sourceLineNo">106</span>    public ModelSource resolveModel( String groupId, String artifactId, String version )<a name="line.106"></a>
<span class="sourceLineNo">107</span>        throws UnresolvableModelException<a name="line.107"></a>
<span class="sourceLineNo">108</span>    {<a name="line.108"></a>
<span class="sourceLineNo">109</span>        String filename = artifactId + "-" + version + ".pom";<a name="line.109"></a>
<span class="sourceLineNo">110</span>        // TODO: we need to convert 1.0-20091120.112233-1 type paths to baseVersion for the below call - add a test<a name="line.110"></a>
<span class="sourceLineNo">111</span><a name="line.111"></a>
<span class="sourceLineNo">112</span>        File model = pathTranslator.toFile( basedir, groupId, artifactId, version, filename );<a name="line.112"></a>
<span class="sourceLineNo">113</span><a name="line.113"></a>
<span class="sourceLineNo">114</span>        if ( !model.exists() )<a name="line.114"></a>
<span class="sourceLineNo">115</span>        {<a name="line.115"></a>
<span class="sourceLineNo">116</span>            /**<a name="line.116"></a>
<span class="sourceLineNo">117</span>             *<a name="line.117"></a>
<span class="sourceLineNo">118</span>             */<a name="line.118"></a>
<span class="sourceLineNo">119</span>            // is a SNAPSHOT ? so we can try to find locally before asking remote repositories.<a name="line.119"></a>
<span class="sourceLineNo">120</span>            if ( StringUtils.contains( version, VersionUtil.SNAPSHOT ) )<a name="line.120"></a>
<span class="sourceLineNo">121</span>            {<a name="line.121"></a>
<span class="sourceLineNo">122</span>                File localSnapshotModel = findTimeStampedSnapshotPom( groupId, artifactId, version, model.getParent() );<a name="line.122"></a>
<span class="sourceLineNo">123</span>                if ( localSnapshotModel != null )<a name="line.123"></a>
<span class="sourceLineNo">124</span>                {<a name="line.124"></a>
<span class="sourceLineNo">125</span>                    return new FileModelSource( localSnapshotModel );<a name="line.125"></a>
<span class="sourceLineNo">126</span>                }<a name="line.126"></a>
<span class="sourceLineNo">127</span><a name="line.127"></a>
<span class="sourceLineNo">128</span>            }<a name="line.128"></a>
<span class="sourceLineNo">129</span><a name="line.129"></a>
<span class="sourceLineNo">130</span>            for ( RemoteRepository remoteRepository : remoteRepositories )<a name="line.130"></a>
<span class="sourceLineNo">131</span>            {<a name="line.131"></a>
<span class="sourceLineNo">132</span>                try<a name="line.132"></a>
<span class="sourceLineNo">133</span>                {<a name="line.133"></a>
<span class="sourceLineNo">134</span>                    boolean success = getModelFromProxy( remoteRepository, groupId, artifactId, version, filename );<a name="line.134"></a>
<span class="sourceLineNo">135</span>                    if ( success &amp;&amp; model.exists() )<a name="line.135"></a>
<span class="sourceLineNo">136</span>                    {<a name="line.136"></a>
<span class="sourceLineNo">137</span>                        log.info( "Model '{}' successfully retrieved from remote repository '{}'",<a name="line.137"></a>
<span class="sourceLineNo">138</span>                                  model.getAbsolutePath(), remoteRepository.getId() );<a name="line.138"></a>
<span class="sourceLineNo">139</span>                        break;<a name="line.139"></a>
<span class="sourceLineNo">140</span>                    }<a name="line.140"></a>
<span class="sourceLineNo">141</span>                }<a name="line.141"></a>
<span class="sourceLineNo">142</span>                catch ( ResourceDoesNotExistException e )<a name="line.142"></a>
<span class="sourceLineNo">143</span>                {<a name="line.143"></a>
<span class="sourceLineNo">144</span>                    log.info(<a name="line.144"></a>
<span class="sourceLineNo">145</span>                        "An exception was caught while attempting to retrieve model '{}' from remote repository '{}'.Reason:{}",<a name="line.145"></a>
<span class="sourceLineNo">146</span>                        model.getAbsolutePath(), remoteRepository.getId(), e.getMessage() );<a name="line.146"></a>
<span class="sourceLineNo">147</span>                }<a name="line.147"></a>
<span class="sourceLineNo">148</span>                catch ( Exception e )<a name="line.148"></a>
<span class="sourceLineNo">149</span>                {<a name="line.149"></a>
<span class="sourceLineNo">150</span>                    log.warn(<a name="line.150"></a>
<span class="sourceLineNo">151</span>                        "An exception was caught while attempting to retrieve model '{}' from remote repository '{}'.Reason:{}",<a name="line.151"></a>
<span class="sourceLineNo">152</span>                        model.getAbsolutePath(), remoteRepository.getId(), e.getMessage() );<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
<span class="sourceLineNo">154</span>                    continue;<a name="line.154"></a>
<span class="sourceLineNo">155</span>                }<a name="line.155"></a>
<span class="sourceLineNo">156</span>            }<a name="line.156"></a>
<span class="sourceLineNo">157</span>        }<a name="line.157"></a>
<span class="sourceLineNo">158</span><a name="line.158"></a>
<span class="sourceLineNo">159</span>        return new FileModelSource( model );<a name="line.159"></a>
<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
<span class="sourceLineNo">162</span>    protected File findTimeStampedSnapshotPom( String groupId, String artifactId, String version,<a name="line.162"></a>
<span class="sourceLineNo">163</span>                                               String parentDirectory )<a name="line.163"></a>
<span class="sourceLineNo">164</span>    {<a name="line.164"></a>
<span class="sourceLineNo">165</span><a name="line.165"></a>
<span class="sourceLineNo">166</span>        // reading metadata if there<a name="line.166"></a>
<span class="sourceLineNo">167</span>        File mavenMetadata = new File( parentDirectory, METADATA_FILENAME );<a name="line.167"></a>
<span class="sourceLineNo">168</span>        if ( mavenMetadata.exists() )<a name="line.168"></a>
<span class="sourceLineNo">169</span>        {<a name="line.169"></a>
<span class="sourceLineNo">170</span>            try<a name="line.170"></a>
<span class="sourceLineNo">171</span>            {<a name="line.171"></a>
<span class="sourceLineNo">172</span>                ArchivaRepositoryMetadata archivaRepositoryMetadata = MavenMetadataReader.read( mavenMetadata );<a name="line.172"></a>
<span class="sourceLineNo">173</span>                SnapshotVersion snapshotVersion = archivaRepositoryMetadata.getSnapshotVersion();<a name="line.173"></a>
<span class="sourceLineNo">174</span>                if ( snapshotVersion != null )<a name="line.174"></a>
<span class="sourceLineNo">175</span>                {<a name="line.175"></a>
<span class="sourceLineNo">176</span>                    String lastVersion = snapshotVersion.getTimestamp();<a name="line.176"></a>
<span class="sourceLineNo">177</span>                    int buildNumber = snapshotVersion.getBuildNumber();<a name="line.177"></a>
<span class="sourceLineNo">178</span>                    String snapshotPath =<a name="line.178"></a>
<span class="sourceLineNo">179</span>                        StringUtils.replaceChars( groupId, '.', '/' ) + '/' + artifactId + '/' + version + '/'<a name="line.179"></a>
<span class="sourceLineNo">180</span>                            + artifactId + '-' + StringUtils.remove( version, "-" + VersionUtil.SNAPSHOT ) + '-'<a name="line.180"></a>
<span class="sourceLineNo">181</span>                            + lastVersion + '-' + buildNumber + ".pom";<a name="line.181"></a>
<span class="sourceLineNo">182</span><a name="line.182"></a>
<span class="sourceLineNo">183</span>                    log.debug( "use snapshot path {} for maven coordinate {}:{}:{}", snapshotPath, groupId, artifactId,<a name="line.183"></a>
<span class="sourceLineNo">184</span>                               version );<a name="line.184"></a>
<span class="sourceLineNo">185</span><a name="line.185"></a>
<span class="sourceLineNo">186</span>                    File model = new File( basedir, snapshotPath );<a name="line.186"></a>
<span class="sourceLineNo">187</span>                    //model = pathTranslator.toFile( basedir, groupId, artifactId, lastVersion, filename );<a name="line.187"></a>
<span class="sourceLineNo">188</span>                    if ( model.exists() )<a name="line.188"></a>
<span class="sourceLineNo">189</span>                    {<a name="line.189"></a>
<span class="sourceLineNo">190</span>                        return model;<a name="line.190"></a>
<span class="sourceLineNo">191</span>                    }<a name="line.191"></a>
<span class="sourceLineNo">192</span>                }<a name="line.192"></a>
<span class="sourceLineNo">193</span>            }<a name="line.193"></a>
<span class="sourceLineNo">194</span>            catch ( XMLException e )<a name="line.194"></a>
<span class="sourceLineNo">195</span>            {<a name="line.195"></a>
<span class="sourceLineNo">196</span>                log.warn( "fail to read {}, {}", mavenMetadata.getAbsolutePath(), e.getCause() );<a name="line.196"></a>
<span class="sourceLineNo">197</span>            }<a name="line.197"></a>
<span class="sourceLineNo">198</span>        }<a name="line.198"></a>
<span class="sourceLineNo">199</span><a name="line.199"></a>
<span class="sourceLineNo">200</span>        return null;<a name="line.200"></a>
<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
<span class="sourceLineNo">202</span><a name="line.202"></a>
<span class="sourceLineNo">203</span>    @Override<a name="line.203"></a>
<span class="sourceLineNo">204</span>    public void addRepository( Repository repository )<a name="line.204"></a>
<span class="sourceLineNo">205</span>        throws InvalidRepositoryException<a name="line.205"></a>
<span class="sourceLineNo">206</span>    {<a name="line.206"></a>
<span class="sourceLineNo">207</span>        // we just ignore repositories outside of the current one for now<a name="line.207"></a>
<span class="sourceLineNo">208</span>        // TODO: it'd be nice to look them up from Archiva's set, but we want to do that by URL / mapping, not just the<a name="line.208"></a>
<span class="sourceLineNo">209</span>        //       ID since they will rarely match<a name="line.209"></a>
<span class="sourceLineNo">210</span>    }<a name="line.210"></a>
<span class="sourceLineNo">211</span><a name="line.211"></a>
<span class="sourceLineNo">212</span>    @Override<a name="line.212"></a>
<span class="sourceLineNo">213</span>    public ModelResolver newCopy()<a name="line.213"></a>
<span class="sourceLineNo">214</span>    {<a name="line.214"></a>
<span class="sourceLineNo">215</span>        return new RepositoryModelResolver( managedRepository,  pathTranslator, wagonFactory, remoteRepositories, <a name="line.215"></a>
<span class="sourceLineNo">216</span>                                            networkProxyMap, targetRepository );<a name="line.216"></a>
<span class="sourceLineNo">217</span>    }<a name="line.217"></a>
<span class="sourceLineNo">218</span><a name="line.218"></a>
<span class="sourceLineNo">219</span>    // FIXME: we need to do some refactoring, we cannot re-use the proxy components of archiva-proxy in maven2-repository<a name="line.219"></a>
<span class="sourceLineNo">220</span>    // because it's causing a cyclic dependency<a name="line.220"></a>
<span class="sourceLineNo">221</span>    private boolean getModelFromProxy( RemoteRepository remoteRepository, String groupId, String artifactId,<a name="line.221"></a>
<span class="sourceLineNo">222</span>                                       String version, String filename )<a name="line.222"></a>
<span class="sourceLineNo">223</span>        throws AuthorizationException, TransferFailedException, ResourceDoesNotExistException, WagonFactoryException,<a name="line.223"></a>
<span class="sourceLineNo">224</span>        XMLException, IOException<a name="line.224"></a>
<span class="sourceLineNo">225</span>    {<a name="line.225"></a>
<span class="sourceLineNo">226</span>        boolean success = false;<a name="line.226"></a>
<span class="sourceLineNo">227</span>        File tmpMd5 = null;<a name="line.227"></a>
<span class="sourceLineNo">228</span>        File tmpSha1 = null;<a name="line.228"></a>
<span class="sourceLineNo">229</span>        File tmpResource = null;<a name="line.229"></a>
<span class="sourceLineNo">230</span>        String artifactPath = pathTranslator.toPath( groupId, artifactId, version, filename );<a name="line.230"></a>
<span class="sourceLineNo">231</span>        File resource = new File( targetRepository.getLocation(), artifactPath );<a name="line.231"></a>
<span class="sourceLineNo">232</span><a name="line.232"></a>
<span class="sourceLineNo">233</span>        File workingDirectory = createWorkingDirectory( targetRepository.getLocation() );<a name="line.233"></a>
<span class="sourceLineNo">234</span>        try<a name="line.234"></a>
<span class="sourceLineNo">235</span>        {<a name="line.235"></a>
<span class="sourceLineNo">236</span>            Wagon wagon = null;<a name="line.236"></a>
<span class="sourceLineNo">237</span>            try<a name="line.237"></a>
<span class="sourceLineNo">238</span>            {<a name="line.238"></a>
<span class="sourceLineNo">239</span>                String protocol = getProtocol( remoteRepository.getUrl() );<a name="line.239"></a>
<span class="sourceLineNo">240</span>                final NetworkProxy networkProxy = this.networkProxyMap.get( remoteRepository.getId() );<a name="line.240"></a>
<span class="sourceLineNo">241</span><a name="line.241"></a>
<span class="sourceLineNo">242</span>                wagon = wagonFactory.getWagon(<a name="line.242"></a>
<span class="sourceLineNo">243</span>                    new WagonFactoryRequest( "wagon#" + protocol, remoteRepository.getExtraHeaders() ).networkProxy(<a name="line.243"></a>
<span class="sourceLineNo">244</span>                        networkProxy )<a name="line.244"></a>
<span class="sourceLineNo">245</span>                );<a name="line.245"></a>
<span class="sourceLineNo">246</span><a name="line.246"></a>
<span class="sourceLineNo">247</span>                if ( wagon == null )<a name="line.247"></a>
<span class="sourceLineNo">248</span>                {<a name="line.248"></a>
<span class="sourceLineNo">249</span>                    throw new RuntimeException( "Unsupported remote repository protocol: " + protocol );<a name="line.249"></a>
<span class="sourceLineNo">250</span>                }<a name="line.250"></a>
<span class="sourceLineNo">251</span><a name="line.251"></a>
<span class="sourceLineNo">252</span>                boolean connected = connectToRepository( wagon, remoteRepository );<a name="line.252"></a>
<span class="sourceLineNo">253</span>                if ( connected )<a name="line.253"></a>
<span class="sourceLineNo">254</span>                {<a name="line.254"></a>
<span class="sourceLineNo">255</span>                    tmpResource = new File( workingDirectory, filename );<a name="line.255"></a>
<span class="sourceLineNo">256</span><a name="line.256"></a>
<span class="sourceLineNo">257</span>                    if ( VersionUtil.isSnapshot( version ) )<a name="line.257"></a>
<span class="sourceLineNo">258</span>                    {<a name="line.258"></a>
<span class="sourceLineNo">259</span>                        // get the metadata first!<a name="line.259"></a>
<span class="sourceLineNo">260</span>                        File tmpMetadataResource = new File( workingDirectory, METADATA_FILENAME );<a name="line.260"></a>
<span class="sourceLineNo">261</span><a name="line.261"></a>
<span class="sourceLineNo">262</span>                        String metadataPath =<a name="line.262"></a>
<span class="sourceLineNo">263</span>                            StringUtils.substringBeforeLast( artifactPath, "/" ) + "/" + METADATA_FILENAME;<a name="line.263"></a>
<span class="sourceLineNo">264</span><a name="line.264"></a>
<span class="sourceLineNo">265</span>                        wagon.get( addParameters( metadataPath, remoteRepository ), tmpMetadataResource );<a name="line.265"></a>
<span class="sourceLineNo">266</span><a name="line.266"></a>
<span class="sourceLineNo">267</span>                        log.debug( "Successfully downloaded metadata." );<a name="line.267"></a>
<span class="sourceLineNo">268</span><a name="line.268"></a>
<span class="sourceLineNo">269</span>                        ArchivaRepositoryMetadata metadata = MavenMetadataReader.read( tmpMetadataResource );<a name="line.269"></a>
<span class="sourceLineNo">270</span><a name="line.270"></a>
<span class="sourceLineNo">271</span>                        // re-adjust to timestamp if present, otherwise retain the original -SNAPSHOT filename<a name="line.271"></a>
<span class="sourceLineNo">272</span>                        SnapshotVersion snapshotVersion = metadata.getSnapshotVersion();<a name="line.272"></a>
<span class="sourceLineNo">273</span>                        String timestampVersion = version;<a name="line.273"></a>
<span class="sourceLineNo">274</span>                        if ( snapshotVersion != null )<a name="line.274"></a>
<span class="sourceLineNo">275</span>                        {<a name="line.275"></a>
<span class="sourceLineNo">276</span>                            timestampVersion = timestampVersion.substring( 0, timestampVersion.length()<a name="line.276"></a>
<span class="sourceLineNo">277</span>                                - 8 ); // remove SNAPSHOT from end<a name="line.277"></a>
<span class="sourceLineNo">278</span>                            timestampVersion = timestampVersion + snapshotVersion.getTimestamp() + "-"<a name="line.278"></a>
<span class="sourceLineNo">279</span>                                + snapshotVersion.getBuildNumber();<a name="line.279"></a>
<span class="sourceLineNo">280</span><a name="line.280"></a>
<span class="sourceLineNo">281</span>                            filename = artifactId + "-" + timestampVersion + ".pom";<a name="line.281"></a>
<span class="sourceLineNo">282</span><a name="line.282"></a>
<span class="sourceLineNo">283</span>                            artifactPath = pathTranslator.toPath( groupId, artifactId, version, filename );<a name="line.283"></a>
<span class="sourceLineNo">284</span><a name="line.284"></a>
<span class="sourceLineNo">285</span>                            log.debug( "New artifactPath :{}", artifactPath );<a name="line.285"></a>
<span class="sourceLineNo">286</span>                        }<a name="line.286"></a>
<span class="sourceLineNo">287</span>                    }<a name="line.287"></a>
<span class="sourceLineNo">288</span><a name="line.288"></a>
<span class="sourceLineNo">289</span>                    log.info( "Retrieving {} from {}", artifactPath, remoteRepository.getName() );<a name="line.289"></a>
<span class="sourceLineNo">290</span><a name="line.290"></a>
<span class="sourceLineNo">291</span>                    wagon.get( addParameters( artifactPath, remoteRepository ), tmpResource );<a name="line.291"></a>
<span class="sourceLineNo">292</span><a name="line.292"></a>
<span class="sourceLineNo">293</span>                    log.debug( "Downloaded successfully." );<a name="line.293"></a>
<span class="sourceLineNo">294</span><a name="line.294"></a>
<span class="sourceLineNo">295</span>                    tmpSha1 = transferChecksum( wagon, remoteRepository, artifactPath, tmpResource, workingDirectory,<a name="line.295"></a>
<span class="sourceLineNo">296</span>                                                ".sha1" );<a name="line.296"></a>
<span class="sourceLineNo">297</span>                    tmpMd5 = transferChecksum( wagon, remoteRepository, artifactPath, tmpResource, workingDirectory,<a name="line.297"></a>
<span class="sourceLineNo">298</span>                                               ".md5" );<a name="line.298"></a>
<span class="sourceLineNo">299</span>                }<a name="line.299"></a>
<span class="sourceLineNo">300</span>            }<a name="line.300"></a>
<span class="sourceLineNo">301</span>            finally<a name="line.301"></a>
<span class="sourceLineNo">302</span>            {<a name="line.302"></a>
<span class="sourceLineNo">303</span>                if ( wagon != null )<a name="line.303"></a>
<span class="sourceLineNo">304</span>                {<a name="line.304"></a>
<span class="sourceLineNo">305</span>                    try<a name="line.305"></a>
<span class="sourceLineNo">306</span>                    {<a name="line.306"></a>
<span class="sourceLineNo">307</span>                        wagon.disconnect();<a name="line.307"></a>
<span class="sourceLineNo">308</span>                    }<a name="line.308"></a>
<span class="sourceLineNo">309</span>                    catch ( ConnectionException e )<a name="line.309"></a>
<span class="sourceLineNo">310</span>                    {<a name="line.310"></a>
<span class="sourceLineNo">311</span>                        log.warn( "Unable to disconnect wagon.", e );<a name="line.311"></a>
<span class="sourceLineNo">312</span>                    }<a name="line.312"></a>
<span class="sourceLineNo">313</span>                }<a name="line.313"></a>
<span class="sourceLineNo">314</span>            }<a name="line.314"></a>
<span class="sourceLineNo">315</span><a name="line.315"></a>
<span class="sourceLineNo">316</span>            if ( resource != null )<a name="line.316"></a>
<span class="sourceLineNo">317</span>            {<a name="line.317"></a>
<span class="sourceLineNo">318</span>                synchronized ( resource.getAbsolutePath().intern() )<a name="line.318"></a>
<span class="sourceLineNo">319</span>                {<a name="line.319"></a>
<span class="sourceLineNo">320</span>                    File directory = resource.getParentFile();<a name="line.320"></a>
<span class="sourceLineNo">321</span>                    moveFileIfExists( tmpMd5, directory );<a name="line.321"></a>
<span class="sourceLineNo">322</span>                    moveFileIfExists( tmpSha1, directory );<a name="line.322"></a>
<span class="sourceLineNo">323</span>                    moveFileIfExists( tmpResource, directory );<a name="line.323"></a>
<span class="sourceLineNo">324</span>                    success = true;<a name="line.324"></a>
<span class="sourceLineNo">325</span>                }<a name="line.325"></a>
<span class="sourceLineNo">326</span>            }<a name="line.326"></a>
<span class="sourceLineNo">327</span>        }<a name="line.327"></a>
<span class="sourceLineNo">328</span>        finally<a name="line.328"></a>
<span class="sourceLineNo">329</span>        {<a name="line.329"></a>
<span class="sourceLineNo">330</span>            FileUtils.deleteQuietly( workingDirectory );<a name="line.330"></a>
<span class="sourceLineNo">331</span>        }<a name="line.331"></a>
<span class="sourceLineNo">332</span><a name="line.332"></a>
<span class="sourceLineNo">333</span>        // do we still need to execute the consumers?<a name="line.333"></a>
<span class="sourceLineNo">334</span><a name="line.334"></a>
<span class="sourceLineNo">335</span>        return success;<a name="line.335"></a>
<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
<span class="sourceLineNo">337</span><a name="line.337"></a>
<span class="sourceLineNo">338</span>    /**<a name="line.338"></a>
<span class="sourceLineNo">339</span>     * Using wagon, connect to the remote repository.<a name="line.339"></a>
<span class="sourceLineNo">340</span>     *<a name="line.340"></a>
<span class="sourceLineNo">341</span>     * @param wagon the wagon instance to establish the connection on.<a name="line.341"></a>
<span class="sourceLineNo">342</span>     * @return true if the connection was successful. false if not connected.<a name="line.342"></a>
<span class="sourceLineNo">343</span>     */<a name="line.343"></a>
<span class="sourceLineNo">344</span>    private boolean connectToRepository( Wagon wagon, RemoteRepository remoteRepository )<a name="line.344"></a>
<span class="sourceLineNo">345</span>    {<a name="line.345"></a>
<span class="sourceLineNo">346</span>        boolean connected;<a name="line.346"></a>
<span class="sourceLineNo">347</span><a name="line.347"></a>
<span class="sourceLineNo">348</span>        final NetworkProxy proxyConnector = this.networkProxyMap.get( remoteRepository.getId() );<a name="line.348"></a>
<span class="sourceLineNo">349</span>        ProxyInfo networkProxy = null;<a name="line.349"></a>
<span class="sourceLineNo">350</span>        if ( proxyConnector != null )<a name="line.350"></a>
<span class="sourceLineNo">351</span>        {<a name="line.351"></a>
<span class="sourceLineNo">352</span>            networkProxy = new ProxyInfo();<a name="line.352"></a>
<span class="sourceLineNo">353</span>            networkProxy.setType( proxyConnector.getProtocol() );<a name="line.353"></a>
<span class="sourceLineNo">354</span>            networkProxy.setHost( proxyConnector.getHost() );<a name="line.354"></a>
<span class="sourceLineNo">355</span>            networkProxy.setPort( proxyConnector.getPort() );<a name="line.355"></a>
<span class="sourceLineNo">356</span>            networkProxy.setUserName( proxyConnector.getUsername() );<a name="line.356"></a>
<span class="sourceLineNo">357</span>            networkProxy.setPassword( proxyConnector.getPassword() );<a name="line.357"></a>
<span class="sourceLineNo">358</span><a name="line.358"></a>
<span class="sourceLineNo">359</span>            String msg = "Using network proxy " + networkProxy.getHost() + ":" + networkProxy.getPort()<a name="line.359"></a>
<span class="sourceLineNo">360</span>                + " to connect to remote repository " + remoteRepository.getUrl();<a name="line.360"></a>
<span class="sourceLineNo">361</span>            if ( networkProxy.getNonProxyHosts() != null )<a name="line.361"></a>
<span class="sourceLineNo">362</span>            {<a name="line.362"></a>
<span class="sourceLineNo">363</span>                msg += "; excluding hosts: " + networkProxy.getNonProxyHosts();<a name="line.363"></a>
<span class="sourceLineNo">364</span>            }<a name="line.364"></a>
<span class="sourceLineNo">365</span><a name="line.365"></a>
<span class="sourceLineNo">366</span>            if ( StringUtils.isNotBlank( networkProxy.getUserName() ) )<a name="line.366"></a>
<span class="sourceLineNo">367</span>            {<a name="line.367"></a>
<span class="sourceLineNo">368</span>                msg += "; as user: " + networkProxy.getUserName();<a name="line.368"></a>
<span class="sourceLineNo">369</span>            }<a name="line.369"></a>
<span class="sourceLineNo">370</span><a name="line.370"></a>
<span class="sourceLineNo">371</span>            log.debug( msg );<a name="line.371"></a>
<span class="sourceLineNo">372</span>        }<a name="line.372"></a>
<span class="sourceLineNo">373</span><a name="line.373"></a>
<span class="sourceLineNo">374</span>        AuthenticationInfo authInfo = null;<a name="line.374"></a>
<span class="sourceLineNo">375</span>        String username = remoteRepository.getUserName();<a name="line.375"></a>
<span class="sourceLineNo">376</span>        String password = remoteRepository.getPassword();<a name="line.376"></a>
<span class="sourceLineNo">377</span><a name="line.377"></a>
<span class="sourceLineNo">378</span>        if ( StringUtils.isNotBlank( username ) &amp;&amp; StringUtils.isNotBlank( password ) )<a name="line.378"></a>
<span class="sourceLineNo">379</span>        {<a name="line.379"></a>
<span class="sourceLineNo">380</span>            log.debug( "Using username {} to connect to remote repository {}", username, remoteRepository.getUrl() );<a name="line.380"></a>
<span class="sourceLineNo">381</span>            authInfo = new AuthenticationInfo();<a name="line.381"></a>
<span class="sourceLineNo">382</span>            authInfo.setUserName( username );<a name="line.382"></a>
<span class="sourceLineNo">383</span>            authInfo.setPassword( password );<a name="line.383"></a>
<span class="sourceLineNo">384</span>        }<a name="line.384"></a>
<span class="sourceLineNo">385</span><a name="line.385"></a>
<span class="sourceLineNo">386</span>        // Convert seconds to milliseconds<a name="line.386"></a>
<span class="sourceLineNo">387</span>        int timeoutInMilliseconds = remoteRepository.getTimeout() * 1000;<a name="line.387"></a>
<span class="sourceLineNo">388</span>        // FIXME olamy having 2 config values<a name="line.388"></a>
<span class="sourceLineNo">389</span>        // Set timeout<a name="line.389"></a>
<span class="sourceLineNo">390</span>        wagon.setReadTimeout( timeoutInMilliseconds );<a name="line.390"></a>
<span class="sourceLineNo">391</span>        wagon.setTimeout( timeoutInMilliseconds );<a name="line.391"></a>
<span class="sourceLineNo">392</span><a name="line.392"></a>
<span class="sourceLineNo">393</span>        try<a name="line.393"></a>
<span class="sourceLineNo">394</span>        {<a name="line.394"></a>
<span class="sourceLineNo">395</span>            org.apache.maven.wagon.repository.Repository wagonRepository =<a name="line.395"></a>
<span class="sourceLineNo">396</span>                new org.apache.maven.wagon.repository.Repository( remoteRepository.getId(), remoteRepository.getUrl() );<a name="line.396"></a>
<span class="sourceLineNo">397</span>            if ( networkProxy != null )<a name="line.397"></a>
<span class="sourceLineNo">398</span>            {<a name="line.398"></a>
<span class="sourceLineNo">399</span>                wagon.connect( wagonRepository, authInfo, networkProxy );<a name="line.399"></a>
<span class="sourceLineNo">400</span>            }<a name="line.400"></a>
<span class="sourceLineNo">401</span>            else<a name="line.401"></a>
<span class="sourceLineNo">402</span>            {<a name="line.402"></a>
<span class="sourceLineNo">403</span>                wagon.connect( wagonRepository, authInfo );<a name="line.403"></a>
<span class="sourceLineNo">404</span>            }<a name="line.404"></a>
<span class="sourceLineNo">405</span>            connected = true;<a name="line.405"></a>
<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
<span class="sourceLineNo">407</span>        catch ( ConnectionException | AuthenticationException e )<a name="line.407"></a>
<span class="sourceLineNo">408</span>        {<a name="line.408"></a>
<span class="sourceLineNo">409</span>            log.error( "Could not connect to {}:{} ", remoteRepository.getName(), e.getMessage() );<a name="line.409"></a>
<span class="sourceLineNo">410</span>            connected = false;<a name="line.410"></a>
<span class="sourceLineNo">411</span>        }<a name="line.411"></a>
<span class="sourceLineNo">412</span><a name="line.412"></a>
<span class="sourceLineNo">413</span>        return connected;<a name="line.413"></a>
<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
<span class="sourceLineNo">415</span><a name="line.415"></a>
<span class="sourceLineNo">416</span>    /**<a name="line.416"></a>
<span class="sourceLineNo">417</span>     *<a name="line.417"></a>
<span class="sourceLineNo">418</span>     * @param wagon The wagon instance that should be connected.<a name="line.418"></a>
<span class="sourceLineNo">419</span>     * @param remoteRepository The repository from where the checksum file should be retrieved<a name="line.419"></a>
<span class="sourceLineNo">420</span>     * @param remotePath The remote path of the artifact (without extension)<a name="line.420"></a>
<span class="sourceLineNo">421</span>     * @param resource The local artifact (without extension)<a name="line.421"></a>
<span class="sourceLineNo">422</span>     * @param workingDir The working directory where the downloaded file should be placed to<a name="line.422"></a>
<span class="sourceLineNo">423</span>     * @param ext The extension of th checksum file<a name="line.423"></a>
<span class="sourceLineNo">424</span>     * @return The file where the data has been downloaded to.<a name="line.424"></a>
<span class="sourceLineNo">425</span>     * @throws AuthorizationException<a name="line.425"></a>
<span class="sourceLineNo">426</span>     * @throws TransferFailedException<a name="line.426"></a>
<span class="sourceLineNo">427</span>     * @throws ResourceDoesNotExistException<a name="line.427"></a>
<span class="sourceLineNo">428</span>     */<a name="line.428"></a>
<span class="sourceLineNo">429</span>    private File transferChecksum( final Wagon wagon, final RemoteRepository remoteRepository,<a name="line.429"></a>
<span class="sourceLineNo">430</span>                                   final String remotePath, final File resource,<a name="line.430"></a>
<span class="sourceLineNo">431</span>                                   final File workingDir, final String ext )<a name="line.431"></a>
<span class="sourceLineNo">432</span>        throws AuthorizationException, TransferFailedException, ResourceDoesNotExistException<a name="line.432"></a>
<span class="sourceLineNo">433</span>    {<a name="line.433"></a>
<span class="sourceLineNo">434</span>        File destFile = new File( workingDir, resource.getName() + ext );<a name="line.434"></a>
<span class="sourceLineNo">435</span>        String remoteChecksumPath = remotePath + ext;<a name="line.435"></a>
<span class="sourceLineNo">436</span><a name="line.436"></a>
<span class="sourceLineNo">437</span>        log.info( "Retrieving {} from {}", remoteChecksumPath, remoteRepository.getName() );<a name="line.437"></a>
<span class="sourceLineNo">438</span><a name="line.438"></a>
<span class="sourceLineNo">439</span>        wagon.get( addParameters( remoteChecksumPath, remoteRepository ), destFile );<a name="line.439"></a>
<span class="sourceLineNo">440</span><a name="line.440"></a>
<span class="sourceLineNo">441</span>        log.debug( "Downloaded successfully." );<a name="line.441"></a>
<span class="sourceLineNo">442</span><a name="line.442"></a>
<span class="sourceLineNo">443</span>        return destFile;<a name="line.443"></a>
<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
<span class="sourceLineNo">445</span><a name="line.445"></a>
<span class="sourceLineNo">446</span>    private String getProtocol( String url )<a name="line.446"></a>
<span class="sourceLineNo">447</span>    {<a name="line.447"></a>
<span class="sourceLineNo">448</span>        String protocol = StringUtils.substringBefore( url, ":" );<a name="line.448"></a>
<span class="sourceLineNo">449</span><a name="line.449"></a>
<span class="sourceLineNo">450</span>        return protocol;<a name="line.450"></a>
<span class="sourceLineNo">451</span>    }<a name="line.451"></a>
<span class="sourceLineNo">452</span><a name="line.452"></a>
<span class="sourceLineNo">453</span>    private File createWorkingDirectory( String targetRepository )<a name="line.453"></a>
<span class="sourceLineNo">454</span>        throws IOException<a name="line.454"></a>
<span class="sourceLineNo">455</span>    {<a name="line.455"></a>
<span class="sourceLineNo">456</span>        return Files.createTempDirectory( "temp" ).toFile();<a name="line.456"></a>
<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
<span class="sourceLineNo">458</span><a name="line.458"></a>
<span class="sourceLineNo">459</span>    private void moveFileIfExists( File fileToMove, File directory )<a name="line.459"></a>
<span class="sourceLineNo">460</span>    {<a name="line.460"></a>
<span class="sourceLineNo">461</span>        if ( fileToMove != null &amp;&amp; fileToMove.exists() )<a name="line.461"></a>
<span class="sourceLineNo">462</span>        {<a name="line.462"></a>
<span class="sourceLineNo">463</span>            File newLocation = new File( directory, fileToMove.getName() );<a name="line.463"></a>
<span class="sourceLineNo">464</span>            if ( newLocation.exists() &amp;&amp; !newLocation.delete() )<a name="line.464"></a>
<span class="sourceLineNo">465</span>            {<a name="line.465"></a>
<span class="sourceLineNo">466</span>                throw new RuntimeException(<a name="line.466"></a>
<span class="sourceLineNo">467</span>                    "Unable to overwrite existing target file: " + newLocation.getAbsolutePath() );<a name="line.467"></a>
<span class="sourceLineNo">468</span>            }<a name="line.468"></a>
<span class="sourceLineNo">469</span><a name="line.469"></a>
<span class="sourceLineNo">470</span>            newLocation.getParentFile().mkdirs();<a name="line.470"></a>
<span class="sourceLineNo">471</span>            if ( !fileToMove.renameTo( newLocation ) )<a name="line.471"></a>
<span class="sourceLineNo">472</span>            {<a name="line.472"></a>
<span class="sourceLineNo">473</span>                log.warn( "Unable to rename tmp file to its final name... resorting to copy command." );<a name="line.473"></a>
<span class="sourceLineNo">474</span><a name="line.474"></a>
<span class="sourceLineNo">475</span>                try<a name="line.475"></a>
<span class="sourceLineNo">476</span>                {<a name="line.476"></a>
<span class="sourceLineNo">477</span>                    FileUtils.copyFile( fileToMove, newLocation );<a name="line.477"></a>
<span class="sourceLineNo">478</span>                }<a name="line.478"></a>
<span class="sourceLineNo">479</span>                catch ( IOException e )<a name="line.479"></a>
<span class="sourceLineNo">480</span>                {<a name="line.480"></a>
<span class="sourceLineNo">481</span>                    if ( newLocation.exists() )<a name="line.481"></a>
<span class="sourceLineNo">482</span>                    {<a name="line.482"></a>
<span class="sourceLineNo">483</span>                        log.error( "Tried to copy file {} to {} but file with this name already exists.",<a name="line.483"></a>
<span class="sourceLineNo">484</span>                                   fileToMove.getName(), newLocation.getAbsolutePath() );<a name="line.484"></a>
<span class="sourceLineNo">485</span>                    }<a name="line.485"></a>
<span class="sourceLineNo">486</span>                    else<a name="line.486"></a>
<span class="sourceLineNo">487</span>                    {<a name="line.487"></a>
<span class="sourceLineNo">488</span>                        throw new RuntimeException(<a name="line.488"></a>
<span class="sourceLineNo">489</span>                            "Cannot copy tmp file " + fileToMove.getAbsolutePath() + " to its final location", e );<a name="line.489"></a>
<span class="sourceLineNo">490</span>                    }<a name="line.490"></a>
<span class="sourceLineNo">491</span>                }<a name="line.491"></a>
<span class="sourceLineNo">492</span>                finally<a name="line.492"></a>
<span class="sourceLineNo">493</span>                {<a name="line.493"></a>
<span class="sourceLineNo">494</span>                    FileUtils.deleteQuietly( fileToMove );<a name="line.494"></a>
<span class="sourceLineNo">495</span>                }<a name="line.495"></a>
<span class="sourceLineNo">496</span>            }<a name="line.496"></a>
<span class="sourceLineNo">497</span>        }<a name="line.497"></a>
<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
<span class="sourceLineNo">499</span><a name="line.499"></a>
<span class="sourceLineNo">500</span>    protected String addParameters( String path, RemoteRepository remoteRepository )<a name="line.500"></a>
<span class="sourceLineNo">501</span>    {<a name="line.501"></a>
<span class="sourceLineNo">502</span>        if ( remoteRepository.getExtraParameters().isEmpty() )<a name="line.502"></a>
<span class="sourceLineNo">503</span>        {<a name="line.503"></a>
<span class="sourceLineNo">504</span>            return path;<a name="line.504"></a>
<span class="sourceLineNo">505</span>        }<a name="line.505"></a>
<span class="sourceLineNo">506</span><a name="line.506"></a>
<span class="sourceLineNo">507</span>        boolean question = false;<a name="line.507"></a>
<span class="sourceLineNo">508</span><a name="line.508"></a>
<span class="sourceLineNo">509</span>        StringBuilder res = new StringBuilder( path == null ? "" : path );<a name="line.509"></a>
<span class="sourceLineNo">510</span><a name="line.510"></a>
<span class="sourceLineNo">511</span>        for ( Map.Entry&lt;String, String&gt; entry : remoteRepository.getExtraParameters().entrySet() )<a name="line.511"></a>
<span class="sourceLineNo">512</span>        {<a name="line.512"></a>
<span class="sourceLineNo">513</span>            if ( !question )<a name="line.513"></a>
<span class="sourceLineNo">514</span>            {<a name="line.514"></a>
<span class="sourceLineNo">515</span>                res.append( '?' ).append( entry.getKey() ).append( '=' ).append( entry.getValue() );<a name="line.515"></a>
<span class="sourceLineNo">516</span>            }<a name="line.516"></a>
<span class="sourceLineNo">517</span>        }<a name="line.517"></a>
<span class="sourceLineNo">518</span><a name="line.518"></a>
<span class="sourceLineNo">519</span>        return res.toString();<a name="line.519"></a>
<span class="sourceLineNo">520</span>    }<a name="line.520"></a>
<span class="sourceLineNo">521</span>}<a name="line.521"></a>




























































</pre>
</div>
</body>
</html>
