<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    package org.apache.archiva.rest.services;<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.admin.ArchivaAdministration;<a name="line.23"></a>
<FONT color="green">024</FONT>    import org.apache.archiva.admin.model.beans.ManagedRepository;<a name="line.24"></a>
<FONT color="green">025</FONT>    import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;<a name="line.25"></a>
<FONT color="green">026</FONT>    import org.apache.archiva.audit.AuditEvent;<a name="line.26"></a>
<FONT color="green">027</FONT>    import org.apache.archiva.checksum.ChecksumAlgorithm;<a name="line.27"></a>
<FONT color="green">028</FONT>    import org.apache.archiva.checksum.ChecksummedFile;<a name="line.28"></a>
<FONT color="green">029</FONT>    import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;<a name="line.29"></a>
<FONT color="green">030</FONT>    import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;<a name="line.30"></a>
<FONT color="green">031</FONT>    import org.apache.archiva.common.utils.VersionComparator;<a name="line.31"></a>
<FONT color="green">032</FONT>    import org.apache.archiva.common.utils.VersionUtil;<a name="line.32"></a>
<FONT color="green">033</FONT>    import org.apache.archiva.maven2.metadata.MavenMetadataReader;<a name="line.33"></a>
<FONT color="green">034</FONT>    import org.apache.archiva.maven2.model.Artifact;<a name="line.34"></a>
<FONT color="green">035</FONT>    import org.apache.archiva.metadata.model.ArtifactMetadata;<a name="line.35"></a>
<FONT color="green">036</FONT>    import org.apache.archiva.metadata.model.maven2.MavenArtifactFacet;<a name="line.36"></a>
<FONT color="green">037</FONT>    import org.apache.archiva.metadata.repository.MetadataRepository;<a name="line.37"></a>
<FONT color="green">038</FONT>    import org.apache.archiva.metadata.repository.MetadataRepositoryException;<a name="line.38"></a>
<FONT color="green">039</FONT>    import org.apache.archiva.metadata.repository.MetadataResolutionException;<a name="line.39"></a>
<FONT color="green">040</FONT>    import org.apache.archiva.metadata.repository.RepositorySession;<a name="line.40"></a>
<FONT color="green">041</FONT>    import org.apache.archiva.metadata.repository.RepositorySessionFactory;<a name="line.41"></a>
<FONT color="green">042</FONT>    import org.apache.archiva.model.ArchivaRepositoryMetadata;<a name="line.42"></a>
<FONT color="green">043</FONT>    import org.apache.archiva.model.ArtifactReference;<a name="line.43"></a>
<FONT color="green">044</FONT>    import org.apache.archiva.model.VersionedReference;<a name="line.44"></a>
<FONT color="green">045</FONT>    import org.apache.archiva.redback.authentication.AuthenticationResult;<a name="line.45"></a>
<FONT color="green">046</FONT>    import org.apache.archiva.redback.authorization.AuthorizationException;<a name="line.46"></a>
<FONT color="green">047</FONT>    import org.apache.archiva.redback.components.taskqueue.TaskQueueException;<a name="line.47"></a>
<FONT color="green">048</FONT>    import org.apache.archiva.redback.system.DefaultSecuritySession;<a name="line.48"></a>
<FONT color="green">049</FONT>    import org.apache.archiva.redback.system.SecuritySession;<a name="line.49"></a>
<FONT color="green">050</FONT>    import org.apache.archiva.redback.system.SecuritySystem;<a name="line.50"></a>
<FONT color="green">051</FONT>    import org.apache.archiva.redback.users.User;<a name="line.51"></a>
<FONT color="green">052</FONT>    import org.apache.archiva.redback.users.UserManagerException;<a name="line.52"></a>
<FONT color="green">053</FONT>    import org.apache.archiva.redback.users.UserNotFoundException;<a name="line.53"></a>
<FONT color="green">054</FONT>    import org.apache.archiva.repository.ContentNotFoundException;<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.events.RepositoryListener;<a name="line.59"></a>
<FONT color="green">060</FONT>    import org.apache.archiva.repository.metadata.MetadataTools;<a name="line.60"></a>
<FONT color="green">061</FONT>    import org.apache.archiva.repository.metadata.RepositoryMetadataException;<a name="line.61"></a>
<FONT color="green">062</FONT>    import org.apache.archiva.repository.metadata.RepositoryMetadataWriter;<a name="line.62"></a>
<FONT color="green">063</FONT>    import org.apache.archiva.repository.scanner.RepositoryScanStatistics;<a name="line.63"></a>
<FONT color="green">064</FONT>    import org.apache.archiva.repository.scanner.RepositoryScanner;<a name="line.64"></a>
<FONT color="green">065</FONT>    import org.apache.archiva.repository.scanner.RepositoryScannerException;<a name="line.65"></a>
<FONT color="green">066</FONT>    import org.apache.archiva.rest.api.model.ArtifactTransferRequest;<a name="line.66"></a>
<FONT color="green">067</FONT>    import org.apache.archiva.rest.api.services.ArchivaRestServiceException;<a name="line.67"></a>
<FONT color="green">068</FONT>    import org.apache.archiva.rest.api.services.RepositoriesService;<a name="line.68"></a>
<FONT color="green">069</FONT>    import org.apache.archiva.scheduler.ArchivaTaskScheduler;<a name="line.69"></a>
<FONT color="green">070</FONT>    import org.apache.archiva.scheduler.indexing.ArchivaIndexingTaskExecutor;<a name="line.70"></a>
<FONT color="green">071</FONT>    import org.apache.archiva.scheduler.indexing.ArtifactIndexingTask;<a name="line.71"></a>
<FONT color="green">072</FONT>    import org.apache.archiva.scheduler.indexing.DownloadRemoteIndexException;<a name="line.72"></a>
<FONT color="green">073</FONT>    import org.apache.archiva.scheduler.indexing.DownloadRemoteIndexScheduler;<a name="line.73"></a>
<FONT color="green">074</FONT>    import org.apache.archiva.scheduler.repository.model.RepositoryTask;<a name="line.74"></a>
<FONT color="green">075</FONT>    import org.apache.archiva.security.ArchivaSecurityException;<a name="line.75"></a>
<FONT color="green">076</FONT>    import org.apache.archiva.security.common.ArchivaRoleConstants;<a name="line.76"></a>
<FONT color="green">077</FONT>    import org.apache.archiva.xml.XMLException;<a name="line.77"></a>
<FONT color="green">078</FONT>    import org.apache.commons.io.FilenameUtils;<a name="line.78"></a>
<FONT color="green">079</FONT>    import org.apache.commons.io.IOUtils;<a name="line.79"></a>
<FONT color="green">080</FONT>    import org.apache.commons.lang.StringUtils;<a name="line.80"></a>
<FONT color="green">081</FONT>    import org.apache.maven.index.context.IndexingContext;<a name="line.81"></a>
<FONT color="green">082</FONT>    import org.slf4j.Logger;<a name="line.82"></a>
<FONT color="green">083</FONT>    import org.slf4j.LoggerFactory;<a name="line.83"></a>
<FONT color="green">084</FONT>    import org.springframework.stereotype.Service;<a name="line.84"></a>
<FONT color="green">085</FONT>    <a name="line.85"></a>
<FONT color="green">086</FONT>    import javax.inject.Inject;<a name="line.86"></a>
<FONT color="green">087</FONT>    import javax.inject.Named;<a name="line.87"></a>
<FONT color="green">088</FONT>    import javax.ws.rs.core.Response;<a name="line.88"></a>
<FONT color="green">089</FONT>    import java.io.File;<a name="line.89"></a>
<FONT color="green">090</FONT>    import java.io.FileInputStream;<a name="line.90"></a>
<FONT color="green">091</FONT>    import java.io.FileOutputStream;<a name="line.91"></a>
<FONT color="green">092</FONT>    import java.io.IOException;<a name="line.92"></a>
<FONT color="green">093</FONT>    import java.text.DateFormat;<a name="line.93"></a>
<FONT color="green">094</FONT>    import java.text.SimpleDateFormat;<a name="line.94"></a>
<FONT color="green">095</FONT>    import java.util.ArrayList;<a name="line.95"></a>
<FONT color="green">096</FONT>    import java.util.Calendar;<a name="line.96"></a>
<FONT color="green">097</FONT>    import java.util.Collection;<a name="line.97"></a>
<FONT color="green">098</FONT>    import java.util.Collections;<a name="line.98"></a>
<FONT color="green">099</FONT>    import java.util.Date;<a name="line.99"></a>
<FONT color="green">100</FONT>    import java.util.List;<a name="line.100"></a>
<FONT color="green">101</FONT>    import java.util.Set;<a name="line.101"></a>
<FONT color="green">102</FONT>    import java.util.TimeZone;<a name="line.102"></a>
<FONT color="green">103</FONT>    <a name="line.103"></a>
<FONT color="green">104</FONT>    /**<a name="line.104"></a>
<FONT color="green">105</FONT>     * @author Olivier Lamy<a name="line.105"></a>
<FONT color="green">106</FONT>     * @since 1.4-M1<a name="line.106"></a>
<FONT color="green">107</FONT>     */<a name="line.107"></a>
<FONT color="green">108</FONT>    @Service( "repositoriesService#rest" )<a name="line.108"></a>
<FONT color="green">109</FONT>    public class DefaultRepositoriesService<a name="line.109"></a>
<FONT color="green">110</FONT>        extends AbstractRestService<a name="line.110"></a>
<FONT color="green">111</FONT>        implements RepositoriesService<a name="line.111"></a>
<FONT color="green">112</FONT>    {<a name="line.112"></a>
<FONT color="green">113</FONT>        private Logger log = LoggerFactory.getLogger( getClass() );<a name="line.113"></a>
<FONT color="green">114</FONT>    <a name="line.114"></a>
<FONT color="green">115</FONT>        @Inject<a name="line.115"></a>
<FONT color="green">116</FONT>        @Named( value = "taskExecutor#indexing" )<a name="line.116"></a>
<FONT color="green">117</FONT>        private ArchivaIndexingTaskExecutor archivaIndexingTaskExecutor;<a name="line.117"></a>
<FONT color="green">118</FONT>    <a name="line.118"></a>
<FONT color="green">119</FONT>        @Inject<a name="line.119"></a>
<FONT color="green">120</FONT>        private ManagedRepositoryAdmin managedRepositoryAdmin;<a name="line.120"></a>
<FONT color="green">121</FONT>    <a name="line.121"></a>
<FONT color="green">122</FONT>        @Inject<a name="line.122"></a>
<FONT color="green">123</FONT>        private PlexusSisuBridge plexusSisuBridge;<a name="line.123"></a>
<FONT color="green">124</FONT>    <a name="line.124"></a>
<FONT color="green">125</FONT>        @Inject<a name="line.125"></a>
<FONT color="green">126</FONT>        private MavenIndexerUtils mavenIndexerUtils;<a name="line.126"></a>
<FONT color="green">127</FONT>    <a name="line.127"></a>
<FONT color="green">128</FONT>        @Inject<a name="line.128"></a>
<FONT color="green">129</FONT>        private SecuritySystem securitySystem;<a name="line.129"></a>
<FONT color="green">130</FONT>    <a name="line.130"></a>
<FONT color="green">131</FONT>        @Inject<a name="line.131"></a>
<FONT color="green">132</FONT>        private RepositoryContentFactory repositoryFactory;<a name="line.132"></a>
<FONT color="green">133</FONT>    <a name="line.133"></a>
<FONT color="green">134</FONT>        @Inject<a name="line.134"></a>
<FONT color="green">135</FONT>        @Named( value = "archivaTaskScheduler#repository" )<a name="line.135"></a>
<FONT color="green">136</FONT>        private ArchivaTaskScheduler scheduler;<a name="line.136"></a>
<FONT color="green">137</FONT>    <a name="line.137"></a>
<FONT color="green">138</FONT>        @Inject<a name="line.138"></a>
<FONT color="green">139</FONT>        private DownloadRemoteIndexScheduler downloadRemoteIndexScheduler;<a name="line.139"></a>
<FONT color="green">140</FONT>    <a name="line.140"></a>
<FONT color="green">141</FONT>        @Inject<a name="line.141"></a>
<FONT color="green">142</FONT>        @Named( value = "repositorySessionFactory" )<a name="line.142"></a>
<FONT color="green">143</FONT>        protected RepositorySessionFactory repositorySessionFactory;<a name="line.143"></a>
<FONT color="green">144</FONT>    <a name="line.144"></a>
<FONT color="green">145</FONT>        @Inject<a name="line.145"></a>
<FONT color="green">146</FONT>        protected List&lt;RepositoryListener&gt; listeners = new ArrayList&lt;RepositoryListener&gt;();<a name="line.146"></a>
<FONT color="green">147</FONT>    <a name="line.147"></a>
<FONT color="green">148</FONT>        @Inject<a name="line.148"></a>
<FONT color="green">149</FONT>        private RepositoryScanner repoScanner;<a name="line.149"></a>
<FONT color="green">150</FONT>    <a name="line.150"></a>
<FONT color="green">151</FONT>        private ChecksumAlgorithm[] algorithms = new ChecksumAlgorithm[]{ ChecksumAlgorithm.SHA1, ChecksumAlgorithm.MD5 };<a name="line.151"></a>
<FONT color="green">152</FONT>    <a name="line.152"></a>
<FONT color="green">153</FONT>        public Boolean scanRepository( String repositoryId, boolean fullScan )<a name="line.153"></a>
<FONT color="green">154</FONT>        {<a name="line.154"></a>
<FONT color="green">155</FONT>            return doScanRepository( repositoryId, fullScan );<a name="line.155"></a>
<FONT color="green">156</FONT>        }<a name="line.156"></a>
<FONT color="green">157</FONT>    <a name="line.157"></a>
<FONT color="green">158</FONT>        public Boolean alreadyScanning( String repositoryId )<a name="line.158"></a>
<FONT color="green">159</FONT>        {<a name="line.159"></a>
<FONT color="green">160</FONT>            return repositoryTaskScheduler.isProcessingRepositoryTask( repositoryId );<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>        public Boolean removeScanningTaskFromQueue( String repositoryId )<a name="line.163"></a>
<FONT color="green">164</FONT>        {<a name="line.164"></a>
<FONT color="green">165</FONT>            RepositoryTask task = new RepositoryTask();<a name="line.165"></a>
<FONT color="green">166</FONT>            task.setRepositoryId( repositoryId );<a name="line.166"></a>
<FONT color="green">167</FONT>            try<a name="line.167"></a>
<FONT color="green">168</FONT>            {<a name="line.168"></a>
<FONT color="green">169</FONT>                return repositoryTaskScheduler.unQueueTask( task );<a name="line.169"></a>
<FONT color="green">170</FONT>            }<a name="line.170"></a>
<FONT color="green">171</FONT>            catch ( TaskQueueException e )<a name="line.171"></a>
<FONT color="green">172</FONT>            {<a name="line.172"></a>
<FONT color="green">173</FONT>                log.error( "failed to unschedule scanning of repo with id {}", repositoryId, e );<a name="line.173"></a>
<FONT color="green">174</FONT>                return false;<a name="line.174"></a>
<FONT color="green">175</FONT>            }<a name="line.175"></a>
<FONT color="green">176</FONT>        }<a name="line.176"></a>
<FONT color="green">177</FONT>    <a name="line.177"></a>
<FONT color="green">178</FONT>        public Boolean scanRepositoryNow( String repositoryId, boolean fullScan )<a name="line.178"></a>
<FONT color="green">179</FONT>            throws ArchivaRestServiceException<a name="line.179"></a>
<FONT color="green">180</FONT>        {<a name="line.180"></a>
<FONT color="green">181</FONT>    <a name="line.181"></a>
<FONT color="green">182</FONT>            try<a name="line.182"></a>
<FONT color="green">183</FONT>            {<a name="line.183"></a>
<FONT color="green">184</FONT>                ManagedRepository repository = managedRepositoryAdmin.getManagedRepository( repositoryId );<a name="line.184"></a>
<FONT color="green">185</FONT>    <a name="line.185"></a>
<FONT color="green">186</FONT>                IndexingContext context = managedRepositoryAdmin.createIndexContext( repository );<a name="line.186"></a>
<FONT color="green">187</FONT>    <a name="line.187"></a>
<FONT color="green">188</FONT>                ArtifactIndexingTask task =<a name="line.188"></a>
<FONT color="green">189</FONT>                    new ArtifactIndexingTask( repository, null, ArtifactIndexingTask.Action.FINISH, context );<a name="line.189"></a>
<FONT color="green">190</FONT>    <a name="line.190"></a>
<FONT color="green">191</FONT>                task.setExecuteOnEntireRepo( true );<a name="line.191"></a>
<FONT color="green">192</FONT>                task.setOnlyUpdate( !fullScan );<a name="line.192"></a>
<FONT color="green">193</FONT>    <a name="line.193"></a>
<FONT color="green">194</FONT>                archivaIndexingTaskExecutor.executeTask( task );<a name="line.194"></a>
<FONT color="green">195</FONT>                return Boolean.TRUE;<a name="line.195"></a>
<FONT color="green">196</FONT>            }<a name="line.196"></a>
<FONT color="green">197</FONT>            catch ( Exception e )<a name="line.197"></a>
<FONT color="green">198</FONT>            {<a name="line.198"></a>
<FONT color="green">199</FONT>                log.error( e.getMessage(), e );<a name="line.199"></a>
<FONT color="green">200</FONT>                throw new ArchivaRestServiceException( e.getMessage(), e );<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>        public Boolean scheduleDownloadRemoteIndex( String repositoryId, boolean now, boolean fullDownload )<a name="line.204"></a>
<FONT color="green">205</FONT>            throws ArchivaRestServiceException<a name="line.205"></a>
<FONT color="green">206</FONT>        {<a name="line.206"></a>
<FONT color="green">207</FONT>            try<a name="line.207"></a>
<FONT color="green">208</FONT>            {<a name="line.208"></a>
<FONT color="green">209</FONT>                downloadRemoteIndexScheduler.scheduleDownloadRemote( repositoryId, now, fullDownload );<a name="line.209"></a>
<FONT color="green">210</FONT>            }<a name="line.210"></a>
<FONT color="green">211</FONT>            catch ( DownloadRemoteIndexException e )<a name="line.211"></a>
<FONT color="green">212</FONT>            {<a name="line.212"></a>
<FONT color="green">213</FONT>                log.error( e.getMessage(), e );<a name="line.213"></a>
<FONT color="green">214</FONT>                throw new ArchivaRestServiceException( e.getMessage(), e );<a name="line.214"></a>
<FONT color="green">215</FONT>            }<a name="line.215"></a>
<FONT color="green">216</FONT>            return Boolean.TRUE;<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>        public Boolean copyArtifact( ArtifactTransferRequest artifactTransferRequest )<a name="line.219"></a>
<FONT color="green">220</FONT>            throws ArchivaRestServiceException<a name="line.220"></a>
<FONT color="green">221</FONT>        {<a name="line.221"></a>
<FONT color="green">222</FONT>            // check parameters<a name="line.222"></a>
<FONT color="green">223</FONT>            String userName = getAuditInformation().getUser().getUsername();<a name="line.223"></a>
<FONT color="green">224</FONT>            if ( StringUtils.isBlank( userName ) )<a name="line.224"></a>
<FONT color="green">225</FONT>            {<a name="line.225"></a>
<FONT color="green">226</FONT>                throw new ArchivaRestServiceException( "copyArtifact call: userName not found", null );<a name="line.226"></a>
<FONT color="green">227</FONT>            }<a name="line.227"></a>
<FONT color="green">228</FONT>    <a name="line.228"></a>
<FONT color="green">229</FONT>            if ( StringUtils.isBlank( artifactTransferRequest.getRepositoryId() ) )<a name="line.229"></a>
<FONT color="green">230</FONT>            {<a name="line.230"></a>
<FONT color="green">231</FONT>                throw new ArchivaRestServiceException( "copyArtifact call: sourceRepositoryId cannot be null", null );<a name="line.231"></a>
<FONT color="green">232</FONT>            }<a name="line.232"></a>
<FONT color="green">233</FONT>    <a name="line.233"></a>
<FONT color="green">234</FONT>            if ( StringUtils.isBlank( artifactTransferRequest.getTargetRepositoryId() ) )<a name="line.234"></a>
<FONT color="green">235</FONT>            {<a name="line.235"></a>
<FONT color="green">236</FONT>                throw new ArchivaRestServiceException( "copyArtifact call: targetRepositoryId cannot be null", null );<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>            ManagedRepository source = null;<a name="line.239"></a>
<FONT color="green">240</FONT>            try<a name="line.240"></a>
<FONT color="green">241</FONT>            {<a name="line.241"></a>
<FONT color="green">242</FONT>                source = managedRepositoryAdmin.getManagedRepository( artifactTransferRequest.getRepositoryId() );<a name="line.242"></a>
<FONT color="green">243</FONT>            }<a name="line.243"></a>
<FONT color="green">244</FONT>            catch ( RepositoryAdminException e )<a name="line.244"></a>
<FONT color="green">245</FONT>            {<a name="line.245"></a>
<FONT color="green">246</FONT>                throw new ArchivaRestServiceException( e.getMessage(), e );<a name="line.246"></a>
<FONT color="green">247</FONT>            }<a name="line.247"></a>
<FONT color="green">248</FONT>    <a name="line.248"></a>
<FONT color="green">249</FONT>            if ( source == null )<a name="line.249"></a>
<FONT color="green">250</FONT>            {<a name="line.250"></a>
<FONT color="green">251</FONT>                throw new ArchivaRestServiceException(<a name="line.251"></a>
<FONT color="green">252</FONT>                    "cannot find repository with id " + artifactTransferRequest.getRepositoryId(), null );<a name="line.252"></a>
<FONT color="green">253</FONT>            }<a name="line.253"></a>
<FONT color="green">254</FONT>    <a name="line.254"></a>
<FONT color="green">255</FONT>            ManagedRepository target = null;<a name="line.255"></a>
<FONT color="green">256</FONT>            try<a name="line.256"></a>
<FONT color="green">257</FONT>            {<a name="line.257"></a>
<FONT color="green">258</FONT>                target = managedRepositoryAdmin.getManagedRepository( artifactTransferRequest.getTargetRepositoryId() );<a name="line.258"></a>
<FONT color="green">259</FONT>            }<a name="line.259"></a>
<FONT color="green">260</FONT>            catch ( RepositoryAdminException e )<a name="line.260"></a>
<FONT color="green">261</FONT>            {<a name="line.261"></a>
<FONT color="green">262</FONT>                throw new ArchivaRestServiceException( e.getMessage(), e );<a name="line.262"></a>
<FONT color="green">263</FONT>            }<a name="line.263"></a>
<FONT color="green">264</FONT>    <a name="line.264"></a>
<FONT color="green">265</FONT>            if ( target == null )<a name="line.265"></a>
<FONT color="green">266</FONT>            {<a name="line.266"></a>
<FONT color="green">267</FONT>                throw new ArchivaRestServiceException(<a name="line.267"></a>
<FONT color="green">268</FONT>                    "cannot find repository with id " + artifactTransferRequest.getTargetRepositoryId(), null );<a name="line.268"></a>
<FONT color="green">269</FONT>            }<a name="line.269"></a>
<FONT color="green">270</FONT>    <a name="line.270"></a>
<FONT color="green">271</FONT>            if ( StringUtils.isBlank( artifactTransferRequest.getGroupId() ) )<a name="line.271"></a>
<FONT color="green">272</FONT>            {<a name="line.272"></a>
<FONT color="green">273</FONT>                throw new ArchivaRestServiceException( "groupId is mandatory", null );<a name="line.273"></a>
<FONT color="green">274</FONT>            }<a name="line.274"></a>
<FONT color="green">275</FONT>    <a name="line.275"></a>
<FONT color="green">276</FONT>            if ( StringUtils.isBlank( artifactTransferRequest.getArtifactId() ) )<a name="line.276"></a>
<FONT color="green">277</FONT>            {<a name="line.277"></a>
<FONT color="green">278</FONT>                throw new ArchivaRestServiceException( "artifactId is mandatory", null );<a name="line.278"></a>
<FONT color="green">279</FONT>            }<a name="line.279"></a>
<FONT color="green">280</FONT>    <a name="line.280"></a>
<FONT color="green">281</FONT>            if ( StringUtils.isBlank( artifactTransferRequest.getVersion() ) )<a name="line.281"></a>
<FONT color="green">282</FONT>            {<a name="line.282"></a>
<FONT color="green">283</FONT>                throw new ArchivaRestServiceException( "version is mandatory", null );<a name="line.283"></a>
<FONT color="green">284</FONT>            }<a name="line.284"></a>
<FONT color="green">285</FONT>    <a name="line.285"></a>
<FONT color="green">286</FONT>            if ( VersionUtil.isSnapshot( artifactTransferRequest.getVersion() ) )<a name="line.286"></a>
<FONT color="green">287</FONT>            {<a name="line.287"></a>
<FONT color="green">288</FONT>                throw new ArchivaRestServiceException( "copy of SNAPSHOT not supported", null );<a name="line.288"></a>
<FONT color="green">289</FONT>            }<a name="line.289"></a>
<FONT color="green">290</FONT>    <a name="line.290"></a>
<FONT color="green">291</FONT>            // end check parameters<a name="line.291"></a>
<FONT color="green">292</FONT>    <a name="line.292"></a>
<FONT color="green">293</FONT>            User user = null;<a name="line.293"></a>
<FONT color="green">294</FONT>            try<a name="line.294"></a>
<FONT color="green">295</FONT>            {<a name="line.295"></a>
<FONT color="green">296</FONT>                user = securitySystem.getUserManager().findUser( userName );<a name="line.296"></a>
<FONT color="green">297</FONT>            }<a name="line.297"></a>
<FONT color="green">298</FONT>            catch ( UserNotFoundException e )<a name="line.298"></a>
<FONT color="green">299</FONT>            {<a name="line.299"></a>
<FONT color="green">300</FONT>                throw new ArchivaRestServiceException( "user " + userName + " not found", e );<a name="line.300"></a>
<FONT color="green">301</FONT>            }<a name="line.301"></a>
<FONT color="green">302</FONT>            catch ( UserManagerException e )<a name="line.302"></a>
<FONT color="green">303</FONT>            {<a name="line.303"></a>
<FONT color="green">304</FONT>                throw new ArchivaRestServiceException( "ArchivaRestServiceException:" + e.getMessage(), e );<a name="line.304"></a>
<FONT color="green">305</FONT>            }<a name="line.305"></a>
<FONT color="green">306</FONT>    <a name="line.306"></a>
<FONT color="green">307</FONT>            // check karma on source : read<a name="line.307"></a>
<FONT color="green">308</FONT>            AuthenticationResult authn = new AuthenticationResult( true, userName, null );<a name="line.308"></a>
<FONT color="green">309</FONT>            SecuritySession securitySession = new DefaultSecuritySession( authn, user );<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>                boolean authz =<a name="line.312"></a>
<FONT color="green">313</FONT>                    securitySystem.isAuthorized( securitySession, ArchivaRoleConstants.OPERATION_REPOSITORY_ACCESS,<a name="line.313"></a>
<FONT color="green">314</FONT>                                                 artifactTransferRequest.getRepositoryId() );<a name="line.314"></a>
<FONT color="green">315</FONT>                if ( !authz )<a name="line.315"></a>
<FONT color="green">316</FONT>                {<a name="line.316"></a>
<FONT color="green">317</FONT>                    throw new ArchivaRestServiceException(<a name="line.317"></a>
<FONT color="green">318</FONT>                        "not authorized to access repo:" + artifactTransferRequest.getRepositoryId(), null );<a name="line.318"></a>
<FONT color="green">319</FONT>                }<a name="line.319"></a>
<FONT color="green">320</FONT>            }<a name="line.320"></a>
<FONT color="green">321</FONT>            catch ( AuthorizationException e )<a name="line.321"></a>
<FONT color="green">322</FONT>            {<a name="line.322"></a>
<FONT color="green">323</FONT>                log.error( "error reading permission: " + e.getMessage(), e );<a name="line.323"></a>
<FONT color="green">324</FONT>                throw new ArchivaRestServiceException( e.getMessage(), e );<a name="line.324"></a>
<FONT color="green">325</FONT>            }<a name="line.325"></a>
<FONT color="green">326</FONT>    <a name="line.326"></a>
<FONT color="green">327</FONT>            // check karma on target: write<a name="line.327"></a>
<FONT color="green">328</FONT>            try<a name="line.328"></a>
<FONT color="green">329</FONT>            {<a name="line.329"></a>
<FONT color="green">330</FONT>                boolean authz =<a name="line.330"></a>
<FONT color="green">331</FONT>                    securitySystem.isAuthorized( securitySession, ArchivaRoleConstants.OPERATION_REPOSITORY_UPLOAD,<a name="line.331"></a>
<FONT color="green">332</FONT>                                                 artifactTransferRequest.getTargetRepositoryId() );<a name="line.332"></a>
<FONT color="green">333</FONT>                if ( !authz )<a name="line.333"></a>
<FONT color="green">334</FONT>                {<a name="line.334"></a>
<FONT color="green">335</FONT>                    throw new ArchivaRestServiceException(<a name="line.335"></a>
<FONT color="green">336</FONT>                        "not authorized to write to repo:" + artifactTransferRequest.getTargetRepositoryId(), null );<a name="line.336"></a>
<FONT color="green">337</FONT>                }<a name="line.337"></a>
<FONT color="green">338</FONT>            }<a name="line.338"></a>
<FONT color="green">339</FONT>            catch ( AuthorizationException e )<a name="line.339"></a>
<FONT color="green">340</FONT>            {<a name="line.340"></a>
<FONT color="green">341</FONT>                log.error( "error reading permission: " + e.getMessage(), e );<a name="line.341"></a>
<FONT color="green">342</FONT>                throw new ArchivaRestServiceException( e.getMessage(), e );<a name="line.342"></a>
<FONT color="green">343</FONT>            }<a name="line.343"></a>
<FONT color="green">344</FONT>    <a name="line.344"></a>
<FONT color="green">345</FONT>            // sounds good we can continue !<a name="line.345"></a>
<FONT color="green">346</FONT>    <a name="line.346"></a>
<FONT color="green">347</FONT>            ArtifactReference artifactReference = new ArtifactReference();<a name="line.347"></a>
<FONT color="green">348</FONT>            artifactReference.setArtifactId( artifactTransferRequest.getArtifactId() );<a name="line.348"></a>
<FONT color="green">349</FONT>            artifactReference.setGroupId( artifactTransferRequest.getGroupId() );<a name="line.349"></a>
<FONT color="green">350</FONT>            artifactReference.setVersion( artifactTransferRequest.getVersion() );<a name="line.350"></a>
<FONT color="green">351</FONT>            artifactReference.setClassifier( artifactTransferRequest.getClassifier() );<a name="line.351"></a>
<FONT color="green">352</FONT>            String packaging = StringUtils.trim( artifactTransferRequest.getPackaging() );<a name="line.352"></a>
<FONT color="green">353</FONT>            artifactReference.setType( StringUtils.isEmpty( packaging ) ? "jar" : packaging );<a name="line.353"></a>
<FONT color="green">354</FONT>    <a name="line.354"></a>
<FONT color="green">355</FONT>            try<a name="line.355"></a>
<FONT color="green">356</FONT>            {<a name="line.356"></a>
<FONT color="green">357</FONT>    <a name="line.357"></a>
<FONT color="green">358</FONT>                ManagedRepositoryContent sourceRepository =<a name="line.358"></a>
<FONT color="green">359</FONT>                    repositoryFactory.getManagedRepositoryContent( artifactTransferRequest.getRepositoryId() );<a name="line.359"></a>
<FONT color="green">360</FONT>    <a name="line.360"></a>
<FONT color="green">361</FONT>                String artifactSourcePath = sourceRepository.toPath( artifactReference );<a name="line.361"></a>
<FONT color="green">362</FONT>    <a name="line.362"></a>
<FONT color="green">363</FONT>                if ( StringUtils.isEmpty( artifactSourcePath ) )<a name="line.363"></a>
<FONT color="green">364</FONT>                {<a name="line.364"></a>
<FONT color="green">365</FONT>                    log.error( "cannot find artifact " + artifactTransferRequest.toString() );<a name="line.365"></a>
<FONT color="green">366</FONT>                    throw new ArchivaRestServiceException( "cannot find artifact " + artifactTransferRequest.toString(),<a name="line.366"></a>
<FONT color="green">367</FONT>                                                           null );<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>                File artifactFile = new File( source.getLocation(), artifactSourcePath );<a name="line.370"></a>
<FONT color="green">371</FONT>    <a name="line.371"></a>
<FONT color="green">372</FONT>                if ( !artifactFile.exists() )<a name="line.372"></a>
<FONT color="green">373</FONT>                {<a name="line.373"></a>
<FONT color="green">374</FONT>                    log.error( "cannot find artifact " + artifactTransferRequest.toString() );<a name="line.374"></a>
<FONT color="green">375</FONT>                    throw new ArchivaRestServiceException( "cannot find artifact " + artifactTransferRequest.toString(),<a name="line.375"></a>
<FONT color="green">376</FONT>                                                           null );<a name="line.376"></a>
<FONT color="green">377</FONT>                }<a name="line.377"></a>
<FONT color="green">378</FONT>    <a name="line.378"></a>
<FONT color="green">379</FONT>                ManagedRepositoryContent targetRepository =<a name="line.379"></a>
<FONT color="green">380</FONT>                    repositoryFactory.getManagedRepositoryContent( artifactTransferRequest.getTargetRepositoryId() );<a name="line.380"></a>
<FONT color="green">381</FONT>    <a name="line.381"></a>
<FONT color="green">382</FONT>                String artifactPath = targetRepository.toPath( artifactReference );<a name="line.382"></a>
<FONT color="green">383</FONT>    <a name="line.383"></a>
<FONT color="green">384</FONT>                int lastIndex = artifactPath.lastIndexOf( '/' );<a name="line.384"></a>
<FONT color="green">385</FONT>    <a name="line.385"></a>
<FONT color="green">386</FONT>                String path = artifactPath.substring( 0, lastIndex );<a name="line.386"></a>
<FONT color="green">387</FONT>                File targetPath = new File( target.getLocation(), path );<a name="line.387"></a>
<FONT color="green">388</FONT>    <a name="line.388"></a>
<FONT color="green">389</FONT>                Date lastUpdatedTimestamp = Calendar.getInstance().getTime();<a name="line.389"></a>
<FONT color="green">390</FONT>                int newBuildNumber = 1;<a name="line.390"></a>
<FONT color="green">391</FONT>                String timestamp = null;<a name="line.391"></a>
<FONT color="green">392</FONT>    <a name="line.392"></a>
<FONT color="green">393</FONT>                File versionMetadataFile = new File( targetPath, MetadataTools.MAVEN_METADATA );<a name="line.393"></a>
<FONT color="green">394</FONT>                ArchivaRepositoryMetadata versionMetadata = getMetadata( versionMetadataFile );<a name="line.394"></a>
<FONT color="green">395</FONT>    <a name="line.395"></a>
<FONT color="green">396</FONT>                if ( !targetPath.exists() )<a name="line.396"></a>
<FONT color="green">397</FONT>                {<a name="line.397"></a>
<FONT color="green">398</FONT>                    targetPath.mkdirs();<a name="line.398"></a>
<FONT color="green">399</FONT>                }<a name="line.399"></a>
<FONT color="green">400</FONT>    <a name="line.400"></a>
<FONT color="green">401</FONT>                String filename = artifactPath.substring( lastIndex + 1 );<a name="line.401"></a>
<FONT color="green">402</FONT>    <a name="line.402"></a>
<FONT color="green">403</FONT>                boolean fixChecksums =<a name="line.403"></a>
<FONT color="green">404</FONT>                    !( archivaAdministration.getKnownContentConsumers().contains( "create-missing-checksums" ) );<a name="line.404"></a>
<FONT color="green">405</FONT>    <a name="line.405"></a>
<FONT color="green">406</FONT>                File targetFile = new File( targetPath, filename );<a name="line.406"></a>
<FONT color="green">407</FONT>                if ( targetFile.exists() &amp;&amp; target.isBlockRedeployments() )<a name="line.407"></a>
<FONT color="green">408</FONT>                {<a name="line.408"></a>
<FONT color="green">409</FONT>                    throw new ArchivaRestServiceException(<a name="line.409"></a>
<FONT color="green">410</FONT>                        "artifact already exists in target repo: " + artifactTransferRequest.getTargetRepositoryId()<a name="line.410"></a>
<FONT color="green">411</FONT>                            + " and redeployment blocked", null );<a name="line.411"></a>
<FONT color="green">412</FONT>                }<a name="line.412"></a>
<FONT color="green">413</FONT>                else<a name="line.413"></a>
<FONT color="green">414</FONT>                {<a name="line.414"></a>
<FONT color="green">415</FONT>                    copyFile( artifactFile, targetPath, filename, fixChecksums );<a name="line.415"></a>
<FONT color="green">416</FONT>                    queueRepositoryTask( target.getId(), targetFile );<a name="line.416"></a>
<FONT color="green">417</FONT>                }<a name="line.417"></a>
<FONT color="green">418</FONT>    <a name="line.418"></a>
<FONT color="green">419</FONT>                // copy source pom to target repo<a name="line.419"></a>
<FONT color="green">420</FONT>                String pomFilename = filename;<a name="line.420"></a>
<FONT color="green">421</FONT>                if ( StringUtils.isNotBlank( artifactTransferRequest.getClassifier() ) )<a name="line.421"></a>
<FONT color="green">422</FONT>                {<a name="line.422"></a>
<FONT color="green">423</FONT>                    pomFilename = StringUtils.remove( pomFilename, "-" + artifactTransferRequest.getClassifier() );<a name="line.423"></a>
<FONT color="green">424</FONT>                }<a name="line.424"></a>
<FONT color="green">425</FONT>                pomFilename = FilenameUtils.removeExtension( pomFilename ) + ".pom";<a name="line.425"></a>
<FONT color="green">426</FONT>    <a name="line.426"></a>
<FONT color="green">427</FONT>                File pomFile = new File(<a name="line.427"></a>
<FONT color="green">428</FONT>                    new File( source.getLocation(), artifactSourcePath.substring( 0, artifactPath.lastIndexOf( '/' ) ) ),<a name="line.428"></a>
<FONT color="green">429</FONT>                    pomFilename );<a name="line.429"></a>
<FONT color="green">430</FONT>    <a name="line.430"></a>
<FONT color="green">431</FONT>                if ( pomFile != null &amp;&amp; pomFile.length() &gt; 0 )<a name="line.431"></a>
<FONT color="green">432</FONT>                {<a name="line.432"></a>
<FONT color="green">433</FONT>                    copyFile( pomFile, targetPath, pomFilename, fixChecksums );<a name="line.433"></a>
<FONT color="green">434</FONT>                    queueRepositoryTask( target.getId(), new File( targetPath, pomFilename ) );<a name="line.434"></a>
<FONT color="green">435</FONT>    <a name="line.435"></a>
<FONT color="green">436</FONT>    <a name="line.436"></a>
<FONT color="green">437</FONT>                }<a name="line.437"></a>
<FONT color="green">438</FONT>    <a name="line.438"></a>
<FONT color="green">439</FONT>                // explicitly update only if metadata-updater consumer is not enabled!<a name="line.439"></a>
<FONT color="green">440</FONT>                if ( !archivaAdministration.getKnownContentConsumers().contains( "metadata-updater" ) )<a name="line.440"></a>
<FONT color="green">441</FONT>                {<a name="line.441"></a>
<FONT color="green">442</FONT>                    updateProjectMetadata( targetPath.getAbsolutePath(), lastUpdatedTimestamp, timestamp, newBuildNumber,<a name="line.442"></a>
<FONT color="green">443</FONT>                                           fixChecksums, artifactTransferRequest );<a name="line.443"></a>
<FONT color="green">444</FONT>    <a name="line.444"></a>
<FONT color="green">445</FONT>    <a name="line.445"></a>
<FONT color="green">446</FONT>                }<a name="line.446"></a>
<FONT color="green">447</FONT>    <a name="line.447"></a>
<FONT color="green">448</FONT>                String msg =<a name="line.448"></a>
<FONT color="green">449</FONT>                    "Artifact \'" + artifactTransferRequest.getGroupId() + ":" + artifactTransferRequest.getArtifactId()<a name="line.449"></a>
<FONT color="green">450</FONT>                        + ":" + artifactTransferRequest.getVersion() + "\' was successfully deployed to repository \'"<a name="line.450"></a>
<FONT color="green">451</FONT>                        + artifactTransferRequest.getTargetRepositoryId() + "\'";<a name="line.451"></a>
<FONT color="green">452</FONT>    <a name="line.452"></a>
<FONT color="green">453</FONT>            }<a name="line.453"></a>
<FONT color="green">454</FONT>            catch ( RepositoryException e )<a name="line.454"></a>
<FONT color="green">455</FONT>            {<a name="line.455"></a>
<FONT color="green">456</FONT>                log.error( "RepositoryException: " + e.getMessage(), e );<a name="line.456"></a>
<FONT color="green">457</FONT>                throw new ArchivaRestServiceException( e.getMessage(), e );<a name="line.457"></a>
<FONT color="green">458</FONT>            }<a name="line.458"></a>
<FONT color="green">459</FONT>            catch ( RepositoryAdminException e )<a name="line.459"></a>
<FONT color="green">460</FONT>            {<a name="line.460"></a>
<FONT color="green">461</FONT>                log.error( "RepositoryAdminException: " + e.getMessage(), e );<a name="line.461"></a>
<FONT color="green">462</FONT>                throw new ArchivaRestServiceException( e.getMessage(), e );<a name="line.462"></a>
<FONT color="green">463</FONT>            }<a name="line.463"></a>
<FONT color="green">464</FONT>            catch ( IOException e )<a name="line.464"></a>
<FONT color="green">465</FONT>            {<a name="line.465"></a>
<FONT color="green">466</FONT>                log.error( "IOException: " + e.getMessage(), e );<a name="line.466"></a>
<FONT color="green">467</FONT>                throw new ArchivaRestServiceException( e.getMessage(), e );<a name="line.467"></a>
<FONT color="green">468</FONT>            }<a name="line.468"></a>
<FONT color="green">469</FONT>            return true;<a name="line.469"></a>
<FONT color="green">470</FONT>        }<a name="line.470"></a>
<FONT color="green">471</FONT>    <a name="line.471"></a>
<FONT color="green">472</FONT>        private void queueRepositoryTask( String repositoryId, File localFile )<a name="line.472"></a>
<FONT color="green">473</FONT>        {<a name="line.473"></a>
<FONT color="green">474</FONT>            RepositoryTask task = new RepositoryTask();<a name="line.474"></a>
<FONT color="green">475</FONT>            task.setRepositoryId( repositoryId );<a name="line.475"></a>
<FONT color="green">476</FONT>            task.setResourceFile( localFile );<a name="line.476"></a>
<FONT color="green">477</FONT>            task.setUpdateRelatedArtifacts( true );<a name="line.477"></a>
<FONT color="green">478</FONT>            //task.setScanAll( true );<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>                scheduler.queueTask( task );<a name="line.482"></a>
<FONT color="green">483</FONT>            }<a name="line.483"></a>
<FONT color="green">484</FONT>            catch ( TaskQueueException e )<a name="line.484"></a>
<FONT color="green">485</FONT>            {<a name="line.485"></a>
<FONT color="green">486</FONT>                log.error( "Unable to queue repository task to execute consumers on resource file ['" + localFile.getName()<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>        }<a name="line.489"></a>
<FONT color="green">490</FONT>    <a name="line.490"></a>
<FONT color="green">491</FONT>        private ArchivaRepositoryMetadata getMetadata( File metadataFile )<a name="line.491"></a>
<FONT color="green">492</FONT>            throws RepositoryMetadataException<a name="line.492"></a>
<FONT color="green">493</FONT>        {<a name="line.493"></a>
<FONT color="green">494</FONT>            ArchivaRepositoryMetadata metadata = new ArchivaRepositoryMetadata();<a name="line.494"></a>
<FONT color="green">495</FONT>            if ( metadataFile.exists() )<a name="line.495"></a>
<FONT color="green">496</FONT>            {<a name="line.496"></a>
<FONT color="green">497</FONT>                try<a name="line.497"></a>
<FONT color="green">498</FONT>                {<a name="line.498"></a>
<FONT color="green">499</FONT>                    metadata = MavenMetadataReader.read( metadataFile );<a name="line.499"></a>
<FONT color="green">500</FONT>                }<a name="line.500"></a>
<FONT color="green">501</FONT>                catch ( XMLException e )<a name="line.501"></a>
<FONT color="green">502</FONT>                {<a name="line.502"></a>
<FONT color="green">503</FONT>                    throw new RepositoryMetadataException( e.getMessage(), e );<a name="line.503"></a>
<FONT color="green">504</FONT>                }<a name="line.504"></a>
<FONT color="green">505</FONT>            }<a name="line.505"></a>
<FONT color="green">506</FONT>            return metadata;<a name="line.506"></a>
<FONT color="green">507</FONT>        }<a name="line.507"></a>
<FONT color="green">508</FONT>    <a name="line.508"></a>
<FONT color="green">509</FONT>        private File getMetadata( String targetPath )<a name="line.509"></a>
<FONT color="green">510</FONT>        {<a name="line.510"></a>
<FONT color="green">511</FONT>            String artifactPath = targetPath.substring( 0, targetPath.lastIndexOf( File.separatorChar ) );<a name="line.511"></a>
<FONT color="green">512</FONT>    <a name="line.512"></a>
<FONT color="green">513</FONT>            return new File( artifactPath, MetadataTools.MAVEN_METADATA );<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>        private void copyFile( File sourceFile, File targetPath, String targetFilename, boolean fixChecksums )<a name="line.516"></a>
<FONT color="green">517</FONT>            throws IOException<a name="line.517"></a>
<FONT color="green">518</FONT>        {<a name="line.518"></a>
<FONT color="green">519</FONT>            FileOutputStream out = new FileOutputStream( new File( targetPath, targetFilename ) );<a name="line.519"></a>
<FONT color="green">520</FONT>            FileInputStream input = new FileInputStream( sourceFile );<a name="line.520"></a>
<FONT color="green">521</FONT>    <a name="line.521"></a>
<FONT color="green">522</FONT>            try<a name="line.522"></a>
<FONT color="green">523</FONT>            {<a name="line.523"></a>
<FONT color="green">524</FONT>                IOUtils.copy( input, out );<a name="line.524"></a>
<FONT color="green">525</FONT>            }<a name="line.525"></a>
<FONT color="green">526</FONT>            finally<a name="line.526"></a>
<FONT color="green">527</FONT>            {<a name="line.527"></a>
<FONT color="green">528</FONT>                IOUtils.closeQuietly( out );<a name="line.528"></a>
<FONT color="green">529</FONT>                IOUtils.closeQuietly( input );<a name="line.529"></a>
<FONT color="green">530</FONT>            }<a name="line.530"></a>
<FONT color="green">531</FONT>    <a name="line.531"></a>
<FONT color="green">532</FONT>            if ( fixChecksums )<a name="line.532"></a>
<FONT color="green">533</FONT>            {<a name="line.533"></a>
<FONT color="green">534</FONT>                fixChecksums( new File( targetPath, targetFilename ) );<a name="line.534"></a>
<FONT color="green">535</FONT>            }<a name="line.535"></a>
<FONT color="green">536</FONT>        }<a name="line.536"></a>
<FONT color="green">537</FONT>    <a name="line.537"></a>
<FONT color="green">538</FONT>        private void fixChecksums( File file )<a name="line.538"></a>
<FONT color="green">539</FONT>        {<a name="line.539"></a>
<FONT color="green">540</FONT>            ChecksummedFile checksum = new ChecksummedFile( file );<a name="line.540"></a>
<FONT color="green">541</FONT>            checksum.fixChecksums( algorithms );<a name="line.541"></a>
<FONT color="green">542</FONT>        }<a name="line.542"></a>
<FONT color="green">543</FONT>    <a name="line.543"></a>
<FONT color="green">544</FONT>        private void updateProjectMetadata( String targetPath, Date lastUpdatedTimestamp, String timestamp, int buildNumber,<a name="line.544"></a>
<FONT color="green">545</FONT>                                            boolean fixChecksums, ArtifactTransferRequest artifactTransferRequest )<a name="line.545"></a>
<FONT color="green">546</FONT>            throws RepositoryMetadataException<a name="line.546"></a>
<FONT color="green">547</FONT>        {<a name="line.547"></a>
<FONT color="green">548</FONT>            List&lt;String&gt; availableVersions = new ArrayList&lt;String&gt;();<a name="line.548"></a>
<FONT color="green">549</FONT>            String latestVersion = artifactTransferRequest.getVersion();<a name="line.549"></a>
<FONT color="green">550</FONT>    <a name="line.550"></a>
<FONT color="green">551</FONT>            File projectDir = new File( targetPath ).getParentFile();<a name="line.551"></a>
<FONT color="green">552</FONT>            File projectMetadataFile = new File( projectDir, MetadataTools.MAVEN_METADATA );<a name="line.552"></a>
<FONT color="green">553</FONT>    <a name="line.553"></a>
<FONT color="green">554</FONT>            ArchivaRepositoryMetadata projectMetadata = getMetadata( projectMetadataFile );<a name="line.554"></a>
<FONT color="green">555</FONT>    <a name="line.555"></a>
<FONT color="green">556</FONT>            if ( projectMetadataFile.exists() )<a name="line.556"></a>
<FONT color="green">557</FONT>            {<a name="line.557"></a>
<FONT color="green">558</FONT>                availableVersions = projectMetadata.getAvailableVersions();<a name="line.558"></a>
<FONT color="green">559</FONT>    <a name="line.559"></a>
<FONT color="green">560</FONT>                Collections.sort( availableVersions, VersionComparator.getInstance() );<a name="line.560"></a>
<FONT color="green">561</FONT>    <a name="line.561"></a>
<FONT color="green">562</FONT>                if ( !availableVersions.contains( artifactTransferRequest.getVersion() ) )<a name="line.562"></a>
<FONT color="green">563</FONT>                {<a name="line.563"></a>
<FONT color="green">564</FONT>                    availableVersions.add( artifactTransferRequest.getVersion() );<a name="line.564"></a>
<FONT color="green">565</FONT>                }<a name="line.565"></a>
<FONT color="green">566</FONT>    <a name="line.566"></a>
<FONT color="green">567</FONT>                latestVersion = availableVersions.get( availableVersions.size() - 1 );<a name="line.567"></a>
<FONT color="green">568</FONT>            }<a name="line.568"></a>
<FONT color="green">569</FONT>            else<a name="line.569"></a>
<FONT color="green">570</FONT>            {<a name="line.570"></a>
<FONT color="green">571</FONT>                availableVersions.add( artifactTransferRequest.getVersion() );<a name="line.571"></a>
<FONT color="green">572</FONT>    <a name="line.572"></a>
<FONT color="green">573</FONT>                projectMetadata.setGroupId( artifactTransferRequest.getGroupId() );<a name="line.573"></a>
<FONT color="green">574</FONT>                projectMetadata.setArtifactId( artifactTransferRequest.getArtifactId() );<a name="line.574"></a>
<FONT color="green">575</FONT>            }<a name="line.575"></a>
<FONT color="green">576</FONT>    <a name="line.576"></a>
<FONT color="green">577</FONT>            if ( projectMetadata.getGroupId() == null )<a name="line.577"></a>
<FONT color="green">578</FONT>            {<a name="line.578"></a>
<FONT color="green">579</FONT>                projectMetadata.setGroupId( artifactTransferRequest.getGroupId() );<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>            if ( projectMetadata.getArtifactId() == null )<a name="line.582"></a>
<FONT color="green">583</FONT>            {<a name="line.583"></a>
<FONT color="green">584</FONT>                projectMetadata.setArtifactId( artifactTransferRequest.getArtifactId() );<a name="line.584"></a>
<FONT color="green">585</FONT>            }<a name="line.585"></a>
<FONT color="green">586</FONT>    <a name="line.586"></a>
<FONT color="green">587</FONT>            projectMetadata.setLatestVersion( latestVersion );<a name="line.587"></a>
<FONT color="green">588</FONT>            projectMetadata.setLastUpdatedTimestamp( lastUpdatedTimestamp );<a name="line.588"></a>
<FONT color="green">589</FONT>            projectMetadata.setAvailableVersions( availableVersions );<a name="line.589"></a>
<FONT color="green">590</FONT>    <a name="line.590"></a>
<FONT color="green">591</FONT>            if ( !VersionUtil.isSnapshot( artifactTransferRequest.getVersion() ) )<a name="line.591"></a>
<FONT color="green">592</FONT>            {<a name="line.592"></a>
<FONT color="green">593</FONT>                projectMetadata.setReleasedVersion( latestVersion );<a name="line.593"></a>
<FONT color="green">594</FONT>            }<a name="line.594"></a>
<FONT color="green">595</FONT>    <a name="line.595"></a>
<FONT color="green">596</FONT>            RepositoryMetadataWriter.write( projectMetadata, projectMetadataFile );<a name="line.596"></a>
<FONT color="green">597</FONT>    <a name="line.597"></a>
<FONT color="green">598</FONT>            if ( fixChecksums )<a name="line.598"></a>
<FONT color="green">599</FONT>            {<a name="line.599"></a>
<FONT color="green">600</FONT>                fixChecksums( projectMetadataFile );<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>    <a name="line.603"></a>
<FONT color="green">604</FONT>        public Boolean removeProjectVersion( String repositoryId, String namespace, String projectId, String version )<a name="line.604"></a>
<FONT color="green">605</FONT>            throws ArchivaRestServiceException<a name="line.605"></a>
<FONT color="green">606</FONT>        {<a name="line.606"></a>
<FONT color="green">607</FONT>            // if not a generic we can use the standard way to delete artifact<a name="line.607"></a>
<FONT color="green">608</FONT>            if ( !VersionUtil.isGenericSnapshot( version ) )<a name="line.608"></a>
<FONT color="green">609</FONT>            {<a name="line.609"></a>
<FONT color="green">610</FONT>                Artifact artifact = new Artifact( namespace, projectId, version );<a name="line.610"></a>
<FONT color="green">611</FONT>                return deleteArtifact( artifact );<a name="line.611"></a>
<FONT color="green">612</FONT>            }<a name="line.612"></a>
<FONT color="green">613</FONT>    <a name="line.613"></a>
<FONT color="green">614</FONT>            if ( StringUtils.isEmpty( repositoryId ) )<a name="line.614"></a>
<FONT color="green">615</FONT>            {<a name="line.615"></a>
<FONT color="green">616</FONT>                throw new ArchivaRestServiceException( "repositoryId cannot be null", 400, null );<a name="line.616"></a>
<FONT color="green">617</FONT>            }<a name="line.617"></a>
<FONT color="green">618</FONT>    <a name="line.618"></a>
<FONT color="green">619</FONT>            if ( !isAuthorizedToDeleteArtifacts( repositoryId ) )<a name="line.619"></a>
<FONT color="green">620</FONT>            {<a name="line.620"></a>
<FONT color="green">621</FONT>                throw new ArchivaRestServiceException( "not authorized to delete artifacts", 403, null );<a name="line.621"></a>
<FONT color="green">622</FONT>            }<a name="line.622"></a>
<FONT color="green">623</FONT>    <a name="line.623"></a>
<FONT color="green">624</FONT>            if ( StringUtils.isEmpty( namespace ) )<a name="line.624"></a>
<FONT color="green">625</FONT>            {<a name="line.625"></a>
<FONT color="green">626</FONT>                throw new ArchivaRestServiceException( "groupId cannot be null", 400, null );<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>            if ( StringUtils.isEmpty( projectId ) )<a name="line.629"></a>
<FONT color="green">630</FONT>            {<a name="line.630"></a>
<FONT color="green">631</FONT>                throw new ArchivaRestServiceException( "artifactId cannot be null", 400, null );<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>            if ( StringUtils.isEmpty( version ) )<a name="line.634"></a>
<FONT color="green">635</FONT>            {<a name="line.635"></a>
<FONT color="green">636</FONT>                throw new ArchivaRestServiceException( "version cannot be null", 400, null );<a name="line.636"></a>
<FONT color="green">637</FONT>            }<a name="line.637"></a>
<FONT color="green">638</FONT>    <a name="line.638"></a>
<FONT color="green">639</FONT>            RepositorySession repositorySession = repositorySessionFactory.createSession();<a name="line.639"></a>
<FONT color="green">640</FONT>    <a name="line.640"></a>
<FONT color="green">641</FONT>            try<a name="line.641"></a>
<FONT color="green">642</FONT>            {<a name="line.642"></a>
<FONT color="green">643</FONT>                ManagedRepositoryContent repository = repositoryFactory.getManagedRepositoryContent( repositoryId );<a name="line.643"></a>
<FONT color="green">644</FONT>    <a name="line.644"></a>
<FONT color="green">645</FONT>                VersionedReference ref = new VersionedReference();<a name="line.645"></a>
<FONT color="green">646</FONT>                ref.setArtifactId( projectId );<a name="line.646"></a>
<FONT color="green">647</FONT>                ref.setGroupId( namespace );<a name="line.647"></a>
<FONT color="green">648</FONT>                ref.setVersion( version );<a name="line.648"></a>
<FONT color="green">649</FONT>    <a name="line.649"></a>
<FONT color="green">650</FONT>                repository.deleteVersion( ref );<a name="line.650"></a>
<FONT color="green">651</FONT>    <a name="line.651"></a>
<FONT color="green">652</FONT>                /*<a name="line.652"></a>
<FONT color="green">653</FONT>                ProjectReference projectReference = new ProjectReference();<a name="line.653"></a>
<FONT color="green">654</FONT>                projectReference.setGroupId( namespace );<a name="line.654"></a>
<FONT color="green">655</FONT>                projectReference.setArtifactId( projectId );<a name="line.655"></a>
<FONT color="green">656</FONT>    <a name="line.656"></a>
<FONT color="green">657</FONT>                repository.getVersions(  )<a name="line.657"></a>
<FONT color="green">658</FONT>                */<a name="line.658"></a>
<FONT color="green">659</FONT>    <a name="line.659"></a>
<FONT color="green">660</FONT>                ArtifactReference artifactReference = new ArtifactReference();<a name="line.660"></a>
<FONT color="green">661</FONT>                artifactReference.setGroupId( namespace );<a name="line.661"></a>
<FONT color="green">662</FONT>                artifactReference.setArtifactId( projectId );<a name="line.662"></a>
<FONT color="green">663</FONT>                artifactReference.setVersion( version );<a name="line.663"></a>
<FONT color="green">664</FONT>    <a name="line.664"></a>
<FONT color="green">665</FONT>                MetadataRepository metadataRepository = repositorySession.getRepository();<a name="line.665"></a>
<FONT color="green">666</FONT>    <a name="line.666"></a>
<FONT color="green">667</FONT>                Set&lt;ArtifactReference&gt; related = repository.getRelatedArtifacts( artifactReference );<a name="line.667"></a>
<FONT color="green">668</FONT>                log.debug( "related: {}", related );<a name="line.668"></a>
<FONT color="green">669</FONT>                for ( ArtifactReference artifactRef : related )<a name="line.669"></a>
<FONT color="green">670</FONT>                {<a name="line.670"></a>
<FONT color="green">671</FONT>                    repository.deleteArtifact( artifactRef );<a name="line.671"></a>
<FONT color="green">672</FONT>                }<a name="line.672"></a>
<FONT color="green">673</FONT>    <a name="line.673"></a>
<FONT color="green">674</FONT>                Collection&lt;ArtifactMetadata&gt; artifacts =<a name="line.674"></a>
<FONT color="green">675</FONT>                    metadataRepository.getArtifacts( repositoryId, namespace, projectId, version );<a name="line.675"></a>
<FONT color="green">676</FONT>    <a name="line.676"></a>
<FONT color="green">677</FONT>                for ( ArtifactMetadata artifactMetadata : artifacts )<a name="line.677"></a>
<FONT color="green">678</FONT>                {<a name="line.678"></a>
<FONT color="green">679</FONT>                    metadataRepository.removeArtifact( artifactMetadata, version );<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>                metadataRepository.removeProjectVersion( repositoryId, namespace, projectId, version );<a name="line.682"></a>
<FONT color="green">683</FONT>            }<a name="line.683"></a>
<FONT color="green">684</FONT>            catch ( MetadataRepositoryException e )<a name="line.684"></a>
<FONT color="green">685</FONT>            {<a name="line.685"></a>
<FONT color="green">686</FONT>                throw new ArchivaRestServiceException( "Repository exception: " + e.getMessage(), 500, e );<a name="line.686"></a>
<FONT color="green">687</FONT>            }<a name="line.687"></a>
<FONT color="green">688</FONT>            catch ( MetadataResolutionException e )<a name="line.688"></a>
<FONT color="green">689</FONT>            {<a name="line.689"></a>
<FONT color="green">690</FONT>                throw new ArchivaRestServiceException( "Repository exception: " + e.getMessage(), 500, e );<a name="line.690"></a>
<FONT color="green">691</FONT>            }<a name="line.691"></a>
<FONT color="green">692</FONT>            catch ( RepositoryException e )<a name="line.692"></a>
<FONT color="green">693</FONT>            {<a name="line.693"></a>
<FONT color="green">694</FONT>                throw new ArchivaRestServiceException( "Repository exception: " + e.getMessage(), 500, e );<a name="line.694"></a>
<FONT color="green">695</FONT>            }<a name="line.695"></a>
<FONT color="green">696</FONT>            finally<a name="line.696"></a>
<FONT color="green">697</FONT>            {<a name="line.697"></a>
<FONT color="green">698</FONT>    <a name="line.698"></a>
<FONT color="green">699</FONT>                repositorySession.save();<a name="line.699"></a>
<FONT color="green">700</FONT>    <a name="line.700"></a>
<FONT color="green">701</FONT>                repositorySession.close();<a name="line.701"></a>
<FONT color="green">702</FONT>            }<a name="line.702"></a>
<FONT color="green">703</FONT>    <a name="line.703"></a>
<FONT color="green">704</FONT>            return Boolean.TRUE;<a name="line.704"></a>
<FONT color="green">705</FONT>        }<a name="line.705"></a>
<FONT color="green">706</FONT>    <a name="line.706"></a>
<FONT color="green">707</FONT>        public Boolean deleteArtifact( Artifact artifact )<a name="line.707"></a>
<FONT color="green">708</FONT>            throws ArchivaRestServiceException<a name="line.708"></a>
<FONT color="green">709</FONT>        {<a name="line.709"></a>
<FONT color="green">710</FONT>    <a name="line.710"></a>
<FONT color="green">711</FONT>            String repositoryId = artifact.getContext();<a name="line.711"></a>
<FONT color="green">712</FONT>            if ( StringUtils.isEmpty( repositoryId ) )<a name="line.712"></a>
<FONT color="green">713</FONT>            {<a name="line.713"></a>
<FONT color="green">714</FONT>                throw new ArchivaRestServiceException( "repositoryId cannot be null", 400, null );<a name="line.714"></a>
<FONT color="green">715</FONT>            }<a name="line.715"></a>
<FONT color="green">716</FONT>    <a name="line.716"></a>
<FONT color="green">717</FONT>            if ( !isAuthorizedToDeleteArtifacts( repositoryId ) )<a name="line.717"></a>
<FONT color="green">718</FONT>            {<a name="line.718"></a>
<FONT color="green">719</FONT>                throw new ArchivaRestServiceException( "not authorized to delete artifacts", 403, null );<a name="line.719"></a>
<FONT color="green">720</FONT>            }<a name="line.720"></a>
<FONT color="green">721</FONT>    <a name="line.721"></a>
<FONT color="green">722</FONT>            if ( artifact == null )<a name="line.722"></a>
<FONT color="green">723</FONT>            {<a name="line.723"></a>
<FONT color="green">724</FONT>                throw new ArchivaRestServiceException( "artifact cannot be null", 400, null );<a name="line.724"></a>
<FONT color="green">725</FONT>            }<a name="line.725"></a>
<FONT color="green">726</FONT>    <a name="line.726"></a>
<FONT color="green">727</FONT>            if ( StringUtils.isEmpty( artifact.getGroupId() ) )<a name="line.727"></a>
<FONT color="green">728</FONT>            {<a name="line.728"></a>
<FONT color="green">729</FONT>                throw new ArchivaRestServiceException( "artifact.groupId cannot be null", 400, null );<a name="line.729"></a>
<FONT color="green">730</FONT>            }<a name="line.730"></a>
<FONT color="green">731</FONT>    <a name="line.731"></a>
<FONT color="green">732</FONT>            if ( StringUtils.isEmpty( artifact.getArtifactId() ) )<a name="line.732"></a>
<FONT color="green">733</FONT>            {<a name="line.733"></a>
<FONT color="green">734</FONT>                throw new ArchivaRestServiceException( "artifact.artifactId cannot be null", 400, null );<a name="line.734"></a>
<FONT color="green">735</FONT>            }<a name="line.735"></a>
<FONT color="green">736</FONT>    <a name="line.736"></a>
<FONT color="green">737</FONT>            // TODO more control on artifact fields<a name="line.737"></a>
<FONT color="green">738</FONT>    <a name="line.738"></a>
<FONT color="green">739</FONT>            boolean snapshotVersion =<a name="line.739"></a>
<FONT color="green">740</FONT>                VersionUtil.isSnapshot( artifact.getVersion() ) | VersionUtil.isGenericSnapshot( artifact.getVersion() );<a name="line.740"></a>
<FONT color="green">741</FONT>    <a name="line.741"></a>
<FONT color="green">742</FONT>            RepositorySession repositorySession = repositorySessionFactory.createSession();<a name="line.742"></a>
<FONT color="green">743</FONT>            try<a name="line.743"></a>
<FONT color="green">744</FONT>            {<a name="line.744"></a>
<FONT color="green">745</FONT>                Date lastUpdatedTimestamp = Calendar.getInstance().getTime();<a name="line.745"></a>
<FONT color="green">746</FONT>    <a name="line.746"></a>
<FONT color="green">747</FONT>                TimeZone timezone = TimeZone.getTimeZone( "UTC" );<a name="line.747"></a>
<FONT color="green">748</FONT>                DateFormat fmt = new SimpleDateFormat( "yyyyMMdd.HHmmss" );<a name="line.748"></a>
<FONT color="green">749</FONT>                fmt.setTimeZone( timezone );<a name="line.749"></a>
<FONT color="green">750</FONT>                ManagedRepository repoConfig = managedRepositoryAdmin.getManagedRepository( repositoryId );<a name="line.750"></a>
<FONT color="green">751</FONT>    <a name="line.751"></a>
<FONT color="green">752</FONT>                VersionedReference ref = new VersionedReference();<a name="line.752"></a>
<FONT color="green">753</FONT>                ref.setArtifactId( artifact.getArtifactId() );<a name="line.753"></a>
<FONT color="green">754</FONT>                ref.setGroupId( artifact.getGroupId() );<a name="line.754"></a>
<FONT color="green">755</FONT>                ref.setVersion( artifact.getVersion() );<a name="line.755"></a>
<FONT color="green">756</FONT>    <a name="line.756"></a>
<FONT color="green">757</FONT>                ManagedRepositoryContent repository = repositoryFactory.getManagedRepositoryContent( repositoryId );<a name="line.757"></a>
<FONT color="green">758</FONT>    <a name="line.758"></a>
<FONT color="green">759</FONT>                ArtifactReference artifactReference = new ArtifactReference();<a name="line.759"></a>
<FONT color="green">760</FONT>                artifactReference.setArtifactId( artifact.getArtifactId() );<a name="line.760"></a>
<FONT color="green">761</FONT>                artifactReference.setGroupId( artifact.getGroupId() );<a name="line.761"></a>
<FONT color="green">762</FONT>                artifactReference.setVersion( artifact.getVersion() );<a name="line.762"></a>
<FONT color="green">763</FONT>                artifactReference.setClassifier( artifact.getClassifier() );<a name="line.763"></a>
<FONT color="green">764</FONT>                artifactReference.setType( artifact.getPackaging() );<a name="line.764"></a>
<FONT color="green">765</FONT>    <a name="line.765"></a>
<FONT color="green">766</FONT>                MetadataRepository metadataRepository = repositorySession.getRepository();<a name="line.766"></a>
<FONT color="green">767</FONT>    <a name="line.767"></a>
<FONT color="green">768</FONT>                String path = repository.toMetadataPath( ref );<a name="line.768"></a>
<FONT color="green">769</FONT>    <a name="line.769"></a>
<FONT color="green">770</FONT>                if ( StringUtils.isNotBlank( artifact.getClassifier() ) )<a name="line.770"></a>
<FONT color="green">771</FONT>                {<a name="line.771"></a>
<FONT color="green">772</FONT>                    if ( StringUtils.isBlank( artifact.getPackaging() ) )<a name="line.772"></a>
<FONT color="green">773</FONT>                    {<a name="line.773"></a>
<FONT color="green">774</FONT>                        throw new ArchivaRestServiceException( "You must configure a type/packaging when using classifier",<a name="line.774"></a>
<FONT color="green">775</FONT>                                                               400, null );<a name="line.775"></a>
<FONT color="green">776</FONT>                    }<a name="line.776"></a>
<FONT color="green">777</FONT>    <a name="line.777"></a>
<FONT color="green">778</FONT>                    repository.deleteArtifact( artifactReference );<a name="line.778"></a>
<FONT color="green">779</FONT>    <a name="line.779"></a>
<FONT color="green">780</FONT>                }<a name="line.780"></a>
<FONT color="green">781</FONT>                else<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>                    int index = path.lastIndexOf( '/' );<a name="line.784"></a>
<FONT color="green">785</FONT>                    path = path.substring( 0, index );<a name="line.785"></a>
<FONT color="green">786</FONT>                    File targetPath = new File( repoConfig.getLocation(), path );<a name="line.786"></a>
<FONT color="green">787</FONT>    <a name="line.787"></a>
<FONT color="green">788</FONT>                    if ( !targetPath.exists() )<a name="line.788"></a>
<FONT color="green">789</FONT>                    {<a name="line.789"></a>
<FONT color="green">790</FONT>                        //throw new ContentNotFoundException(<a name="line.790"></a>
<FONT color="green">791</FONT>                        //    artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + artifact.getVersion() );<a name="line.791"></a>
<FONT color="green">792</FONT>                        log.warn( "targetPath {} not found skip file deletion", targetPath );<a name="line.792"></a>
<FONT color="green">793</FONT>                    }<a name="line.793"></a>
<FONT color="green">794</FONT>    <a name="line.794"></a>
<FONT color="green">795</FONT>                    // TODO: this should be in the storage mechanism so that it is all tied together<a name="line.795"></a>
<FONT color="green">796</FONT>                    // delete from file system<a name="line.796"></a>
<FONT color="green">797</FONT>                    if ( !snapshotVersion )<a name="line.797"></a>
<FONT color="green">798</FONT>                    {<a name="line.798"></a>
<FONT color="green">799</FONT>                        repository.deleteVersion( ref );<a name="line.799"></a>
<FONT color="green">800</FONT>                    }<a name="line.800"></a>
<FONT color="green">801</FONT>                    else<a name="line.801"></a>
<FONT color="green">802</FONT>                    {<a name="line.802"></a>
<FONT color="green">803</FONT>                        Set&lt;ArtifactReference&gt; related = repository.getRelatedArtifacts( artifactReference );<a name="line.803"></a>
<FONT color="green">804</FONT>                        log.debug( "related: {}", related );<a name="line.804"></a>
<FONT color="green">805</FONT>                        for ( ArtifactReference artifactRef : related )<a name="line.805"></a>
<FONT color="green">806</FONT>                        {<a name="line.806"></a>
<FONT color="green">807</FONT>                            repository.deleteArtifact( artifactRef );<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>                    File metadataFile = getMetadata( targetPath.getAbsolutePath() );<a name="line.810"></a>
<FONT color="green">811</FONT>                    ArchivaRepositoryMetadata metadata = getMetadata( metadataFile );<a name="line.811"></a>
<FONT color="green">812</FONT>    <a name="line.812"></a>
<FONT color="green">813</FONT>                    updateMetadata( metadata, metadataFile, lastUpdatedTimestamp, artifact );<a name="line.813"></a>
<FONT color="green">814</FONT>                }<a name="line.814"></a>
<FONT color="green">815</FONT>                Collection&lt;ArtifactMetadata&gt; artifacts = Collections.emptyList();<a name="line.815"></a>
<FONT color="green">816</FONT>    <a name="line.816"></a>
<FONT color="green">817</FONT>                if ( snapshotVersion )<a name="line.817"></a>
<FONT color="green">818</FONT>                {<a name="line.818"></a>
<FONT color="green">819</FONT>                    String baseVersion = VersionUtil.getBaseVersion( artifact.getVersion() );<a name="line.819"></a>
<FONT color="green">820</FONT>                    artifacts =<a name="line.820"></a>
<FONT color="green">821</FONT>                        metadataRepository.getArtifacts( repositoryId, artifact.getGroupId(), artifact.getArtifactId(),<a name="line.821"></a>
<FONT color="green">822</FONT>                                                         baseVersion );<a name="line.822"></a>
<FONT color="green">823</FONT>                }<a name="line.823"></a>
<FONT color="green">824</FONT>                else<a name="line.824"></a>
<FONT color="green">825</FONT>                {<a name="line.825"></a>
<FONT color="green">826</FONT>                    artifacts =<a name="line.826"></a>
<FONT color="green">827</FONT>                        metadataRepository.getArtifacts( repositoryId, artifact.getGroupId(), artifact.getArtifactId(),<a name="line.827"></a>
<FONT color="green">828</FONT>                                                         artifact.getVersion() );<a name="line.828"></a>
<FONT color="green">829</FONT>                }<a name="line.829"></a>
<FONT color="green">830</FONT>    <a name="line.830"></a>
<FONT color="green">831</FONT>                log.debug( "artifacts: {}", artifacts );<a name="line.831"></a>
<FONT color="green">832</FONT>    <a name="line.832"></a>
<FONT color="green">833</FONT>                if ( artifacts.isEmpty() )<a name="line.833"></a>
<FONT color="green">834</FONT>                {<a name="line.834"></a>
<FONT color="green">835</FONT>                    if ( !snapshotVersion )<a name="line.835"></a>
<FONT color="green">836</FONT>                    {<a name="line.836"></a>
<FONT color="green">837</FONT>                        // verify metata repository doesn't contains anymore the version<a name="line.837"></a>
<FONT color="green">838</FONT>                        Collection&lt;String&gt; projectVersions =<a name="line.838"></a>
<FONT color="green">839</FONT>                            metadataRepository.getProjectVersions( repositoryId, artifact.getGroupId(),<a name="line.839"></a>
<FONT color="green">840</FONT>                                                                   artifact.getArtifactId() );<a name="line.840"></a>
<FONT color="green">841</FONT>    <a name="line.841"></a>
<FONT color="green">842</FONT>                        if ( projectVersions.contains( artifact.getVersion() ) )<a name="line.842"></a>
<FONT color="green">843</FONT>                        {<a name="line.843"></a>
<FONT color="green">844</FONT>                            log.warn( "artifact not found when deleted but version still here ! so force cleanup" );<a name="line.844"></a>
<FONT color="green">845</FONT>                            metadataRepository.removeProjectVersion( repositoryId, artifact.getGroupId(),<a name="line.845"></a>
<FONT color="green">846</FONT>                                                                     artifact.getArtifactId(), artifact.getVersion() );<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>                    }<a name="line.849"></a>
<FONT color="green">850</FONT>                }<a name="line.850"></a>
<FONT color="green">851</FONT>    <a name="line.851"></a>
<FONT color="green">852</FONT>                for ( ArtifactMetadata artifactMetadata : artifacts )<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>                    // TODO: mismatch between artifact (snapshot) version and project (base) version here<a name="line.855"></a>
<FONT color="green">856</FONT>                    if ( artifactMetadata.getVersion().equals( artifact.getVersion() ) )<a name="line.856"></a>
<FONT color="green">857</FONT>                    {<a name="line.857"></a>
<FONT color="green">858</FONT>                        if ( StringUtils.isNotBlank( artifact.getClassifier() ) )<a name="line.858"></a>
<FONT color="green">859</FONT>                        {<a name="line.859"></a>
<FONT color="green">860</FONT>                            if ( StringUtils.isBlank( artifact.getPackaging() ) )<a name="line.860"></a>
<FONT color="green">861</FONT>                            {<a name="line.861"></a>
<FONT color="green">862</FONT>                                throw new ArchivaRestServiceException(<a name="line.862"></a>
<FONT color="green">863</FONT>                                    "You must configure a type/packaging when using classifier", 400, null );<a name="line.863"></a>
<FONT color="green">864</FONT>                            }<a name="line.864"></a>
<FONT color="green">865</FONT>                            // cleanup facet which contains classifier information<a name="line.865"></a>
<FONT color="green">866</FONT>                            MavenArtifactFacet mavenArtifactFacet =<a name="line.866"></a>
<FONT color="green">867</FONT>                                (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );<a name="line.867"></a>
<FONT color="green">868</FONT>    <a name="line.868"></a>
<FONT color="green">869</FONT>                            if ( StringUtils.equals( artifact.getClassifier(), mavenArtifactFacet.getClassifier() ) )<a name="line.869"></a>
<FONT color="green">870</FONT>                            {<a name="line.870"></a>
<FONT color="green">871</FONT>                                artifactMetadata.removeFacet( MavenArtifactFacet.FACET_ID );<a name="line.871"></a>
<FONT color="green">872</FONT>                                String groupId = artifact.getGroupId(), artifactId = artifact.getArtifactId(), version =<a name="line.872"></a>
<FONT color="green">873</FONT>                                    artifact.getVersion();<a name="line.873"></a>
<FONT color="green">874</FONT>                                MavenArtifactFacet mavenArtifactFacetToCompare = new MavenArtifactFacet();<a name="line.874"></a>
<FONT color="green">875</FONT>                                mavenArtifactFacetToCompare.setClassifier( artifact.getClassifier() );<a name="line.875"></a>
<FONT color="green">876</FONT>                                metadataRepository.removeArtifact( repositoryId, groupId, artifactId, version,<a name="line.876"></a>
<FONT color="green">877</FONT>                                                                   mavenArtifactFacetToCompare );<a name="line.877"></a>
<FONT color="green">878</FONT>                                metadataRepository.save();<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>                        }<a name="line.881"></a>
<FONT color="green">882</FONT>                        else<a name="line.882"></a>
<FONT color="green">883</FONT>                        {<a name="line.883"></a>
<FONT color="green">884</FONT>                            if ( snapshotVersion )<a name="line.884"></a>
<FONT color="green">885</FONT>                            {<a name="line.885"></a>
<FONT color="green">886</FONT>                                metadataRepository.removeArtifact( artifactMetadata,<a name="line.886"></a>
<FONT color="green">887</FONT>                                                                   VersionUtil.getBaseVersion( artifact.getVersion() ) );<a name="line.887"></a>
<FONT color="green">888</FONT>                            }<a name="line.888"></a>
<FONT color="green">889</FONT>                            else<a name="line.889"></a>
<FONT color="green">890</FONT>                            {<a name="line.890"></a>
<FONT color="green">891</FONT>                                metadataRepository.removeArtifact( artifactMetadata.getRepositoryId(),<a name="line.891"></a>
<FONT color="green">892</FONT>                                                                   artifactMetadata.getNamespace(),<a name="line.892"></a>
<FONT color="green">893</FONT>                                                                   artifactMetadata.getProject(), artifact.getVersion(),<a name="line.893"></a>
<FONT color="green">894</FONT>                                                                   artifactMetadata.getId() );<a name="line.894"></a>
<FONT color="green">895</FONT>                            }<a name="line.895"></a>
<FONT color="green">896</FONT>                        }<a name="line.896"></a>
<FONT color="green">897</FONT>                        // TODO: move into the metadata repository proper - need to differentiate attachment of<a name="line.897"></a>
<FONT color="green">898</FONT>                        //       repository metadata to an artifact<a name="line.898"></a>
<FONT color="green">899</FONT>                        for ( RepositoryListener listener : listeners )<a name="line.899"></a>
<FONT color="green">900</FONT>                        {<a name="line.900"></a>
<FONT color="green">901</FONT>                            listener.deleteArtifact( metadataRepository, repository.getId(),<a name="line.901"></a>
<FONT color="green">902</FONT>                                                     artifactMetadata.getNamespace(), artifactMetadata.getProject(),<a name="line.902"></a>
<FONT color="green">903</FONT>                                                     artifactMetadata.getVersion(), artifactMetadata.getId() );<a name="line.903"></a>
<FONT color="green">904</FONT>                        }<a name="line.904"></a>
<FONT color="green">905</FONT>    <a name="line.905"></a>
<FONT color="green">906</FONT>                        triggerAuditEvent( repositoryId, path, AuditEvent.REMOVE_FILE );<a name="line.906"></a>
<FONT color="green">907</FONT>                    }<a name="line.907"></a>
<FONT color="green">908</FONT>                }<a name="line.908"></a>
<FONT color="green">909</FONT>            }<a name="line.909"></a>
<FONT color="green">910</FONT>            catch ( ContentNotFoundException e )<a name="line.910"></a>
<FONT color="green">911</FONT>            {<a name="line.911"></a>
<FONT color="green">912</FONT>                throw new ArchivaRestServiceException( "Artifact does not exist: " + e.getMessage(), 400, e );<a name="line.912"></a>
<FONT color="green">913</FONT>            }<a name="line.913"></a>
<FONT color="green">914</FONT>            catch ( RepositoryNotFoundException e )<a name="line.914"></a>
<FONT color="green">915</FONT>            {<a name="line.915"></a>
<FONT color="green">916</FONT>                throw new ArchivaRestServiceException( "Target repository cannot be found: " + e.getMessage(), 400, e );<a name="line.916"></a>
<FONT color="green">917</FONT>            }<a name="line.917"></a>
<FONT color="green">918</FONT>            catch ( RepositoryException e )<a name="line.918"></a>
<FONT color="green">919</FONT>            {<a name="line.919"></a>
<FONT color="green">920</FONT>                throw new ArchivaRestServiceException( "Repository exception: " + e.getMessage(), 500, e );<a name="line.920"></a>
<FONT color="green">921</FONT>            }<a name="line.921"></a>
<FONT color="green">922</FONT>            catch ( MetadataResolutionException e )<a name="line.922"></a>
<FONT color="green">923</FONT>            {<a name="line.923"></a>
<FONT color="green">924</FONT>                throw new ArchivaRestServiceException( "Repository exception: " + e.getMessage(), 500, e );<a name="line.924"></a>
<FONT color="green">925</FONT>            }<a name="line.925"></a>
<FONT color="green">926</FONT>            catch ( MetadataRepositoryException e )<a name="line.926"></a>
<FONT color="green">927</FONT>            {<a name="line.927"></a>
<FONT color="green">928</FONT>                throw new ArchivaRestServiceException( "Repository exception: " + e.getMessage(), 500, e );<a name="line.928"></a>
<FONT color="green">929</FONT>            }<a name="line.929"></a>
<FONT color="green">930</FONT>            catch ( RepositoryAdminException e )<a name="line.930"></a>
<FONT color="green">931</FONT>            {<a name="line.931"></a>
<FONT color="green">932</FONT>                throw new ArchivaRestServiceException( "RepositoryAdmin exception: " + e.getMessage(), 500, e );<a name="line.932"></a>
<FONT color="green">933</FONT>            }<a name="line.933"></a>
<FONT color="green">934</FONT>            finally<a name="line.934"></a>
<FONT color="green">935</FONT>            {<a name="line.935"></a>
<FONT color="green">936</FONT>    <a name="line.936"></a>
<FONT color="green">937</FONT>                repositorySession.save();<a name="line.937"></a>
<FONT color="green">938</FONT>    <a name="line.938"></a>
<FONT color="green">939</FONT>                repositorySession.close();<a name="line.939"></a>
<FONT color="green">940</FONT>            }<a name="line.940"></a>
<FONT color="green">941</FONT>            return Boolean.TRUE;<a name="line.941"></a>
<FONT color="green">942</FONT>        }<a name="line.942"></a>
<FONT color="green">943</FONT>    <a name="line.943"></a>
<FONT color="green">944</FONT>        public Boolean deleteGroupId( String groupId, String repositoryId )<a name="line.944"></a>
<FONT color="green">945</FONT>            throws ArchivaRestServiceException<a name="line.945"></a>
<FONT color="green">946</FONT>        {<a name="line.946"></a>
<FONT color="green">947</FONT>            if ( StringUtils.isEmpty( repositoryId ) )<a name="line.947"></a>
<FONT color="green">948</FONT>            {<a name="line.948"></a>
<FONT color="green">949</FONT>                throw new ArchivaRestServiceException( "repositoryId cannot be null", 400, null );<a name="line.949"></a>
<FONT color="green">950</FONT>            }<a name="line.950"></a>
<FONT color="green">951</FONT>    <a name="line.951"></a>
<FONT color="green">952</FONT>            if ( !isAuthorizedToDeleteArtifacts( repositoryId ) )<a name="line.952"></a>
<FONT color="green">953</FONT>            {<a name="line.953"></a>
<FONT color="green">954</FONT>                throw new ArchivaRestServiceException( "not authorized to delete artifacts", 403, null );<a name="line.954"></a>
<FONT color="green">955</FONT>            }<a name="line.955"></a>
<FONT color="green">956</FONT>    <a name="line.956"></a>
<FONT color="green">957</FONT>            if ( StringUtils.isEmpty( groupId ) )<a name="line.957"></a>
<FONT color="green">958</FONT>            {<a name="line.958"></a>
<FONT color="green">959</FONT>                throw new ArchivaRestServiceException( "groupId cannot be null", 400, null );<a name="line.959"></a>
<FONT color="green">960</FONT>            }<a name="line.960"></a>
<FONT color="green">961</FONT>    <a name="line.961"></a>
<FONT color="green">962</FONT>            RepositorySession repositorySession = repositorySessionFactory.createSession();<a name="line.962"></a>
<FONT color="green">963</FONT>    <a name="line.963"></a>
<FONT color="green">964</FONT>            try<a name="line.964"></a>
<FONT color="green">965</FONT>            {<a name="line.965"></a>
<FONT color="green">966</FONT>                ManagedRepositoryContent repository = repositoryFactory.getManagedRepositoryContent( repositoryId );<a name="line.966"></a>
<FONT color="green">967</FONT>    <a name="line.967"></a>
<FONT color="green">968</FONT>                repository.deleteGroupId( groupId );<a name="line.968"></a>
<FONT color="green">969</FONT>    <a name="line.969"></a>
<FONT color="green">970</FONT>                MetadataRepository metadataRepository = repositorySession.getRepository();<a name="line.970"></a>
<FONT color="green">971</FONT>    <a name="line.971"></a>
<FONT color="green">972</FONT>                metadataRepository.removeNamespace( repositoryId, groupId );<a name="line.972"></a>
<FONT color="green">973</FONT>    <a name="line.973"></a>
<FONT color="green">974</FONT>                metadataRepository.save();<a name="line.974"></a>
<FONT color="green">975</FONT>            }<a name="line.975"></a>
<FONT color="green">976</FONT>            catch ( MetadataRepositoryException e )<a name="line.976"></a>
<FONT color="green">977</FONT>            {<a name="line.977"></a>
<FONT color="green">978</FONT>                log.error( e.getMessage(), e );<a name="line.978"></a>
<FONT color="green">979</FONT>                throw new ArchivaRestServiceException( "Repository exception: " + e.getMessage(), 500, e );<a name="line.979"></a>
<FONT color="green">980</FONT>            }<a name="line.980"></a>
<FONT color="green">981</FONT>            catch ( RepositoryException e )<a name="line.981"></a>
<FONT color="green">982</FONT>            {<a name="line.982"></a>
<FONT color="green">983</FONT>                log.error( e.getMessage(), e );<a name="line.983"></a>
<FONT color="green">984</FONT>                throw new ArchivaRestServiceException( "Repository exception: " + e.getMessage(), 500, e );<a name="line.984"></a>
<FONT color="green">985</FONT>            }<a name="line.985"></a>
<FONT color="green">986</FONT>            finally<a name="line.986"></a>
<FONT color="green">987</FONT>            {<a name="line.987"></a>
<FONT color="green">988</FONT>    <a name="line.988"></a>
<FONT color="green">989</FONT>                repositorySession.close();<a name="line.989"></a>
<FONT color="green">990</FONT>            }<a name="line.990"></a>
<FONT color="green">991</FONT>            return true;<a name="line.991"></a>
<FONT color="green">992</FONT>        }<a name="line.992"></a>
<FONT color="green">993</FONT>    <a name="line.993"></a>
<FONT color="green">994</FONT>        public Boolean deleteProject( String groupId, String projectId, String repositoryId )<a name="line.994"></a>
<FONT color="green">995</FONT>            throws ArchivaRestServiceException<a name="line.995"></a>
<FONT color="green">996</FONT>        {<a name="line.996"></a>
<FONT color="green">997</FONT>            if ( StringUtils.isEmpty( repositoryId ) )<a name="line.997"></a>
<FONT color="green">998</FONT>            {<a name="line.998"></a>
<FONT color="green">999</FONT>                throw new ArchivaRestServiceException( "repositoryId cannot be null", 400, null );<a name="line.999"></a>
<FONT color="green">1000</FONT>            }<a name="line.1000"></a>
<FONT color="green">1001</FONT>    <a name="line.1001"></a>
<FONT color="green">1002</FONT>            if ( !isAuthorizedToDeleteArtifacts( repositoryId ) )<a name="line.1002"></a>
<FONT color="green">1003</FONT>            {<a name="line.1003"></a>
<FONT color="green">1004</FONT>                throw new ArchivaRestServiceException( "not authorized to delete artifacts", 403, null );<a name="line.1004"></a>
<FONT color="green">1005</FONT>            }<a name="line.1005"></a>
<FONT color="green">1006</FONT>    <a name="line.1006"></a>
<FONT color="green">1007</FONT>            if ( StringUtils.isEmpty( groupId ) )<a name="line.1007"></a>
<FONT color="green">1008</FONT>            {<a name="line.1008"></a>
<FONT color="green">1009</FONT>                throw new ArchivaRestServiceException( "groupId cannot be null", 400, null );<a name="line.1009"></a>
<FONT color="green">1010</FONT>            }<a name="line.1010"></a>
<FONT color="green">1011</FONT>    <a name="line.1011"></a>
<FONT color="green">1012</FONT>            if ( StringUtils.isEmpty( projectId ) )<a name="line.1012"></a>
<FONT color="green">1013</FONT>            {<a name="line.1013"></a>
<FONT color="green">1014</FONT>                throw new ArchivaRestServiceException( "artifactId cannot be null", 400, null );<a name="line.1014"></a>
<FONT color="green">1015</FONT>            }<a name="line.1015"></a>
<FONT color="green">1016</FONT>    <a name="line.1016"></a>
<FONT color="green">1017</FONT>            RepositorySession repositorySession = repositorySessionFactory.createSession();<a name="line.1017"></a>
<FONT color="green">1018</FONT>    <a name="line.1018"></a>
<FONT color="green">1019</FONT>            try<a name="line.1019"></a>
<FONT color="green">1020</FONT>            {<a name="line.1020"></a>
<FONT color="green">1021</FONT>                ManagedRepositoryContent repository = repositoryFactory.getManagedRepositoryContent( repositoryId );<a name="line.1021"></a>
<FONT color="green">1022</FONT>    <a name="line.1022"></a>
<FONT color="green">1023</FONT>                repository.deleteProject( groupId, projectId );<a name="line.1023"></a>
<FONT color="green">1024</FONT>            }<a name="line.1024"></a>
<FONT color="green">1025</FONT>            catch ( ContentNotFoundException e )<a name="line.1025"></a>
<FONT color="green">1026</FONT>            {<a name="line.1026"></a>
<FONT color="green">1027</FONT>                log.warn( "skip ContentNotFoundException: {}", e.getMessage() );<a name="line.1027"></a>
<FONT color="green">1028</FONT>            }<a name="line.1028"></a>
<FONT color="green">1029</FONT>            catch ( RepositoryException e )<a name="line.1029"></a>
<FONT color="green">1030</FONT>            {<a name="line.1030"></a>
<FONT color="green">1031</FONT>                log.error( e.getMessage(), e );<a name="line.1031"></a>
<FONT color="green">1032</FONT>                throw new ArchivaRestServiceException( "Repository exception: " + e.getMessage(), 500, e );<a name="line.1032"></a>
<FONT color="green">1033</FONT>            }<a name="line.1033"></a>
<FONT color="green">1034</FONT>    <a name="line.1034"></a>
<FONT color="green">1035</FONT>            try<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>                MetadataRepository metadataRepository = repositorySession.getRepository();<a name="line.1038"></a>
<FONT color="green">1039</FONT>    <a name="line.1039"></a>
<FONT color="green">1040</FONT>                metadataRepository.removeProject( repositoryId, groupId, projectId );<a name="line.1040"></a>
<FONT color="green">1041</FONT>    <a name="line.1041"></a>
<FONT color="green">1042</FONT>                metadataRepository.save();<a name="line.1042"></a>
<FONT color="green">1043</FONT>            }<a name="line.1043"></a>
<FONT color="green">1044</FONT>            catch ( MetadataRepositoryException e )<a name="line.1044"></a>
<FONT color="green">1045</FONT>            {<a name="line.1045"></a>
<FONT color="green">1046</FONT>                log.error( e.getMessage(), e );<a name="line.1046"></a>
<FONT color="green">1047</FONT>                throw new ArchivaRestServiceException( "Repository exception: " + e.getMessage(), 500, e );<a name="line.1047"></a>
<FONT color="green">1048</FONT>            }<a name="line.1048"></a>
<FONT color="green">1049</FONT>            finally<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>                repositorySession.close();<a name="line.1052"></a>
<FONT color="green">1053</FONT>            }<a name="line.1053"></a>
<FONT color="green">1054</FONT>            return true;<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>    <a name="line.1057"></a>
<FONT color="green">1058</FONT>        public Boolean isAuthorizedToDeleteArtifacts( String repoId )<a name="line.1058"></a>
<FONT color="green">1059</FONT>            throws ArchivaRestServiceException<a name="line.1059"></a>
<FONT color="green">1060</FONT>        {<a name="line.1060"></a>
<FONT color="green">1061</FONT>            String userName =<a name="line.1061"></a>
<FONT color="green">1062</FONT>                getAuditInformation().getUser() == null ? "guest" : getAuditInformation().getUser().getUsername();<a name="line.1062"></a>
<FONT color="green">1063</FONT>    <a name="line.1063"></a>
<FONT color="green">1064</FONT>            try<a name="line.1064"></a>
<FONT color="green">1065</FONT>            {<a name="line.1065"></a>
<FONT color="green">1066</FONT>                return userRepositories.isAuthorizedToDeleteArtifacts( userName, repoId );<a name="line.1066"></a>
<FONT color="green">1067</FONT>            }<a name="line.1067"></a>
<FONT color="green">1068</FONT>            catch ( ArchivaSecurityException e )<a name="line.1068"></a>
<FONT color="green">1069</FONT>            {<a name="line.1069"></a>
<FONT color="green">1070</FONT>                throw new ArchivaRestServiceException( e.getMessage(),<a name="line.1070"></a>
<FONT color="green">1071</FONT>                                                       Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e );<a name="line.1071"></a>
<FONT color="green">1072</FONT>            }<a name="line.1072"></a>
<FONT color="green">1073</FONT>        }<a name="line.1073"></a>
<FONT color="green">1074</FONT>    <a name="line.1074"></a>
<FONT color="green">1075</FONT>        public RepositoryScanStatistics scanRepositoryDirectoriesNow( String repositoryId )<a name="line.1075"></a>
<FONT color="green">1076</FONT>            throws ArchivaRestServiceException<a name="line.1076"></a>
<FONT color="green">1077</FONT>        {<a name="line.1077"></a>
<FONT color="green">1078</FONT>            long sinceWhen = RepositoryScanner.FRESH_SCAN;<a name="line.1078"></a>
<FONT color="green">1079</FONT>            try<a name="line.1079"></a>
<FONT color="green">1080</FONT>            {<a name="line.1080"></a>
<FONT color="green">1081</FONT>                return repoScanner.scan( getManagedRepositoryAdmin().getManagedRepository( repositoryId ), sinceWhen );<a name="line.1081"></a>
<FONT color="green">1082</FONT>            }<a name="line.1082"></a>
<FONT color="green">1083</FONT>            catch ( RepositoryScannerException e )<a name="line.1083"></a>
<FONT color="green">1084</FONT>            {<a name="line.1084"></a>
<FONT color="green">1085</FONT>                log.error( e.getMessage(), e );<a name="line.1085"></a>
<FONT color="green">1086</FONT>                throw new ArchivaRestServiceException( "RepositoryScannerException exception: " + e.getMessage(), 500, e );<a name="line.1086"></a>
<FONT color="green">1087</FONT>            }<a name="line.1087"></a>
<FONT color="green">1088</FONT>            catch ( RepositoryAdminException e )<a name="line.1088"></a>
<FONT color="green">1089</FONT>            {<a name="line.1089"></a>
<FONT color="green">1090</FONT>                log.error( e.getMessage(), e );<a name="line.1090"></a>
<FONT color="green">1091</FONT>                throw new ArchivaRestServiceException( "RepositoryScannerException exception: " + e.getMessage(), 500, e );<a name="line.1091"></a>
<FONT color="green">1092</FONT>            }<a name="line.1092"></a>
<FONT color="green">1093</FONT>        }<a name="line.1093"></a>
<FONT color="green">1094</FONT>    <a name="line.1094"></a>
<FONT color="green">1095</FONT>        /**<a name="line.1095"></a>
<FONT color="green">1096</FONT>         * Update artifact level metadata. Creates one if metadata does not exist after artifact deletion.<a name="line.1096"></a>
<FONT color="green">1097</FONT>         *<a name="line.1097"></a>
<FONT color="green">1098</FONT>         * @param metadata<a name="line.1098"></a>
<FONT color="green">1099</FONT>         */<a name="line.1099"></a>
<FONT color="green">1100</FONT>        private void updateMetadata( ArchivaRepositoryMetadata metadata, File metadataFile, Date lastUpdatedTimestamp,<a name="line.1100"></a>
<FONT color="green">1101</FONT>                                     Artifact artifact )<a name="line.1101"></a>
<FONT color="green">1102</FONT>            throws RepositoryMetadataException<a name="line.1102"></a>
<FONT color="green">1103</FONT>        {<a name="line.1103"></a>
<FONT color="green">1104</FONT>            List&lt;String&gt; availableVersions = new ArrayList&lt;String&gt;();<a name="line.1104"></a>
<FONT color="green">1105</FONT>            String latestVersion = "";<a name="line.1105"></a>
<FONT color="green">1106</FONT>    <a name="line.1106"></a>
<FONT color="green">1107</FONT>            if ( metadataFile.exists() )<a name="line.1107"></a>
<FONT color="green">1108</FONT>            {<a name="line.1108"></a>
<FONT color="green">1109</FONT>                if ( metadata.getAvailableVersions() != null )<a name="line.1109"></a>
<FONT color="green">1110</FONT>                {<a name="line.1110"></a>
<FONT color="green">1111</FONT>                    availableVersions = metadata.getAvailableVersions();<a name="line.1111"></a>
<FONT color="green">1112</FONT>    <a name="line.1112"></a>
<FONT color="green">1113</FONT>                    if ( availableVersions.size() &gt; 0 )<a name="line.1113"></a>
<FONT color="green">1114</FONT>                    {<a name="line.1114"></a>
<FONT color="green">1115</FONT>                        Collections.sort( availableVersions, VersionComparator.getInstance() );<a name="line.1115"></a>
<FONT color="green">1116</FONT>    <a name="line.1116"></a>
<FONT color="green">1117</FONT>                        if ( availableVersions.contains( artifact.getVersion() ) )<a name="line.1117"></a>
<FONT color="green">1118</FONT>                        {<a name="line.1118"></a>
<FONT color="green">1119</FONT>                            availableVersions.remove( availableVersions.indexOf( artifact.getVersion() ) );<a name="line.1119"></a>
<FONT color="green">1120</FONT>                        }<a name="line.1120"></a>
<FONT color="green">1121</FONT>                        if ( availableVersions.size() &gt; 0 )<a name="line.1121"></a>
<FONT color="green">1122</FONT>                        {<a name="line.1122"></a>
<FONT color="green">1123</FONT>                            latestVersion = availableVersions.get( availableVersions.size() - 1 );<a name="line.1123"></a>
<FONT color="green">1124</FONT>                        }<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>            }<a name="line.1127"></a>
<FONT color="green">1128</FONT>    <a name="line.1128"></a>
<FONT color="green">1129</FONT>            if ( metadata.getGroupId() == null )<a name="line.1129"></a>
<FONT color="green">1130</FONT>            {<a name="line.1130"></a>
<FONT color="green">1131</FONT>                metadata.setGroupId( artifact.getGroupId() );<a name="line.1131"></a>
<FONT color="green">1132</FONT>            }<a name="line.1132"></a>
<FONT color="green">1133</FONT>            if ( metadata.getArtifactId() == null )<a name="line.1133"></a>
<FONT color="green">1134</FONT>            {<a name="line.1134"></a>
<FONT color="green">1135</FONT>                metadata.setArtifactId( artifact.getArtifactId() );<a name="line.1135"></a>
<FONT color="green">1136</FONT>            }<a name="line.1136"></a>
<FONT color="green">1137</FONT>    <a name="line.1137"></a>
<FONT color="green">1138</FONT>            if ( !VersionUtil.isSnapshot( artifact.getVersion() ) )<a name="line.1138"></a>
<FONT color="green">1139</FONT>            {<a name="line.1139"></a>
<FONT color="green">1140</FONT>                if ( metadata.getReleasedVersion() != null &amp;&amp; metadata.getReleasedVersion().equals(<a name="line.1140"></a>
<FONT color="green">1141</FONT>                    artifact.getVersion() ) )<a name="line.1141"></a>
<FONT color="green">1142</FONT>                {<a name="line.1142"></a>
<FONT color="green">1143</FONT>                    metadata.setReleasedVersion( latestVersion );<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>    <a name="line.1146"></a>
<FONT color="green">1147</FONT>            metadata.setLatestVersion( latestVersion );<a name="line.1147"></a>
<FONT color="green">1148</FONT>            metadata.setLastUpdatedTimestamp( lastUpdatedTimestamp );<a name="line.1148"></a>
<FONT color="green">1149</FONT>            metadata.setAvailableVersions( availableVersions );<a name="line.1149"></a>
<FONT color="green">1150</FONT>    <a name="line.1150"></a>
<FONT color="green">1151</FONT>            RepositoryMetadataWriter.write( metadata, metadataFile );<a name="line.1151"></a>
<FONT color="green">1152</FONT>            ChecksummedFile checksum = new ChecksummedFile( metadataFile );<a name="line.1152"></a>
<FONT color="green">1153</FONT>            checksum.fixChecksums( algorithms );<a name="line.1153"></a>
<FONT color="green">1154</FONT>        }<a name="line.1154"></a>
<FONT color="green">1155</FONT>    <a name="line.1155"></a>
<FONT color="green">1156</FONT>        public ManagedRepositoryAdmin getManagedRepositoryAdmin()<a name="line.1156"></a>
<FONT color="green">1157</FONT>        {<a name="line.1157"></a>
<FONT color="green">1158</FONT>            return managedRepositoryAdmin;<a name="line.1158"></a>
<FONT color="green">1159</FONT>        }<a name="line.1159"></a>
<FONT color="green">1160</FONT>    <a name="line.1160"></a>
<FONT color="green">1161</FONT>        public void setManagedRepositoryAdmin( ManagedRepositoryAdmin managedRepositoryAdmin )<a name="line.1161"></a>
<FONT color="green">1162</FONT>        {<a name="line.1162"></a>
<FONT color="green">1163</FONT>            this.managedRepositoryAdmin = managedRepositoryAdmin;<a name="line.1163"></a>
<FONT color="green">1164</FONT>        }<a name="line.1164"></a>
<FONT color="green">1165</FONT>    <a name="line.1165"></a>
<FONT color="green">1166</FONT>        public RepositoryContentFactory getRepositoryFactory()<a name="line.1166"></a>
<FONT color="green">1167</FONT>        {<a name="line.1167"></a>
<FONT color="green">1168</FONT>            return repositoryFactory;<a name="line.1168"></a>
<FONT color="green">1169</FONT>        }<a name="line.1169"></a>
<FONT color="green">1170</FONT>    <a name="line.1170"></a>
<FONT color="green">1171</FONT>        public void setRepositoryFactory( RepositoryContentFactory repositoryFactory )<a name="line.1171"></a>
<FONT color="green">1172</FONT>        {<a name="line.1172"></a>
<FONT color="green">1173</FONT>            this.repositoryFactory = repositoryFactory;<a name="line.1173"></a>
<FONT color="green">1174</FONT>        }<a name="line.1174"></a>
<FONT color="green">1175</FONT>    <a name="line.1175"></a>
<FONT color="green">1176</FONT>        public RepositorySessionFactory getRepositorySessionFactory()<a name="line.1176"></a>
<FONT color="green">1177</FONT>        {<a name="line.1177"></a>
<FONT color="green">1178</FONT>            return repositorySessionFactory;<a name="line.1178"></a>
<FONT color="green">1179</FONT>        }<a name="line.1179"></a>
<FONT color="green">1180</FONT>    <a name="line.1180"></a>
<FONT color="green">1181</FONT>        public void setRepositorySessionFactory( RepositorySessionFactory repositorySessionFactory )<a name="line.1181"></a>
<FONT color="green">1182</FONT>        {<a name="line.1182"></a>
<FONT color="green">1183</FONT>            this.repositorySessionFactory = repositorySessionFactory;<a name="line.1183"></a>
<FONT color="green">1184</FONT>        }<a name="line.1184"></a>
<FONT color="green">1185</FONT>    <a name="line.1185"></a>
<FONT color="green">1186</FONT>        public List&lt;RepositoryListener&gt; getListeners()<a name="line.1186"></a>
<FONT color="green">1187</FONT>        {<a name="line.1187"></a>
<FONT color="green">1188</FONT>            return listeners;<a name="line.1188"></a>
<FONT color="green">1189</FONT>        }<a name="line.1189"></a>
<FONT color="green">1190</FONT>    <a name="line.1190"></a>
<FONT color="green">1191</FONT>        public void setListeners( List&lt;RepositoryListener&gt; listeners )<a name="line.1191"></a>
<FONT color="green">1192</FONT>        {<a name="line.1192"></a>
<FONT color="green">1193</FONT>            this.listeners = listeners;<a name="line.1193"></a>
<FONT color="green">1194</FONT>        }<a name="line.1194"></a>
<FONT color="green">1195</FONT>    <a name="line.1195"></a>
<FONT color="green">1196</FONT>        public ArchivaAdministration getArchivaAdministration()<a name="line.1196"></a>
<FONT color="green">1197</FONT>        {<a name="line.1197"></a>
<FONT color="green">1198</FONT>            return archivaAdministration;<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>        public void setArchivaAdministration( ArchivaAdministration archivaAdministration )<a name="line.1201"></a>
<FONT color="green">1202</FONT>        {<a name="line.1202"></a>
<FONT color="green">1203</FONT>            this.archivaAdministration = archivaAdministration;<a name="line.1203"></a>
<FONT color="green">1204</FONT>        }<a name="line.1204"></a>
<FONT color="green">1205</FONT>    }<a name="line.1205"></a>
<FONT color="green">1206</FONT>    <a name="line.1206"></a>
<FONT color="green">1207</FONT>    <a name="line.1207"></a>




























































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