<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    package org.apache.archiva.webdav;<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.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.audit.AuditEvent;<a name="line.25"></a>
<FONT color="green">026</FONT>    import org.apache.archiva.audit.AuditListener;<a name="line.26"></a>
<FONT color="green">027</FONT>    import org.apache.archiva.audit.Auditable;<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.common.utils.PathUtil;<a name="line.30"></a>
<FONT color="green">031</FONT>    import org.apache.archiva.common.utils.VersionUtil;<a name="line.31"></a>
<FONT color="green">032</FONT>    import org.apache.archiva.configuration.ArchivaConfiguration;<a name="line.32"></a>
<FONT color="green">033</FONT>    import org.apache.archiva.configuration.RepositoryGroupConfiguration;<a name="line.33"></a>
<FONT color="green">034</FONT>    import org.apache.archiva.indexer.merger.IndexMerger;<a name="line.34"></a>
<FONT color="green">035</FONT>    import org.apache.archiva.indexer.merger.IndexMergerException;<a name="line.35"></a>
<FONT color="green">036</FONT>    import org.apache.archiva.indexer.merger.IndexMergerRequest;<a name="line.36"></a>
<FONT color="green">037</FONT>    import org.apache.archiva.indexer.merger.TemporaryGroupIndex;<a name="line.37"></a>
<FONT color="green">038</FONT>    import org.apache.archiva.indexer.search.RepositorySearch;<a name="line.38"></a>
<FONT color="green">039</FONT>    import org.apache.archiva.maven2.metadata.MavenMetadataReader;<a name="line.39"></a>
<FONT color="green">040</FONT>    import org.apache.archiva.metadata.repository.storage.RepositoryStorage;<a name="line.40"></a>
<FONT color="green">041</FONT>    import org.apache.archiva.model.ArchivaRepositoryMetadata;<a name="line.41"></a>
<FONT color="green">042</FONT>    import org.apache.archiva.model.ArtifactReference;<a name="line.42"></a>
<FONT color="green">043</FONT>    import org.apache.archiva.policies.ProxyDownloadException;<a name="line.43"></a>
<FONT color="green">044</FONT>    import org.apache.archiva.proxy.model.RepositoryProxyConnectors;<a name="line.44"></a>
<FONT color="green">045</FONT>    import org.apache.archiva.redback.authentication.AuthenticationException;<a name="line.45"></a>
<FONT color="green">046</FONT>    import org.apache.archiva.redback.authentication.AuthenticationResult;<a name="line.46"></a>
<FONT color="green">047</FONT>    import org.apache.archiva.redback.authorization.AuthorizationException;<a name="line.47"></a>
<FONT color="green">048</FONT>    import org.apache.archiva.redback.authorization.UnauthorizedException;<a name="line.48"></a>
<FONT color="green">049</FONT>    import org.apache.archiva.redback.integration.filter.authentication.HttpAuthenticator;<a name="line.49"></a>
<FONT color="green">050</FONT>    import org.apache.archiva.redback.policy.AccountLockedException;<a name="line.50"></a>
<FONT color="green">051</FONT>    import org.apache.archiva.redback.policy.MustChangePasswordException;<a name="line.51"></a>
<FONT color="green">052</FONT>    import org.apache.archiva.redback.system.SecuritySession;<a name="line.52"></a>
<FONT color="green">053</FONT>    import org.apache.archiva.redback.users.User;<a name="line.53"></a>
<FONT color="green">054</FONT>    import org.apache.archiva.redback.users.UserManager;<a name="line.54"></a>
<FONT color="green">055</FONT>    import org.apache.archiva.repository.ManagedRepositoryContent;<a name="line.55"></a>
<FONT color="green">056</FONT>    import org.apache.archiva.repository.RepositoryContentFactory;<a name="line.56"></a>
<FONT color="green">057</FONT>    import org.apache.archiva.repository.RepositoryException;<a name="line.57"></a>
<FONT color="green">058</FONT>    import org.apache.archiva.repository.RepositoryNotFoundException;<a name="line.58"></a>
<FONT color="green">059</FONT>    import org.apache.archiva.repository.content.legacy.LegacyPathParser;<a name="line.59"></a>
<FONT color="green">060</FONT>    import org.apache.archiva.repository.content.maven2.RepositoryRequest;<a name="line.60"></a>
<FONT color="green">061</FONT>    import org.apache.archiva.repository.layout.LayoutException;<a name="line.61"></a>
<FONT color="green">062</FONT>    import org.apache.archiva.repository.metadata.MetadataTools;<a name="line.62"></a>
<FONT color="green">063</FONT>    import org.apache.archiva.repository.metadata.RepositoryMetadataException;<a name="line.63"></a>
<FONT color="green">064</FONT>    import org.apache.archiva.repository.metadata.RepositoryMetadataMerge;<a name="line.64"></a>
<FONT color="green">065</FONT>    import org.apache.archiva.repository.metadata.RepositoryMetadataWriter;<a name="line.65"></a>
<FONT color="green">066</FONT>    import org.apache.archiva.scheduler.repository.model.RepositoryArchivaTaskScheduler;<a name="line.66"></a>
<FONT color="green">067</FONT>    import org.apache.archiva.security.ServletAuthenticator;<a name="line.67"></a>
<FONT color="green">068</FONT>    import org.apache.archiva.webdav.util.MimeTypes;<a name="line.68"></a>
<FONT color="green">069</FONT>    import org.apache.archiva.webdav.util.RepositoryPathUtil;<a name="line.69"></a>
<FONT color="green">070</FONT>    import org.apache.archiva.webdav.util.TemporaryGroupIndexSessionCleaner;<a name="line.70"></a>
<FONT color="green">071</FONT>    import org.apache.archiva.webdav.util.WebdavMethodUtil;<a name="line.71"></a>
<FONT color="green">072</FONT>    import org.apache.archiva.xml.XMLException;<a name="line.72"></a>
<FONT color="green">073</FONT>    import org.apache.commons.io.FileUtils;<a name="line.73"></a>
<FONT color="green">074</FONT>    import org.apache.commons.io.FilenameUtils;<a name="line.74"></a>
<FONT color="green">075</FONT>    import org.apache.commons.lang.StringUtils;<a name="line.75"></a>
<FONT color="green">076</FONT>    import org.apache.commons.lang.SystemUtils;<a name="line.76"></a>
<FONT color="green">077</FONT>    import org.apache.jackrabbit.webdav.DavException;<a name="line.77"></a>
<FONT color="green">078</FONT>    import org.apache.jackrabbit.webdav.DavResource;<a name="line.78"></a>
<FONT color="green">079</FONT>    import org.apache.jackrabbit.webdav.DavResourceFactory;<a name="line.79"></a>
<FONT color="green">080</FONT>    import org.apache.jackrabbit.webdav.DavResourceLocator;<a name="line.80"></a>
<FONT color="green">081</FONT>    import org.apache.jackrabbit.webdav.DavServletRequest;<a name="line.81"></a>
<FONT color="green">082</FONT>    import org.apache.jackrabbit.webdav.DavServletResponse;<a name="line.82"></a>
<FONT color="green">083</FONT>    import org.apache.jackrabbit.webdav.DavSession;<a name="line.83"></a>
<FONT color="green">084</FONT>    import org.apache.jackrabbit.webdav.lock.LockManager;<a name="line.84"></a>
<FONT color="green">085</FONT>    import org.apache.jackrabbit.webdav.lock.SimpleLockManager;<a name="line.85"></a>
<FONT color="green">086</FONT>    import org.apache.maven.index.context.IndexingContext;<a name="line.86"></a>
<FONT color="green">087</FONT>    import org.codehaus.plexus.digest.ChecksumFile;<a name="line.87"></a>
<FONT color="green">088</FONT>    import org.codehaus.plexus.digest.Digester;<a name="line.88"></a>
<FONT color="green">089</FONT>    import org.codehaus.plexus.digest.DigesterException;<a name="line.89"></a>
<FONT color="green">090</FONT>    import org.slf4j.Logger;<a name="line.90"></a>
<FONT color="green">091</FONT>    import org.slf4j.LoggerFactory;<a name="line.91"></a>
<FONT color="green">092</FONT>    import org.slf4j.MarkerFactory;<a name="line.92"></a>
<FONT color="green">093</FONT>    import org.springframework.context.ApplicationContext;<a name="line.93"></a>
<FONT color="green">094</FONT>    import org.springframework.stereotype.Service;<a name="line.94"></a>
<FONT color="green">095</FONT>    <a name="line.95"></a>
<FONT color="green">096</FONT>    import javax.annotation.PostConstruct;<a name="line.96"></a>
<FONT color="green">097</FONT>    import javax.inject.Inject;<a name="line.97"></a>
<FONT color="green">098</FONT>    import javax.inject.Named;<a name="line.98"></a>
<FONT color="green">099</FONT>    import javax.servlet.http.HttpServletResponse;<a name="line.99"></a>
<FONT color="green">100</FONT>    import javax.servlet.http.HttpSession;<a name="line.100"></a>
<FONT color="green">101</FONT>    import java.io.File;<a name="line.101"></a>
<FONT color="green">102</FONT>    import java.io.IOException;<a name="line.102"></a>
<FONT color="green">103</FONT>    import java.util.ArrayList;<a name="line.103"></a>
<FONT color="green">104</FONT>    import java.util.Date;<a name="line.104"></a>
<FONT color="green">105</FONT>    import java.util.HashMap;<a name="line.105"></a>
<FONT color="green">106</FONT>    import java.util.HashSet;<a name="line.106"></a>
<FONT color="green">107</FONT>    import java.util.List;<a name="line.107"></a>
<FONT color="green">108</FONT>    import java.util.Map;<a name="line.108"></a>
<FONT color="green">109</FONT>    import java.util.Set;<a name="line.109"></a>
<FONT color="green">110</FONT>    <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>    @Service("davResourceFactory#archiva")<a name="line.114"></a>
<FONT color="green">115</FONT>    public class ArchivaDavResourceFactory<a name="line.115"></a>
<FONT color="green">116</FONT>        implements DavResourceFactory, Auditable<a name="line.116"></a>
<FONT color="green">117</FONT>    {<a name="line.117"></a>
<FONT color="green">118</FONT>        private static final String PROXIED_SUFFIX = " (proxied)";<a name="line.118"></a>
<FONT color="green">119</FONT>    <a name="line.119"></a>
<FONT color="green">120</FONT>        private static final String HTTP_PUT_METHOD = "PUT";<a name="line.120"></a>
<FONT color="green">121</FONT>    <a name="line.121"></a>
<FONT color="green">122</FONT>        private Logger log = LoggerFactory.getLogger( ArchivaDavResourceFactory.class );<a name="line.122"></a>
<FONT color="green">123</FONT>    <a name="line.123"></a>
<FONT color="green">124</FONT>        /**<a name="line.124"></a>
<FONT color="green">125</FONT>         *<a name="line.125"></a>
<FONT color="green">126</FONT>         */<a name="line.126"></a>
<FONT color="green">127</FONT>        @Inject<a name="line.127"></a>
<FONT color="green">128</FONT>        private List&lt;AuditListener&gt; auditListeners = new ArrayList&lt;AuditListener&gt;();<a name="line.128"></a>
<FONT color="green">129</FONT>    <a name="line.129"></a>
<FONT color="green">130</FONT>        /**<a name="line.130"></a>
<FONT color="green">131</FONT>         *<a name="line.131"></a>
<FONT color="green">132</FONT>         */<a name="line.132"></a>
<FONT color="green">133</FONT>        @Inject<a name="line.133"></a>
<FONT color="green">134</FONT>        private RepositoryContentFactory repositoryFactory;<a name="line.134"></a>
<FONT color="green">135</FONT>    <a name="line.135"></a>
<FONT color="green">136</FONT>        /**<a name="line.136"></a>
<FONT color="green">137</FONT>         *<a name="line.137"></a>
<FONT color="green">138</FONT>         */<a name="line.138"></a>
<FONT color="green">139</FONT>        private RepositoryRequest repositoryRequest;<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>         *<a name="line.142"></a>
<FONT color="green">143</FONT>         */<a name="line.143"></a>
<FONT color="green">144</FONT>        @Inject<a name="line.144"></a>
<FONT color="green">145</FONT>        @Named(value = "repositoryProxyConnectors#default")<a name="line.145"></a>
<FONT color="green">146</FONT>        private RepositoryProxyConnectors connectors;<a name="line.146"></a>
<FONT color="green">147</FONT>    <a name="line.147"></a>
<FONT color="green">148</FONT>        /**<a name="line.148"></a>
<FONT color="green">149</FONT>         *<a name="line.149"></a>
<FONT color="green">150</FONT>         */<a name="line.150"></a>
<FONT color="green">151</FONT>        @Inject<a name="line.151"></a>
<FONT color="green">152</FONT>        private MetadataTools metadataTools;<a name="line.152"></a>
<FONT color="green">153</FONT>    <a name="line.153"></a>
<FONT color="green">154</FONT>        /**<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>        @Inject<a name="line.157"></a>
<FONT color="green">158</FONT>        private MimeTypes mimeTypes;<a name="line.158"></a>
<FONT color="green">159</FONT>    <a name="line.159"></a>
<FONT color="green">160</FONT>        /**<a name="line.160"></a>
<FONT color="green">161</FONT>         *<a name="line.161"></a>
<FONT color="green">162</FONT>         */<a name="line.162"></a>
<FONT color="green">163</FONT>        private ArchivaConfiguration archivaConfiguration;<a name="line.163"></a>
<FONT color="green">164</FONT>    <a name="line.164"></a>
<FONT color="green">165</FONT>        /**<a name="line.165"></a>
<FONT color="green">166</FONT>         *<a name="line.166"></a>
<FONT color="green">167</FONT>         */<a name="line.167"></a>
<FONT color="green">168</FONT>        @Inject<a name="line.168"></a>
<FONT color="green">169</FONT>        private ServletAuthenticator servletAuth;<a name="line.169"></a>
<FONT color="green">170</FONT>    <a name="line.170"></a>
<FONT color="green">171</FONT>        /**<a name="line.171"></a>
<FONT color="green">172</FONT>         *<a name="line.172"></a>
<FONT color="green">173</FONT>         */<a name="line.173"></a>
<FONT color="green">174</FONT>        @Inject<a name="line.174"></a>
<FONT color="green">175</FONT>        @Named(value = "httpAuthenticator#basic")<a name="line.175"></a>
<FONT color="green">176</FONT>        private HttpAuthenticator httpAuth;<a name="line.176"></a>
<FONT color="green">177</FONT>    <a name="line.177"></a>
<FONT color="green">178</FONT>        @Inject<a name="line.178"></a>
<FONT color="green">179</FONT>        private RemoteRepositoryAdmin remoteRepositoryAdmin;<a name="line.179"></a>
<FONT color="green">180</FONT>    <a name="line.180"></a>
<FONT color="green">181</FONT>        @Inject<a name="line.181"></a>
<FONT color="green">182</FONT>        private IndexMerger indexMerger;<a name="line.182"></a>
<FONT color="green">183</FONT>    <a name="line.183"></a>
<FONT color="green">184</FONT>        @Inject<a name="line.184"></a>
<FONT color="green">185</FONT>        private RepositorySearch repositorySearch;<a name="line.185"></a>
<FONT color="green">186</FONT>    <a name="line.186"></a>
<FONT color="green">187</FONT>        /**<a name="line.187"></a>
<FONT color="green">188</FONT>         * Lock Manager - use simple implementation from JackRabbit<a name="line.188"></a>
<FONT color="green">189</FONT>         */<a name="line.189"></a>
<FONT color="green">190</FONT>        private final LockManager lockManager = new SimpleLockManager();<a name="line.190"></a>
<FONT color="green">191</FONT>    <a name="line.191"></a>
<FONT color="green">192</FONT>        /**<a name="line.192"></a>
<FONT color="green">193</FONT>         *<a name="line.193"></a>
<FONT color="green">194</FONT>         */<a name="line.194"></a>
<FONT color="green">195</FONT>        private ChecksumFile checksum;<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>         *<a name="line.198"></a>
<FONT color="green">199</FONT>         */<a name="line.199"></a>
<FONT color="green">200</FONT>        private Digester digestSha1;<a name="line.200"></a>
<FONT color="green">201</FONT>    <a name="line.201"></a>
<FONT color="green">202</FONT>        /**<a name="line.202"></a>
<FONT color="green">203</FONT>         *<a name="line.203"></a>
<FONT color="green">204</FONT>         */<a name="line.204"></a>
<FONT color="green">205</FONT>        private Digester digestMd5;<a name="line.205"></a>
<FONT color="green">206</FONT>    <a name="line.206"></a>
<FONT color="green">207</FONT>        /**<a name="line.207"></a>
<FONT color="green">208</FONT>         *<a name="line.208"></a>
<FONT color="green">209</FONT>         */<a name="line.209"></a>
<FONT color="green">210</FONT>        @Inject<a name="line.210"></a>
<FONT color="green">211</FONT>        @Named(value = "archivaTaskScheduler#repository")<a name="line.211"></a>
<FONT color="green">212</FONT>        private RepositoryArchivaTaskScheduler scheduler;<a name="line.212"></a>
<FONT color="green">213</FONT>    <a name="line.213"></a>
<FONT color="green">214</FONT>        private ApplicationContext applicationContext;<a name="line.214"></a>
<FONT color="green">215</FONT>    <a name="line.215"></a>
<FONT color="green">216</FONT>        @Inject<a name="line.216"></a>
<FONT color="green">217</FONT>        public ArchivaDavResourceFactory( ApplicationContext applicationContext, PlexusSisuBridge plexusSisuBridge,<a name="line.217"></a>
<FONT color="green">218</FONT>                                          ArchivaConfiguration archivaConfiguration )<a name="line.218"></a>
<FONT color="green">219</FONT>            throws PlexusSisuBridgeException<a name="line.219"></a>
<FONT color="green">220</FONT>        {<a name="line.220"></a>
<FONT color="green">221</FONT>            this.archivaConfiguration = archivaConfiguration;<a name="line.221"></a>
<FONT color="green">222</FONT>            this.applicationContext = applicationContext;<a name="line.222"></a>
<FONT color="green">223</FONT>            this.checksum = plexusSisuBridge.lookup( ChecksumFile.class );<a name="line.223"></a>
<FONT color="green">224</FONT>    <a name="line.224"></a>
<FONT color="green">225</FONT>            this.digestMd5 = plexusSisuBridge.lookup( Digester.class, "md5" );<a name="line.225"></a>
<FONT color="green">226</FONT>            this.digestSha1 = plexusSisuBridge.lookup( Digester.class, "sha1" );<a name="line.226"></a>
<FONT color="green">227</FONT>    <a name="line.227"></a>
<FONT color="green">228</FONT>            // TODO remove this hard dependency on maven !!<a name="line.228"></a>
<FONT color="green">229</FONT>            repositoryRequest = new RepositoryRequest( new LegacyPathParser( archivaConfiguration ) );<a name="line.229"></a>
<FONT color="green">230</FONT>        }<a name="line.230"></a>
<FONT color="green">231</FONT>    <a name="line.231"></a>
<FONT color="green">232</FONT>        @PostConstruct<a name="line.232"></a>
<FONT color="green">233</FONT>        public void initialize()<a name="line.233"></a>
<FONT color="green">234</FONT>        {<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>    <a name="line.237"></a>
<FONT color="green">238</FONT>        public DavResource createResource( final DavResourceLocator locator, final DavServletRequest request,<a name="line.238"></a>
<FONT color="green">239</FONT>                                           final DavServletResponse response )<a name="line.239"></a>
<FONT color="green">240</FONT>            throws DavException<a name="line.240"></a>
<FONT color="green">241</FONT>        {<a name="line.241"></a>
<FONT color="green">242</FONT>            ArchivaDavResourceLocator archivaLocator = checkLocatorIsInstanceOfRepositoryLocator( locator );<a name="line.242"></a>
<FONT color="green">243</FONT>    <a name="line.243"></a>
<FONT color="green">244</FONT>            RepositoryGroupConfiguration repoGroupConfig =<a name="line.244"></a>
<FONT color="green">245</FONT>                archivaConfiguration.getConfiguration().getRepositoryGroupsAsMap().get( archivaLocator.getRepositoryId() );<a name="line.245"></a>
<FONT color="green">246</FONT>    <a name="line.246"></a>
<FONT color="green">247</FONT>            String activePrincipal = getActivePrincipal( request );<a name="line.247"></a>
<FONT color="green">248</FONT>    <a name="line.248"></a>
<FONT color="green">249</FONT>            List&lt;String&gt; resourcesInAbsolutePath = new ArrayList&lt;String&gt;();<a name="line.249"></a>
<FONT color="green">250</FONT>    <a name="line.250"></a>
<FONT color="green">251</FONT>            boolean readMethod = WebdavMethodUtil.isReadMethod( request.getMethod() );<a name="line.251"></a>
<FONT color="green">252</FONT>            DavResource resource;<a name="line.252"></a>
<FONT color="green">253</FONT>            if ( repoGroupConfig != null )<a name="line.253"></a>
<FONT color="green">254</FONT>            {<a name="line.254"></a>
<FONT color="green">255</FONT>                if ( !readMethod )<a name="line.255"></a>
<FONT color="green">256</FONT>                {<a name="line.256"></a>
<FONT color="green">257</FONT>                    throw new DavException( HttpServletResponse.SC_METHOD_NOT_ALLOWED,<a name="line.257"></a>
<FONT color="green">258</FONT>                                            "Write method not allowed for repository groups." );<a name="line.258"></a>
<FONT color="green">259</FONT>                }<a name="line.259"></a>
<FONT color="green">260</FONT>    <a name="line.260"></a>
<FONT color="green">261</FONT>                log.debug( "Repository group '{}' accessed by '{}", repoGroupConfig.getId(), activePrincipal );<a name="line.261"></a>
<FONT color="green">262</FONT>    <a name="line.262"></a>
<FONT color="green">263</FONT>                // handle browse requests for virtual repos<a name="line.263"></a>
<FONT color="green">264</FONT>                if ( RepositoryPathUtil.getLogicalResource( archivaLocator.getOrigResourcePath() ).endsWith( "/" ) )<a name="line.264"></a>
<FONT color="green">265</FONT>                {<a name="line.265"></a>
<FONT color="green">266</FONT>                    return getResourceFromGroup( request, repoGroupConfig.getRepositories(), archivaLocator,<a name="line.266"></a>
<FONT color="green">267</FONT>                                                 repoGroupConfig );<a name="line.267"></a>
<FONT color="green">268</FONT>                }<a name="line.268"></a>
<FONT color="green">269</FONT>                else<a name="line.269"></a>
<FONT color="green">270</FONT>                {<a name="line.270"></a>
<FONT color="green">271</FONT>                    // make a copy to avoid potential concurrent modifications (eg. by configuration)<a name="line.271"></a>
<FONT color="green">272</FONT>                    // TODO: ultimately, locking might be more efficient than copying in this fashion since updates are<a name="line.272"></a>
<FONT color="green">273</FONT>                    //  infrequent<a name="line.273"></a>
<FONT color="green">274</FONT>                    List&lt;String&gt; repositories = new ArrayList&lt;String&gt;( repoGroupConfig.getRepositories() );<a name="line.274"></a>
<FONT color="green">275</FONT>                    resource = processRepositoryGroup( request, archivaLocator, repositories, activePrincipal,<a name="line.275"></a>
<FONT color="green">276</FONT>                                                       resourcesInAbsolutePath, repoGroupConfig );<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>            else<a name="line.279"></a>
<FONT color="green">280</FONT>            {<a name="line.280"></a>
<FONT color="green">281</FONT>    <a name="line.281"></a>
<FONT color="green">282</FONT>                try<a name="line.282"></a>
<FONT color="green">283</FONT>                {<a name="line.283"></a>
<FONT color="green">284</FONT>                    RemoteRepository remoteRepository =<a name="line.284"></a>
<FONT color="green">285</FONT>                        remoteRepositoryAdmin.getRemoteRepository( archivaLocator.getRepositoryId() );<a name="line.285"></a>
<FONT color="green">286</FONT>    <a name="line.286"></a>
<FONT color="green">287</FONT>                    if ( remoteRepository != null )<a name="line.287"></a>
<FONT color="green">288</FONT>                    {<a name="line.288"></a>
<FONT color="green">289</FONT>                        String logicalResource = RepositoryPathUtil.getLogicalResource( locator.getResourcePath() );<a name="line.289"></a>
<FONT color="green">290</FONT>                        IndexingContext indexingContext = remoteRepositoryAdmin.createIndexContext( remoteRepository );<a name="line.290"></a>
<FONT color="green">291</FONT>                        File resourceFile = StringUtils.equals( logicalResource, "/" )<a name="line.291"></a>
<FONT color="green">292</FONT>                            ? new File( indexingContext.getIndexDirectoryFile().getParent() )<a name="line.292"></a>
<FONT color="green">293</FONT>                            : new File( indexingContext.getIndexDirectoryFile().getParent(), logicalResource );<a name="line.293"></a>
<FONT color="green">294</FONT>                        resource = new ArchivaDavResource( resourceFile.getAbsolutePath(), locator.getResourcePath(), null,<a name="line.294"></a>
<FONT color="green">295</FONT>                                                           request.getRemoteAddr(), activePrincipal,<a name="line.295"></a>
<FONT color="green">296</FONT>                                                           request.getDavSession(), archivaLocator, this, mimeTypes,<a name="line.296"></a>
<FONT color="green">297</FONT>                                                           auditListeners, scheduler );<a name="line.297"></a>
<FONT color="green">298</FONT>                        setHeaders( response, locator, resource );<a name="line.298"></a>
<FONT color="green">299</FONT>                        return resource;<a name="line.299"></a>
<FONT color="green">300</FONT>                    }<a name="line.300"></a>
<FONT color="green">301</FONT>                }<a name="line.301"></a>
<FONT color="green">302</FONT>                catch ( RepositoryAdminException e )<a name="line.302"></a>
<FONT color="green">303</FONT>                {<a name="line.303"></a>
<FONT color="green">304</FONT>                    log.debug( "RepositoryException remote repository with d'{}' not found, msg: {}",<a name="line.304"></a>
<FONT color="green">305</FONT>                               archivaLocator.getRepositoryId(), e.getMessage() );<a name="line.305"></a>
<FONT color="green">306</FONT>                }<a name="line.306"></a>
<FONT color="green">307</FONT>    <a name="line.307"></a>
<FONT color="green">308</FONT>                ManagedRepositoryContent managedRepository = null;<a name="line.308"></a>
<FONT color="green">309</FONT>    <a name="line.309"></a>
<FONT color="green">310</FONT>                try<a name="line.310"></a>
<FONT color="green">311</FONT>                {<a name="line.311"></a>
<FONT color="green">312</FONT>                    managedRepository = repositoryFactory.getManagedRepositoryContent( archivaLocator.getRepositoryId() );<a name="line.312"></a>
<FONT color="green">313</FONT>                }<a name="line.313"></a>
<FONT color="green">314</FONT>                catch ( RepositoryNotFoundException e )<a name="line.314"></a>
<FONT color="green">315</FONT>                {<a name="line.315"></a>
<FONT color="green">316</FONT>                    throw new DavException( HttpServletResponse.SC_NOT_FOUND,<a name="line.316"></a>
<FONT color="green">317</FONT>                                            "Invalid repository: " + archivaLocator.getRepositoryId() );<a name="line.317"></a>
<FONT color="green">318</FONT>                }<a name="line.318"></a>
<FONT color="green">319</FONT>                catch ( RepositoryException e )<a name="line.319"></a>
<FONT color="green">320</FONT>                {<a name="line.320"></a>
<FONT color="green">321</FONT>                    throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );<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>                log.debug( "Managed repository '{}' accessed by '{}'", managedRepository.getId(), activePrincipal );<a name="line.324"></a>
<FONT color="green">325</FONT>    <a name="line.325"></a>
<FONT color="green">326</FONT>                resource = processRepository( request, archivaLocator, activePrincipal, managedRepository );<a name="line.326"></a>
<FONT color="green">327</FONT>    <a name="line.327"></a>
<FONT color="green">328</FONT>                String logicalResource = RepositoryPathUtil.getLogicalResource( locator.getResourcePath() );<a name="line.328"></a>
<FONT color="green">329</FONT>                resourcesInAbsolutePath.add(<a name="line.329"></a>
<FONT color="green">330</FONT>                    new File( managedRepository.getRepoRoot(), logicalResource ).getAbsolutePath() );<a name="line.330"></a>
<FONT color="green">331</FONT>            }<a name="line.331"></a>
<FONT color="green">332</FONT>    <a name="line.332"></a>
<FONT color="green">333</FONT>            String requestedResource = request.getRequestURI();<a name="line.333"></a>
<FONT color="green">334</FONT>    <a name="line.334"></a>
<FONT color="green">335</FONT>            // MRM-872 : merge all available metadata<a name="line.335"></a>
<FONT color="green">336</FONT>            // merge metadata only when requested via the repo group<a name="line.336"></a>
<FONT color="green">337</FONT>            if ( ( repositoryRequest.isMetadata( requestedResource ) || repositoryRequest.isMetadataSupportFile(<a name="line.337"></a>
<FONT color="green">338</FONT>                requestedResource ) ) &amp;&amp; repoGroupConfig != null )<a name="line.338"></a>
<FONT color="green">339</FONT>            {<a name="line.339"></a>
<FONT color="green">340</FONT>                // this should only be at the project level not version level!<a name="line.340"></a>
<FONT color="green">341</FONT>                if ( isProjectReference( requestedResource ) )<a name="line.341"></a>
<FONT color="green">342</FONT>                {<a name="line.342"></a>
<FONT color="green">343</FONT>    <a name="line.343"></a>
<FONT color="green">344</FONT>                    ArchivaDavResource res = (ArchivaDavResource) resource;<a name="line.344"></a>
<FONT color="green">345</FONT>                    String filePath =<a name="line.345"></a>
<FONT color="green">346</FONT>                        StringUtils.substringBeforeLast( res.getLocalResource().getAbsolutePath().replace( '\\', '/' ),<a name="line.346"></a>
<FONT color="green">347</FONT>                                                         "/" );<a name="line.347"></a>
<FONT color="green">348</FONT>                    filePath = filePath + "/maven-metadata-" + repoGroupConfig.getId() + ".xml";<a name="line.348"></a>
<FONT color="green">349</FONT>    <a name="line.349"></a>
<FONT color="green">350</FONT>                    // for MRM-872 handle checksums of the merged metadata files<a name="line.350"></a>
<FONT color="green">351</FONT>                    if ( repositoryRequest.isSupportFile( requestedResource ) )<a name="line.351"></a>
<FONT color="green">352</FONT>                    {<a name="line.352"></a>
<FONT color="green">353</FONT>                        File metadataChecksum =<a name="line.353"></a>
<FONT color="green">354</FONT>                            new File( filePath + "." + StringUtils.substringAfterLast( requestedResource, "." ) );<a name="line.354"></a>
<FONT color="green">355</FONT>                        if ( metadataChecksum.exists() )<a name="line.355"></a>
<FONT color="green">356</FONT>                        {<a name="line.356"></a>
<FONT color="green">357</FONT>                            LogicalResource logicalResource =<a name="line.357"></a>
<FONT color="green">358</FONT>                                new LogicalResource( RepositoryPathUtil.getLogicalResource( locator.getResourcePath() ) );<a name="line.358"></a>
<FONT color="green">359</FONT>    <a name="line.359"></a>
<FONT color="green">360</FONT>                            resource =<a name="line.360"></a>
<FONT color="green">361</FONT>                                new ArchivaDavResource( metadataChecksum.getAbsolutePath(), logicalResource.getPath(), null,<a name="line.361"></a>
<FONT color="green">362</FONT>                                                        request.getRemoteAddr(), activePrincipal, request.getDavSession(),<a name="line.362"></a>
<FONT color="green">363</FONT>                                                        archivaLocator, this, mimeTypes, auditListeners, scheduler );<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>                    else<a name="line.366"></a>
<FONT color="green">367</FONT>                    {<a name="line.367"></a>
<FONT color="green">368</FONT>                        if ( resourcesInAbsolutePath != null &amp;&amp; resourcesInAbsolutePath.size() &gt; 1 )<a name="line.368"></a>
<FONT color="green">369</FONT>                        {<a name="line.369"></a>
<FONT color="green">370</FONT>                            // merge the metadata of all repos under group<a name="line.370"></a>
<FONT color="green">371</FONT>                            ArchivaRepositoryMetadata mergedMetadata = new ArchivaRepositoryMetadata();<a name="line.371"></a>
<FONT color="green">372</FONT>                            for ( String resourceAbsPath : resourcesInAbsolutePath )<a name="line.372"></a>
<FONT color="green">373</FONT>                            {<a name="line.373"></a>
<FONT color="green">374</FONT>                                try<a name="line.374"></a>
<FONT color="green">375</FONT>                                {<a name="line.375"></a>
<FONT color="green">376</FONT>                                    File metadataFile = new File( resourceAbsPath );<a name="line.376"></a>
<FONT color="green">377</FONT>                                    ArchivaRepositoryMetadata repoMetadata = MavenMetadataReader.read( metadataFile );<a name="line.377"></a>
<FONT color="green">378</FONT>                                    mergedMetadata = RepositoryMetadataMerge.merge( mergedMetadata, repoMetadata );<a name="line.378"></a>
<FONT color="green">379</FONT>                                }<a name="line.379"></a>
<FONT color="green">380</FONT>                                catch ( XMLException e )<a name="line.380"></a>
<FONT color="green">381</FONT>                                {<a name="line.381"></a>
<FONT color="green">382</FONT>                                    throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,<a name="line.382"></a>
<FONT color="green">383</FONT>                                                            "Error occurred while reading metadata file." );<a name="line.383"></a>
<FONT color="green">384</FONT>                                }<a name="line.384"></a>
<FONT color="green">385</FONT>                                catch ( RepositoryMetadataException r )<a name="line.385"></a>
<FONT color="green">386</FONT>                                {<a name="line.386"></a>
<FONT color="green">387</FONT>                                    throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,<a name="line.387"></a>
<FONT color="green">388</FONT>                                                            "Error occurred while merging metadata file." );<a name="line.388"></a>
<FONT color="green">389</FONT>                                }<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>                            try<a name="line.392"></a>
<FONT color="green">393</FONT>                            {<a name="line.393"></a>
<FONT color="green">394</FONT>                                File resourceFile = writeMergedMetadataToFile( mergedMetadata, filePath );<a name="line.394"></a>
<FONT color="green">395</FONT>    <a name="line.395"></a>
<FONT color="green">396</FONT>                                LogicalResource logicalResource = new LogicalResource(<a name="line.396"></a>
<FONT color="green">397</FONT>                                    RepositoryPathUtil.getLogicalResource( locator.getResourcePath() ) );<a name="line.397"></a>
<FONT color="green">398</FONT>    <a name="line.398"></a>
<FONT color="green">399</FONT>                                resource =<a name="line.399"></a>
<FONT color="green">400</FONT>                                    new ArchivaDavResource( resourceFile.getAbsolutePath(), logicalResource.getPath(), null,<a name="line.400"></a>
<FONT color="green">401</FONT>                                                            request.getRemoteAddr(), activePrincipal,<a name="line.401"></a>
<FONT color="green">402</FONT>                                                            request.getDavSession(), archivaLocator, this, mimeTypes,<a name="line.402"></a>
<FONT color="green">403</FONT>                                                            auditListeners, scheduler );<a name="line.403"></a>
<FONT color="green">404</FONT>                            }<a name="line.404"></a>
<FONT color="green">405</FONT>                            catch ( RepositoryMetadataException r )<a name="line.405"></a>
<FONT color="green">406</FONT>                            {<a name="line.406"></a>
<FONT color="green">407</FONT>                                throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,<a name="line.407"></a>
<FONT color="green">408</FONT>                                                        "Error occurred while writing metadata file." );<a name="line.408"></a>
<FONT color="green">409</FONT>                            }<a name="line.409"></a>
<FONT color="green">410</FONT>                            catch ( IOException ie )<a name="line.410"></a>
<FONT color="green">411</FONT>                            {<a name="line.411"></a>
<FONT color="green">412</FONT>                                throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,<a name="line.412"></a>
<FONT color="green">413</FONT>                                                        "Error occurred while generating checksum files." );<a name="line.413"></a>
<FONT color="green">414</FONT>                            }<a name="line.414"></a>
<FONT color="green">415</FONT>                            catch ( DigesterException de )<a name="line.415"></a>
<FONT color="green">416</FONT>                            {<a name="line.416"></a>
<FONT color="green">417</FONT>                                throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,<a name="line.417"></a>
<FONT color="green">418</FONT>                                                        "Error occurred while generating checksum files." );<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>                    }<a name="line.421"></a>
<FONT color="green">422</FONT>                }<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>            setHeaders( response, locator, resource );<a name="line.425"></a>
<FONT color="green">426</FONT>    <a name="line.426"></a>
<FONT color="green">427</FONT>            // compatibility with MRM-440 to ensure browsing the repository works ok<a name="line.427"></a>
<FONT color="green">428</FONT>            if ( resource.isCollection() &amp;&amp; !request.getRequestURI().endsWith( "/" ) )<a name="line.428"></a>
<FONT color="green">429</FONT>            {<a name="line.429"></a>
<FONT color="green">430</FONT>                throw new BrowserRedirectException( resource.getHref() );<a name="line.430"></a>
<FONT color="green">431</FONT>            }<a name="line.431"></a>
<FONT color="green">432</FONT>            resource.addLockManager( lockManager );<a name="line.432"></a>
<FONT color="green">433</FONT>            return resource;<a name="line.433"></a>
<FONT color="green">434</FONT>        }<a name="line.434"></a>
<FONT color="green">435</FONT>    <a name="line.435"></a>
<FONT color="green">436</FONT>        private DavResource processRepositoryGroup( final DavServletRequest request,<a name="line.436"></a>
<FONT color="green">437</FONT>                                                    ArchivaDavResourceLocator archivaLocator, List&lt;String&gt; repositories,<a name="line.437"></a>
<FONT color="green">438</FONT>                                                    String activePrincipal, List&lt;String&gt; resourcesInAbsolutePath,<a name="line.438"></a>
<FONT color="green">439</FONT>                                                    RepositoryGroupConfiguration repoGroupConfig )<a name="line.439"></a>
<FONT color="green">440</FONT>            throws DavException<a name="line.440"></a>
<FONT color="green">441</FONT>        {<a name="line.441"></a>
<FONT color="green">442</FONT>            DavResource resource = null;<a name="line.442"></a>
<FONT color="green">443</FONT>            List&lt;DavException&gt; storedExceptions = new ArrayList&lt;DavException&gt;();<a name="line.443"></a>
<FONT color="green">444</FONT>    <a name="line.444"></a>
<FONT color="green">445</FONT>            String pathInfo = StringUtils.removeEnd( request.getPathInfo(), "/" );<a name="line.445"></a>
<FONT color="green">446</FONT>    <a name="line.446"></a>
<FONT color="green">447</FONT>            String rootPath = StringUtils.substringBeforeLast( pathInfo, "/" );<a name="line.447"></a>
<FONT color="green">448</FONT>    <a name="line.448"></a>
<FONT color="green">449</FONT>            if ( StringUtils.endsWith( rootPath, repoGroupConfig.getMergedIndexPath() ) )<a name="line.449"></a>
<FONT color="green">450</FONT>            {<a name="line.450"></a>
<FONT color="green">451</FONT>                // we are in the case of index file request<a name="line.451"></a>
<FONT color="green">452</FONT>                String requestedFileName = StringUtils.substringAfterLast( pathInfo, "/" );<a name="line.452"></a>
<FONT color="green">453</FONT>                File temporaryIndexDirectory =<a name="line.453"></a>
<FONT color="green">454</FONT>                    buildMergedIndexDirectory( repositories, activePrincipal, request, repoGroupConfig );<a name="line.454"></a>
<FONT color="green">455</FONT>    <a name="line.455"></a>
<FONT color="green">456</FONT>                File resourceFile = new File( temporaryIndexDirectory, requestedFileName );<a name="line.456"></a>
<FONT color="green">457</FONT>                resource = new ArchivaDavResource( resourceFile.getAbsolutePath(), requestedFileName, null,<a name="line.457"></a>
<FONT color="green">458</FONT>                                                   request.getRemoteAddr(), activePrincipal, request.getDavSession(),<a name="line.458"></a>
<FONT color="green">459</FONT>                                                   archivaLocator, this, mimeTypes, auditListeners, scheduler );<a name="line.459"></a>
<FONT color="green">460</FONT>    <a name="line.460"></a>
<FONT color="green">461</FONT>            }<a name="line.461"></a>
<FONT color="green">462</FONT>            else<a name="line.462"></a>
<FONT color="green">463</FONT>            {<a name="line.463"></a>
<FONT color="green">464</FONT>                for ( String repositoryId : repositories )<a name="line.464"></a>
<FONT color="green">465</FONT>                {<a name="line.465"></a>
<FONT color="green">466</FONT>                    ManagedRepositoryContent managedRepository;<a name="line.466"></a>
<FONT color="green">467</FONT>                    try<a name="line.467"></a>
<FONT color="green">468</FONT>                    {<a name="line.468"></a>
<FONT color="green">469</FONT>                        managedRepository = repositoryFactory.getManagedRepositoryContent( repositoryId );<a name="line.469"></a>
<FONT color="green">470</FONT>                    }<a name="line.470"></a>
<FONT color="green">471</FONT>                    catch ( RepositoryNotFoundException e )<a name="line.471"></a>
<FONT color="green">472</FONT>                    {<a name="line.472"></a>
<FONT color="green">473</FONT>                        throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );<a name="line.473"></a>
<FONT color="green">474</FONT>                    }<a name="line.474"></a>
<FONT color="green">475</FONT>                    catch ( RepositoryException e )<a name="line.475"></a>
<FONT color="green">476</FONT>                    {<a name="line.476"></a>
<FONT color="green">477</FONT>                        throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );<a name="line.477"></a>
<FONT color="green">478</FONT>                    }<a name="line.478"></a>
<FONT color="green">479</FONT>    <a name="line.479"></a>
<FONT color="green">480</FONT>                    try<a name="line.480"></a>
<FONT color="green">481</FONT>                    {<a name="line.481"></a>
<FONT color="green">482</FONT>                        DavResource updatedResource =<a name="line.482"></a>
<FONT color="green">483</FONT>                            processRepository( request, archivaLocator, activePrincipal, managedRepository );<a name="line.483"></a>
<FONT color="green">484</FONT>                        if ( resource == null )<a name="line.484"></a>
<FONT color="green">485</FONT>                        {<a name="line.485"></a>
<FONT color="green">486</FONT>                            resource = updatedResource;<a name="line.486"></a>
<FONT color="green">487</FONT>                        }<a name="line.487"></a>
<FONT color="green">488</FONT>    <a name="line.488"></a>
<FONT color="green">489</FONT>                        String logicalResource = RepositoryPathUtil.getLogicalResource( archivaLocator.getResourcePath() );<a name="line.489"></a>
<FONT color="green">490</FONT>                        if ( logicalResource.endsWith( "/" ) )<a name="line.490"></a>
<FONT color="green">491</FONT>                        {<a name="line.491"></a>
<FONT color="green">492</FONT>                            logicalResource = logicalResource.substring( 1 );<a name="line.492"></a>
<FONT color="green">493</FONT>                        }<a name="line.493"></a>
<FONT color="green">494</FONT>                        resourcesInAbsolutePath.add(<a name="line.494"></a>
<FONT color="green">495</FONT>                            new File( managedRepository.getRepoRoot(), logicalResource ).getAbsolutePath() );<a name="line.495"></a>
<FONT color="green">496</FONT>                    }<a name="line.496"></a>
<FONT color="green">497</FONT>                    catch ( DavException e )<a name="line.497"></a>
<FONT color="green">498</FONT>                    {<a name="line.498"></a>
<FONT color="green">499</FONT>                        storedExceptions.add( e );<a name="line.499"></a>
<FONT color="green">500</FONT>                    }<a name="line.500"></a>
<FONT color="green">501</FONT>                }<a name="line.501"></a>
<FONT color="green">502</FONT>            }<a name="line.502"></a>
<FONT color="green">503</FONT>            if ( resource == null )<a name="line.503"></a>
<FONT color="green">504</FONT>            {<a name="line.504"></a>
<FONT color="green">505</FONT>                if ( !storedExceptions.isEmpty() )<a name="line.505"></a>
<FONT color="green">506</FONT>                {<a name="line.506"></a>
<FONT color="green">507</FONT>                    // MRM-1232<a name="line.507"></a>
<FONT color="green">508</FONT>                    for ( DavException e : storedExceptions )<a name="line.508"></a>
<FONT color="green">509</FONT>                    {<a name="line.509"></a>
<FONT color="green">510</FONT>                        if ( 401 == e.getErrorCode() )<a name="line.510"></a>
<FONT color="green">511</FONT>                        {<a name="line.511"></a>
<FONT color="green">512</FONT>                            throw e;<a name="line.512"></a>
<FONT color="green">513</FONT>                        }<a name="line.513"></a>
<FONT color="green">514</FONT>                    }<a name="line.514"></a>
<FONT color="green">515</FONT>    <a name="line.515"></a>
<FONT color="green">516</FONT>                    throw new DavException( HttpServletResponse.SC_NOT_FOUND );<a name="line.516"></a>
<FONT color="green">517</FONT>                }<a name="line.517"></a>
<FONT color="green">518</FONT>                else<a name="line.518"></a>
<FONT color="green">519</FONT>                {<a name="line.519"></a>
<FONT color="green">520</FONT>                    throw new DavException( HttpServletResponse.SC_NOT_FOUND );<a name="line.520"></a>
<FONT color="green">521</FONT>                }<a name="line.521"></a>
<FONT color="green">522</FONT>            }<a name="line.522"></a>
<FONT color="green">523</FONT>            return resource;<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>        private DavResource processRepository( final DavServletRequest request, ArchivaDavResourceLocator archivaLocator,<a name="line.526"></a>
<FONT color="green">527</FONT>                                               String activePrincipal, ManagedRepositoryContent managedRepository )<a name="line.527"></a>
<FONT color="green">528</FONT>            throws DavException<a name="line.528"></a>
<FONT color="green">529</FONT>        {<a name="line.529"></a>
<FONT color="green">530</FONT>            DavResource resource = null;<a name="line.530"></a>
<FONT color="green">531</FONT>            if ( isAuthorized( request, managedRepository.getId() ) )<a name="line.531"></a>
<FONT color="green">532</FONT>            {<a name="line.532"></a>
<FONT color="green">533</FONT>                String path = RepositoryPathUtil.getLogicalResource( archivaLocator.getResourcePath() );<a name="line.533"></a>
<FONT color="green">534</FONT>                if ( path.startsWith( "/" ) )<a name="line.534"></a>
<FONT color="green">535</FONT>                {<a name="line.535"></a>
<FONT color="green">536</FONT>                    path = path.substring( 1 );<a name="line.536"></a>
<FONT color="green">537</FONT>                }<a name="line.537"></a>
<FONT color="green">538</FONT>                LogicalResource logicalResource = new LogicalResource( path );<a name="line.538"></a>
<FONT color="green">539</FONT>                File resourceFile = new File( managedRepository.getRepoRoot(), path );<a name="line.539"></a>
<FONT color="green">540</FONT>                resource = new ArchivaDavResource( resourceFile.getAbsolutePath(), path, managedRepository.getRepository(),<a name="line.540"></a>
<FONT color="green">541</FONT>                                                   request.getRemoteAddr(), activePrincipal, request.getDavSession(),<a name="line.541"></a>
<FONT color="green">542</FONT>                                                   archivaLocator, this, mimeTypes, auditListeners, scheduler );<a name="line.542"></a>
<FONT color="green">543</FONT>    <a name="line.543"></a>
<FONT color="green">544</FONT>                if ( WebdavMethodUtil.isReadMethod( request.getMethod() ) )<a name="line.544"></a>
<FONT color="green">545</FONT>                {<a name="line.545"></a>
<FONT color="green">546</FONT>                    if ( archivaLocator.getHref( false ).endsWith( "/" ) &amp;&amp; !resourceFile.isDirectory() )<a name="line.546"></a>
<FONT color="green">547</FONT>                    {<a name="line.547"></a>
<FONT color="green">548</FONT>                        // force a resource not found<a name="line.548"></a>
<FONT color="green">549</FONT>                        throw new DavException( HttpServletResponse.SC_NOT_FOUND, "Resource does not exist" );<a name="line.549"></a>
<FONT color="green">550</FONT>                    }<a name="line.550"></a>
<FONT color="green">551</FONT>                    else<a name="line.551"></a>
<FONT color="green">552</FONT>                    {<a name="line.552"></a>
<FONT color="green">553</FONT>                        if ( !resource.isCollection() )<a name="line.553"></a>
<FONT color="green">554</FONT>                        {<a name="line.554"></a>
<FONT color="green">555</FONT>                            boolean previouslyExisted = resourceFile.exists();<a name="line.555"></a>
<FONT color="green">556</FONT>    <a name="line.556"></a>
<FONT color="green">557</FONT>                            // Attempt to fetch the resource from any defined proxy.<a name="line.557"></a>
<FONT color="green">558</FONT>                            boolean fromProxy = fetchContentFromProxies( managedRepository, request, logicalResource );<a name="line.558"></a>
<FONT color="green">559</FONT>    <a name="line.559"></a>
<FONT color="green">560</FONT>                            // At this point the incoming request can either be in default or<a name="line.560"></a>
<FONT color="green">561</FONT>                            // legacy layout format.<a name="line.561"></a>
<FONT color="green">562</FONT>                            try<a name="line.562"></a>
<FONT color="green">563</FONT>                            {<a name="line.563"></a>
<FONT color="green">564</FONT>                                // Perform an adjustment of the resource to the managed<a name="line.564"></a>
<FONT color="green">565</FONT>                                // repository expected path.<a name="line.565"></a>
<FONT color="green">566</FONT>                                String localResourcePath =<a name="line.566"></a>
<FONT color="green">567</FONT>                                    repositoryRequest.toNativePath( logicalResource.getPath(), managedRepository );<a name="line.567"></a>
<FONT color="green">568</FONT>                                resourceFile = new File( managedRepository.getRepoRoot(), localResourcePath );<a name="line.568"></a>
<FONT color="green">569</FONT>                                resource =<a name="line.569"></a>
<FONT color="green">570</FONT>                                    new ArchivaDavResource( resourceFile.getAbsolutePath(), logicalResource.getPath(),<a name="line.570"></a>
<FONT color="green">571</FONT>                                                            managedRepository.getRepository(), request.getRemoteAddr(),<a name="line.571"></a>
<FONT color="green">572</FONT>                                                            activePrincipal, request.getDavSession(), archivaLocator, this,<a name="line.572"></a>
<FONT color="green">573</FONT>                                                            mimeTypes, auditListeners, scheduler );<a name="line.573"></a>
<FONT color="green">574</FONT>                            }<a name="line.574"></a>
<FONT color="green">575</FONT>                            catch ( LayoutException e )<a name="line.575"></a>
<FONT color="green">576</FONT>                            {<a name="line.576"></a>
<FONT color="green">577</FONT>                                if ( !resourceFile.exists() )<a name="line.577"></a>
<FONT color="green">578</FONT>                                {<a name="line.578"></a>
<FONT color="green">579</FONT>                                    throw new DavException( HttpServletResponse.SC_NOT_FOUND, e );<a name="line.579"></a>
<FONT color="green">580</FONT>                                }<a name="line.580"></a>
<FONT color="green">581</FONT>                            }<a name="line.581"></a>
<FONT color="green">582</FONT>    <a name="line.582"></a>
<FONT color="green">583</FONT>                            if ( fromProxy )<a name="line.583"></a>
<FONT color="green">584</FONT>                            {<a name="line.584"></a>
<FONT color="green">585</FONT>                                String event = ( previouslyExisted ? AuditEvent.MODIFY_FILE : AuditEvent.CREATE_FILE )<a name="line.585"></a>
<FONT color="green">586</FONT>                                    + PROXIED_SUFFIX;<a name="line.586"></a>
<FONT color="green">587</FONT>    <a name="line.587"></a>
<FONT color="green">588</FONT>                                log.debug( "Proxied artifact '{}' in repository '{}' (current user '{}')",<a name="line.588"></a>
<FONT color="green">589</FONT>                                           resourceFile.getName(), managedRepository.getId(), activePrincipal );<a name="line.589"></a>
<FONT color="green">590</FONT>    <a name="line.590"></a>
<FONT color="green">591</FONT>                                triggerAuditEvent( request.getRemoteAddr(), archivaLocator.getRepositoryId(),<a name="line.591"></a>
<FONT color="green">592</FONT>                                                   logicalResource.getPath(), event, activePrincipal );<a name="line.592"></a>
<FONT color="green">593</FONT>                            }<a name="line.593"></a>
<FONT color="green">594</FONT>    <a name="line.594"></a>
<FONT color="green">595</FONT>                            if ( !resourceFile.exists() )<a name="line.595"></a>
<FONT color="green">596</FONT>                            {<a name="line.596"></a>
<FONT color="green">597</FONT>                                throw new DavException( HttpServletResponse.SC_NOT_FOUND, "Resource does not exist" );<a name="line.597"></a>
<FONT color="green">598</FONT>                            }<a name="line.598"></a>
<FONT color="green">599</FONT>                        }<a name="line.599"></a>
<FONT color="green">600</FONT>                    }<a name="line.600"></a>
<FONT color="green">601</FONT>                }<a name="line.601"></a>
<FONT color="green">602</FONT>    <a name="line.602"></a>
<FONT color="green">603</FONT>                if ( request.getMethod().equals( HTTP_PUT_METHOD ) )<a name="line.603"></a>
<FONT color="green">604</FONT>                {<a name="line.604"></a>
<FONT color="green">605</FONT>                    String resourcePath = logicalResource.getPath();<a name="line.605"></a>
<FONT color="green">606</FONT>    <a name="line.606"></a>
<FONT color="green">607</FONT>                    // check if target repo is enabled for releases<a name="line.607"></a>
<FONT color="green">608</FONT>                    // we suppose that release-artifacts can be deployed only to repos enabled for releases<a name="line.608"></a>
<FONT color="green">609</FONT>                    if ( managedRepository.getRepository().isReleases() &amp;&amp; !repositoryRequest.isMetadata( resourcePath )<a name="line.609"></a>
<FONT color="green">610</FONT>                        &amp;&amp; !repositoryRequest.isSupportFile( resourcePath ) )<a name="line.610"></a>
<FONT color="green">611</FONT>                    {<a name="line.611"></a>
<FONT color="green">612</FONT>                        ArtifactReference artifact = null;<a name="line.612"></a>
<FONT color="green">613</FONT>                        try<a name="line.613"></a>
<FONT color="green">614</FONT>                        {<a name="line.614"></a>
<FONT color="green">615</FONT>                            artifact = managedRepository.toArtifactReference( resourcePath );<a name="line.615"></a>
<FONT color="green">616</FONT>    <a name="line.616"></a>
<FONT color="green">617</FONT>                            if ( !VersionUtil.isSnapshot( artifact.getVersion() ) )<a name="line.617"></a>
<FONT color="green">618</FONT>                            {<a name="line.618"></a>
<FONT color="green">619</FONT>                                // check if artifact already exists and if artifact re-deployment to the repository is allowed<a name="line.619"></a>
<FONT color="green">620</FONT>                                if ( managedRepository.hasContent( artifact )<a name="line.620"></a>
<FONT color="green">621</FONT>                                    &amp;&amp; managedRepository.getRepository().isBlockRedeployments() )<a name="line.621"></a>
<FONT color="green">622</FONT>                                {<a name="line.622"></a>
<FONT color="green">623</FONT>                                    log.warn( "Overwriting released artifacts in repository '{}' is not allowed.",<a name="line.623"></a>
<FONT color="green">624</FONT>                                              managedRepository.getId() );<a name="line.624"></a>
<FONT color="green">625</FONT>                                    throw new DavException( HttpServletResponse.SC_CONFLICT,<a name="line.625"></a>
<FONT color="green">626</FONT>                                                            "Overwriting released artifacts is not allowed." );<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>                        catch ( LayoutException e )<a name="line.630"></a>
<FONT color="green">631</FONT>                        {<a name="line.631"></a>
<FONT color="green">632</FONT>                            log.warn( "Artifact path '" + resourcePath + "' is invalid." );<a name="line.632"></a>
<FONT color="green">633</FONT>                        }<a name="line.633"></a>
<FONT color="green">634</FONT>                    }<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>                     * Create parent directories that don't exist when writing a file This actually makes this<a name="line.637"></a>
<FONT color="green">638</FONT>                     * implementation not compliant to the WebDAV RFC - but we have enough knowledge about how the<a name="line.638"></a>
<FONT color="green">639</FONT>                     * collection is being used to do this reasonably and some versions of Maven's WebDAV don't correctly<a name="line.639"></a>
<FONT color="green">640</FONT>                     * create the collections themselves.<a name="line.640"></a>
<FONT color="green">641</FONT>                     */<a name="line.641"></a>
<FONT color="green">642</FONT>    <a name="line.642"></a>
<FONT color="green">643</FONT>                    File rootDirectory = new File( managedRepository.getRepoRoot() );<a name="line.643"></a>
<FONT color="green">644</FONT>                    File destDir = new File( rootDirectory, logicalResource.getPath() ).getParentFile();<a name="line.644"></a>
<FONT color="green">645</FONT>    <a name="line.645"></a>
<FONT color="green">646</FONT>                    if ( !destDir.exists() )<a name="line.646"></a>
<FONT color="green">647</FONT>                    {<a name="line.647"></a>
<FONT color="green">648</FONT>                        destDir.mkdirs();<a name="line.648"></a>
<FONT color="green">649</FONT>                        String relPath = PathUtil.getRelative( rootDirectory.getAbsolutePath(), destDir );<a name="line.649"></a>
<FONT color="green">650</FONT>    <a name="line.650"></a>
<FONT color="green">651</FONT>                        log.debug( "Creating destination directory '{}' (current user '{}')", destDir.getName(),<a name="line.651"></a>
<FONT color="green">652</FONT>                                   activePrincipal );<a name="line.652"></a>
<FONT color="green">653</FONT>    <a name="line.653"></a>
<FONT color="green">654</FONT>                        triggerAuditEvent( request.getRemoteAddr(), managedRepository.getId(), relPath,<a name="line.654"></a>
<FONT color="green">655</FONT>                                           AuditEvent.CREATE_DIR, activePrincipal );<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>            }<a name="line.658"></a>
<FONT color="green">659</FONT>            return resource;<a name="line.659"></a>
<FONT color="green">660</FONT>        }<a name="line.660"></a>
<FONT color="green">661</FONT>    <a name="line.661"></a>
<FONT color="green">662</FONT>        public DavResource createResource( final DavResourceLocator locator, final DavSession davSession )<a name="line.662"></a>
<FONT color="green">663</FONT>            throws DavException<a name="line.663"></a>
<FONT color="green">664</FONT>        {<a name="line.664"></a>
<FONT color="green">665</FONT>            ArchivaDavResourceLocator archivaLocator = checkLocatorIsInstanceOfRepositoryLocator( locator );<a name="line.665"></a>
<FONT color="green">666</FONT>    <a name="line.666"></a>
<FONT color="green">667</FONT>            ManagedRepositoryContent managedRepository;<a name="line.667"></a>
<FONT color="green">668</FONT>            try<a name="line.668"></a>
<FONT color="green">669</FONT>            {<a name="line.669"></a>
<FONT color="green">670</FONT>                managedRepository = repositoryFactory.getManagedRepositoryContent( archivaLocator.getRepositoryId() );<a name="line.670"></a>
<FONT color="green">671</FONT>            }<a name="line.671"></a>
<FONT color="green">672</FONT>            catch ( RepositoryNotFoundException e )<a name="line.672"></a>
<FONT color="green">673</FONT>            {<a name="line.673"></a>
<FONT color="green">674</FONT>                throw new DavException( HttpServletResponse.SC_NOT_FOUND,<a name="line.674"></a>
<FONT color="green">675</FONT>                                        "Invalid repository: " + archivaLocator.getRepositoryId() );<a name="line.675"></a>
<FONT color="green">676</FONT>            }<a name="line.676"></a>
<FONT color="green">677</FONT>            catch ( RepositoryException e )<a name="line.677"></a>
<FONT color="green">678</FONT>            {<a name="line.678"></a>
<FONT color="green">679</FONT>                throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );<a name="line.679"></a>
<FONT color="green">680</FONT>            }<a name="line.680"></a>
<FONT color="green">681</FONT>    <a name="line.681"></a>
<FONT color="green">682</FONT>            String logicalResource = RepositoryPathUtil.getLogicalResource( locator.getResourcePath() );<a name="line.682"></a>
<FONT color="green">683</FONT>            if ( logicalResource.startsWith( "/" ) )<a name="line.683"></a>
<FONT color="green">684</FONT>            {<a name="line.684"></a>
<FONT color="green">685</FONT>                logicalResource = logicalResource.substring( 1 );<a name="line.685"></a>
<FONT color="green">686</FONT>            }<a name="line.686"></a>
<FONT color="green">687</FONT>            File resourceFile = new File( managedRepository.getRepoRoot(), logicalResource );<a name="line.687"></a>
<FONT color="green">688</FONT>            DavResource resource =<a name="line.688"></a>
<FONT color="green">689</FONT>                new ArchivaDavResource( resourceFile.getAbsolutePath(), logicalResource, managedRepository.getRepository(),<a name="line.689"></a>
<FONT color="green">690</FONT>                                        davSession, archivaLocator, this, mimeTypes, auditListeners, scheduler );<a name="line.690"></a>
<FONT color="green">691</FONT>    <a name="line.691"></a>
<FONT color="green">692</FONT>            resource.addLockManager( lockManager );<a name="line.692"></a>
<FONT color="green">693</FONT>            return resource;<a name="line.693"></a>
<FONT color="green">694</FONT>        }<a name="line.694"></a>
<FONT color="green">695</FONT>    <a name="line.695"></a>
<FONT color="green">696</FONT>        private boolean fetchContentFromProxies( ManagedRepositoryContent managedRepository, DavServletRequest request,<a name="line.696"></a>
<FONT color="green">697</FONT>                                                 LogicalResource resource )<a name="line.697"></a>
<FONT color="green">698</FONT>            throws DavException<a name="line.698"></a>
<FONT color="green">699</FONT>        {<a name="line.699"></a>
<FONT color="green">700</FONT>            String path = resource.getPath();<a name="line.700"></a>
<FONT color="green">701</FONT>            if ( repositoryRequest.isSupportFile( path ) )<a name="line.701"></a>
<FONT color="green">702</FONT>            {<a name="line.702"></a>
<FONT color="green">703</FONT>                File proxiedFile = connectors.fetchFromProxies( managedRepository, path );<a name="line.703"></a>
<FONT color="green">704</FONT>    <a name="line.704"></a>
<FONT color="green">705</FONT>                return ( proxiedFile != null );<a name="line.705"></a>
<FONT color="green">706</FONT>            }<a name="line.706"></a>
<FONT color="green">707</FONT>    <a name="line.707"></a>
<FONT color="green">708</FONT>            // Is it a Metadata resource?<a name="line.708"></a>
<FONT color="green">709</FONT>            if ( repositoryRequest.isDefault( path ) &amp;&amp; repositoryRequest.isMetadata( path ) )<a name="line.709"></a>
<FONT color="green">710</FONT>            {<a name="line.710"></a>
<FONT color="green">711</FONT>                return connectors.fetchMetatadaFromProxies( managedRepository, path ) != null;<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>            // Is it an Archetype Catalog?<a name="line.714"></a>
<FONT color="green">715</FONT>            if ( repositoryRequest.isArchetypeCatalog( path ) )<a name="line.715"></a>
<FONT color="green">716</FONT>            {<a name="line.716"></a>
<FONT color="green">717</FONT>                // FIXME we must implement a merge of remote archetype catalog from remote servers.<a name="line.717"></a>
<FONT color="green">718</FONT>                File proxiedFile = connectors.fetchFromProxies( managedRepository, path );<a name="line.718"></a>
<FONT color="green">719</FONT>    <a name="line.719"></a>
<FONT color="green">720</FONT>                return ( proxiedFile != null );<a name="line.720"></a>
<FONT color="green">721</FONT>            }<a name="line.721"></a>
<FONT color="green">722</FONT>    <a name="line.722"></a>
<FONT color="green">723</FONT>            // Not any of the above? Then it's gotta be an artifact reference.<a name="line.723"></a>
<FONT color="green">724</FONT>            try<a name="line.724"></a>
<FONT color="green">725</FONT>            {<a name="line.725"></a>
<FONT color="green">726</FONT>                // Get the artifact reference in a layout neutral way.<a name="line.726"></a>
<FONT color="green">727</FONT>                ArtifactReference artifact = repositoryRequest.toArtifactReference( path );<a name="line.727"></a>
<FONT color="green">728</FONT>    <a name="line.728"></a>
<FONT color="green">729</FONT>                if ( artifact != null )<a name="line.729"></a>
<FONT color="green">730</FONT>                {<a name="line.730"></a>
<FONT color="green">731</FONT>                    String repositoryLayout = managedRepository.getRepository().getLayout();<a name="line.731"></a>
<FONT color="green">732</FONT>    <a name="line.732"></a>
<FONT color="green">733</FONT>                    RepositoryStorage repositoryStorage =<a name="line.733"></a>
<FONT color="green">734</FONT>                        this.applicationContext.getBean( "repositoryStorage#" + repositoryLayout, RepositoryStorage.class );<a name="line.734"></a>
<FONT color="green">735</FONT>                    repositoryStorage.applyServerSideRelocation( managedRepository, artifact );<a name="line.735"></a>
<FONT color="green">736</FONT>    <a name="line.736"></a>
<FONT color="green">737</FONT>                    File proxiedFile = connectors.fetchFromProxies( managedRepository, artifact );<a name="line.737"></a>
<FONT color="green">738</FONT>    <a name="line.738"></a>
<FONT color="green">739</FONT>                    resource.setPath( managedRepository.toPath( artifact ) );<a name="line.739"></a>
<FONT color="green">740</FONT>    <a name="line.740"></a>
<FONT color="green">741</FONT>                    log.debug( "Proxied artifact '{}:{}:{}'", artifact.getGroupId(), artifact.getArtifactId(),<a name="line.741"></a>
<FONT color="green">742</FONT>                               artifact.getVersion() );<a name="line.742"></a>
<FONT color="green">743</FONT>    <a name="line.743"></a>
<FONT color="green">744</FONT>                    return ( proxiedFile != null );<a name="line.744"></a>
<FONT color="green">745</FONT>                }<a name="line.745"></a>
<FONT color="green">746</FONT>            }<a name="line.746"></a>
<FONT color="green">747</FONT>            catch ( LayoutException e )<a name="line.747"></a>
<FONT color="green">748</FONT>            {<a name="line.748"></a>
<FONT color="green">749</FONT>                /* eat it */<a name="line.749"></a>
<FONT color="green">750</FONT>            }<a name="line.750"></a>
<FONT color="green">751</FONT>            catch ( ProxyDownloadException e )<a name="line.751"></a>
<FONT color="green">752</FONT>            {<a name="line.752"></a>
<FONT color="green">753</FONT>                log.error( e.getMessage(), e );<a name="line.753"></a>
<FONT color="green">754</FONT>                throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,<a name="line.754"></a>
<FONT color="green">755</FONT>                                        "Unable to fetch artifact resource." );<a name="line.755"></a>
<FONT color="green">756</FONT>            }<a name="line.756"></a>
<FONT color="green">757</FONT>            return false;<a name="line.757"></a>
<FONT color="green">758</FONT>        }<a name="line.758"></a>
<FONT color="green">759</FONT>    <a name="line.759"></a>
<FONT color="green">760</FONT>        // TODO: remove?<a name="line.760"></a>
<FONT color="green">761</FONT>    <a name="line.761"></a>
<FONT color="green">762</FONT>        private void triggerAuditEvent( String remoteIP, String repositoryId, String resource, String action,<a name="line.762"></a>
<FONT color="green">763</FONT>                                        String principal )<a name="line.763"></a>
<FONT color="green">764</FONT>        {<a name="line.764"></a>
<FONT color="green">765</FONT>            AuditEvent event = new AuditEvent( repositoryId, principal, resource, action );<a name="line.765"></a>
<FONT color="green">766</FONT>            event.setRemoteIP( remoteIP );<a name="line.766"></a>
<FONT color="green">767</FONT>    <a name="line.767"></a>
<FONT color="green">768</FONT>            for ( AuditListener listener : auditListeners )<a name="line.768"></a>
<FONT color="green">769</FONT>            {<a name="line.769"></a>
<FONT color="green">770</FONT>                listener.auditEvent( event );<a name="line.770"></a>
<FONT color="green">771</FONT>            }<a name="line.771"></a>
<FONT color="green">772</FONT>        }<a name="line.772"></a>
<FONT color="green">773</FONT>    <a name="line.773"></a>
<FONT color="green">774</FONT>        public void addAuditListener( AuditListener listener )<a name="line.774"></a>
<FONT color="green">775</FONT>        {<a name="line.775"></a>
<FONT color="green">776</FONT>            this.auditListeners.add( listener );<a name="line.776"></a>
<FONT color="green">777</FONT>        }<a name="line.777"></a>
<FONT color="green">778</FONT>    <a name="line.778"></a>
<FONT color="green">779</FONT>        public void clearAuditListeners()<a name="line.779"></a>
<FONT color="green">780</FONT>        {<a name="line.780"></a>
<FONT color="green">781</FONT>            this.auditListeners.clear();<a name="line.781"></a>
<FONT color="green">782</FONT>        }<a name="line.782"></a>
<FONT color="green">783</FONT>    <a name="line.783"></a>
<FONT color="green">784</FONT>        public void removeAuditListener( AuditListener listener )<a name="line.784"></a>
<FONT color="green">785</FONT>        {<a name="line.785"></a>
<FONT color="green">786</FONT>            this.auditListeners.remove( listener );<a name="line.786"></a>
<FONT color="green">787</FONT>        }<a name="line.787"></a>
<FONT color="green">788</FONT>    <a name="line.788"></a>
<FONT color="green">789</FONT>        private void setHeaders( DavServletResponse response, DavResourceLocator locator, DavResource resource )<a name="line.789"></a>
<FONT color="green">790</FONT>        {<a name="line.790"></a>
<FONT color="green">791</FONT>            // [MRM-503] - Metadata file need Pragma:no-cache response<a name="line.791"></a>
<FONT color="green">792</FONT>            // header.<a name="line.792"></a>
<FONT color="green">793</FONT>            if ( locator.getResourcePath().endsWith( "/maven-metadata.xml" )<a name="line.793"></a>
<FONT color="green">794</FONT>                || ( (ArchivaDavResource) resource ).getLocalResource().isDirectory() )<a name="line.794"></a>
<FONT color="green">795</FONT>            {<a name="line.795"></a>
<FONT color="green">796</FONT>                response.setHeader( "Pragma", "no-cache" );<a name="line.796"></a>
<FONT color="green">797</FONT>                response.setHeader( "Cache-Control", "no-cache" );<a name="line.797"></a>
<FONT color="green">798</FONT>                response.setDateHeader( "Last-Modified", new Date().getTime() );<a name="line.798"></a>
<FONT color="green">799</FONT>            }<a name="line.799"></a>
<FONT color="green">800</FONT>            // if the resource is a directory don't cache it as new groupId deployed will be available<a name="line.800"></a>
<FONT color="green">801</FONT>            // without need of refreshing browser<a name="line.801"></a>
<FONT color="green">802</FONT>            else<a name="line.802"></a>
<FONT color="green">803</FONT>            {<a name="line.803"></a>
<FONT color="green">804</FONT>                // We need to specify this so connecting wagons can work correctly<a name="line.804"></a>
<FONT color="green">805</FONT>                response.setDateHeader( "Last-Modified", resource.getModificationTime() );<a name="line.805"></a>
<FONT color="green">806</FONT>            }<a name="line.806"></a>
<FONT color="green">807</FONT>            // TODO: [MRM-524] determine http caching options for other types of files (artifacts, sha1, md5, snapshots)<a name="line.807"></a>
<FONT color="green">808</FONT>        }<a name="line.808"></a>
<FONT color="green">809</FONT>    <a name="line.809"></a>
<FONT color="green">810</FONT>        private ArchivaDavResourceLocator checkLocatorIsInstanceOfRepositoryLocator( DavResourceLocator locator )<a name="line.810"></a>
<FONT color="green">811</FONT>            throws DavException<a name="line.811"></a>
<FONT color="green">812</FONT>        {<a name="line.812"></a>
<FONT color="green">813</FONT>            if ( !( locator instanceof ArchivaDavResourceLocator ) )<a name="line.813"></a>
<FONT color="green">814</FONT>            {<a name="line.814"></a>
<FONT color="green">815</FONT>                throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,<a name="line.815"></a>
<FONT color="green">816</FONT>                                        "Locator does not implement RepositoryLocator" );<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>            // Hidden paths<a name="line.819"></a>
<FONT color="green">820</FONT>            if ( locator.getResourcePath().startsWith( ArchivaDavResource.HIDDEN_PATH_PREFIX ) )<a name="line.820"></a>
<FONT color="green">821</FONT>            {<a name="line.821"></a>
<FONT color="green">822</FONT>                throw new DavException( HttpServletResponse.SC_NOT_FOUND );<a name="line.822"></a>
<FONT color="green">823</FONT>            }<a name="line.823"></a>
<FONT color="green">824</FONT>    <a name="line.824"></a>
<FONT color="green">825</FONT>            ArchivaDavResourceLocator archivaLocator = (ArchivaDavResourceLocator) locator;<a name="line.825"></a>
<FONT color="green">826</FONT>    <a name="line.826"></a>
<FONT color="green">827</FONT>            // MRM-419 - Windows Webdav support. Should not 404 if there is no content.<a name="line.827"></a>
<FONT color="green">828</FONT>            if ( StringUtils.isEmpty( archivaLocator.getRepositoryId() ) )<a name="line.828"></a>
<FONT color="green">829</FONT>            {<a name="line.829"></a>
<FONT color="green">830</FONT>                throw new DavException( HttpServletResponse.SC_NO_CONTENT );<a name="line.830"></a>
<FONT color="green">831</FONT>            }<a name="line.831"></a>
<FONT color="green">832</FONT>            return archivaLocator;<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>        private static class LogicalResource<a name="line.835"></a>
<FONT color="green">836</FONT>        {<a name="line.836"></a>
<FONT color="green">837</FONT>            private String path;<a name="line.837"></a>
<FONT color="green">838</FONT>    <a name="line.838"></a>
<FONT color="green">839</FONT>            public LogicalResource( String path )<a name="line.839"></a>
<FONT color="green">840</FONT>            {<a name="line.840"></a>
<FONT color="green">841</FONT>                this.path = path;<a name="line.841"></a>
<FONT color="green">842</FONT>            }<a name="line.842"></a>
<FONT color="green">843</FONT>    <a name="line.843"></a>
<FONT color="green">844</FONT>            public String getPath()<a name="line.844"></a>
<FONT color="green">845</FONT>            {<a name="line.845"></a>
<FONT color="green">846</FONT>                return path;<a name="line.846"></a>
<FONT color="green">847</FONT>            }<a name="line.847"></a>
<FONT color="green">848</FONT>    <a name="line.848"></a>
<FONT color="green">849</FONT>            public void setPath( String path )<a name="line.849"></a>
<FONT color="green">850</FONT>            {<a name="line.850"></a>
<FONT color="green">851</FONT>                this.path = path;<a name="line.851"></a>
<FONT color="green">852</FONT>            }<a name="line.852"></a>
<FONT color="green">853</FONT>        }<a name="line.853"></a>
<FONT color="green">854</FONT>    <a name="line.854"></a>
<FONT color="green">855</FONT>        protected boolean isAuthorized( DavServletRequest request, String repositoryId )<a name="line.855"></a>
<FONT color="green">856</FONT>            throws DavException<a name="line.856"></a>
<FONT color="green">857</FONT>        {<a name="line.857"></a>
<FONT color="green">858</FONT>            try<a name="line.858"></a>
<FONT color="green">859</FONT>            {<a name="line.859"></a>
<FONT color="green">860</FONT>                AuthenticationResult result = httpAuth.getAuthenticationResult( request, null );<a name="line.860"></a>
<FONT color="green">861</FONT>                SecuritySession securitySession = httpAuth.getSecuritySession( request.getSession( true ) );<a name="line.861"></a>
<FONT color="green">862</FONT>    <a name="line.862"></a>
<FONT color="green">863</FONT>                return servletAuth.isAuthenticated( request, result ) &amp;&amp; servletAuth.isAuthorized( request, securitySession,<a name="line.863"></a>
<FONT color="green">864</FONT>                                                                                                   repositoryId,<a name="line.864"></a>
<FONT color="green">865</FONT>                                                                                                   WebdavMethodUtil.getMethodPermission(<a name="line.865"></a>
<FONT color="green">866</FONT>                                                                                                       request.getMethod() ) );<a name="line.866"></a>
<FONT color="green">867</FONT>            }<a name="line.867"></a>
<FONT color="green">868</FONT>            catch ( AuthenticationException e )<a name="line.868"></a>
<FONT color="green">869</FONT>            {<a name="line.869"></a>
<FONT color="green">870</FONT>                // safety check for MRM-911<a name="line.870"></a>
<FONT color="green">871</FONT>                String guest = UserManager.GUEST_USERNAME;<a name="line.871"></a>
<FONT color="green">872</FONT>                try<a name="line.872"></a>
<FONT color="green">873</FONT>                {<a name="line.873"></a>
<FONT color="green">874</FONT>                    if ( servletAuth.isAuthorized( guest,<a name="line.874"></a>
<FONT color="green">875</FONT>                                                   ( (ArchivaDavResourceLocator) request.getRequestLocator() ).getRepositoryId(),<a name="line.875"></a>
<FONT color="green">876</FONT>                                                   WebdavMethodUtil.getMethodPermission( request.getMethod() ) ) )<a name="line.876"></a>
<FONT color="green">877</FONT>                    {<a name="line.877"></a>
<FONT color="green">878</FONT>                        return true;<a name="line.878"></a>
<FONT color="green">879</FONT>                    }<a name="line.879"></a>
<FONT color="green">880</FONT>                }<a name="line.880"></a>
<FONT color="green">881</FONT>                catch ( UnauthorizedException ae )<a name="line.881"></a>
<FONT color="green">882</FONT>                {<a name="line.882"></a>
<FONT color="green">883</FONT>                    throw new UnauthorizedDavException( repositoryId,<a name="line.883"></a>
<FONT color="green">884</FONT>                                                        "You are not authenticated and authorized to access any repository." );<a name="line.884"></a>
<FONT color="green">885</FONT>                }<a name="line.885"></a>
<FONT color="green">886</FONT>    <a name="line.886"></a>
<FONT color="green">887</FONT>                throw new UnauthorizedDavException( repositoryId, "You are not authenticated" );<a name="line.887"></a>
<FONT color="green">888</FONT>            }<a name="line.888"></a>
<FONT color="green">889</FONT>            catch ( MustChangePasswordException e )<a name="line.889"></a>
<FONT color="green">890</FONT>            {<a name="line.890"></a>
<FONT color="green">891</FONT>                throw new UnauthorizedDavException( repositoryId, "You must change your password." );<a name="line.891"></a>
<FONT color="green">892</FONT>            }<a name="line.892"></a>
<FONT color="green">893</FONT>            catch ( AccountLockedException e )<a name="line.893"></a>
<FONT color="green">894</FONT>            {<a name="line.894"></a>
<FONT color="green">895</FONT>                throw new UnauthorizedDavException( repositoryId, "User account is locked." );<a name="line.895"></a>
<FONT color="green">896</FONT>            }<a name="line.896"></a>
<FONT color="green">897</FONT>            catch ( AuthorizationException e )<a name="line.897"></a>
<FONT color="green">898</FONT>            {<a name="line.898"></a>
<FONT color="green">899</FONT>                throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,<a name="line.899"></a>
<FONT color="green">900</FONT>                                        "Fatal Authorization Subsystem Error." );<a name="line.900"></a>
<FONT color="green">901</FONT>            }<a name="line.901"></a>
<FONT color="green">902</FONT>            catch ( UnauthorizedException e )<a name="line.902"></a>
<FONT color="green">903</FONT>            {<a name="line.903"></a>
<FONT color="green">904</FONT>                throw new UnauthorizedDavException( repositoryId, e.getMessage() );<a name="line.904"></a>
<FONT color="green">905</FONT>            }<a name="line.905"></a>
<FONT color="green">906</FONT>        }<a name="line.906"></a>
<FONT color="green">907</FONT>    <a name="line.907"></a>
<FONT color="green">908</FONT>        private DavResource getResourceFromGroup( DavServletRequest request, List&lt;String&gt; repositories,<a name="line.908"></a>
<FONT color="green">909</FONT>                                                  ArchivaDavResourceLocator locator,<a name="line.909"></a>
<FONT color="green">910</FONT>                                                  RepositoryGroupConfiguration repositoryGroupConfiguration )<a name="line.910"></a>
<FONT color="green">911</FONT>            throws DavException<a name="line.911"></a>
<FONT color="green">912</FONT>        {<a name="line.912"></a>
<FONT color="green">913</FONT>            List&lt;File&gt; mergedRepositoryContents = new ArrayList&lt;File&gt;();<a name="line.913"></a>
<FONT color="green">914</FONT>            String path = RepositoryPathUtil.getLogicalResource( locator.getResourcePath() );<a name="line.914"></a>
<FONT color="green">915</FONT>            if ( path.startsWith( "/" ) )<a name="line.915"></a>
<FONT color="green">916</FONT>            {<a name="line.916"></a>
<FONT color="green">917</FONT>                path = path.substring( 1 );<a name="line.917"></a>
<FONT color="green">918</FONT>            }<a name="line.918"></a>
<FONT color="green">919</FONT>            LogicalResource logicalResource = new LogicalResource( path );<a name="line.919"></a>
<FONT color="green">920</FONT>    <a name="line.920"></a>
<FONT color="green">921</FONT>            // flow:<a name="line.921"></a>
<FONT color="green">922</FONT>            // if the current user logged in has permission to any of the repositories, allow user to<a name="line.922"></a>
<FONT color="green">923</FONT>            // browse the repo group but displaying only the repositories which the user has permission to access.<a name="line.923"></a>
<FONT color="green">924</FONT>            // otherwise, prompt for authentication.<a name="line.924"></a>
<FONT color="green">925</FONT>    <a name="line.925"></a>
<FONT color="green">926</FONT>            String activePrincipal = getActivePrincipal( request );<a name="line.926"></a>
<FONT color="green">927</FONT>    <a name="line.927"></a>
<FONT color="green">928</FONT>            boolean allow = isAllowedToContinue( request, repositories, activePrincipal );<a name="line.928"></a>
<FONT color="green">929</FONT>    <a name="line.929"></a>
<FONT color="green">930</FONT>            // remove last /<a name="line.930"></a>
<FONT color="green">931</FONT>            String pathInfo = StringUtils.removeEnd( request.getPathInfo(), "/" );<a name="line.931"></a>
<FONT color="green">932</FONT>    <a name="line.932"></a>
<FONT color="green">933</FONT>            if ( allow )<a name="line.933"></a>
<FONT color="green">934</FONT>            {<a name="line.934"></a>
<FONT color="green">935</FONT>    <a name="line.935"></a>
<FONT color="green">936</FONT>                if ( StringUtils.endsWith( pathInfo, repositoryGroupConfiguration.getMergedIndexPath() ) )<a name="line.936"></a>
<FONT color="green">937</FONT>                {<a name="line.937"></a>
<FONT color="green">938</FONT>                    File mergedRepoDir =<a name="line.938"></a>
<FONT color="green">939</FONT>                        buildMergedIndexDirectory( repositories, activePrincipal, request, repositoryGroupConfiguration );<a name="line.939"></a>
<FONT color="green">940</FONT>                    mergedRepositoryContents.add( mergedRepoDir );<a name="line.940"></a>
<FONT color="green">941</FONT>                }<a name="line.941"></a>
<FONT color="green">942</FONT>                else<a name="line.942"></a>
<FONT color="green">943</FONT>                {<a name="line.943"></a>
<FONT color="green">944</FONT>                    if ( StringUtils.equalsIgnoreCase( pathInfo, "/" + repositoryGroupConfiguration.getId() ) )<a name="line.944"></a>
<FONT color="green">945</FONT>                    {<a name="line.945"></a>
<FONT color="green">946</FONT>                        File tmpDirectory = new File( SystemUtils.getJavaIoTmpDir(),<a name="line.946"></a>
<FONT color="green">947</FONT>                                                      repositoryGroupConfiguration.getId() + "/"<a name="line.947"></a>
<FONT color="green">948</FONT>                                                          + repositoryGroupConfiguration.getMergedIndexPath() );<a name="line.948"></a>
<FONT color="green">949</FONT>                        if ( !tmpDirectory.exists() )<a name="line.949"></a>
<FONT color="green">950</FONT>                        {<a name="line.950"></a>
<FONT color="green">951</FONT>                            synchronized ( tmpDirectory.getAbsolutePath() )<a name="line.951"></a>
<FONT color="green">952</FONT>                            {<a name="line.952"></a>
<FONT color="green">953</FONT>                                if ( !tmpDirectory.exists() )<a name="line.953"></a>
<FONT color="green">954</FONT>                                {<a name="line.954"></a>
<FONT color="green">955</FONT>                                    tmpDirectory.mkdirs();<a name="line.955"></a>
<FONT color="green">956</FONT>                                }<a name="line.956"></a>
<FONT color="green">957</FONT>                            }<a name="line.957"></a>
<FONT color="green">958</FONT>                        }<a name="line.958"></a>
<FONT color="green">959</FONT>                        mergedRepositoryContents.add( tmpDirectory.getParentFile() );<a name="line.959"></a>
<FONT color="green">960</FONT>                    }<a name="line.960"></a>
<FONT color="green">961</FONT>                    for ( String repository : repositories )<a name="line.961"></a>
<FONT color="green">962</FONT>                    {<a name="line.962"></a>
<FONT color="green">963</FONT>                        ManagedRepositoryContent managedRepository = null;<a name="line.963"></a>
<FONT color="green">964</FONT>    <a name="line.964"></a>
<FONT color="green">965</FONT>                        try<a name="line.965"></a>
<FONT color="green">966</FONT>                        {<a name="line.966"></a>
<FONT color="green">967</FONT>                            managedRepository = repositoryFactory.getManagedRepositoryContent( repository );<a name="line.967"></a>
<FONT color="green">968</FONT>                        }<a name="line.968"></a>
<FONT color="green">969</FONT>                        catch ( RepositoryNotFoundException e )<a name="line.969"></a>
<FONT color="green">970</FONT>                        {<a name="line.970"></a>
<FONT color="green">971</FONT>                            throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,<a name="line.971"></a>
<FONT color="green">972</FONT>                                                    "Invalid managed repository &lt;" + repository + "&gt;: " + e.getMessage() );<a name="line.972"></a>
<FONT color="green">973</FONT>                        }<a name="line.973"></a>
<FONT color="green">974</FONT>                        catch ( RepositoryException e )<a name="line.974"></a>
<FONT color="green">975</FONT>                        {<a name="line.975"></a>
<FONT color="green">976</FONT>                            throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,<a name="line.976"></a>
<FONT color="green">977</FONT>                                                    "Invalid managed repository &lt;" + repository + "&gt;: " + e.getMessage() );<a name="line.977"></a>
<FONT color="green">978</FONT>                        }<a name="line.978"></a>
<FONT color="green">979</FONT>    <a name="line.979"></a>
<FONT color="green">980</FONT>                        File resourceFile = new File( managedRepository.getRepoRoot(), logicalResource.getPath() );<a name="line.980"></a>
<FONT color="green">981</FONT>                        if ( resourceFile.exists() )<a name="line.981"></a>
<FONT color="green">982</FONT>                        {<a name="line.982"></a>
<FONT color="green">983</FONT>                            // in case of group displaying index directory doesn't have sense !!<a name="line.983"></a>
<FONT color="green">984</FONT>                            String repoIndexDirectory = managedRepository.getRepository().getIndexDirectory();<a name="line.984"></a>
<FONT color="green">985</FONT>                            if ( StringUtils.isNotEmpty( repoIndexDirectory ) )<a name="line.985"></a>
<FONT color="green">986</FONT>                            {<a name="line.986"></a>
<FONT color="green">987</FONT>                                if ( !new File( repoIndexDirectory ).isAbsolute() )<a name="line.987"></a>
<FONT color="green">988</FONT>                                {<a name="line.988"></a>
<FONT color="green">989</FONT>                                    repoIndexDirectory = new File( managedRepository.getRepository().getLocation(),<a name="line.989"></a>
<FONT color="green">990</FONT>                                                                   StringUtils.isEmpty( repoIndexDirectory )<a name="line.990"></a>
<FONT color="green">991</FONT>                                                                       ? ".indexer"<a name="line.991"></a>
<FONT color="green">992</FONT>                                                                       : repoIndexDirectory ).getAbsolutePath();<a name="line.992"></a>
<FONT color="green">993</FONT>                                }<a name="line.993"></a>
<FONT color="green">994</FONT>                            }<a name="line.994"></a>
<FONT color="green">995</FONT>                            if ( StringUtils.isEmpty( repoIndexDirectory ) )<a name="line.995"></a>
<FONT color="green">996</FONT>                            {<a name="line.996"></a>
<FONT color="green">997</FONT>                                repoIndexDirectory = new File( managedRepository.getRepository().getLocation(),<a name="line.997"></a>
<FONT color="green">998</FONT>                                                               ".indexer" ).getAbsolutePath();<a name="line.998"></a>
<FONT color="green">999</FONT>                            }<a name="line.999"></a>
<FONT color="green">1000</FONT>    <a name="line.1000"></a>
<FONT color="green">1001</FONT>                            if ( !StringUtils.equals( FilenameUtils.normalize( repoIndexDirectory ),<a name="line.1001"></a>
<FONT color="green">1002</FONT>                                                      FilenameUtils.normalize( resourceFile.getAbsolutePath() ) ) )<a name="line.1002"></a>
<FONT color="green">1003</FONT>                            {<a name="line.1003"></a>
<FONT color="green">1004</FONT>                                // for prompted authentication<a name="line.1004"></a>
<FONT color="green">1005</FONT>                                if ( httpAuth.getSecuritySession( request.getSession( true ) ) != null )<a name="line.1005"></a>
<FONT color="green">1006</FONT>                                {<a name="line.1006"></a>
<FONT color="green">1007</FONT>                                    try<a name="line.1007"></a>
<FONT color="green">1008</FONT>                                    {<a name="line.1008"></a>
<FONT color="green">1009</FONT>                                        if ( isAuthorized( request, repository ) )<a name="line.1009"></a>
<FONT color="green">1010</FONT>                                        {<a name="line.1010"></a>
<FONT color="green">1011</FONT>                                            mergedRepositoryContents.add( resourceFile );<a name="line.1011"></a>
<FONT color="green">1012</FONT>                                            log.debug( "Repository '{}' accessed by '{}'", repository, activePrincipal );<a name="line.1012"></a>
<FONT color="green">1013</FONT>                                        }<a name="line.1013"></a>
<FONT color="green">1014</FONT>                                    }<a name="line.1014"></a>
<FONT color="green">1015</FONT>                                    catch ( DavException e )<a name="line.1015"></a>
<FONT color="green">1016</FONT>                                    {<a name="line.1016"></a>
<FONT color="green">1017</FONT>                                        // TODO: review exception handling<a name="line.1017"></a>
<FONT color="green">1018</FONT>    <a name="line.1018"></a>
<FONT color="green">1019</FONT>                                        log.debug( "Skipping repository '{}' for user '{}': {}", managedRepository,<a name="line.1019"></a>
<FONT color="green">1020</FONT>                                                   activePrincipal, e.getMessage() );<a name="line.1020"></a>
<FONT color="green">1021</FONT>    <a name="line.1021"></a>
<FONT color="green">1022</FONT>                                    }<a name="line.1022"></a>
<FONT color="green">1023</FONT>    <a name="line.1023"></a>
<FONT color="green">1024</FONT>                                }<a name="line.1024"></a>
<FONT color="green">1025</FONT>                                else<a name="line.1025"></a>
<FONT color="green">1026</FONT>                                {<a name="line.1026"></a>
<FONT color="green">1027</FONT>                                    // for the current user logged in<a name="line.1027"></a>
<FONT color="green">1028</FONT>                                    try<a name="line.1028"></a>
<FONT color="green">1029</FONT>                                    {<a name="line.1029"></a>
<FONT color="green">1030</FONT>                                        if ( servletAuth.isAuthorized( activePrincipal, repository,<a name="line.1030"></a>
<FONT color="green">1031</FONT>                                                                       WebdavMethodUtil.getMethodPermission(<a name="line.1031"></a>
<FONT color="green">1032</FONT>                                                                           request.getMethod() ) ) )<a name="line.1032"></a>
<FONT color="green">1033</FONT>                                        {<a name="line.1033"></a>
<FONT color="green">1034</FONT>                                            mergedRepositoryContents.add( resourceFile );<a name="line.1034"></a>
<FONT color="green">1035</FONT>                                            log.debug( "Repository '{}' accessed by '{}'", repository, activePrincipal );<a name="line.1035"></a>
<FONT color="green">1036</FONT>                                        }<a name="line.1036"></a>
<FONT color="green">1037</FONT>                                    }<a name="line.1037"></a>
<FONT color="green">1038</FONT>                                    catch ( UnauthorizedException e )<a name="line.1038"></a>
<FONT color="green">1039</FONT>                                    {<a name="line.1039"></a>
<FONT color="green">1040</FONT>                                        // TODO: review exception handling<a name="line.1040"></a>
<FONT color="green">1041</FONT>    <a name="line.1041"></a>
<FONT color="green">1042</FONT>                                        log.debug( "Skipping repository '{}' for user '{}': {}", managedRepository,<a name="line.1042"></a>
<FONT color="green">1043</FONT>                                                   activePrincipal, e.getMessage() );<a name="line.1043"></a>
<FONT color="green">1044</FONT>    <a name="line.1044"></a>
<FONT color="green">1045</FONT>                                    }<a name="line.1045"></a>
<FONT color="green">1046</FONT>                                }<a name="line.1046"></a>
<FONT color="green">1047</FONT>                            }<a name="line.1047"></a>
<FONT color="green">1048</FONT>                        }<a name="line.1048"></a>
<FONT color="green">1049</FONT>                    }<a name="line.1049"></a>
<FONT color="green">1050</FONT>                }<a name="line.1050"></a>
<FONT color="green">1051</FONT>            }<a name="line.1051"></a>
<FONT color="green">1052</FONT>            else<a name="line.1052"></a>
<FONT color="green">1053</FONT>            {<a name="line.1053"></a>
<FONT color="green">1054</FONT>                throw new UnauthorizedDavException( locator.getRepositoryId(), "User not authorized." );<a name="line.1054"></a>
<FONT color="green">1055</FONT>            }<a name="line.1055"></a>
<FONT color="green">1056</FONT>    <a name="line.1056"></a>
<FONT color="green">1057</FONT>            ArchivaVirtualDavResource resource =<a name="line.1057"></a>
<FONT color="green">1058</FONT>                new ArchivaVirtualDavResource( mergedRepositoryContents, logicalResource.getPath(), mimeTypes, locator,<a name="line.1058"></a>
<FONT color="green">1059</FONT>                                               this );<a name="line.1059"></a>
<FONT color="green">1060</FONT>    <a name="line.1060"></a>
<FONT color="green">1061</FONT>            // compatibility with MRM-440 to ensure browsing the repository group works ok<a name="line.1061"></a>
<FONT color="green">1062</FONT>            if ( resource.isCollection() &amp;&amp; !request.getRequestURI().endsWith( "/" ) )<a name="line.1062"></a>
<FONT color="green">1063</FONT>            {<a name="line.1063"></a>
<FONT color="green">1064</FONT>                throw new BrowserRedirectException( resource.getHref() );<a name="line.1064"></a>
<FONT color="green">1065</FONT>            }<a name="line.1065"></a>
<FONT color="green">1066</FONT>    <a name="line.1066"></a>
<FONT color="green">1067</FONT>            return resource;<a name="line.1067"></a>
<FONT color="green">1068</FONT>        }<a name="line.1068"></a>
<FONT color="green">1069</FONT>    <a name="line.1069"></a>
<FONT color="green">1070</FONT>        protected String getActivePrincipal( DavServletRequest request )<a name="line.1070"></a>
<FONT color="green">1071</FONT>        {<a name="line.1071"></a>
<FONT color="green">1072</FONT>            User sessionUser = httpAuth.getSessionUser( request.getSession() );<a name="line.1072"></a>
<FONT color="green">1073</FONT>            return sessionUser != null ? sessionUser.getUsername() : UserManager.GUEST_USERNAME;<a name="line.1073"></a>
<FONT color="green">1074</FONT>        }<a name="line.1074"></a>
<FONT color="green">1075</FONT>    <a name="line.1075"></a>
<FONT color="green">1076</FONT>        /**<a name="line.1076"></a>
<FONT color="green">1077</FONT>         * Check if the current user is authorized to access any of the repos<a name="line.1077"></a>
<FONT color="green">1078</FONT>         *<a name="line.1078"></a>
<FONT color="green">1079</FONT>         * @param request<a name="line.1079"></a>
<FONT color="green">1080</FONT>         * @param repositories<a name="line.1080"></a>
<FONT color="green">1081</FONT>         * @param activePrincipal<a name="line.1081"></a>
<FONT color="green">1082</FONT>         * @return<a name="line.1082"></a>
<FONT color="green">1083</FONT>         */<a name="line.1083"></a>
<FONT color="green">1084</FONT>        private boolean isAllowedToContinue( DavServletRequest request, List&lt;String&gt; repositories, String activePrincipal )<a name="line.1084"></a>
<FONT color="green">1085</FONT>        {<a name="line.1085"></a>
<FONT color="green">1086</FONT>            // when no repositories configured it's impossible to browse nothing !<a name="line.1086"></a>
<FONT color="green">1087</FONT>            // at least make possible to see nothing :-)<a name="line.1087"></a>
<FONT color="green">1088</FONT>            if ( repositories == null || repositories.isEmpty() )<a name="line.1088"></a>
<FONT color="green">1089</FONT>            {<a name="line.1089"></a>
<FONT color="green">1090</FONT>                return true;<a name="line.1090"></a>
<FONT color="green">1091</FONT>            }<a name="line.1091"></a>
<FONT color="green">1092</FONT>    <a name="line.1092"></a>
<FONT color="green">1093</FONT>            boolean allow = false;<a name="line.1093"></a>
<FONT color="green">1094</FONT>    <a name="line.1094"></a>
<FONT color="green">1095</FONT>            // if securitySession != null, it means that the user was prompted for authentication<a name="line.1095"></a>
<FONT color="green">1096</FONT>            if ( httpAuth.getSecuritySession( request.getSession() ) != null )<a name="line.1096"></a>
<FONT color="green">1097</FONT>            {<a name="line.1097"></a>
<FONT color="green">1098</FONT>                for ( String repository : repositories )<a name="line.1098"></a>
<FONT color="green">1099</FONT>                {<a name="line.1099"></a>
<FONT color="green">1100</FONT>                    try<a name="line.1100"></a>
<FONT color="green">1101</FONT>                    {<a name="line.1101"></a>
<FONT color="green">1102</FONT>                        if ( isAuthorized( request, repository ) )<a name="line.1102"></a>
<FONT color="green">1103</FONT>                        {<a name="line.1103"></a>
<FONT color="green">1104</FONT>                            allow = true;<a name="line.1104"></a>
<FONT color="green">1105</FONT>                            break;<a name="line.1105"></a>
<FONT color="green">1106</FONT>                        }<a name="line.1106"></a>
<FONT color="green">1107</FONT>                    }<a name="line.1107"></a>
<FONT color="green">1108</FONT>                    catch ( DavException e )<a name="line.1108"></a>
<FONT color="green">1109</FONT>                    {<a name="line.1109"></a>
<FONT color="green">1110</FONT>                        continue;<a name="line.1110"></a>
<FONT color="green">1111</FONT>                    }<a name="line.1111"></a>
<FONT color="green">1112</FONT>                }<a name="line.1112"></a>
<FONT color="green">1113</FONT>            }<a name="line.1113"></a>
<FONT color="green">1114</FONT>            else<a name="line.1114"></a>
<FONT color="green">1115</FONT>            {<a name="line.1115"></a>
<FONT color="green">1116</FONT>                for ( String repository : repositories )<a name="line.1116"></a>
<FONT color="green">1117</FONT>                {<a name="line.1117"></a>
<FONT color="green">1118</FONT>                    try<a name="line.1118"></a>
<FONT color="green">1119</FONT>                    {<a name="line.1119"></a>
<FONT color="green">1120</FONT>                        if ( servletAuth.isAuthorized( activePrincipal, repository,<a name="line.1120"></a>
<FONT color="green">1121</FONT>                                                       WebdavMethodUtil.getMethodPermission( request.getMethod() ) ) )<a name="line.1121"></a>
<FONT color="green">1122</FONT>                        {<a name="line.1122"></a>
<FONT color="green">1123</FONT>                            allow = true;<a name="line.1123"></a>
<FONT color="green">1124</FONT>                            break;<a name="line.1124"></a>
<FONT color="green">1125</FONT>                        }<a name="line.1125"></a>
<FONT color="green">1126</FONT>                    }<a name="line.1126"></a>
<FONT color="green">1127</FONT>                    catch ( UnauthorizedException e )<a name="line.1127"></a>
<FONT color="green">1128</FONT>                    {<a name="line.1128"></a>
<FONT color="green">1129</FONT>                        continue;<a name="line.1129"></a>
<FONT color="green">1130</FONT>                    }<a name="line.1130"></a>
<FONT color="green">1131</FONT>                }<a name="line.1131"></a>
<FONT color="green">1132</FONT>            }<a name="line.1132"></a>
<FONT color="green">1133</FONT>    <a name="line.1133"></a>
<FONT color="green">1134</FONT>            return allow;<a name="line.1134"></a>
<FONT color="green">1135</FONT>        }<a name="line.1135"></a>
<FONT color="green">1136</FONT>    <a name="line.1136"></a>
<FONT color="green">1137</FONT>        private File writeMergedMetadataToFile( ArchivaRepositoryMetadata mergedMetadata, String outputFilename )<a name="line.1137"></a>
<FONT color="green">1138</FONT>            throws RepositoryMetadataException, DigesterException, IOException<a name="line.1138"></a>
<FONT color="green">1139</FONT>        {<a name="line.1139"></a>
<FONT color="green">1140</FONT>            File outputFile = new File( outputFilename );<a name="line.1140"></a>
<FONT color="green">1141</FONT>            if ( outputFile.exists() )<a name="line.1141"></a>
<FONT color="green">1142</FONT>            {<a name="line.1142"></a>
<FONT color="green">1143</FONT>                FileUtils.deleteQuietly( outputFile );<a name="line.1143"></a>
<FONT color="green">1144</FONT>            }<a name="line.1144"></a>
<FONT color="green">1145</FONT>    <a name="line.1145"></a>
<FONT color="green">1146</FONT>            outputFile.getParentFile().mkdirs();<a name="line.1146"></a>
<FONT color="green">1147</FONT>            RepositoryMetadataWriter.write( mergedMetadata, outputFile );<a name="line.1147"></a>
<FONT color="green">1148</FONT>    <a name="line.1148"></a>
<FONT color="green">1149</FONT>            createChecksumFile( outputFilename, digestSha1 );<a name="line.1149"></a>
<FONT color="green">1150</FONT>            createChecksumFile( outputFilename, digestMd5 );<a name="line.1150"></a>
<FONT color="green">1151</FONT>    <a name="line.1151"></a>
<FONT color="green">1152</FONT>            return outputFile;<a name="line.1152"></a>
<FONT color="green">1153</FONT>        }<a name="line.1153"></a>
<FONT color="green">1154</FONT>    <a name="line.1154"></a>
<FONT color="green">1155</FONT>        private void createChecksumFile( String path, Digester digester )<a name="line.1155"></a>
<FONT color="green">1156</FONT>            throws DigesterException, IOException<a name="line.1156"></a>
<FONT color="green">1157</FONT>        {<a name="line.1157"></a>
<FONT color="green">1158</FONT>            File checksumFile = new File( path + digester.getFilenameExtension() );<a name="line.1158"></a>
<FONT color="green">1159</FONT>            if ( !checksumFile.exists() )<a name="line.1159"></a>
<FONT color="green">1160</FONT>            {<a name="line.1160"></a>
<FONT color="green">1161</FONT>                FileUtils.deleteQuietly( checksumFile );<a name="line.1161"></a>
<FONT color="green">1162</FONT>                checksum.createChecksum( new File( path ), digester );<a name="line.1162"></a>
<FONT color="green">1163</FONT>            }<a name="line.1163"></a>
<FONT color="green">1164</FONT>            else if ( !checksumFile.isFile() )<a name="line.1164"></a>
<FONT color="green">1165</FONT>            {<a name="line.1165"></a>
<FONT color="green">1166</FONT>                log.error( "Checksum file is not a file." );<a name="line.1166"></a>
<FONT color="green">1167</FONT>            }<a name="line.1167"></a>
<FONT color="green">1168</FONT>        }<a name="line.1168"></a>
<FONT color="green">1169</FONT>    <a name="line.1169"></a>
<FONT color="green">1170</FONT>        private boolean isProjectReference( String requestedResource )<a name="line.1170"></a>
<FONT color="green">1171</FONT>        {<a name="line.1171"></a>
<FONT color="green">1172</FONT>            try<a name="line.1172"></a>
<FONT color="green">1173</FONT>            {<a name="line.1173"></a>
<FONT color="green">1174</FONT>                metadataTools.toVersionedReference( requestedResource );<a name="line.1174"></a>
<FONT color="green">1175</FONT>                return false;<a name="line.1175"></a>
<FONT color="green">1176</FONT>            }<a name="line.1176"></a>
<FONT color="green">1177</FONT>            catch ( RepositoryMetadataException re )<a name="line.1177"></a>
<FONT color="green">1178</FONT>            {<a name="line.1178"></a>
<FONT color="green">1179</FONT>                return true;<a name="line.1179"></a>
<FONT color="green">1180</FONT>            }<a name="line.1180"></a>
<FONT color="green">1181</FONT>        }<a name="line.1181"></a>
<FONT color="green">1182</FONT>    <a name="line.1182"></a>
<FONT color="green">1183</FONT>        protected File buildMergedIndexDirectory( List&lt;String&gt; repositories, String activePrincipal,<a name="line.1183"></a>
<FONT color="green">1184</FONT>                                                  DavServletRequest request,<a name="line.1184"></a>
<FONT color="green">1185</FONT>                                                  RepositoryGroupConfiguration repositoryGroupConfiguration )<a name="line.1185"></a>
<FONT color="green">1186</FONT>            throws DavException<a name="line.1186"></a>
<FONT color="green">1187</FONT>        {<a name="line.1187"></a>
<FONT color="green">1188</FONT>    <a name="line.1188"></a>
<FONT color="green">1189</FONT>            try<a name="line.1189"></a>
<FONT color="green">1190</FONT>            {<a name="line.1190"></a>
<FONT color="green">1191</FONT>                HttpSession session = request.getSession();<a name="line.1191"></a>
<FONT color="green">1192</FONT>    <a name="line.1192"></a>
<FONT color="green">1193</FONT>                Map&lt;String, TemporaryGroupIndex&gt; temporaryGroupIndexMap =<a name="line.1193"></a>
<FONT color="green">1194</FONT>                    (Map&lt;String, TemporaryGroupIndex&gt;) session.getAttribute(<a name="line.1194"></a>
<FONT color="green">1195</FONT>                        TemporaryGroupIndexSessionCleaner.TEMPORARY_INDEX_SESSION_KEY );<a name="line.1195"></a>
<FONT color="green">1196</FONT>                if ( temporaryGroupIndexMap == null )<a name="line.1196"></a>
<FONT color="green">1197</FONT>                {<a name="line.1197"></a>
<FONT color="green">1198</FONT>                    temporaryGroupIndexMap = new HashMap&lt;String, TemporaryGroupIndex&gt;();<a name="line.1198"></a>
<FONT color="green">1199</FONT>                }<a name="line.1199"></a>
<FONT color="green">1200</FONT>    <a name="line.1200"></a>
<FONT color="green">1201</FONT>                TemporaryGroupIndex tmp = temporaryGroupIndexMap.get( repositoryGroupConfiguration.getId() );<a name="line.1201"></a>
<FONT color="green">1202</FONT>    <a name="line.1202"></a>
<FONT color="green">1203</FONT>                if ( tmp != null &amp;&amp; tmp.getDirectory() != null &amp;&amp; tmp.getDirectory().exists() )<a name="line.1203"></a>
<FONT color="green">1204</FONT>                {<a name="line.1204"></a>
<FONT color="green">1205</FONT>                    if ( System.currentTimeMillis() - tmp.getCreationTime() &gt; ( repositoryGroupConfiguration.getMergedIndexTtl() * 60 * 1000 ) )<a name="line.1205"></a>
<FONT color="green">1206</FONT>                    {<a name="line.1206"></a>
<FONT color="green">1207</FONT>                        log.debug( MarkerFactory.getMarker( "group.merged.index" ),<a name="line.1207"></a>
<FONT color="green">1208</FONT>                                   "tmp group index '{}' is too old so delete it", repositoryGroupConfiguration.getId() );<a name="line.1208"></a>
<FONT color="green">1209</FONT>                        indexMerger.cleanTemporaryGroupIndex( tmp );<a name="line.1209"></a>
<FONT color="green">1210</FONT>                    }<a name="line.1210"></a>
<FONT color="green">1211</FONT>                    else<a name="line.1211"></a>
<FONT color="green">1212</FONT>                    {<a name="line.1212"></a>
<FONT color="green">1213</FONT>                        log.debug( MarkerFactory.getMarker( "group.merged.index" ),<a name="line.1213"></a>
<FONT color="green">1214</FONT>                                   "merged index for group '{}' found in cache", repositoryGroupConfiguration.getId() );<a name="line.1214"></a>
<FONT color="green">1215</FONT>                        return tmp.getDirectory();<a name="line.1215"></a>
<FONT color="green">1216</FONT>                    }<a name="line.1216"></a>
<FONT color="green">1217</FONT>                }<a name="line.1217"></a>
<FONT color="green">1218</FONT>    <a name="line.1218"></a>
<FONT color="green">1219</FONT>                Set&lt;String&gt; authzRepos = new HashSet&lt;String&gt;();<a name="line.1219"></a>
<FONT color="green">1220</FONT>                for ( String repository : repositories )<a name="line.1220"></a>
<FONT color="green">1221</FONT>                {<a name="line.1221"></a>
<FONT color="green">1222</FONT>                    try<a name="line.1222"></a>
<FONT color="green">1223</FONT>                    {<a name="line.1223"></a>
<FONT color="green">1224</FONT>                        if ( servletAuth.isAuthorized( activePrincipal, repository,<a name="line.1224"></a>
<FONT color="green">1225</FONT>                                                       WebdavMethodUtil.getMethodPermission( request.getMethod() ) ) )<a name="line.1225"></a>
<FONT color="green">1226</FONT>                        {<a name="line.1226"></a>
<FONT color="green">1227</FONT>                            authzRepos.add( repository );<a name="line.1227"></a>
<FONT color="green">1228</FONT>                            authzRepos.addAll( this.repositorySearch.getRemoteIndexingContextIds( repository ) );<a name="line.1228"></a>
<FONT color="green">1229</FONT>                        }<a name="line.1229"></a>
<FONT color="green">1230</FONT>                    }<a name="line.1230"></a>
<FONT color="green">1231</FONT>                    catch ( UnauthorizedException e )<a name="line.1231"></a>
<FONT color="green">1232</FONT>                    {<a name="line.1232"></a>
<FONT color="green">1233</FONT>                        // TODO: review exception handling<a name="line.1233"></a>
<FONT color="green">1234</FONT>    <a name="line.1234"></a>
<FONT color="green">1235</FONT>                        log.debug( "Skipping repository '{}' for user '{}': {}", repository, activePrincipal,<a name="line.1235"></a>
<FONT color="green">1236</FONT>                                   e.getMessage() );<a name="line.1236"></a>
<FONT color="green">1237</FONT>                    }<a name="line.1237"></a>
<FONT color="green">1238</FONT>                }<a name="line.1238"></a>
<FONT color="green">1239</FONT>                log.info( "generate temporary merged index for repository group '{}' for repositories '{}'",<a name="line.1239"></a>
<FONT color="green">1240</FONT>                          repositoryGroupConfiguration.getId(), authzRepos );<a name="line.1240"></a>
<FONT color="green">1241</FONT>                IndexingContext indexingContext = indexMerger.buildMergedIndex(<a name="line.1241"></a>
<FONT color="green">1242</FONT>                    new IndexMergerRequest( authzRepos, true, repositoryGroupConfiguration.getId(),<a name="line.1242"></a>
<FONT color="green">1243</FONT>                                            repositoryGroupConfiguration.getMergedIndexPath(), repositoryGroupConfiguration.getMergedIndexTtl() ) );<a name="line.1243"></a>
<FONT color="green">1244</FONT>                File mergedRepoDir = indexingContext.getIndexDirectoryFile();<a name="line.1244"></a>
<FONT color="green">1245</FONT>                TemporaryGroupIndex temporaryGroupIndex = new TemporaryGroupIndex( mergedRepoDir, indexingContext.getId(),<a name="line.1245"></a>
<FONT color="green">1246</FONT>                        repositoryGroupConfiguration.getId(),repositoryGroupConfiguration.getMergedIndexTtl() )<a name="line.1246"></a>
<FONT color="green">1247</FONT>                        .setCreationTime(new Date().getTime() );<a name="line.1247"></a>
<FONT color="green">1248</FONT>                temporaryGroupIndexMap.put( repositoryGroupConfiguration.getId(), temporaryGroupIndex );<a name="line.1248"></a>
<FONT color="green">1249</FONT>                session.setAttribute( TemporaryGroupIndexSessionCleaner.TEMPORARY_INDEX_SESSION_KEY,<a name="line.1249"></a>
<FONT color="green">1250</FONT>                                      temporaryGroupIndexMap );<a name="line.1250"></a>
<FONT color="green">1251</FONT>                return mergedRepoDir;<a name="line.1251"></a>
<FONT color="green">1252</FONT>            }<a name="line.1252"></a>
<FONT color="green">1253</FONT>            catch ( RepositoryAdminException e )<a name="line.1253"></a>
<FONT color="green">1254</FONT>            {<a name="line.1254"></a>
<FONT color="green">1255</FONT>                throw new DavException( 500, e );<a name="line.1255"></a>
<FONT color="green">1256</FONT>            }<a name="line.1256"></a>
<FONT color="green">1257</FONT>            catch ( IndexMergerException e )<a name="line.1257"></a>
<FONT color="green">1258</FONT>            {<a name="line.1258"></a>
<FONT color="green">1259</FONT>                throw new DavException( 500, e );<a name="line.1259"></a>
<FONT color="green">1260</FONT>            }<a name="line.1260"></a>
<FONT color="green">1261</FONT>        }<a name="line.1261"></a>
<FONT color="green">1262</FONT>    <a name="line.1262"></a>
<FONT color="green">1263</FONT>    <a name="line.1263"></a>
<FONT color="green">1264</FONT>        public void setServletAuth( ServletAuthenticator servletAuth )<a name="line.1264"></a>
<FONT color="green">1265</FONT>        {<a name="line.1265"></a>
<FONT color="green">1266</FONT>            this.servletAuth = servletAuth;<a name="line.1266"></a>
<FONT color="green">1267</FONT>        }<a name="line.1267"></a>
<FONT color="green">1268</FONT>    <a name="line.1268"></a>
<FONT color="green">1269</FONT>        public void setHttpAuth( HttpAuthenticator httpAuth )<a name="line.1269"></a>
<FONT color="green">1270</FONT>        {<a name="line.1270"></a>
<FONT color="green">1271</FONT>            this.httpAuth = httpAuth;<a name="line.1271"></a>
<FONT color="green">1272</FONT>        }<a name="line.1272"></a>
<FONT color="green">1273</FONT>    <a name="line.1273"></a>
<FONT color="green">1274</FONT>        public void setScheduler( RepositoryArchivaTaskScheduler scheduler )<a name="line.1274"></a>
<FONT color="green">1275</FONT>        {<a name="line.1275"></a>
<FONT color="green">1276</FONT>            this.scheduler = scheduler;<a name="line.1276"></a>
<FONT color="green">1277</FONT>        }<a name="line.1277"></a>
<FONT color="green">1278</FONT>    <a name="line.1278"></a>
<FONT color="green">1279</FONT>        public void setArchivaConfiguration( ArchivaConfiguration archivaConfiguration )<a name="line.1279"></a>
<FONT color="green">1280</FONT>        {<a name="line.1280"></a>
<FONT color="green">1281</FONT>            this.archivaConfiguration = archivaConfiguration;<a name="line.1281"></a>
<FONT color="green">1282</FONT>        }<a name="line.1282"></a>
<FONT color="green">1283</FONT>    <a name="line.1283"></a>
<FONT color="green">1284</FONT>        public void setRepositoryFactory( RepositoryContentFactory repositoryFactory )<a name="line.1284"></a>
<FONT color="green">1285</FONT>        {<a name="line.1285"></a>
<FONT color="green">1286</FONT>            this.repositoryFactory = repositoryFactory;<a name="line.1286"></a>
<FONT color="green">1287</FONT>        }<a name="line.1287"></a>
<FONT color="green">1288</FONT>    <a name="line.1288"></a>
<FONT color="green">1289</FONT>        public void setRepositoryRequest( RepositoryRequest repositoryRequest )<a name="line.1289"></a>
<FONT color="green">1290</FONT>        {<a name="line.1290"></a>
<FONT color="green">1291</FONT>            this.repositoryRequest = repositoryRequest;<a name="line.1291"></a>
<FONT color="green">1292</FONT>        }<a name="line.1292"></a>
<FONT color="green">1293</FONT>    <a name="line.1293"></a>
<FONT color="green">1294</FONT>        public void setConnectors( RepositoryProxyConnectors connectors )<a name="line.1294"></a>
<FONT color="green">1295</FONT>        {<a name="line.1295"></a>
<FONT color="green">1296</FONT>            this.connectors = connectors;<a name="line.1296"></a>
<FONT color="green">1297</FONT>        }<a name="line.1297"></a>
<FONT color="green">1298</FONT>    <a name="line.1298"></a>
<FONT color="green">1299</FONT>        public RemoteRepositoryAdmin getRemoteRepositoryAdmin()<a name="line.1299"></a>
<FONT color="green">1300</FONT>        {<a name="line.1300"></a>
<FONT color="green">1301</FONT>            return remoteRepositoryAdmin;<a name="line.1301"></a>
<FONT color="green">1302</FONT>        }<a name="line.1302"></a>
<FONT color="green">1303</FONT>    <a name="line.1303"></a>
<FONT color="green">1304</FONT>        public void setRemoteRepositoryAdmin( RemoteRepositoryAdmin remoteRepositoryAdmin )<a name="line.1304"></a>
<FONT color="green">1305</FONT>        {<a name="line.1305"></a>
<FONT color="green">1306</FONT>            this.remoteRepositoryAdmin = remoteRepositoryAdmin;<a name="line.1306"></a>
<FONT color="green">1307</FONT>        }<a name="line.1307"></a>
<FONT color="green">1308</FONT>    }<a name="line.1308"></a>




























































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