<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="de">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>package org.apache.archiva.consumers.core.repository;<a name="line.1"></a>
<span class="sourceLineNo">002</span><a name="line.2"></a>
<span class="sourceLineNo">003</span>/*<a name="line.3"></a>
<span class="sourceLineNo">004</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.4"></a>
<span class="sourceLineNo">005</span> * or more contributor license agreements.  See the NOTICE file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * distributed with this work for additional information<a name="line.6"></a>
<span class="sourceLineNo">007</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.7"></a>
<span class="sourceLineNo">008</span> * to you under the Apache License, Version 2.0 (the<a name="line.8"></a>
<span class="sourceLineNo">009</span> * "License"); you may not use this file except in compliance<a name="line.9"></a>
<span class="sourceLineNo">010</span> * with the License.  You may obtain a copy of the License at<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> *  http://www.apache.org/licenses/LICENSE-2.0<a name="line.12"></a>
<span class="sourceLineNo">013</span> *<a name="line.13"></a>
<span class="sourceLineNo">014</span> * Unless required by applicable law or agreed to in writing,<a name="line.14"></a>
<span class="sourceLineNo">015</span> * software distributed under the License is distributed on an<a name="line.15"></a>
<span class="sourceLineNo">016</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.16"></a>
<span class="sourceLineNo">017</span> * KIND, either express or implied.  See the License for the<a name="line.17"></a>
<span class="sourceLineNo">018</span> * specific language governing permissions and limitations<a name="line.18"></a>
<span class="sourceLineNo">019</span> * under the License.<a name="line.19"></a>
<span class="sourceLineNo">020</span> */<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.archiva.common.utils.VersionUtil;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.archiva.metadata.model.ArtifactMetadata;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.archiva.metadata.model.facets.AuditEvent;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.archiva.metadata.model.maven2.MavenArtifactFacet;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.archiva.metadata.repository.MetadataRepository;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.archiva.metadata.repository.MetadataRepositoryException;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.archiva.metadata.repository.MetadataResolutionException;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.archiva.metadata.repository.RepositorySession;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.archiva.model.ArtifactReference;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.archiva.repository.ContentNotFoundException;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.archiva.repository.ManagedRepositoryContent;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.archiva.repository.events.RepositoryListener;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.commons.lang.StringUtils;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.slf4j.Logger;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.slf4j.LoggerFactory;<a name="line.36"></a>
<span class="sourceLineNo">037</span><a name="line.37"></a>
<span class="sourceLineNo">038</span>import java.io.IOException;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import java.nio.file.DirectoryStream;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import java.nio.file.FileVisitOption;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import java.nio.file.FileVisitResult;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import java.nio.file.Files;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import java.nio.file.Path;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import java.nio.file.SimpleFileVisitor;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import java.nio.file.attribute.BasicFileAttributes;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import java.util.Collection;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import java.util.HashMap;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import java.util.HashSet;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import java.util.List;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import java.util.Map;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import java.util.Set;<a name="line.51"></a>
<span class="sourceLineNo">052</span><a name="line.52"></a>
<span class="sourceLineNo">053</span>/**<a name="line.53"></a>
<span class="sourceLineNo">054</span> * Base class for all repository purge tasks.<a name="line.54"></a>
<span class="sourceLineNo">055</span> */<a name="line.55"></a>
<span class="sourceLineNo">056</span>public abstract class AbstractRepositoryPurge<a name="line.56"></a>
<span class="sourceLineNo">057</span>    implements RepositoryPurge<a name="line.57"></a>
<span class="sourceLineNo">058</span>{<a name="line.58"></a>
<span class="sourceLineNo">059</span>    protected Logger log = LoggerFactory.getLogger( getClass( ) );<a name="line.59"></a>
<span class="sourceLineNo">060</span><a name="line.60"></a>
<span class="sourceLineNo">061</span>    protected final ManagedRepositoryContent repository;<a name="line.61"></a>
<span class="sourceLineNo">062</span><a name="line.62"></a>
<span class="sourceLineNo">063</span>    protected final RepositorySession repositorySession;<a name="line.63"></a>
<span class="sourceLineNo">064</span><a name="line.64"></a>
<span class="sourceLineNo">065</span>    protected final List&lt;RepositoryListener&gt; listeners;<a name="line.65"></a>
<span class="sourceLineNo">066</span><a name="line.66"></a>
<span class="sourceLineNo">067</span>    private Logger logger = LoggerFactory.getLogger( "org.apache.archiva.AuditLog" );<a name="line.67"></a>
<span class="sourceLineNo">068</span><a name="line.68"></a>
<span class="sourceLineNo">069</span>    private static final char DELIM = ' ';<a name="line.69"></a>
<span class="sourceLineNo">070</span><a name="line.70"></a>
<span class="sourceLineNo">071</span>    public AbstractRepositoryPurge( ManagedRepositoryContent repository, RepositorySession repositorySession,<a name="line.71"></a>
<span class="sourceLineNo">072</span>                                    List&lt;RepositoryListener&gt; listeners )<a name="line.72"></a>
<span class="sourceLineNo">073</span>    {<a name="line.73"></a>
<span class="sourceLineNo">074</span>        this.repository = repository;<a name="line.74"></a>
<span class="sourceLineNo">075</span>        this.repositorySession = repositorySession;<a name="line.75"></a>
<span class="sourceLineNo">076</span>        this.listeners = listeners;<a name="line.76"></a>
<span class="sourceLineNo">077</span>    }<a name="line.77"></a>
<span class="sourceLineNo">078</span><a name="line.78"></a>
<span class="sourceLineNo">079</span>    /*<a name="line.79"></a>
<span class="sourceLineNo">080</span>     * We have to track namespace, project, project version, artifact version and classifier<a name="line.80"></a>
<span class="sourceLineNo">081</span>     * There is no metadata class that contains all these properties.<a name="line.81"></a>
<span class="sourceLineNo">082</span>     */<a name="line.82"></a>
<span class="sourceLineNo">083</span>    class ArtifactInfo<a name="line.83"></a>
<span class="sourceLineNo">084</span>    {<a name="line.84"></a>
<span class="sourceLineNo">085</span>        final String namespace;<a name="line.85"></a>
<span class="sourceLineNo">086</span>        final String name;<a name="line.86"></a>
<span class="sourceLineNo">087</span>        final String projectVersion;<a name="line.87"></a>
<span class="sourceLineNo">088</span>        String version;<a name="line.88"></a>
<span class="sourceLineNo">089</span>        String classifier;<a name="line.89"></a>
<span class="sourceLineNo">090</span><a name="line.90"></a>
<span class="sourceLineNo">091</span>        ArtifactInfo( String namespace, String name, String projectVersion, String version )<a name="line.91"></a>
<span class="sourceLineNo">092</span>        {<a name="line.92"></a>
<span class="sourceLineNo">093</span>            this.namespace = namespace;<a name="line.93"></a>
<span class="sourceLineNo">094</span>            this.name = name;<a name="line.94"></a>
<span class="sourceLineNo">095</span>            this.projectVersion = projectVersion;<a name="line.95"></a>
<span class="sourceLineNo">096</span>            this.version = version;<a name="line.96"></a>
<span class="sourceLineNo">097</span>        }<a name="line.97"></a>
<span class="sourceLineNo">098</span><a name="line.98"></a>
<span class="sourceLineNo">099</span>        ArtifactInfo( String namespace, String name, String projectVersion )<a name="line.99"></a>
<span class="sourceLineNo">100</span>        {<a name="line.100"></a>
<span class="sourceLineNo">101</span>            this.namespace = namespace;<a name="line.101"></a>
<span class="sourceLineNo">102</span>            this.name = name;<a name="line.102"></a>
<span class="sourceLineNo">103</span>            this.projectVersion = projectVersion;<a name="line.103"></a>
<span class="sourceLineNo">104</span>        }<a name="line.104"></a>
<span class="sourceLineNo">105</span><a name="line.105"></a>
<span class="sourceLineNo">106</span>        /*<a name="line.106"></a>
<span class="sourceLineNo">107</span>         * Creates a info object without version and classifier<a name="line.107"></a>
<span class="sourceLineNo">108</span>         */<a name="line.108"></a>
<span class="sourceLineNo">109</span>        ArtifactInfo projectVersionLevel( )<a name="line.109"></a>
<span class="sourceLineNo">110</span>        {<a name="line.110"></a>
<span class="sourceLineNo">111</span>            return new ArtifactInfo( this.namespace, this.name, this.projectVersion );<a name="line.111"></a>
<span class="sourceLineNo">112</span>        }<a name="line.112"></a>
<span class="sourceLineNo">113</span><a name="line.113"></a>
<span class="sourceLineNo">114</span>        public void setClassifier( String classifier )<a name="line.114"></a>
<span class="sourceLineNo">115</span>        {<a name="line.115"></a>
<span class="sourceLineNo">116</span>            this.classifier = classifier;<a name="line.116"></a>
<span class="sourceLineNo">117</span>        }<a name="line.117"></a>
<span class="sourceLineNo">118</span><a name="line.118"></a>
<span class="sourceLineNo">119</span>        public String getNamespace( )<a name="line.119"></a>
<span class="sourceLineNo">120</span>        {<a name="line.120"></a>
<span class="sourceLineNo">121</span>            return namespace;<a name="line.121"></a>
<span class="sourceLineNo">122</span>        }<a name="line.122"></a>
<span class="sourceLineNo">123</span><a name="line.123"></a>
<span class="sourceLineNo">124</span>        public String getName( )<a name="line.124"></a>
<span class="sourceLineNo">125</span>        {<a name="line.125"></a>
<span class="sourceLineNo">126</span>            return name;<a name="line.126"></a>
<span class="sourceLineNo">127</span>        }<a name="line.127"></a>
<span class="sourceLineNo">128</span><a name="line.128"></a>
<span class="sourceLineNo">129</span>        public String getProjectVersion( )<a name="line.129"></a>
<span class="sourceLineNo">130</span>        {<a name="line.130"></a>
<span class="sourceLineNo">131</span>            return projectVersion;<a name="line.131"></a>
<span class="sourceLineNo">132</span>        }<a name="line.132"></a>
<span class="sourceLineNo">133</span><a name="line.133"></a>
<span class="sourceLineNo">134</span>        public String getVersion( )<a name="line.134"></a>
<span class="sourceLineNo">135</span>        {<a name="line.135"></a>
<span class="sourceLineNo">136</span>            return version;<a name="line.136"></a>
<span class="sourceLineNo">137</span>        }<a name="line.137"></a>
<span class="sourceLineNo">138</span><a name="line.138"></a>
<span class="sourceLineNo">139</span>        public String getClassifier( )<a name="line.139"></a>
<span class="sourceLineNo">140</span>        {<a name="line.140"></a>
<span class="sourceLineNo">141</span>            return classifier;<a name="line.141"></a>
<span class="sourceLineNo">142</span>        }<a name="line.142"></a>
<span class="sourceLineNo">143</span><a name="line.143"></a>
<span class="sourceLineNo">144</span>        public boolean hasClassifier( )<a name="line.144"></a>
<span class="sourceLineNo">145</span>        {<a name="line.145"></a>
<span class="sourceLineNo">146</span>            return classifier != null &amp;&amp; !"".equals( classifier );<a name="line.146"></a>
<span class="sourceLineNo">147</span>        }<a name="line.147"></a>
<span class="sourceLineNo">148</span><a name="line.148"></a>
<span class="sourceLineNo">149</span>        @Override<a name="line.149"></a>
<span class="sourceLineNo">150</span>        public boolean equals( Object o )<a name="line.150"></a>
<span class="sourceLineNo">151</span>        {<a name="line.151"></a>
<span class="sourceLineNo">152</span>            if ( this == o ) return true;<a name="line.152"></a>
<span class="sourceLineNo">153</span>            if ( o == null || getClass( ) != o.getClass( ) ) return false;<a name="line.153"></a>
<span class="sourceLineNo">154</span><a name="line.154"></a>
<span class="sourceLineNo">155</span>            ArtifactInfo that = (ArtifactInfo) o;<a name="line.155"></a>
<span class="sourceLineNo">156</span><a name="line.156"></a>
<span class="sourceLineNo">157</span>            if ( !namespace.equals( that.namespace ) ) return false;<a name="line.157"></a>
<span class="sourceLineNo">158</span>            if ( !name.equals( that.name ) ) return false;<a name="line.158"></a>
<span class="sourceLineNo">159</span>            if ( !projectVersion.equals( that.projectVersion ) ) return false;<a name="line.159"></a>
<span class="sourceLineNo">160</span>            if ( !( version != null ? version.equals( that.version ) : that.version == null ) ) return false;<a name="line.160"></a>
<span class="sourceLineNo">161</span>            return classifier != null ? classifier.equals( that.classifier ) : that.classifier == null;<a name="line.161"></a>
<span class="sourceLineNo">162</span>        }<a name="line.162"></a>
<span class="sourceLineNo">163</span><a name="line.163"></a>
<span class="sourceLineNo">164</span>        @Override<a name="line.164"></a>
<span class="sourceLineNo">165</span>        public int hashCode( )<a name="line.165"></a>
<span class="sourceLineNo">166</span>        {<a name="line.166"></a>
<span class="sourceLineNo">167</span>            int result = namespace.hashCode( );<a name="line.167"></a>
<span class="sourceLineNo">168</span>            result = 31 * result + name.hashCode( );<a name="line.168"></a>
<span class="sourceLineNo">169</span>            result = 31 * result + projectVersion.hashCode( );<a name="line.169"></a>
<span class="sourceLineNo">170</span>            result = 31 * result + ( version != null ? version.hashCode( ) : 0 );<a name="line.170"></a>
<span class="sourceLineNo">171</span>            result = 31 * result + ( classifier != null ? classifier.hashCode( ) : 0 );<a name="line.171"></a>
<span class="sourceLineNo">172</span>            return result;<a name="line.172"></a>
<span class="sourceLineNo">173</span>        }<a name="line.173"></a>
<span class="sourceLineNo">174</span><a name="line.174"></a>
<span class="sourceLineNo">175</span>        @Override<a name="line.175"></a>
<span class="sourceLineNo">176</span>        public String toString( )<a name="line.176"></a>
<span class="sourceLineNo">177</span>        {<a name="line.177"></a>
<span class="sourceLineNo">178</span>            final StringBuilder sb = new StringBuilder( "ArtifactInfo{" );<a name="line.178"></a>
<span class="sourceLineNo">179</span>            sb.append( "namespace='" ).append( namespace ).append( '\'' );<a name="line.179"></a>
<span class="sourceLineNo">180</span>            sb.append( ", name='" ).append( name ).append( '\'' );<a name="line.180"></a>
<span class="sourceLineNo">181</span>            sb.append( ", projectVersion='" ).append( projectVersion ).append( '\'' );<a name="line.181"></a>
<span class="sourceLineNo">182</span>            sb.append( ", version='" ).append( version ).append( '\'' );<a name="line.182"></a>
<span class="sourceLineNo">183</span>            sb.append( ", classifier='" ).append( classifier ).append( '\'' );<a name="line.183"></a>
<span class="sourceLineNo">184</span>            sb.append( '}' );<a name="line.184"></a>
<span class="sourceLineNo">185</span>            return sb.toString( );<a name="line.185"></a>
<span class="sourceLineNo">186</span>        }<a name="line.186"></a>
<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
<span class="sourceLineNo">188</span><a name="line.188"></a>
<span class="sourceLineNo">189</span>    /**<a name="line.189"></a>
<span class="sourceLineNo">190</span>     * Purge the repo. Update db and index of removed artifacts.<a name="line.190"></a>
<span class="sourceLineNo">191</span>     *<a name="line.191"></a>
<span class="sourceLineNo">192</span>     * @param references<a name="line.192"></a>
<span class="sourceLineNo">193</span>     */<a name="line.193"></a>
<span class="sourceLineNo">194</span>    protected void purge( Set&lt;ArtifactReference&gt; references )<a name="line.194"></a>
<span class="sourceLineNo">195</span>    {<a name="line.195"></a>
<span class="sourceLineNo">196</span>        if ( references != null &amp;&amp; !references.isEmpty( ) )<a name="line.196"></a>
<span class="sourceLineNo">197</span>        {<a name="line.197"></a>
<span class="sourceLineNo">198</span>            MetadataRepository metadataRepository = repositorySession.getRepository( );<a name="line.198"></a>
<span class="sourceLineNo">199</span>            Map&lt;ArtifactInfo, ArtifactMetadata&gt; metaRemovalList = new HashMap&lt;&gt;( );<a name="line.199"></a>
<span class="sourceLineNo">200</span>            Map&lt;String, Collection&lt;ArtifactMetadata&gt;&gt; metaResolved = new HashMap&lt;&gt;( );<a name="line.200"></a>
<span class="sourceLineNo">201</span>            for ( ArtifactReference reference : references )<a name="line.201"></a>
<span class="sourceLineNo">202</span>            {<a name="line.202"></a>
<span class="sourceLineNo">203</span>                String baseVersion = VersionUtil.getBaseVersion( reference.getVersion( ) );<a name="line.203"></a>
<span class="sourceLineNo">204</span>                // Needed for tracking in the hashmap<a name="line.204"></a>
<span class="sourceLineNo">205</span>                String metaBaseId = reference.getGroupId( ) + "/" + reference.getArtifactId( ) + "/" + baseVersion;<a name="line.205"></a>
<span class="sourceLineNo">206</span><a name="line.206"></a>
<span class="sourceLineNo">207</span>                if ( !metaResolved.containsKey( metaBaseId ) )<a name="line.207"></a>
<span class="sourceLineNo">208</span>                {<a name="line.208"></a>
<span class="sourceLineNo">209</span>                    try<a name="line.209"></a>
<span class="sourceLineNo">210</span>                    {<a name="line.210"></a>
<span class="sourceLineNo">211</span>                        metaResolved.put( metaBaseId, metadataRepository.getArtifacts( repository.getId( ), reference.getGroupId( ),<a name="line.211"></a>
<span class="sourceLineNo">212</span>                            reference.getArtifactId( ), baseVersion ) );<a name="line.212"></a>
<span class="sourceLineNo">213</span>                    }<a name="line.213"></a>
<span class="sourceLineNo">214</span>                    catch ( MetadataResolutionException e )<a name="line.214"></a>
<span class="sourceLineNo">215</span>                    {<a name="line.215"></a>
<span class="sourceLineNo">216</span>                        log.error( "Error during metadata retrieval {}: {}", metaBaseId, e.getMessage( ) );<a name="line.216"></a>
<span class="sourceLineNo">217</span>                    }<a name="line.217"></a>
<span class="sourceLineNo">218</span>                }<a name="line.218"></a>
<span class="sourceLineNo">219</span>                Path artifactFile = repository.toFile( reference ).toPath( );<a name="line.219"></a>
<span class="sourceLineNo">220</span><a name="line.220"></a>
<span class="sourceLineNo">221</span>                for ( RepositoryListener listener : listeners )<a name="line.221"></a>
<span class="sourceLineNo">222</span>                {<a name="line.222"></a>
<span class="sourceLineNo">223</span>                    listener.deleteArtifact( metadataRepository, repository.getId( ), reference.getGroupId( ),<a name="line.223"></a>
<span class="sourceLineNo">224</span>                        reference.getArtifactId( ), reference.getVersion( ),<a name="line.224"></a>
<span class="sourceLineNo">225</span>                        artifactFile.getFileName( ).toString( ) );<a name="line.225"></a>
<span class="sourceLineNo">226</span>                }<a name="line.226"></a>
<span class="sourceLineNo">227</span>                try<a name="line.227"></a>
<span class="sourceLineNo">228</span>                {<a name="line.228"></a>
<span class="sourceLineNo">229</span>                    Files.delete( artifactFile );<a name="line.229"></a>
<span class="sourceLineNo">230</span>                    log.debug( "File deleted: {}", artifactFile.toAbsolutePath( ) );<a name="line.230"></a>
<span class="sourceLineNo">231</span>                }<a name="line.231"></a>
<span class="sourceLineNo">232</span>                catch ( IOException e )<a name="line.232"></a>
<span class="sourceLineNo">233</span>                {<a name="line.233"></a>
<span class="sourceLineNo">234</span>                    log.error( "Could not delete file {}: {}", artifactFile.toAbsolutePath( ), e.getMessage( ), e );<a name="line.234"></a>
<span class="sourceLineNo">235</span>                    continue;<a name="line.235"></a>
<span class="sourceLineNo">236</span>                }<a name="line.236"></a>
<span class="sourceLineNo">237</span>                try<a name="line.237"></a>
<span class="sourceLineNo">238</span>                {<a name="line.238"></a>
<span class="sourceLineNo">239</span>                    repository.deleteArtifact( reference );<a name="line.239"></a>
<span class="sourceLineNo">240</span>                }<a name="line.240"></a>
<span class="sourceLineNo">241</span>                catch ( ContentNotFoundException e )<a name="line.241"></a>
<span class="sourceLineNo">242</span>                {<a name="line.242"></a>
<span class="sourceLineNo">243</span>                    log.warn( "skip error deleting artifact {}: {}", reference, e.getMessage( ) );<a name="line.243"></a>
<span class="sourceLineNo">244</span>                }<a name="line.244"></a>
<span class="sourceLineNo">245</span><a name="line.245"></a>
<span class="sourceLineNo">246</span>                boolean snapshotVersion = VersionUtil.isSnapshot( reference.getVersion( ) );<a name="line.246"></a>
<span class="sourceLineNo">247</span><a name="line.247"></a>
<span class="sourceLineNo">248</span><a name="line.248"></a>
<span class="sourceLineNo">249</span>                // If this is a snapshot we have to search for artifacts with the same version. And remove all of them.<a name="line.249"></a>
<span class="sourceLineNo">250</span>                if ( snapshotVersion )<a name="line.250"></a>
<span class="sourceLineNo">251</span>                {<a name="line.251"></a>
<span class="sourceLineNo">252</span>                    Collection&lt;ArtifactMetadata&gt; artifacts =<a name="line.252"></a>
<span class="sourceLineNo">253</span>                        metaResolved.get( metaBaseId );<a name="line.253"></a>
<span class="sourceLineNo">254</span>                    if ( artifacts != null )<a name="line.254"></a>
<span class="sourceLineNo">255</span>                    {<a name="line.255"></a>
<span class="sourceLineNo">256</span>                        // cleanup snapshots metadata<a name="line.256"></a>
<span class="sourceLineNo">257</span>                        for ( ArtifactMetadata artifactMetadata : artifacts )<a name="line.257"></a>
<span class="sourceLineNo">258</span>                        {<a name="line.258"></a>
<span class="sourceLineNo">259</span>                            // Artifact metadata and reference version should match.<a name="line.259"></a>
<span class="sourceLineNo">260</span>                            if ( artifactMetadata.getVersion( ).equals( reference.getVersion( ) ) )<a name="line.260"></a>
<span class="sourceLineNo">261</span>                            {<a name="line.261"></a>
<span class="sourceLineNo">262</span>                                ArtifactInfo info = new ArtifactInfo( artifactMetadata.getNamespace( ), artifactMetadata.getProject( ), artifactMetadata.getProjectVersion( ), artifactMetadata.getVersion( ) );<a name="line.262"></a>
<span class="sourceLineNo">263</span>                                if ( StringUtils.isNotBlank( reference.getClassifier( ) ) )<a name="line.263"></a>
<span class="sourceLineNo">264</span>                                {<a name="line.264"></a>
<span class="sourceLineNo">265</span>                                    info.setClassifier( reference.getClassifier( ) );<a name="line.265"></a>
<span class="sourceLineNo">266</span>                                    metaRemovalList.put( info, artifactMetadata );<a name="line.266"></a>
<span class="sourceLineNo">267</span>                                }<a name="line.267"></a>
<span class="sourceLineNo">268</span>                                else<a name="line.268"></a>
<span class="sourceLineNo">269</span>                                {<a name="line.269"></a>
<span class="sourceLineNo">270</span>                                    // metadataRepository.removeArtifact( artifactMetadata, baseVersion );<a name="line.270"></a>
<span class="sourceLineNo">271</span>                                    metaRemovalList.put( info, artifactMetadata );<a name="line.271"></a>
<span class="sourceLineNo">272</span>                                }<a name="line.272"></a>
<span class="sourceLineNo">273</span>                            }<a name="line.273"></a>
<span class="sourceLineNo">274</span>                        }<a name="line.274"></a>
<span class="sourceLineNo">275</span>                    }<a name="line.275"></a>
<span class="sourceLineNo">276</span>                }<a name="line.276"></a>
<span class="sourceLineNo">277</span>                else // otherwise we delete the artifact version<a name="line.277"></a>
<span class="sourceLineNo">278</span>                {<a name="line.278"></a>
<span class="sourceLineNo">279</span>                    ArtifactInfo info = new ArtifactInfo( reference.getGroupId( ), reference.getArtifactId( ), baseVersion, reference.getVersion( ) );<a name="line.279"></a>
<span class="sourceLineNo">280</span>                    for ( ArtifactMetadata metadata : metaResolved.get( metaBaseId ) )<a name="line.280"></a>
<span class="sourceLineNo">281</span>                    {<a name="line.281"></a>
<span class="sourceLineNo">282</span>                        metaRemovalList.put( info, metadata );<a name="line.282"></a>
<span class="sourceLineNo">283</span>                    }<a name="line.283"></a>
<span class="sourceLineNo">284</span>                }<a name="line.284"></a>
<span class="sourceLineNo">285</span>                triggerAuditEvent( repository.getRepository( ).getId( ), ArtifactReference.toKey( reference ),<a name="line.285"></a>
<span class="sourceLineNo">286</span>                    AuditEvent.PURGE_ARTIFACT );<a name="line.286"></a>
<span class="sourceLineNo">287</span>                purgeSupportFiles( artifactFile );<a name="line.287"></a>
<span class="sourceLineNo">288</span>            }<a name="line.288"></a>
<span class="sourceLineNo">289</span>            purgeMetadata( metadataRepository, metaRemovalList );<a name="line.289"></a>
<span class="sourceLineNo">290</span>            repositorySession.save( );<a name="line.290"></a>
<span class="sourceLineNo">291</span><a name="line.291"></a>
<span class="sourceLineNo">292</span>        }<a name="line.292"></a>
<span class="sourceLineNo">293</span>    }<a name="line.293"></a>
<span class="sourceLineNo">294</span><a name="line.294"></a>
<span class="sourceLineNo">295</span>    /*<a name="line.295"></a>
<span class="sourceLineNo">296</span>     * Purges the metadata. First removes the artifacts. After that empty versions will be removed.<a name="line.296"></a>
<span class="sourceLineNo">297</span>     */<a name="line.297"></a>
<span class="sourceLineNo">298</span>    private void purgeMetadata( MetadataRepository metadataRepository, Map&lt;ArtifactInfo, ArtifactMetadata&gt; dataList )<a name="line.298"></a>
<span class="sourceLineNo">299</span>    {<a name="line.299"></a>
<span class="sourceLineNo">300</span>        Set&lt;ArtifactInfo&gt; projectLevelMetadata = new HashSet&lt;&gt;( );<a name="line.300"></a>
<span class="sourceLineNo">301</span>        for ( Map.Entry&lt;ArtifactInfo, ArtifactMetadata&gt; infoEntry : dataList.entrySet( ) )<a name="line.301"></a>
<span class="sourceLineNo">302</span>        {<a name="line.302"></a>
<span class="sourceLineNo">303</span>            ArtifactInfo info = infoEntry.getKey( );<a name="line.303"></a>
<span class="sourceLineNo">304</span>            try<a name="line.304"></a>
<span class="sourceLineNo">305</span>            {<a name="line.305"></a>
<span class="sourceLineNo">306</span>                removeArtifact( metadataRepository, info, infoEntry.getValue( ) );<a name="line.306"></a>
<span class="sourceLineNo">307</span>                log.debug( "Removed artifact from MetadataRepository {}", info );<a name="line.307"></a>
<span class="sourceLineNo">308</span>            }<a name="line.308"></a>
<span class="sourceLineNo">309</span>            catch ( MetadataRepositoryException e )<a name="line.309"></a>
<span class="sourceLineNo">310</span>            {<a name="line.310"></a>
<span class="sourceLineNo">311</span>                log.error( "Could not remove artifact from MetadataRepository {}: {}", info, e.getMessage( ), e );<a name="line.311"></a>
<span class="sourceLineNo">312</span>            }<a name="line.312"></a>
<span class="sourceLineNo">313</span>            projectLevelMetadata.add( info.projectVersionLevel( ) );<a name="line.313"></a>
<span class="sourceLineNo">314</span>        }<a name="line.314"></a>
<span class="sourceLineNo">315</span>        metadataRepository.save( );<a name="line.315"></a>
<span class="sourceLineNo">316</span>        Collection&lt;ArtifactMetadata&gt; artifacts = null;<a name="line.316"></a>
<span class="sourceLineNo">317</span>        // Get remaining artifacts and remove project if empty<a name="line.317"></a>
<span class="sourceLineNo">318</span>        for ( ArtifactInfo info : projectLevelMetadata )<a name="line.318"></a>
<span class="sourceLineNo">319</span>        {<a name="line.319"></a>
<span class="sourceLineNo">320</span>            try<a name="line.320"></a>
<span class="sourceLineNo">321</span>            {<a name="line.321"></a>
<span class="sourceLineNo">322</span>                artifacts = metadataRepository.getArtifacts( repository.getId( ), info.getNamespace( ), info.getName( ),<a name="line.322"></a>
<span class="sourceLineNo">323</span>                    info.getProjectVersion( ) );<a name="line.323"></a>
<span class="sourceLineNo">324</span>                if ( artifacts.size( ) == 0 )<a name="line.324"></a>
<span class="sourceLineNo">325</span>                {<a name="line.325"></a>
<span class="sourceLineNo">326</span>                    metadataRepository.removeProjectVersion( repository.getId( ), info.getNamespace( ),<a name="line.326"></a>
<span class="sourceLineNo">327</span>                        info.getName( ), info.getProjectVersion( ) );<a name="line.327"></a>
<span class="sourceLineNo">328</span>                    log.debug( "Removed project version from MetadataRepository {}", info );<a name="line.328"></a>
<span class="sourceLineNo">329</span>                }<a name="line.329"></a>
<span class="sourceLineNo">330</span>            }<a name="line.330"></a>
<span class="sourceLineNo">331</span>            catch ( MetadataResolutionException | MetadataRepositoryException e )<a name="line.331"></a>
<span class="sourceLineNo">332</span>            {<a name="line.332"></a>
<span class="sourceLineNo">333</span>                log.error( "Could not remove project version from MetadataRepository {}: {}", info, e.getMessage( ), e );<a name="line.333"></a>
<span class="sourceLineNo">334</span>            }<a name="line.334"></a>
<span class="sourceLineNo">335</span>        }<a name="line.335"></a>
<span class="sourceLineNo">336</span>        metadataRepository.save( );<a name="line.336"></a>
<span class="sourceLineNo">337</span><a name="line.337"></a>
<span class="sourceLineNo">338</span>    }<a name="line.338"></a>
<span class="sourceLineNo">339</span><a name="line.339"></a>
<span class="sourceLineNo">340</span>    /*<a name="line.340"></a>
<span class="sourceLineNo">341</span>     * Removes the artifact from the metadataRepository. If a classifier is set, the facet will be removed.<a name="line.341"></a>
<span class="sourceLineNo">342</span>     */<a name="line.342"></a>
<span class="sourceLineNo">343</span>    private void removeArtifact( MetadataRepository metadataRepository, ArtifactInfo artifactInfo, ArtifactMetadata artifactMetadata ) throws MetadataRepositoryException<a name="line.343"></a>
<span class="sourceLineNo">344</span>    {<a name="line.344"></a>
<span class="sourceLineNo">345</span>        if ( artifactInfo.hasClassifier( ) )<a name="line.345"></a>
<span class="sourceLineNo">346</span>        {<a name="line.346"></a>
<span class="sourceLineNo">347</span>            // cleanup facet which contains classifier information<a name="line.347"></a>
<span class="sourceLineNo">348</span>            MavenArtifactFacet mavenArtifactFacet =<a name="line.348"></a>
<span class="sourceLineNo">349</span>                (MavenArtifactFacet) artifactMetadata.getFacet(<a name="line.349"></a>
<span class="sourceLineNo">350</span>                    MavenArtifactFacet.FACET_ID );<a name="line.350"></a>
<span class="sourceLineNo">351</span><a name="line.351"></a>
<span class="sourceLineNo">352</span>            if ( StringUtils.equals( artifactInfo.classifier,<a name="line.352"></a>
<span class="sourceLineNo">353</span>                mavenArtifactFacet.getClassifier( ) ) )<a name="line.353"></a>
<span class="sourceLineNo">354</span>            {<a name="line.354"></a>
<span class="sourceLineNo">355</span>                artifactMetadata.removeFacet( MavenArtifactFacet.FACET_ID );<a name="line.355"></a>
<span class="sourceLineNo">356</span>                String groupId = artifactInfo.getNamespace( ), artifactId =<a name="line.356"></a>
<span class="sourceLineNo">357</span>                    artifactInfo.getName( ),<a name="line.357"></a>
<span class="sourceLineNo">358</span>                    version = artifactInfo.getProjectVersion( );<a name="line.358"></a>
<span class="sourceLineNo">359</span>                MavenArtifactFacet mavenArtifactFacetToCompare = new MavenArtifactFacet( );<a name="line.359"></a>
<span class="sourceLineNo">360</span>                mavenArtifactFacetToCompare.setClassifier( artifactInfo.getClassifier( ) );<a name="line.360"></a>
<span class="sourceLineNo">361</span>                metadataRepository.removeArtifact( repository.getId( ), groupId, artifactId,<a name="line.361"></a>
<span class="sourceLineNo">362</span>                    version, mavenArtifactFacetToCompare );<a name="line.362"></a>
<span class="sourceLineNo">363</span>                metadataRepository.save( );<a name="line.363"></a>
<span class="sourceLineNo">364</span>            }<a name="line.364"></a>
<span class="sourceLineNo">365</span>        }<a name="line.365"></a>
<span class="sourceLineNo">366</span>        else<a name="line.366"></a>
<span class="sourceLineNo">367</span>        {<a name="line.367"></a>
<span class="sourceLineNo">368</span>            metadataRepository.removeArtifact( artifactMetadata, artifactInfo.getProjectVersion( ) );<a name="line.368"></a>
<span class="sourceLineNo">369</span>        }<a name="line.369"></a>
<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
<span class="sourceLineNo">371</span><a name="line.371"></a>
<span class="sourceLineNo">372</span>    private void deleteSilently( Path path )<a name="line.372"></a>
<span class="sourceLineNo">373</span>    {<a name="line.373"></a>
<span class="sourceLineNo">374</span>        try<a name="line.374"></a>
<span class="sourceLineNo">375</span>        {<a name="line.375"></a>
<span class="sourceLineNo">376</span>            Files.deleteIfExists( path );<a name="line.376"></a>
<span class="sourceLineNo">377</span>            triggerAuditEvent( repository.getRepository( ).getId( ), path.toString( ), AuditEvent.PURGE_FILE );<a name="line.377"></a>
<span class="sourceLineNo">378</span>        }<a name="line.378"></a>
<span class="sourceLineNo">379</span>        catch ( IOException e )<a name="line.379"></a>
<span class="sourceLineNo">380</span>        {<a name="line.380"></a>
<span class="sourceLineNo">381</span>            log.error( "Error occured during file deletion {}: {} ", path, e.getMessage( ), e );<a name="line.381"></a>
<span class="sourceLineNo">382</span>        }<a name="line.382"></a>
<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
<span class="sourceLineNo">384</span><a name="line.384"></a>
<span class="sourceLineNo">385</span>    /**<a name="line.385"></a>
<span class="sourceLineNo">386</span>     * &lt;p&gt;<a name="line.386"></a>
<span class="sourceLineNo">387</span>     * This find support files for the artifactFile and deletes them.<a name="line.387"></a>
<span class="sourceLineNo">388</span>     * &lt;/p&gt;<a name="line.388"></a>
<span class="sourceLineNo">389</span>     * &lt;p&gt;<a name="line.389"></a>
<span class="sourceLineNo">390</span>     * Support Files are things like ".sha1", ".md5", ".asc", etc.<a name="line.390"></a>
<span class="sourceLineNo">391</span>     * &lt;/p&gt;<a name="line.391"></a>
<span class="sourceLineNo">392</span>     *<a name="line.392"></a>
<span class="sourceLineNo">393</span>     * @param artifactFile the file to base off of.<a name="line.393"></a>
<span class="sourceLineNo">394</span>     */<a name="line.394"></a>
<span class="sourceLineNo">395</span>    private void purgeSupportFiles( Path artifactFile )<a name="line.395"></a>
<span class="sourceLineNo">396</span>    {<a name="line.396"></a>
<span class="sourceLineNo">397</span>        Path parentDir = artifactFile.getParent( );<a name="line.397"></a>
<span class="sourceLineNo">398</span><a name="line.398"></a>
<span class="sourceLineNo">399</span>        if ( !Files.exists( parentDir ) )<a name="line.399"></a>
<span class="sourceLineNo">400</span>        {<a name="line.400"></a>
<span class="sourceLineNo">401</span>            return;<a name="line.401"></a>
<span class="sourceLineNo">402</span>        }<a name="line.402"></a>
<span class="sourceLineNo">403</span><a name="line.403"></a>
<span class="sourceLineNo">404</span>        final String artifactName = artifactFile.getFileName( ).toString( );<a name="line.404"></a>
<span class="sourceLineNo">405</span><a name="line.405"></a>
<span class="sourceLineNo">406</span>        try<a name="line.406"></a>
<span class="sourceLineNo">407</span>        {<a name="line.407"></a>
<span class="sourceLineNo">408</span>            deleteArtifactFiles( parentDir, 3, artifactName );<a name="line.408"></a>
<span class="sourceLineNo">409</span>        }<a name="line.409"></a>
<span class="sourceLineNo">410</span>        catch ( IOException e )<a name="line.410"></a>
<span class="sourceLineNo">411</span>        {<a name="line.411"></a>
<span class="sourceLineNo">412</span>            log.error( "Purge of support files failed {}: {}", artifactFile, e.getMessage( ), e );<a name="line.412"></a>
<span class="sourceLineNo">413</span>        }<a name="line.413"></a>
<span class="sourceLineNo">414</span><a name="line.414"></a>
<span class="sourceLineNo">415</span>    }<a name="line.415"></a>
<span class="sourceLineNo">416</span><a name="line.416"></a>
<span class="sourceLineNo">417</span>    public static void deleteArtifactFiles(final Path directory, final int maxDepth, final String artifactName) throws IOException<a name="line.417"></a>
<span class="sourceLineNo">418</span>    {<a name="line.418"></a>
<span class="sourceLineNo">419</span>            Files.walkFileTree(directory, new HashSet&lt;FileVisitOption&gt;(  ), maxDepth, new SimpleFileVisitor&lt;Path&gt;() {<a name="line.419"></a>
<span class="sourceLineNo">420</span>                @Override<a name="line.420"></a>
<span class="sourceLineNo">421</span>                public FileVisitResult visitFile( Path file, BasicFileAttributes attrs) throws IOException {<a name="line.421"></a>
<span class="sourceLineNo">422</span>                    if (file.getFileName().toString().startsWith(artifactName)) {<a name="line.422"></a>
<span class="sourceLineNo">423</span>                        try {<a name="line.423"></a>
<span class="sourceLineNo">424</span>                            Files.delete( file );<a name="line.424"></a>
<span class="sourceLineNo">425</span>                        } catch (IOException e) {<a name="line.425"></a>
<span class="sourceLineNo">426</span>                            // We do not stop, if an error occurs.<a name="line.426"></a>
<span class="sourceLineNo">427</span>                        }<a name="line.427"></a>
<span class="sourceLineNo">428</span>                    }<a name="line.428"></a>
<span class="sourceLineNo">429</span>                    return FileVisitResult.CONTINUE;<a name="line.429"></a>
<span class="sourceLineNo">430</span>                }<a name="line.430"></a>
<span class="sourceLineNo">431</span><a name="line.431"></a>
<span class="sourceLineNo">432</span>                @Override<a name="line.432"></a>
<span class="sourceLineNo">433</span>                public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {<a name="line.433"></a>
<span class="sourceLineNo">434</span>                    return FileVisitResult.CONTINUE;<a name="line.434"></a>
<span class="sourceLineNo">435</span>                }<a name="line.435"></a>
<span class="sourceLineNo">436</span><a name="line.436"></a>
<span class="sourceLineNo">437</span>            });<a name="line.437"></a>
<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
<span class="sourceLineNo">439</span><a name="line.439"></a>
<span class="sourceLineNo">440</span>    private void triggerAuditEvent( String repoId, String resource, String action )<a name="line.440"></a>
<span class="sourceLineNo">441</span>    {<a name="line.441"></a>
<span class="sourceLineNo">442</span>        String msg =<a name="line.442"></a>
<span class="sourceLineNo">443</span>            repoId + DELIM + "&lt;system-purge&gt;" + DELIM + "&lt;system&gt;" + DELIM + '\"' + resource + '\"' + DELIM + '\"' +<a name="line.443"></a>
<span class="sourceLineNo">444</span>                action + '\"';<a name="line.444"></a>
<span class="sourceLineNo">445</span><a name="line.445"></a>
<span class="sourceLineNo">446</span>        logger.info( msg );<a name="line.446"></a>
<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
<span class="sourceLineNo">448</span>}<a name="line.448"></a>




























































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