<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.beans.ManagedRepository;<a name="line.22"></a>
<FONT color="green">023</FONT>    import org.apache.archiva.audit.AuditEvent;<a name="line.23"></a>
<FONT color="green">024</FONT>    import org.apache.archiva.audit.AuditListener;<a name="line.24"></a>
<FONT color="green">025</FONT>    import org.apache.archiva.redback.components.taskqueue.TaskQueueException;<a name="line.25"></a>
<FONT color="green">026</FONT>    import org.apache.archiva.scheduler.ArchivaTaskScheduler;<a name="line.26"></a>
<FONT color="green">027</FONT>    import org.apache.archiva.scheduler.repository.model.RepositoryArchivaTaskScheduler;<a name="line.27"></a>
<FONT color="green">028</FONT>    import org.apache.archiva.scheduler.repository.model.RepositoryTask;<a name="line.28"></a>
<FONT color="green">029</FONT>    import org.apache.archiva.webdav.util.IndexWriter;<a name="line.29"></a>
<FONT color="green">030</FONT>    import org.apache.archiva.webdav.util.MimeTypes;<a name="line.30"></a>
<FONT color="green">031</FONT>    import org.apache.commons.io.FileUtils;<a name="line.31"></a>
<FONT color="green">032</FONT>    import org.apache.commons.io.IOUtils;<a name="line.32"></a>
<FONT color="green">033</FONT>    import org.apache.jackrabbit.util.Text;<a name="line.33"></a>
<FONT color="green">034</FONT>    import org.apache.jackrabbit.webdav.DavException;<a name="line.34"></a>
<FONT color="green">035</FONT>    import org.apache.jackrabbit.webdav.DavResource;<a name="line.35"></a>
<FONT color="green">036</FONT>    import org.apache.jackrabbit.webdav.DavResourceFactory;<a name="line.36"></a>
<FONT color="green">037</FONT>    import org.apache.jackrabbit.webdav.DavResourceIterator;<a name="line.37"></a>
<FONT color="green">038</FONT>    import org.apache.jackrabbit.webdav.DavResourceIteratorImpl;<a name="line.38"></a>
<FONT color="green">039</FONT>    import org.apache.jackrabbit.webdav.DavResourceLocator;<a name="line.39"></a>
<FONT color="green">040</FONT>    import org.apache.jackrabbit.webdav.DavServletResponse;<a name="line.40"></a>
<FONT color="green">041</FONT>    import org.apache.jackrabbit.webdav.DavSession;<a name="line.41"></a>
<FONT color="green">042</FONT>    import org.apache.jackrabbit.webdav.MultiStatusResponse;<a name="line.42"></a>
<FONT color="green">043</FONT>    import org.apache.jackrabbit.webdav.io.InputContext;<a name="line.43"></a>
<FONT color="green">044</FONT>    import org.apache.jackrabbit.webdav.io.OutputContext;<a name="line.44"></a>
<FONT color="green">045</FONT>    import org.apache.jackrabbit.webdav.lock.ActiveLock;<a name="line.45"></a>
<FONT color="green">046</FONT>    import org.apache.jackrabbit.webdav.lock.LockInfo;<a name="line.46"></a>
<FONT color="green">047</FONT>    import org.apache.jackrabbit.webdav.lock.LockManager;<a name="line.47"></a>
<FONT color="green">048</FONT>    import org.apache.jackrabbit.webdav.lock.Scope;<a name="line.48"></a>
<FONT color="green">049</FONT>    import org.apache.jackrabbit.webdav.lock.Type;<a name="line.49"></a>
<FONT color="green">050</FONT>    import org.apache.jackrabbit.webdav.property.DavProperty;<a name="line.50"></a>
<FONT color="green">051</FONT>    import org.apache.jackrabbit.webdav.property.DavPropertyName;<a name="line.51"></a>
<FONT color="green">052</FONT>    import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;<a name="line.52"></a>
<FONT color="green">053</FONT>    import org.apache.jackrabbit.webdav.property.DavPropertySet;<a name="line.53"></a>
<FONT color="green">054</FONT>    import org.apache.jackrabbit.webdav.property.DefaultDavProperty;<a name="line.54"></a>
<FONT color="green">055</FONT>    import org.apache.jackrabbit.webdav.property.ResourceType;<a name="line.55"></a>
<FONT color="green">056</FONT>    import org.joda.time.DateTime;<a name="line.56"></a>
<FONT color="green">057</FONT>    import org.joda.time.format.DateTimeFormatter;<a name="line.57"></a>
<FONT color="green">058</FONT>    import org.joda.time.format.ISODateTimeFormat;<a name="line.58"></a>
<FONT color="green">059</FONT>    import org.slf4j.Logger;<a name="line.59"></a>
<FONT color="green">060</FONT>    import org.slf4j.LoggerFactory;<a name="line.60"></a>
<FONT color="green">061</FONT>    <a name="line.61"></a>
<FONT color="green">062</FONT>    import javax.servlet.http.HttpServletResponse;<a name="line.62"></a>
<FONT color="green">063</FONT>    import java.io.File;<a name="line.63"></a>
<FONT color="green">064</FONT>    import java.io.FileInputStream;<a name="line.64"></a>
<FONT color="green">065</FONT>    import java.io.FileOutputStream;<a name="line.65"></a>
<FONT color="green">066</FONT>    import java.io.IOException;<a name="line.66"></a>
<FONT color="green">067</FONT>    import java.util.ArrayList;<a name="line.67"></a>
<FONT color="green">068</FONT>    import java.util.List;<a name="line.68"></a>
<FONT color="green">069</FONT>    <a name="line.69"></a>
<FONT color="green">070</FONT>    /**<a name="line.70"></a>
<FONT color="green">071</FONT>     */<a name="line.71"></a>
<FONT color="green">072</FONT>    public class ArchivaDavResource<a name="line.72"></a>
<FONT color="green">073</FONT>        implements DavResource<a name="line.73"></a>
<FONT color="green">074</FONT>    {<a name="line.74"></a>
<FONT color="green">075</FONT>        public static final String HIDDEN_PATH_PREFIX = ".";<a name="line.75"></a>
<FONT color="green">076</FONT>    <a name="line.76"></a>
<FONT color="green">077</FONT>        private final ArchivaDavResourceLocator locator;<a name="line.77"></a>
<FONT color="green">078</FONT>    <a name="line.78"></a>
<FONT color="green">079</FONT>        private final DavResourceFactory factory;<a name="line.79"></a>
<FONT color="green">080</FONT>    <a name="line.80"></a>
<FONT color="green">081</FONT>        private final File localResource;<a name="line.81"></a>
<FONT color="green">082</FONT>    <a name="line.82"></a>
<FONT color="green">083</FONT>        private final String logicalResource;<a name="line.83"></a>
<FONT color="green">084</FONT>    <a name="line.84"></a>
<FONT color="green">085</FONT>        private DavPropertySet properties = null;<a name="line.85"></a>
<FONT color="green">086</FONT>    <a name="line.86"></a>
<FONT color="green">087</FONT>        private LockManager lockManager;<a name="line.87"></a>
<FONT color="green">088</FONT>    <a name="line.88"></a>
<FONT color="green">089</FONT>        private final DavSession session;<a name="line.89"></a>
<FONT color="green">090</FONT>    <a name="line.90"></a>
<FONT color="green">091</FONT>        private String remoteAddr;<a name="line.91"></a>
<FONT color="green">092</FONT>    <a name="line.92"></a>
<FONT color="green">093</FONT>        private final ManagedRepository repository;<a name="line.93"></a>
<FONT color="green">094</FONT>    <a name="line.94"></a>
<FONT color="green">095</FONT>        private final MimeTypes mimeTypes;<a name="line.95"></a>
<FONT color="green">096</FONT>    <a name="line.96"></a>
<FONT color="green">097</FONT>        private List&lt;AuditListener&gt; auditListeners;<a name="line.97"></a>
<FONT color="green">098</FONT>    <a name="line.98"></a>
<FONT color="green">099</FONT>        private String principal;<a name="line.99"></a>
<FONT color="green">100</FONT>    <a name="line.100"></a>
<FONT color="green">101</FONT>        public static final String COMPLIANCE_CLASS = "1, 2";<a name="line.101"></a>
<FONT color="green">102</FONT>    <a name="line.102"></a>
<FONT color="green">103</FONT>        private ArchivaTaskScheduler scheduler;<a name="line.103"></a>
<FONT color="green">104</FONT>    <a name="line.104"></a>
<FONT color="green">105</FONT>        private Logger log = LoggerFactory.getLogger( ArchivaDavResource.class );<a name="line.105"></a>
<FONT color="green">106</FONT>    <a name="line.106"></a>
<FONT color="green">107</FONT>        public ArchivaDavResource( String localResource, String logicalResource, ManagedRepository repository,<a name="line.107"></a>
<FONT color="green">108</FONT>                                   DavSession session, ArchivaDavResourceLocator locator, DavResourceFactory factory,<a name="line.108"></a>
<FONT color="green">109</FONT>                                   MimeTypes mimeTypes, List&lt;AuditListener&gt; auditListeners,<a name="line.109"></a>
<FONT color="green">110</FONT>                                   RepositoryArchivaTaskScheduler scheduler )<a name="line.110"></a>
<FONT color="green">111</FONT>        {<a name="line.111"></a>
<FONT color="green">112</FONT>            this.localResource = new File( localResource );<a name="line.112"></a>
<FONT color="green">113</FONT>            this.logicalResource = logicalResource;<a name="line.113"></a>
<FONT color="green">114</FONT>            this.locator = locator;<a name="line.114"></a>
<FONT color="green">115</FONT>            this.factory = factory;<a name="line.115"></a>
<FONT color="green">116</FONT>            this.session = session;<a name="line.116"></a>
<FONT color="green">117</FONT>    <a name="line.117"></a>
<FONT color="green">118</FONT>            // TODO: push into locator as well as moving any references out of the resource factory<a name="line.118"></a>
<FONT color="green">119</FONT>            this.repository = repository;<a name="line.119"></a>
<FONT color="green">120</FONT>    <a name="line.120"></a>
<FONT color="green">121</FONT>            // TODO: these should be pushed into the repository layer, along with the physical file operations in this class<a name="line.121"></a>
<FONT color="green">122</FONT>            this.mimeTypes = mimeTypes;<a name="line.122"></a>
<FONT color="green">123</FONT>            this.auditListeners = auditListeners;<a name="line.123"></a>
<FONT color="green">124</FONT>            this.scheduler = scheduler;<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>        public ArchivaDavResource( String localResource, String logicalResource, ManagedRepository repository,<a name="line.127"></a>
<FONT color="green">128</FONT>                                   String remoteAddr, String principal, DavSession session,<a name="line.128"></a>
<FONT color="green">129</FONT>                                   ArchivaDavResourceLocator locator, DavResourceFactory factory, MimeTypes mimeTypes,<a name="line.129"></a>
<FONT color="green">130</FONT>                                   List&lt;AuditListener&gt; auditListeners, RepositoryArchivaTaskScheduler scheduler )<a name="line.130"></a>
<FONT color="green">131</FONT>        {<a name="line.131"></a>
<FONT color="green">132</FONT>            this( localResource, logicalResource, repository, session, locator, factory, mimeTypes, auditListeners,<a name="line.132"></a>
<FONT color="green">133</FONT>                  scheduler );<a name="line.133"></a>
<FONT color="green">134</FONT>    <a name="line.134"></a>
<FONT color="green">135</FONT>            this.remoteAddr = remoteAddr;<a name="line.135"></a>
<FONT color="green">136</FONT>            this.principal = principal;<a name="line.136"></a>
<FONT color="green">137</FONT>        }<a name="line.137"></a>
<FONT color="green">138</FONT>    <a name="line.138"></a>
<FONT color="green">139</FONT>        public String getComplianceClass()<a name="line.139"></a>
<FONT color="green">140</FONT>        {<a name="line.140"></a>
<FONT color="green">141</FONT>            return COMPLIANCE_CLASS;<a name="line.141"></a>
<FONT color="green">142</FONT>        }<a name="line.142"></a>
<FONT color="green">143</FONT>    <a name="line.143"></a>
<FONT color="green">144</FONT>        public String getSupportedMethods()<a name="line.144"></a>
<FONT color="green">145</FONT>        {<a name="line.145"></a>
<FONT color="green">146</FONT>            return METHODS;<a name="line.146"></a>
<FONT color="green">147</FONT>        }<a name="line.147"></a>
<FONT color="green">148</FONT>    <a name="line.148"></a>
<FONT color="green">149</FONT>        public boolean exists()<a name="line.149"></a>
<FONT color="green">150</FONT>        {<a name="line.150"></a>
<FONT color="green">151</FONT>            return localResource.exists();<a name="line.151"></a>
<FONT color="green">152</FONT>        }<a name="line.152"></a>
<FONT color="green">153</FONT>    <a name="line.153"></a>
<FONT color="green">154</FONT>        public boolean isCollection()<a name="line.154"></a>
<FONT color="green">155</FONT>        {<a name="line.155"></a>
<FONT color="green">156</FONT>            return localResource.isDirectory();<a name="line.156"></a>
<FONT color="green">157</FONT>        }<a name="line.157"></a>
<FONT color="green">158</FONT>    <a name="line.158"></a>
<FONT color="green">159</FONT>        public String getDisplayName()<a name="line.159"></a>
<FONT color="green">160</FONT>        {<a name="line.160"></a>
<FONT color="green">161</FONT>            String resPath = getResourcePath();<a name="line.161"></a>
<FONT color="green">162</FONT>            return ( resPath != null ) ? Text.getName( resPath ) : resPath;<a name="line.162"></a>
<FONT color="green">163</FONT>        }<a name="line.163"></a>
<FONT color="green">164</FONT>    <a name="line.164"></a>
<FONT color="green">165</FONT>        public DavResourceLocator getLocator()<a name="line.165"></a>
<FONT color="green">166</FONT>        {<a name="line.166"></a>
<FONT color="green">167</FONT>            return locator;<a name="line.167"></a>
<FONT color="green">168</FONT>        }<a name="line.168"></a>
<FONT color="green">169</FONT>    <a name="line.169"></a>
<FONT color="green">170</FONT>        public File getLocalResource()<a name="line.170"></a>
<FONT color="green">171</FONT>        {<a name="line.171"></a>
<FONT color="green">172</FONT>            return localResource;<a name="line.172"></a>
<FONT color="green">173</FONT>        }<a name="line.173"></a>
<FONT color="green">174</FONT>    <a name="line.174"></a>
<FONT color="green">175</FONT>        public String getResourcePath()<a name="line.175"></a>
<FONT color="green">176</FONT>        {<a name="line.176"></a>
<FONT color="green">177</FONT>            return locator.getResourcePath();<a name="line.177"></a>
<FONT color="green">178</FONT>        }<a name="line.178"></a>
<FONT color="green">179</FONT>    <a name="line.179"></a>
<FONT color="green">180</FONT>        public String getHref()<a name="line.180"></a>
<FONT color="green">181</FONT>        {<a name="line.181"></a>
<FONT color="green">182</FONT>            return locator.getHref( isCollection() );<a name="line.182"></a>
<FONT color="green">183</FONT>        }<a name="line.183"></a>
<FONT color="green">184</FONT>    <a name="line.184"></a>
<FONT color="green">185</FONT>        public long getModificationTime()<a name="line.185"></a>
<FONT color="green">186</FONT>        {<a name="line.186"></a>
<FONT color="green">187</FONT>            return localResource.lastModified();<a name="line.187"></a>
<FONT color="green">188</FONT>        }<a name="line.188"></a>
<FONT color="green">189</FONT>    <a name="line.189"></a>
<FONT color="green">190</FONT>        public void spool( OutputContext outputContext )<a name="line.190"></a>
<FONT color="green">191</FONT>            throws IOException<a name="line.191"></a>
<FONT color="green">192</FONT>        {<a name="line.192"></a>
<FONT color="green">193</FONT>            if ( !isCollection() )<a name="line.193"></a>
<FONT color="green">194</FONT>            {<a name="line.194"></a>
<FONT color="green">195</FONT>                outputContext.setContentLength( localResource.length() );<a name="line.195"></a>
<FONT color="green">196</FONT>                outputContext.setContentType( mimeTypes.getMimeType( localResource.getName() ) );<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>            if ( !isCollection() &amp;&amp; outputContext.hasStream() )<a name="line.199"></a>
<FONT color="green">200</FONT>            {<a name="line.200"></a>
<FONT color="green">201</FONT>                FileInputStream is = null;<a name="line.201"></a>
<FONT color="green">202</FONT>                try<a name="line.202"></a>
<FONT color="green">203</FONT>                {<a name="line.203"></a>
<FONT color="green">204</FONT>                    // Write content to stream<a name="line.204"></a>
<FONT color="green">205</FONT>                    is = new FileInputStream( localResource );<a name="line.205"></a>
<FONT color="green">206</FONT>                    IOUtils.copy( is, outputContext.getOutputStream() );<a name="line.206"></a>
<FONT color="green">207</FONT>                }<a name="line.207"></a>
<FONT color="green">208</FONT>                finally<a name="line.208"></a>
<FONT color="green">209</FONT>                {<a name="line.209"></a>
<FONT color="green">210</FONT>                    IOUtils.closeQuietly( is );<a name="line.210"></a>
<FONT color="green">211</FONT>                }<a name="line.211"></a>
<FONT color="green">212</FONT>            }<a name="line.212"></a>
<FONT color="green">213</FONT>            else if ( outputContext.hasStream() )<a name="line.213"></a>
<FONT color="green">214</FONT>            {<a name="line.214"></a>
<FONT color="green">215</FONT>                IndexWriter writer = new IndexWriter( this, localResource, logicalResource );<a name="line.215"></a>
<FONT color="green">216</FONT>                writer.write( outputContext );<a name="line.216"></a>
<FONT color="green">217</FONT>            }<a name="line.217"></a>
<FONT color="green">218</FONT>        }<a name="line.218"></a>
<FONT color="green">219</FONT>    <a name="line.219"></a>
<FONT color="green">220</FONT>        public DavPropertyName[] getPropertyNames()<a name="line.220"></a>
<FONT color="green">221</FONT>        {<a name="line.221"></a>
<FONT color="green">222</FONT>            return getProperties().getPropertyNames();<a name="line.222"></a>
<FONT color="green">223</FONT>        }<a name="line.223"></a>
<FONT color="green">224</FONT>    <a name="line.224"></a>
<FONT color="green">225</FONT>        public DavProperty getProperty( DavPropertyName name )<a name="line.225"></a>
<FONT color="green">226</FONT>        {<a name="line.226"></a>
<FONT color="green">227</FONT>            return getProperties().get( name );<a name="line.227"></a>
<FONT color="green">228</FONT>        }<a name="line.228"></a>
<FONT color="green">229</FONT>    <a name="line.229"></a>
<FONT color="green">230</FONT>        public DavPropertySet getProperties()<a name="line.230"></a>
<FONT color="green">231</FONT>        {<a name="line.231"></a>
<FONT color="green">232</FONT>            return initProperties();<a name="line.232"></a>
<FONT color="green">233</FONT>        }<a name="line.233"></a>
<FONT color="green">234</FONT>    <a name="line.234"></a>
<FONT color="green">235</FONT>        public void setProperty( DavProperty property )<a name="line.235"></a>
<FONT color="green">236</FONT>            throws DavException<a name="line.236"></a>
<FONT color="green">237</FONT>        {<a name="line.237"></a>
<FONT color="green">238</FONT>        }<a name="line.238"></a>
<FONT color="green">239</FONT>    <a name="line.239"></a>
<FONT color="green">240</FONT>        public void removeProperty( DavPropertyName propertyName )<a name="line.240"></a>
<FONT color="green">241</FONT>            throws DavException<a name="line.241"></a>
<FONT color="green">242</FONT>        {<a name="line.242"></a>
<FONT color="green">243</FONT>        }<a name="line.243"></a>
<FONT color="green">244</FONT>    <a name="line.244"></a>
<FONT color="green">245</FONT>        public MultiStatusResponse alterProperties( DavPropertySet setProperties, DavPropertyNameSet removePropertyNames )<a name="line.245"></a>
<FONT color="green">246</FONT>            throws DavException<a name="line.246"></a>
<FONT color="green">247</FONT>        {<a name="line.247"></a>
<FONT color="green">248</FONT>            return null;<a name="line.248"></a>
<FONT color="green">249</FONT>        }<a name="line.249"></a>
<FONT color="green">250</FONT>    <a name="line.250"></a>
<FONT color="green">251</FONT>        @SuppressWarnings ("unchecked")<a name="line.251"></a>
<FONT color="green">252</FONT>        public MultiStatusResponse alterProperties( List changeList )<a name="line.252"></a>
<FONT color="green">253</FONT>            throws DavException<a name="line.253"></a>
<FONT color="green">254</FONT>        {<a name="line.254"></a>
<FONT color="green">255</FONT>            return null;<a name="line.255"></a>
<FONT color="green">256</FONT>        }<a name="line.256"></a>
<FONT color="green">257</FONT>    <a name="line.257"></a>
<FONT color="green">258</FONT>        public DavResource getCollection()<a name="line.258"></a>
<FONT color="green">259</FONT>        {<a name="line.259"></a>
<FONT color="green">260</FONT>            DavResource parent = null;<a name="line.260"></a>
<FONT color="green">261</FONT>            if ( getResourcePath() != null &amp;&amp; !getResourcePath().equals( "/" ) )<a name="line.261"></a>
<FONT color="green">262</FONT>            {<a name="line.262"></a>
<FONT color="green">263</FONT>                String parentPath = Text.getRelativeParent( getResourcePath(), 1 );<a name="line.263"></a>
<FONT color="green">264</FONT>                if ( parentPath.equals( "" ) )<a name="line.264"></a>
<FONT color="green">265</FONT>                {<a name="line.265"></a>
<FONT color="green">266</FONT>                    parentPath = "/";<a name="line.266"></a>
<FONT color="green">267</FONT>                }<a name="line.267"></a>
<FONT color="green">268</FONT>                DavResourceLocator parentloc =<a name="line.268"></a>
<FONT color="green">269</FONT>                    locator.getFactory().createResourceLocator( locator.getPrefix(), parentPath );<a name="line.269"></a>
<FONT color="green">270</FONT>                try<a name="line.270"></a>
<FONT color="green">271</FONT>                {<a name="line.271"></a>
<FONT color="green">272</FONT>                    parent = factory.createResource( parentloc, session );<a name="line.272"></a>
<FONT color="green">273</FONT>                }<a name="line.273"></a>
<FONT color="green">274</FONT>                catch ( DavException e )<a name="line.274"></a>
<FONT color="green">275</FONT>                {<a name="line.275"></a>
<FONT color="green">276</FONT>                    // should not occur<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>            return parent;<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>        public void addMember( DavResource resource, InputContext inputContext )<a name="line.282"></a>
<FONT color="green">283</FONT>            throws DavException<a name="line.283"></a>
<FONT color="green">284</FONT>        {<a name="line.284"></a>
<FONT color="green">285</FONT>            File localFile = new File( localResource, resource.getDisplayName() );<a name="line.285"></a>
<FONT color="green">286</FONT>            boolean exists = localFile.exists();<a name="line.286"></a>
<FONT color="green">287</FONT>    <a name="line.287"></a>
<FONT color="green">288</FONT>            if ( isCollection() &amp;&amp; inputContext.hasStream() ) // New File<a name="line.288"></a>
<FONT color="green">289</FONT>            {<a name="line.289"></a>
<FONT color="green">290</FONT>                FileOutputStream stream = null;<a name="line.290"></a>
<FONT color="green">291</FONT>                try<a name="line.291"></a>
<FONT color="green">292</FONT>                {<a name="line.292"></a>
<FONT color="green">293</FONT>                    stream = new FileOutputStream( localFile );<a name="line.293"></a>
<FONT color="green">294</FONT>                    IOUtils.copy( inputContext.getInputStream(), stream );<a name="line.294"></a>
<FONT color="green">295</FONT>                }<a name="line.295"></a>
<FONT color="green">296</FONT>                catch ( IOException e )<a name="line.296"></a>
<FONT color="green">297</FONT>                {<a name="line.297"></a>
<FONT color="green">298</FONT>                    throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );<a name="line.298"></a>
<FONT color="green">299</FONT>                }<a name="line.299"></a>
<FONT color="green">300</FONT>                finally<a name="line.300"></a>
<FONT color="green">301</FONT>                {<a name="line.301"></a>
<FONT color="green">302</FONT>                    IOUtils.closeQuietly( stream );<a name="line.302"></a>
<FONT color="green">303</FONT>                }<a name="line.303"></a>
<FONT color="green">304</FONT>    <a name="line.304"></a>
<FONT color="green">305</FONT>                // TODO: a bad deployment shouldn't delete an existing file - do we need to write to a temporary location first?<a name="line.305"></a>
<FONT color="green">306</FONT>                long expectedContentLength = inputContext.getContentLength();<a name="line.306"></a>
<FONT color="green">307</FONT>                long actualContentLength = localFile.length();<a name="line.307"></a>
<FONT color="green">308</FONT>                // length of -1 is given for a chunked request or unknown length, in which case we accept what was uploaded<a name="line.308"></a>
<FONT color="green">309</FONT>                if ( expectedContentLength &gt;= 0 &amp;&amp; expectedContentLength != actualContentLength )<a name="line.309"></a>
<FONT color="green">310</FONT>                {<a name="line.310"></a>
<FONT color="green">311</FONT>                    String msg = "Content Header length was " + expectedContentLength + " but was " + actualContentLength;<a name="line.311"></a>
<FONT color="green">312</FONT>                    log.debug( "Upload failed: {}", msg );<a name="line.312"></a>
<FONT color="green">313</FONT>    <a name="line.313"></a>
<FONT color="green">314</FONT>                    FileUtils.deleteQuietly( localFile );<a name="line.314"></a>
<FONT color="green">315</FONT>                    throw new DavException( HttpServletResponse.SC_BAD_REQUEST, msg );<a name="line.315"></a>
<FONT color="green">316</FONT>                }<a name="line.316"></a>
<FONT color="green">317</FONT>    <a name="line.317"></a>
<FONT color="green">318</FONT>                queueRepositoryTask( localFile );<a name="line.318"></a>
<FONT color="green">319</FONT>    <a name="line.319"></a>
<FONT color="green">320</FONT>                log.debug( "File '{}{}(current user '{}')", resource.getDisplayName(),<a name="line.320"></a>
<FONT color="green">321</FONT>                           ( exists ? "' modified " : "' created " ), this.principal );<a name="line.321"></a>
<FONT color="green">322</FONT>    <a name="line.322"></a>
<FONT color="green">323</FONT>                triggerAuditEvent( resource, exists ? AuditEvent.MODIFY_FILE : AuditEvent.CREATE_FILE );<a name="line.323"></a>
<FONT color="green">324</FONT>            }<a name="line.324"></a>
<FONT color="green">325</FONT>            else if ( !inputContext.hasStream() &amp;&amp; isCollection() ) // New directory<a name="line.325"></a>
<FONT color="green">326</FONT>            {<a name="line.326"></a>
<FONT color="green">327</FONT>                localFile.mkdir();<a name="line.327"></a>
<FONT color="green">328</FONT>    <a name="line.328"></a>
<FONT color="green">329</FONT>                log.debug( "Directory '{}' (current user '{}')", resource.getDisplayName(), this.principal );<a name="line.329"></a>
<FONT color="green">330</FONT>    <a name="line.330"></a>
<FONT color="green">331</FONT>                triggerAuditEvent( resource, AuditEvent.CREATE_DIR );<a name="line.331"></a>
<FONT color="green">332</FONT>            }<a name="line.332"></a>
<FONT color="green">333</FONT>            else<a name="line.333"></a>
<FONT color="green">334</FONT>            {<a name="line.334"></a>
<FONT color="green">335</FONT>                String msg = "Could not write member " + resource.getResourcePath() + " at " + getResourcePath()<a name="line.335"></a>
<FONT color="green">336</FONT>                    + " as this is not a DAV collection";<a name="line.336"></a>
<FONT color="green">337</FONT>                log.debug( msg );<a name="line.337"></a>
<FONT color="green">338</FONT>                throw new DavException( HttpServletResponse.SC_BAD_REQUEST, msg );<a name="line.338"></a>
<FONT color="green">339</FONT>            }<a name="line.339"></a>
<FONT color="green">340</FONT>        }<a name="line.340"></a>
<FONT color="green">341</FONT>    <a name="line.341"></a>
<FONT color="green">342</FONT>        public DavResourceIterator getMembers()<a name="line.342"></a>
<FONT color="green">343</FONT>        {<a name="line.343"></a>
<FONT color="green">344</FONT>            List&lt;DavResource&gt; list = new ArrayList&lt;DavResource&gt;();<a name="line.344"></a>
<FONT color="green">345</FONT>            if ( exists() &amp;&amp; isCollection() )<a name="line.345"></a>
<FONT color="green">346</FONT>            {<a name="line.346"></a>
<FONT color="green">347</FONT>                for ( String item : localResource.list() )<a name="line.347"></a>
<FONT color="green">348</FONT>                {<a name="line.348"></a>
<FONT color="green">349</FONT>                    try<a name="line.349"></a>
<FONT color="green">350</FONT>                    {<a name="line.350"></a>
<FONT color="green">351</FONT>                        if ( !item.startsWith( HIDDEN_PATH_PREFIX ) )<a name="line.351"></a>
<FONT color="green">352</FONT>                        {<a name="line.352"></a>
<FONT color="green">353</FONT>                            String path = locator.getResourcePath() + '/' + item;<a name="line.353"></a>
<FONT color="green">354</FONT>                            DavResourceLocator resourceLocator =<a name="line.354"></a>
<FONT color="green">355</FONT>                                locator.getFactory().createResourceLocator( locator.getPrefix(), path );<a name="line.355"></a>
<FONT color="green">356</FONT>                            DavResource resource = factory.createResource( resourceLocator, session );<a name="line.356"></a>
<FONT color="green">357</FONT>    <a name="line.357"></a>
<FONT color="green">358</FONT>                            if ( resource != null )<a name="line.358"></a>
<FONT color="green">359</FONT>                            {<a name="line.359"></a>
<FONT color="green">360</FONT>                                list.add( resource );<a name="line.360"></a>
<FONT color="green">361</FONT>                            }<a name="line.361"></a>
<FONT color="green">362</FONT>                            log.debug( "Resource '{}' retrieved by '{}'", item, this.principal );<a name="line.362"></a>
<FONT color="green">363</FONT>                        }<a name="line.363"></a>
<FONT color="green">364</FONT>                    }<a name="line.364"></a>
<FONT color="green">365</FONT>                    catch ( DavException e )<a name="line.365"></a>
<FONT color="green">366</FONT>                    {<a name="line.366"></a>
<FONT color="green">367</FONT>                        // Should not occur<a name="line.367"></a>
<FONT color="green">368</FONT>                    }<a name="line.368"></a>
<FONT color="green">369</FONT>                }<a name="line.369"></a>
<FONT color="green">370</FONT>            }<a name="line.370"></a>
<FONT color="green">371</FONT>            return new DavResourceIteratorImpl( list );<a name="line.371"></a>
<FONT color="green">372</FONT>        }<a name="line.372"></a>
<FONT color="green">373</FONT>    <a name="line.373"></a>
<FONT color="green">374</FONT>        public void removeMember( DavResource member )<a name="line.374"></a>
<FONT color="green">375</FONT>            throws DavException<a name="line.375"></a>
<FONT color="green">376</FONT>        {<a name="line.376"></a>
<FONT color="green">377</FONT>            File resource = checkDavResourceIsArchivaDavResource( member ).getLocalResource();<a name="line.377"></a>
<FONT color="green">378</FONT>    <a name="line.378"></a>
<FONT color="green">379</FONT>            if ( resource.exists() )<a name="line.379"></a>
<FONT color="green">380</FONT>            {<a name="line.380"></a>
<FONT color="green">381</FONT>                try<a name="line.381"></a>
<FONT color="green">382</FONT>                {<a name="line.382"></a>
<FONT color="green">383</FONT>                    if ( resource.isDirectory() )<a name="line.383"></a>
<FONT color="green">384</FONT>                    {<a name="line.384"></a>
<FONT color="green">385</FONT>                        if ( !FileUtils.deleteQuietly( resource ) )<a name="line.385"></a>
<FONT color="green">386</FONT>                        {<a name="line.386"></a>
<FONT color="green">387</FONT>                            throw new IOException( "Could not remove directory" );<a name="line.387"></a>
<FONT color="green">388</FONT>                        }<a name="line.388"></a>
<FONT color="green">389</FONT>    <a name="line.389"></a>
<FONT color="green">390</FONT>                        triggerAuditEvent( member, AuditEvent.REMOVE_DIR );<a name="line.390"></a>
<FONT color="green">391</FONT>                    }<a name="line.391"></a>
<FONT color="green">392</FONT>                    else<a name="line.392"></a>
<FONT color="green">393</FONT>                    {<a name="line.393"></a>
<FONT color="green">394</FONT>                        if ( !resource.delete() )<a name="line.394"></a>
<FONT color="green">395</FONT>                        {<a name="line.395"></a>
<FONT color="green">396</FONT>                            throw new IOException( "Could not remove file" );<a name="line.396"></a>
<FONT color="green">397</FONT>                        }<a name="line.397"></a>
<FONT color="green">398</FONT>    <a name="line.398"></a>
<FONT color="green">399</FONT>                        triggerAuditEvent( member, AuditEvent.REMOVE_FILE );<a name="line.399"></a>
<FONT color="green">400</FONT>                    }<a name="line.400"></a>
<FONT color="green">401</FONT>    <a name="line.401"></a>
<FONT color="green">402</FONT>                    log.debug( "{}{}' removed (current user '{}')", ( resource.isDirectory() ? "Directory '" : "File '" ),<a name="line.402"></a>
<FONT color="green">403</FONT>                               member.getDisplayName(), this.principal );<a name="line.403"></a>
<FONT color="green">404</FONT>    <a name="line.404"></a>
<FONT color="green">405</FONT>                }<a name="line.405"></a>
<FONT color="green">406</FONT>                catch ( IOException e )<a name="line.406"></a>
<FONT color="green">407</FONT>                {<a name="line.407"></a>
<FONT color="green">408</FONT>                    throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR );<a name="line.408"></a>
<FONT color="green">409</FONT>                }<a name="line.409"></a>
<FONT color="green">410</FONT>            }<a name="line.410"></a>
<FONT color="green">411</FONT>            else<a name="line.411"></a>
<FONT color="green">412</FONT>            {<a name="line.412"></a>
<FONT color="green">413</FONT>                throw new DavException( HttpServletResponse.SC_NOT_FOUND );<a name="line.413"></a>
<FONT color="green">414</FONT>            }<a name="line.414"></a>
<FONT color="green">415</FONT>        }<a name="line.415"></a>
<FONT color="green">416</FONT>    <a name="line.416"></a>
<FONT color="green">417</FONT>        private void triggerAuditEvent( DavResource member, String event )<a name="line.417"></a>
<FONT color="green">418</FONT>            throws DavException<a name="line.418"></a>
<FONT color="green">419</FONT>        {<a name="line.419"></a>
<FONT color="green">420</FONT>            String path = logicalResource + "/" + member.getDisplayName();<a name="line.420"></a>
<FONT color="green">421</FONT>    <a name="line.421"></a>
<FONT color="green">422</FONT>            ArchivaDavResource resource = checkDavResourceIsArchivaDavResource( member );<a name="line.422"></a>
<FONT color="green">423</FONT>            AuditEvent auditEvent = new AuditEvent( locator.getRepositoryId(), resource.principal, path, event );<a name="line.423"></a>
<FONT color="green">424</FONT>            auditEvent.setRemoteIP( resource.remoteAddr );<a name="line.424"></a>
<FONT color="green">425</FONT>    <a name="line.425"></a>
<FONT color="green">426</FONT>            for ( AuditListener listener : auditListeners )<a name="line.426"></a>
<FONT color="green">427</FONT>            {<a name="line.427"></a>
<FONT color="green">428</FONT>                listener.auditEvent( auditEvent );<a name="line.428"></a>
<FONT color="green">429</FONT>            }<a name="line.429"></a>
<FONT color="green">430</FONT>        }<a name="line.430"></a>
<FONT color="green">431</FONT>    <a name="line.431"></a>
<FONT color="green">432</FONT>        public void move( DavResource destination )<a name="line.432"></a>
<FONT color="green">433</FONT>            throws DavException<a name="line.433"></a>
<FONT color="green">434</FONT>        {<a name="line.434"></a>
<FONT color="green">435</FONT>            if ( !exists() )<a name="line.435"></a>
<FONT color="green">436</FONT>            {<a name="line.436"></a>
<FONT color="green">437</FONT>                throw new DavException( HttpServletResponse.SC_NOT_FOUND, "Resource to copy does not exist." );<a name="line.437"></a>
<FONT color="green">438</FONT>            }<a name="line.438"></a>
<FONT color="green">439</FONT>    <a name="line.439"></a>
<FONT color="green">440</FONT>            try<a name="line.440"></a>
<FONT color="green">441</FONT>            {<a name="line.441"></a>
<FONT color="green">442</FONT>                ArchivaDavResource resource = checkDavResourceIsArchivaDavResource( destination );<a name="line.442"></a>
<FONT color="green">443</FONT>                if ( isCollection() )<a name="line.443"></a>
<FONT color="green">444</FONT>                {<a name="line.444"></a>
<FONT color="green">445</FONT>                    FileUtils.moveDirectory( getLocalResource(), resource.getLocalResource() );<a name="line.445"></a>
<FONT color="green">446</FONT>    <a name="line.446"></a>
<FONT color="green">447</FONT>                    triggerAuditEvent( remoteAddr, locator.getRepositoryId(), logicalResource, AuditEvent.MOVE_DIRECTORY );<a name="line.447"></a>
<FONT color="green">448</FONT>                }<a name="line.448"></a>
<FONT color="green">449</FONT>                else<a name="line.449"></a>
<FONT color="green">450</FONT>                {<a name="line.450"></a>
<FONT color="green">451</FONT>                    FileUtils.moveFile( getLocalResource(), resource.getLocalResource() );<a name="line.451"></a>
<FONT color="green">452</FONT>    <a name="line.452"></a>
<FONT color="green">453</FONT>                    triggerAuditEvent( remoteAddr, locator.getRepositoryId(), logicalResource, AuditEvent.MOVE_FILE );<a name="line.453"></a>
<FONT color="green">454</FONT>                }<a name="line.454"></a>
<FONT color="green">455</FONT>    <a name="line.455"></a>
<FONT color="green">456</FONT>                log.debug( "{}{}' moved to '{}' (current user '{}')", ( isCollection() ? "Directory '" : "File '" ),<a name="line.456"></a>
<FONT color="green">457</FONT>                           getLocalResource().getName(), destination, this.principal );<a name="line.457"></a>
<FONT color="green">458</FONT>    <a name="line.458"></a>
<FONT color="green">459</FONT>            }<a name="line.459"></a>
<FONT color="green">460</FONT>            catch ( IOException e )<a name="line.460"></a>
<FONT color="green">461</FONT>            {<a name="line.461"></a>
<FONT color="green">462</FONT>                throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );<a name="line.462"></a>
<FONT color="green">463</FONT>            }<a name="line.463"></a>
<FONT color="green">464</FONT>        }<a name="line.464"></a>
<FONT color="green">465</FONT>    <a name="line.465"></a>
<FONT color="green">466</FONT>        public void copy( DavResource destination, boolean shallow )<a name="line.466"></a>
<FONT color="green">467</FONT>            throws DavException<a name="line.467"></a>
<FONT color="green">468</FONT>        {<a name="line.468"></a>
<FONT color="green">469</FONT>            if ( !exists() )<a name="line.469"></a>
<FONT color="green">470</FONT>            {<a name="line.470"></a>
<FONT color="green">471</FONT>                throw new DavException( HttpServletResponse.SC_NOT_FOUND, "Resource to copy does not exist." );<a name="line.471"></a>
<FONT color="green">472</FONT>            }<a name="line.472"></a>
<FONT color="green">473</FONT>    <a name="line.473"></a>
<FONT color="green">474</FONT>            if ( shallow &amp;&amp; isCollection() )<a name="line.474"></a>
<FONT color="green">475</FONT>            {<a name="line.475"></a>
<FONT color="green">476</FONT>                throw new DavException( DavServletResponse.SC_FORBIDDEN, "Unable to perform shallow copy for collection" );<a name="line.476"></a>
<FONT color="green">477</FONT>            }<a name="line.477"></a>
<FONT color="green">478</FONT>    <a name="line.478"></a>
<FONT color="green">479</FONT>            try<a name="line.479"></a>
<FONT color="green">480</FONT>            {<a name="line.480"></a>
<FONT color="green">481</FONT>                ArchivaDavResource resource = checkDavResourceIsArchivaDavResource( destination );<a name="line.481"></a>
<FONT color="green">482</FONT>                if ( isCollection() )<a name="line.482"></a>
<FONT color="green">483</FONT>                {<a name="line.483"></a>
<FONT color="green">484</FONT>                    FileUtils.copyDirectory( getLocalResource(), resource.getLocalResource() );<a name="line.484"></a>
<FONT color="green">485</FONT>    <a name="line.485"></a>
<FONT color="green">486</FONT>                    triggerAuditEvent( remoteAddr, locator.getRepositoryId(), logicalResource, AuditEvent.COPY_DIRECTORY );<a name="line.486"></a>
<FONT color="green">487</FONT>                }<a name="line.487"></a>
<FONT color="green">488</FONT>                else<a name="line.488"></a>
<FONT color="green">489</FONT>                {<a name="line.489"></a>
<FONT color="green">490</FONT>                    FileUtils.copyFile( getLocalResource(), resource.getLocalResource() );<a name="line.490"></a>
<FONT color="green">491</FONT>    <a name="line.491"></a>
<FONT color="green">492</FONT>                    triggerAuditEvent( remoteAddr, locator.getRepositoryId(), logicalResource, AuditEvent.COPY_FILE );<a name="line.492"></a>
<FONT color="green">493</FONT>                }<a name="line.493"></a>
<FONT color="green">494</FONT>    <a name="line.494"></a>
<FONT color="green">495</FONT>                log.debug( "{}{}' copied to '{}' (current user '{)')", ( isCollection() ? "Directory '" : "File '" ),<a name="line.495"></a>
<FONT color="green">496</FONT>                           getLocalResource().getName(), destination, this.principal );<a name="line.496"></a>
<FONT color="green">497</FONT>    <a name="line.497"></a>
<FONT color="green">498</FONT>            }<a name="line.498"></a>
<FONT color="green">499</FONT>            catch ( IOException e )<a name="line.499"></a>
<FONT color="green">500</FONT>            {<a name="line.500"></a>
<FONT color="green">501</FONT>                throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );<a name="line.501"></a>
<FONT color="green">502</FONT>            }<a name="line.502"></a>
<FONT color="green">503</FONT>        }<a name="line.503"></a>
<FONT color="green">504</FONT>    <a name="line.504"></a>
<FONT color="green">505</FONT>        public boolean isLockable( Type type, Scope scope )<a name="line.505"></a>
<FONT color="green">506</FONT>        {<a name="line.506"></a>
<FONT color="green">507</FONT>            return Type.WRITE.equals( type ) &amp;&amp; Scope.EXCLUSIVE.equals( scope );<a name="line.507"></a>
<FONT color="green">508</FONT>        }<a name="line.508"></a>
<FONT color="green">509</FONT>    <a name="line.509"></a>
<FONT color="green">510</FONT>        public boolean hasLock( Type type, Scope scope )<a name="line.510"></a>
<FONT color="green">511</FONT>        {<a name="line.511"></a>
<FONT color="green">512</FONT>            return getLock( type, scope ) != null;<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>        public ActiveLock getLock( Type type, Scope scope )<a name="line.515"></a>
<FONT color="green">516</FONT>        {<a name="line.516"></a>
<FONT color="green">517</FONT>            ActiveLock lock = null;<a name="line.517"></a>
<FONT color="green">518</FONT>            if ( exists() &amp;&amp; Type.WRITE.equals( type ) &amp;&amp; Scope.EXCLUSIVE.equals( scope ) )<a name="line.518"></a>
<FONT color="green">519</FONT>            {<a name="line.519"></a>
<FONT color="green">520</FONT>                lock = lockManager.getLock( type, scope, this );<a name="line.520"></a>
<FONT color="green">521</FONT>            }<a name="line.521"></a>
<FONT color="green">522</FONT>            return lock;<a name="line.522"></a>
<FONT color="green">523</FONT>        }<a name="line.523"></a>
<FONT color="green">524</FONT>    <a name="line.524"></a>
<FONT color="green">525</FONT>        public ActiveLock[] getLocks()<a name="line.525"></a>
<FONT color="green">526</FONT>        {<a name="line.526"></a>
<FONT color="green">527</FONT>            ActiveLock writeLock = getLock( Type.WRITE, Scope.EXCLUSIVE );<a name="line.527"></a>
<FONT color="green">528</FONT>            return ( writeLock != null ) ? new ActiveLock[]{ writeLock } : new ActiveLock[0];<a name="line.528"></a>
<FONT color="green">529</FONT>        }<a name="line.529"></a>
<FONT color="green">530</FONT>    <a name="line.530"></a>
<FONT color="green">531</FONT>        public ActiveLock lock( LockInfo lockInfo )<a name="line.531"></a>
<FONT color="green">532</FONT>            throws DavException<a name="line.532"></a>
<FONT color="green">533</FONT>        {<a name="line.533"></a>
<FONT color="green">534</FONT>            ActiveLock lock = null;<a name="line.534"></a>
<FONT color="green">535</FONT>            if ( isLockable( lockInfo.getType(), lockInfo.getScope() ) )<a name="line.535"></a>
<FONT color="green">536</FONT>            {<a name="line.536"></a>
<FONT color="green">537</FONT>                lock = lockManager.createLock( lockInfo, this );<a name="line.537"></a>
<FONT color="green">538</FONT>            }<a name="line.538"></a>
<FONT color="green">539</FONT>            else<a name="line.539"></a>
<FONT color="green">540</FONT>            {<a name="line.540"></a>
<FONT color="green">541</FONT>                throw new DavException( DavServletResponse.SC_PRECONDITION_FAILED, "Unsupported lock type or scope." );<a name="line.541"></a>
<FONT color="green">542</FONT>            }<a name="line.542"></a>
<FONT color="green">543</FONT>            return lock;<a name="line.543"></a>
<FONT color="green">544</FONT>        }<a name="line.544"></a>
<FONT color="green">545</FONT>    <a name="line.545"></a>
<FONT color="green">546</FONT>        public ActiveLock refreshLock( LockInfo lockInfo, String lockToken )<a name="line.546"></a>
<FONT color="green">547</FONT>            throws DavException<a name="line.547"></a>
<FONT color="green">548</FONT>        {<a name="line.548"></a>
<FONT color="green">549</FONT>            if ( !exists() )<a name="line.549"></a>
<FONT color="green">550</FONT>            {<a name="line.550"></a>
<FONT color="green">551</FONT>                throw new DavException( DavServletResponse.SC_NOT_FOUND );<a name="line.551"></a>
<FONT color="green">552</FONT>            }<a name="line.552"></a>
<FONT color="green">553</FONT>            ActiveLock lock = getLock( lockInfo.getType(), lockInfo.getScope() );<a name="line.553"></a>
<FONT color="green">554</FONT>            if ( lock == null )<a name="line.554"></a>
<FONT color="green">555</FONT>            {<a name="line.555"></a>
<FONT color="green">556</FONT>                throw new DavException( DavServletResponse.SC_PRECONDITION_FAILED,<a name="line.556"></a>
<FONT color="green">557</FONT>                                        "No lock with the given type/scope present on resource " + getResourcePath() );<a name="line.557"></a>
<FONT color="green">558</FONT>            }<a name="line.558"></a>
<FONT color="green">559</FONT>    <a name="line.559"></a>
<FONT color="green">560</FONT>            lock = lockManager.refreshLock( lockInfo, lockToken, this );<a name="line.560"></a>
<FONT color="green">561</FONT>    <a name="line.561"></a>
<FONT color="green">562</FONT>            return lock;<a name="line.562"></a>
<FONT color="green">563</FONT>        }<a name="line.563"></a>
<FONT color="green">564</FONT>    <a name="line.564"></a>
<FONT color="green">565</FONT>        public void unlock( String lockToken )<a name="line.565"></a>
<FONT color="green">566</FONT>            throws DavException<a name="line.566"></a>
<FONT color="green">567</FONT>        {<a name="line.567"></a>
<FONT color="green">568</FONT>            ActiveLock lock = getLock( Type.WRITE, Scope.EXCLUSIVE );<a name="line.568"></a>
<FONT color="green">569</FONT>            if ( lock == null )<a name="line.569"></a>
<FONT color="green">570</FONT>            {<a name="line.570"></a>
<FONT color="green">571</FONT>                throw new DavException( HttpServletResponse.SC_PRECONDITION_FAILED );<a name="line.571"></a>
<FONT color="green">572</FONT>            }<a name="line.572"></a>
<FONT color="green">573</FONT>            else if ( lock.isLockedByToken( lockToken ) )<a name="line.573"></a>
<FONT color="green">574</FONT>            {<a name="line.574"></a>
<FONT color="green">575</FONT>                lockManager.releaseLock( lockToken, this );<a name="line.575"></a>
<FONT color="green">576</FONT>            }<a name="line.576"></a>
<FONT color="green">577</FONT>            else<a name="line.577"></a>
<FONT color="green">578</FONT>            {<a name="line.578"></a>
<FONT color="green">579</FONT>                throw new DavException( DavServletResponse.SC_LOCKED );<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>        public void addLockManager( LockManager lockManager )<a name="line.583"></a>
<FONT color="green">584</FONT>        {<a name="line.584"></a>
<FONT color="green">585</FONT>            this.lockManager = lockManager;<a name="line.585"></a>
<FONT color="green">586</FONT>        }<a name="line.586"></a>
<FONT color="green">587</FONT>    <a name="line.587"></a>
<FONT color="green">588</FONT>        public DavResourceFactory getFactory()<a name="line.588"></a>
<FONT color="green">589</FONT>        {<a name="line.589"></a>
<FONT color="green">590</FONT>            return factory;<a name="line.590"></a>
<FONT color="green">591</FONT>        }<a name="line.591"></a>
<FONT color="green">592</FONT>    <a name="line.592"></a>
<FONT color="green">593</FONT>        public DavSession getSession()<a name="line.593"></a>
<FONT color="green">594</FONT>        {<a name="line.594"></a>
<FONT color="green">595</FONT>            return session;<a name="line.595"></a>
<FONT color="green">596</FONT>        }<a name="line.596"></a>
<FONT color="green">597</FONT>    <a name="line.597"></a>
<FONT color="green">598</FONT>        /**<a name="line.598"></a>
<FONT color="green">599</FONT>         * Fill the set of properties<a name="line.599"></a>
<FONT color="green">600</FONT>         */<a name="line.600"></a>
<FONT color="green">601</FONT>        protected DavPropertySet initProperties()<a name="line.601"></a>
<FONT color="green">602</FONT>        {<a name="line.602"></a>
<FONT color="green">603</FONT>            if ( !exists() )<a name="line.603"></a>
<FONT color="green">604</FONT>            {<a name="line.604"></a>
<FONT color="green">605</FONT>                properties = new DavPropertySet();<a name="line.605"></a>
<FONT color="green">606</FONT>            }<a name="line.606"></a>
<FONT color="green">607</FONT>    <a name="line.607"></a>
<FONT color="green">608</FONT>            if ( properties != null )<a name="line.608"></a>
<FONT color="green">609</FONT>            {<a name="line.609"></a>
<FONT color="green">610</FONT>                return properties;<a name="line.610"></a>
<FONT color="green">611</FONT>            }<a name="line.611"></a>
<FONT color="green">612</FONT>    <a name="line.612"></a>
<FONT color="green">613</FONT>            DavPropertySet properties = new DavPropertySet();<a name="line.613"></a>
<FONT color="green">614</FONT>    <a name="line.614"></a>
<FONT color="green">615</FONT>            // set (or reset) fundamental properties<a name="line.615"></a>
<FONT color="green">616</FONT>            if ( getDisplayName() != null )<a name="line.616"></a>
<FONT color="green">617</FONT>            {<a name="line.617"></a>
<FONT color="green">618</FONT>                properties.add( new DefaultDavProperty( DavPropertyName.DISPLAYNAME, getDisplayName() ) );<a name="line.618"></a>
<FONT color="green">619</FONT>            }<a name="line.619"></a>
<FONT color="green">620</FONT>            if ( isCollection() )<a name="line.620"></a>
<FONT color="green">621</FONT>            {<a name="line.621"></a>
<FONT color="green">622</FONT>                properties.add( new ResourceType( ResourceType.COLLECTION ) );<a name="line.622"></a>
<FONT color="green">623</FONT>                // Windows XP support<a name="line.623"></a>
<FONT color="green">624</FONT>                properties.add( new DefaultDavProperty( DavPropertyName.ISCOLLECTION, "1" ) );<a name="line.624"></a>
<FONT color="green">625</FONT>            }<a name="line.625"></a>
<FONT color="green">626</FONT>            else<a name="line.626"></a>
<FONT color="green">627</FONT>            {<a name="line.627"></a>
<FONT color="green">628</FONT>                properties.add( new ResourceType( ResourceType.DEFAULT_RESOURCE ) );<a name="line.628"></a>
<FONT color="green">629</FONT>    <a name="line.629"></a>
<FONT color="green">630</FONT>                // Windows XP support<a name="line.630"></a>
<FONT color="green">631</FONT>                properties.add( new DefaultDavProperty( DavPropertyName.ISCOLLECTION, "0" ) );<a name="line.631"></a>
<FONT color="green">632</FONT>            }<a name="line.632"></a>
<FONT color="green">633</FONT>    <a name="line.633"></a>
<FONT color="green">634</FONT>            // Need to get the ISO8601 date for properties<a name="line.634"></a>
<FONT color="green">635</FONT>            DateTime dt = new DateTime( localResource.lastModified() );<a name="line.635"></a>
<FONT color="green">636</FONT>            DateTimeFormatter fmt = ISODateTimeFormat.dateTime();<a name="line.636"></a>
<FONT color="green">637</FONT>            String modifiedDate = fmt.print( dt );<a name="line.637"></a>
<FONT color="green">638</FONT>    <a name="line.638"></a>
<FONT color="green">639</FONT>            properties.add( new DefaultDavProperty( DavPropertyName.GETLASTMODIFIED, modifiedDate ) );<a name="line.639"></a>
<FONT color="green">640</FONT>    <a name="line.640"></a>
<FONT color="green">641</FONT>            properties.add( new DefaultDavProperty( DavPropertyName.CREATIONDATE, modifiedDate ) );<a name="line.641"></a>
<FONT color="green">642</FONT>    <a name="line.642"></a>
<FONT color="green">643</FONT>            properties.add( new DefaultDavProperty( DavPropertyName.GETCONTENTLENGTH, localResource.length() ) );<a name="line.643"></a>
<FONT color="green">644</FONT>    <a name="line.644"></a>
<FONT color="green">645</FONT>            this.properties = properties;<a name="line.645"></a>
<FONT color="green">646</FONT>    <a name="line.646"></a>
<FONT color="green">647</FONT>            return properties;<a name="line.647"></a>
<FONT color="green">648</FONT>        }<a name="line.648"></a>
<FONT color="green">649</FONT>    <a name="line.649"></a>
<FONT color="green">650</FONT>        private ArchivaDavResource checkDavResourceIsArchivaDavResource( DavResource resource )<a name="line.650"></a>
<FONT color="green">651</FONT>            throws DavException<a name="line.651"></a>
<FONT color="green">652</FONT>        {<a name="line.652"></a>
<FONT color="green">653</FONT>            if ( !( resource instanceof ArchivaDavResource ) )<a name="line.653"></a>
<FONT color="green">654</FONT>            {<a name="line.654"></a>
<FONT color="green">655</FONT>                throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,<a name="line.655"></a>
<FONT color="green">656</FONT>                                        "DavResource is not instance of ArchivaDavResource" );<a name="line.656"></a>
<FONT color="green">657</FONT>            }<a name="line.657"></a>
<FONT color="green">658</FONT>            return (ArchivaDavResource) resource;<a name="line.658"></a>
<FONT color="green">659</FONT>        }<a name="line.659"></a>
<FONT color="green">660</FONT>    <a name="line.660"></a>
<FONT color="green">661</FONT>        private void triggerAuditEvent( String remoteIP, String repositoryId, String resource, String action )<a name="line.661"></a>
<FONT color="green">662</FONT>        {<a name="line.662"></a>
<FONT color="green">663</FONT>            AuditEvent event = new AuditEvent( repositoryId, principal, resource, action );<a name="line.663"></a>
<FONT color="green">664</FONT>            event.setRemoteIP( remoteIP );<a name="line.664"></a>
<FONT color="green">665</FONT>    <a name="line.665"></a>
<FONT color="green">666</FONT>            for ( AuditListener listener : auditListeners )<a name="line.666"></a>
<FONT color="green">667</FONT>            {<a name="line.667"></a>
<FONT color="green">668</FONT>                listener.auditEvent( event );<a name="line.668"></a>
<FONT color="green">669</FONT>            }<a name="line.669"></a>
<FONT color="green">670</FONT>        }<a name="line.670"></a>
<FONT color="green">671</FONT>    <a name="line.671"></a>
<FONT color="green">672</FONT>        private void queueRepositoryTask( File localFile )<a name="line.672"></a>
<FONT color="green">673</FONT>        {<a name="line.673"></a>
<FONT color="green">674</FONT>            RepositoryTask task = new RepositoryTask();<a name="line.674"></a>
<FONT color="green">675</FONT>            task.setRepositoryId( repository.getId() );<a name="line.675"></a>
<FONT color="green">676</FONT>            task.setResourceFile( localFile );<a name="line.676"></a>
<FONT color="green">677</FONT>            task.setUpdateRelatedArtifacts( false );<a name="line.677"></a>
<FONT color="green">678</FONT>            task.setScanAll( false );<a name="line.678"></a>
<FONT color="green">679</FONT>    <a name="line.679"></a>
<FONT color="green">680</FONT>            try<a name="line.680"></a>
<FONT color="green">681</FONT>            {<a name="line.681"></a>
<FONT color="green">682</FONT>                scheduler.queueTask( task );<a name="line.682"></a>
<FONT color="green">683</FONT>            }<a name="line.683"></a>
<FONT color="green">684</FONT>            catch ( TaskQueueException e )<a name="line.684"></a>
<FONT color="green">685</FONT>            {<a name="line.685"></a>
<FONT color="green">686</FONT>                log.error( "Unable to queue repository task to execute consumers on resource file ['" + localFile.getName()<a name="line.686"></a>
<FONT color="green">687</FONT>                               + "']." );<a name="line.687"></a>
<FONT color="green">688</FONT>            }<a name="line.688"></a>
<FONT color="green">689</FONT>        }<a name="line.689"></a>
<FONT color="green">690</FONT>    }<a name="line.690"></a>




























































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