<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>package org.apache.archiva.consumers.core;<a name="line.1"></a>
<span class="sourceLineNo">002</span><a name="line.2"></a>
<span class="sourceLineNo">003</span>/*<a name="line.3"></a>
<span class="sourceLineNo">004</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.4"></a>
<span class="sourceLineNo">005</span> * or more contributor license agreements.  See the NOTICE file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * distributed with this work for additional information<a name="line.6"></a>
<span class="sourceLineNo">007</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.7"></a>
<span class="sourceLineNo">008</span> * to you under the Apache License, Version 2.0 (the<a name="line.8"></a>
<span class="sourceLineNo">009</span> * "License"); you may not use this file except in compliance<a name="line.9"></a>
<span class="sourceLineNo">010</span> * with the License.  You may obtain a copy of the License at<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> *  http://www.apache.org/licenses/LICENSE-2.0<a name="line.12"></a>
<span class="sourceLineNo">013</span> *<a name="line.13"></a>
<span class="sourceLineNo">014</span> * Unless required by applicable law or agreed to in writing,<a name="line.14"></a>
<span class="sourceLineNo">015</span> * software distributed under the License is distributed on an<a name="line.15"></a>
<span class="sourceLineNo">016</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.16"></a>
<span class="sourceLineNo">017</span> * KIND, either express or implied.  See the License for the<a name="line.17"></a>
<span class="sourceLineNo">018</span> * specific language governing permissions and limitations<a name="line.18"></a>
<span class="sourceLineNo">019</span> * under the License.<a name="line.19"></a>
<span class="sourceLineNo">020</span> */<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.archiva.admin.model.beans.ManagedRepository;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.archiva.configuration.ArchivaConfiguration;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.archiva.configuration.FileTypes;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.archiva.consumers.AbstractMonitoredConsumer;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.archiva.consumers.ConsumerException;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.archiva.consumers.KnownRepositoryContentConsumer;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.archiva.model.ArtifactReference;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.archiva.model.ProjectReference;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.archiva.model.VersionedReference;<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.RepositoryContentFactory;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.archiva.repository.RepositoryException;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.archiva.repository.RepositoryNotFoundException;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.archiva.repository.layout.LayoutException;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.archiva.repository.metadata.MetadataTools;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.archiva.repository.metadata.RepositoryMetadataException;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.slf4j.Logger;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.slf4j.LoggerFactory;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.springframework.context.annotation.Scope;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import org.springframework.stereotype.Service;<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span>import javax.annotation.PostConstruct;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import javax.inject.Inject;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import java.io.File;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import java.io.IOException;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import java.util.ArrayList;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import java.util.Date;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import java.util.List;<a name="line.50"></a>
<span class="sourceLineNo">051</span><a name="line.51"></a>
<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
<span class="sourceLineNo">053</span> * MetadataUpdaterConsumer will create and update the metadata present within the repository.<a name="line.53"></a>
<span class="sourceLineNo">054</span> */<a name="line.54"></a>
<span class="sourceLineNo">055</span>@Service( "knownRepositoryContentConsumer#metadata-updater" )<a name="line.55"></a>
<span class="sourceLineNo">056</span>@Scope( "prototype" )<a name="line.56"></a>
<span class="sourceLineNo">057</span>public class MetadataUpdaterConsumer<a name="line.57"></a>
<span class="sourceLineNo">058</span>    extends AbstractMonitoredConsumer<a name="line.58"></a>
<span class="sourceLineNo">059</span>    implements KnownRepositoryContentConsumer<a name="line.59"></a>
<span class="sourceLineNo">060</span>    // it's prototype bean so we assume configuration won't change during a run<a name="line.60"></a>
<span class="sourceLineNo">061</span>    //, RegistryListener<a name="line.61"></a>
<span class="sourceLineNo">062</span>{<a name="line.62"></a>
<span class="sourceLineNo">063</span>    private Logger log = LoggerFactory.getLogger( MetadataUpdaterConsumer.class );<a name="line.63"></a>
<span class="sourceLineNo">064</span><a name="line.64"></a>
<span class="sourceLineNo">065</span>    /**<a name="line.65"></a>
<span class="sourceLineNo">066</span>     * default-value="metadata-updater"<a name="line.66"></a>
<span class="sourceLineNo">067</span>     */<a name="line.67"></a>
<span class="sourceLineNo">068</span>    private String id = "metadata-updater";<a name="line.68"></a>
<span class="sourceLineNo">069</span><a name="line.69"></a>
<span class="sourceLineNo">070</span>    private String description = "Update / Create maven-metadata.xml files";<a name="line.70"></a>
<span class="sourceLineNo">071</span><a name="line.71"></a>
<span class="sourceLineNo">072</span>    @Inject<a name="line.72"></a>
<span class="sourceLineNo">073</span>    private RepositoryContentFactory repositoryFactory;<a name="line.73"></a>
<span class="sourceLineNo">074</span><a name="line.74"></a>
<span class="sourceLineNo">075</span>    @Inject<a name="line.75"></a>
<span class="sourceLineNo">076</span>    private MetadataTools metadataTools;<a name="line.76"></a>
<span class="sourceLineNo">077</span><a name="line.77"></a>
<span class="sourceLineNo">078</span>    @Inject<a name="line.78"></a>
<span class="sourceLineNo">079</span>    private ArchivaConfiguration configuration;<a name="line.79"></a>
<span class="sourceLineNo">080</span><a name="line.80"></a>
<span class="sourceLineNo">081</span>    @Inject<a name="line.81"></a>
<span class="sourceLineNo">082</span>    private FileTypes filetypes;<a name="line.82"></a>
<span class="sourceLineNo">083</span><a name="line.83"></a>
<span class="sourceLineNo">084</span>    private static final String TYPE_METADATA_BAD_INTERNAL_REF = "metadata-bad-internal-ref";<a name="line.84"></a>
<span class="sourceLineNo">085</span><a name="line.85"></a>
<span class="sourceLineNo">086</span>    private static final String TYPE_METADATA_WRITE_FAILURE = "metadata-write-failure";<a name="line.86"></a>
<span class="sourceLineNo">087</span><a name="line.87"></a>
<span class="sourceLineNo">088</span>    private static final String TYPE_METADATA_IO = "metadata-io-warning";<a name="line.88"></a>
<span class="sourceLineNo">089</span><a name="line.89"></a>
<span class="sourceLineNo">090</span>    private ManagedRepositoryContent repository;<a name="line.90"></a>
<span class="sourceLineNo">091</span><a name="line.91"></a>
<span class="sourceLineNo">092</span>    private File repositoryDir;<a name="line.92"></a>
<span class="sourceLineNo">093</span><a name="line.93"></a>
<span class="sourceLineNo">094</span>    private List&lt;String&gt; includes = new ArrayList&lt;&gt;( 0 );<a name="line.94"></a>
<span class="sourceLineNo">095</span><a name="line.95"></a>
<span class="sourceLineNo">096</span>    private long scanStartTimestamp = 0;<a name="line.96"></a>
<span class="sourceLineNo">097</span><a name="line.97"></a>
<span class="sourceLineNo">098</span>    @Override<a name="line.98"></a>
<span class="sourceLineNo">099</span>    public String getDescription( )<a name="line.99"></a>
<span class="sourceLineNo">100</span>    {<a name="line.100"></a>
<span class="sourceLineNo">101</span>        return description;<a name="line.101"></a>
<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
<span class="sourceLineNo">103</span><a name="line.103"></a>
<span class="sourceLineNo">104</span>    @Override<a name="line.104"></a>
<span class="sourceLineNo">105</span>    public String getId( )<a name="line.105"></a>
<span class="sourceLineNo">106</span>    {<a name="line.106"></a>
<span class="sourceLineNo">107</span>        return id;<a name="line.107"></a>
<span class="sourceLineNo">108</span>    }<a name="line.108"></a>
<span class="sourceLineNo">109</span><a name="line.109"></a>
<span class="sourceLineNo">110</span>    public void setIncludes( List&lt;String&gt; includes )<a name="line.110"></a>
<span class="sourceLineNo">111</span>    {<a name="line.111"></a>
<span class="sourceLineNo">112</span>        this.includes = includes;<a name="line.112"></a>
<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
<span class="sourceLineNo">114</span><a name="line.114"></a>
<span class="sourceLineNo">115</span>    @Override<a name="line.115"></a>
<span class="sourceLineNo">116</span>    public void beginScan( ManagedRepository repoConfig, Date whenGathered )<a name="line.116"></a>
<span class="sourceLineNo">117</span>        throws ConsumerException<a name="line.117"></a>
<span class="sourceLineNo">118</span>    {<a name="line.118"></a>
<span class="sourceLineNo">119</span>        try<a name="line.119"></a>
<span class="sourceLineNo">120</span>        {<a name="line.120"></a>
<span class="sourceLineNo">121</span>            this.repository = repositoryFactory.getManagedRepositoryContent( repoConfig.getId( ) );<a name="line.121"></a>
<span class="sourceLineNo">122</span>            this.repositoryDir = new File( repository.getRepoRoot( ) );<a name="line.122"></a>
<span class="sourceLineNo">123</span>            this.scanStartTimestamp = System.currentTimeMillis( );<a name="line.123"></a>
<span class="sourceLineNo">124</span>        }<a name="line.124"></a>
<span class="sourceLineNo">125</span>        catch ( RepositoryNotFoundException e )<a name="line.125"></a>
<span class="sourceLineNo">126</span>        {<a name="line.126"></a>
<span class="sourceLineNo">127</span>            throw new ConsumerException( e.getMessage( ), e );<a name="line.127"></a>
<span class="sourceLineNo">128</span>        }<a name="line.128"></a>
<span class="sourceLineNo">129</span>        catch ( RepositoryException e )<a name="line.129"></a>
<span class="sourceLineNo">130</span>        {<a name="line.130"></a>
<span class="sourceLineNo">131</span>            throw new ConsumerException( e.getMessage( ), e );<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><a name="line.134"></a>
<span class="sourceLineNo">135</span>    @Override<a name="line.135"></a>
<span class="sourceLineNo">136</span>    public void beginScan( ManagedRepository repository, Date whenGathered, boolean executeOnEntireRepo )<a name="line.136"></a>
<span class="sourceLineNo">137</span>        throws ConsumerException<a name="line.137"></a>
<span class="sourceLineNo">138</span>    {<a name="line.138"></a>
<span class="sourceLineNo">139</span>        beginScan( repository, whenGathered );<a name="line.139"></a>
<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
<span class="sourceLineNo">141</span><a name="line.141"></a>
<span class="sourceLineNo">142</span>    @Override<a name="line.142"></a>
<span class="sourceLineNo">143</span>    public void completeScan( )<a name="line.143"></a>
<span class="sourceLineNo">144</span>    {<a name="line.144"></a>
<span class="sourceLineNo">145</span>        /* do nothing here */<a name="line.145"></a>
<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
<span class="sourceLineNo">147</span><a name="line.147"></a>
<span class="sourceLineNo">148</span>    @Override<a name="line.148"></a>
<span class="sourceLineNo">149</span>    public void completeScan( boolean executeOnEntireRepo )<a name="line.149"></a>
<span class="sourceLineNo">150</span>    {<a name="line.150"></a>
<span class="sourceLineNo">151</span>        completeScan( );<a name="line.151"></a>
<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
<span class="sourceLineNo">155</span>    public List&lt;String&gt; getExcludes( )<a name="line.155"></a>
<span class="sourceLineNo">156</span>    {<a name="line.156"></a>
<span class="sourceLineNo">157</span>        return getDefaultArtifactExclusions( );<a name="line.157"></a>
<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
<span class="sourceLineNo">159</span><a name="line.159"></a>
<span class="sourceLineNo">160</span>    @Override<a name="line.160"></a>
<span class="sourceLineNo">161</span>    public List&lt;String&gt; getIncludes( )<a name="line.161"></a>
<span class="sourceLineNo">162</span>    {<a name="line.162"></a>
<span class="sourceLineNo">163</span>        return this.includes;<a name="line.163"></a>
<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
<span class="sourceLineNo">165</span><a name="line.165"></a>
<span class="sourceLineNo">166</span>    @Override<a name="line.166"></a>
<span class="sourceLineNo">167</span>    public void processFile( String path )<a name="line.167"></a>
<span class="sourceLineNo">168</span>        throws ConsumerException<a name="line.168"></a>
<span class="sourceLineNo">169</span>    {<a name="line.169"></a>
<span class="sourceLineNo">170</span>        // Ignore paths like .index etc<a name="line.170"></a>
<span class="sourceLineNo">171</span>        if ( !path.startsWith( "." ) )<a name="line.171"></a>
<span class="sourceLineNo">172</span>        {<a name="line.172"></a>
<span class="sourceLineNo">173</span>            try<a name="line.173"></a>
<span class="sourceLineNo">174</span>            {<a name="line.174"></a>
<span class="sourceLineNo">175</span>                ArtifactReference artifact = repository.toArtifactReference( path );<a name="line.175"></a>
<span class="sourceLineNo">176</span>                updateVersionMetadata( artifact, path );<a name="line.176"></a>
<span class="sourceLineNo">177</span>                updateProjectMetadata( artifact, path );<a name="line.177"></a>
<span class="sourceLineNo">178</span>            }<a name="line.178"></a>
<span class="sourceLineNo">179</span>            catch ( LayoutException e )<a name="line.179"></a>
<span class="sourceLineNo">180</span>            {<a name="line.180"></a>
<span class="sourceLineNo">181</span>                log.info( "Not processing path that is not an artifact: {} ({})", path, e.getMessage( ) );<a name="line.181"></a>
<span class="sourceLineNo">182</span>            }<a name="line.182"></a>
<span class="sourceLineNo">183</span>        }<a name="line.183"></a>
<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
<span class="sourceLineNo">185</span><a name="line.185"></a>
<span class="sourceLineNo">186</span>    @Override<a name="line.186"></a>
<span class="sourceLineNo">187</span>    public void processFile( String path, boolean executeOnEntireRepo )<a name="line.187"></a>
<span class="sourceLineNo">188</span>        throws Exception<a name="line.188"></a>
<span class="sourceLineNo">189</span>    {<a name="line.189"></a>
<span class="sourceLineNo">190</span>        processFile( path );<a name="line.190"></a>
<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
<span class="sourceLineNo">192</span><a name="line.192"></a>
<span class="sourceLineNo">193</span>    private void updateProjectMetadata( ArtifactReference artifact, String path )<a name="line.193"></a>
<span class="sourceLineNo">194</span>    {<a name="line.194"></a>
<span class="sourceLineNo">195</span>        ProjectReference projectRef = new ProjectReference( );<a name="line.195"></a>
<span class="sourceLineNo">196</span>        projectRef.setGroupId( artifact.getGroupId( ) );<a name="line.196"></a>
<span class="sourceLineNo">197</span>        projectRef.setArtifactId( artifact.getArtifactId( ) );<a name="line.197"></a>
<span class="sourceLineNo">198</span><a name="line.198"></a>
<span class="sourceLineNo">199</span>        try<a name="line.199"></a>
<span class="sourceLineNo">200</span>        {<a name="line.200"></a>
<span class="sourceLineNo">201</span>            String metadataPath = this.metadataTools.toPath( projectRef );<a name="line.201"></a>
<span class="sourceLineNo">202</span><a name="line.202"></a>
<span class="sourceLineNo">203</span>            File projectMetadata = new File( this.repositoryDir, metadataPath );<a name="line.203"></a>
<span class="sourceLineNo">204</span><a name="line.204"></a>
<span class="sourceLineNo">205</span>            if ( projectMetadata.exists( ) &amp;&amp; ( projectMetadata.lastModified( ) &gt;= this.scanStartTimestamp ) )<a name="line.205"></a>
<span class="sourceLineNo">206</span>            {<a name="line.206"></a>
<span class="sourceLineNo">207</span>                // This metadata is up to date. skip it.<a name="line.207"></a>
<span class="sourceLineNo">208</span>                log.debug( "Skipping uptodate metadata: {}", this.metadataTools.toPath( projectRef ) );<a name="line.208"></a>
<span class="sourceLineNo">209</span>                return;<a name="line.209"></a>
<span class="sourceLineNo">210</span>            }<a name="line.210"></a>
<span class="sourceLineNo">211</span><a name="line.211"></a>
<span class="sourceLineNo">212</span>            metadataTools.updateMetadata( this.repository, projectRef );<a name="line.212"></a>
<span class="sourceLineNo">213</span>            log.debug( "Updated metadata: {}", this.metadataTools.toPath( projectRef ) );<a name="line.213"></a>
<span class="sourceLineNo">214</span>        }<a name="line.214"></a>
<span class="sourceLineNo">215</span>        catch ( LayoutException e )<a name="line.215"></a>
<span class="sourceLineNo">216</span>        {<a name="line.216"></a>
<span class="sourceLineNo">217</span>            log.warn( "Unable to convert path [{}] to an internal project reference: ", path, e );<a name="line.217"></a>
<span class="sourceLineNo">218</span>            triggerConsumerWarning( TYPE_METADATA_BAD_INTERNAL_REF,<a name="line.218"></a>
<span class="sourceLineNo">219</span>                "Unable to convert path [" + path + "] to an internal project reference: "<a name="line.219"></a>
<span class="sourceLineNo">220</span>                    + e.getMessage( ) );<a name="line.220"></a>
<span class="sourceLineNo">221</span>        }<a name="line.221"></a>
<span class="sourceLineNo">222</span>        catch ( RepositoryMetadataException e )<a name="line.222"></a>
<span class="sourceLineNo">223</span>        {<a name="line.223"></a>
<span class="sourceLineNo">224</span>            log.error( "Unable to write project metadat for artifact [{}]:", path, e );<a name="line.224"></a>
<span class="sourceLineNo">225</span>            triggerConsumerError( TYPE_METADATA_WRITE_FAILURE,<a name="line.225"></a>
<span class="sourceLineNo">226</span>                "Unable to write project metadata for artifact [" + path + "]: " + e.getMessage( ) );<a name="line.226"></a>
<span class="sourceLineNo">227</span>        }<a name="line.227"></a>
<span class="sourceLineNo">228</span>        catch ( IOException e )<a name="line.228"></a>
<span class="sourceLineNo">229</span>        {<a name="line.229"></a>
<span class="sourceLineNo">230</span>            log.warn( "Project metadata not written due to IO warning: ", e );<a name="line.230"></a>
<span class="sourceLineNo">231</span>            triggerConsumerWarning( TYPE_METADATA_IO,<a name="line.231"></a>
<span class="sourceLineNo">232</span>                "Project metadata not written due to IO warning: " + e.getMessage( ) );<a name="line.232"></a>
<span class="sourceLineNo">233</span>        }<a name="line.233"></a>
<span class="sourceLineNo">234</span>        catch ( ContentNotFoundException e )<a name="line.234"></a>
<span class="sourceLineNo">235</span>        {<a name="line.235"></a>
<span class="sourceLineNo">236</span>            log.warn( "Project metadata not written because no versions were found to update: ", e );<a name="line.236"></a>
<span class="sourceLineNo">237</span>            triggerConsumerWarning( TYPE_METADATA_IO,<a name="line.237"></a>
<span class="sourceLineNo">238</span>                "Project metadata not written because no versions were found to update: "<a name="line.238"></a>
<span class="sourceLineNo">239</span>                    + e.getMessage( ) );<a name="line.239"></a>
<span class="sourceLineNo">240</span>        }<a name="line.240"></a>
<span class="sourceLineNo">241</span>    }<a name="line.241"></a>
<span class="sourceLineNo">242</span><a name="line.242"></a>
<span class="sourceLineNo">243</span>    private void updateVersionMetadata( ArtifactReference artifact, String path )<a name="line.243"></a>
<span class="sourceLineNo">244</span>    {<a name="line.244"></a>
<span class="sourceLineNo">245</span>        VersionedReference versionRef = new VersionedReference( );<a name="line.245"></a>
<span class="sourceLineNo">246</span>        versionRef.setGroupId( artifact.getGroupId( ) );<a name="line.246"></a>
<span class="sourceLineNo">247</span>        versionRef.setArtifactId( artifact.getArtifactId( ) );<a name="line.247"></a>
<span class="sourceLineNo">248</span>        versionRef.setVersion( artifact.getVersion( ) );<a name="line.248"></a>
<span class="sourceLineNo">249</span><a name="line.249"></a>
<span class="sourceLineNo">250</span>        try<a name="line.250"></a>
<span class="sourceLineNo">251</span>        {<a name="line.251"></a>
<span class="sourceLineNo">252</span>            String metadataPath = this.metadataTools.toPath( versionRef );<a name="line.252"></a>
<span class="sourceLineNo">253</span><a name="line.253"></a>
<span class="sourceLineNo">254</span>            File projectMetadata = new File( this.repositoryDir, metadataPath );<a name="line.254"></a>
<span class="sourceLineNo">255</span><a name="line.255"></a>
<span class="sourceLineNo">256</span>            if ( projectMetadata.exists( ) &amp;&amp; ( projectMetadata.lastModified( ) &gt;= this.scanStartTimestamp ) )<a name="line.256"></a>
<span class="sourceLineNo">257</span>            {<a name="line.257"></a>
<span class="sourceLineNo">258</span>                // This metadata is up to date. skip it.<a name="line.258"></a>
<span class="sourceLineNo">259</span>                log.debug( "Skipping uptodate metadata: {}", this.metadataTools.toPath( versionRef ) );<a name="line.259"></a>
<span class="sourceLineNo">260</span>                return;<a name="line.260"></a>
<span class="sourceLineNo">261</span>            }<a name="line.261"></a>
<span class="sourceLineNo">262</span><a name="line.262"></a>
<span class="sourceLineNo">263</span>            metadataTools.updateMetadata( this.repository, versionRef );<a name="line.263"></a>
<span class="sourceLineNo">264</span>            log.debug( "Updated metadata: {}", this.metadataTools.toPath( versionRef ) );<a name="line.264"></a>
<span class="sourceLineNo">265</span>        }<a name="line.265"></a>
<span class="sourceLineNo">266</span>        catch ( LayoutException e )<a name="line.266"></a>
<span class="sourceLineNo">267</span>        {<a name="line.267"></a>
<span class="sourceLineNo">268</span>            log.warn( "Unable to convert path [{}] to an internal version reference: ", path, e );<a name="line.268"></a>
<span class="sourceLineNo">269</span>            triggerConsumerWarning( TYPE_METADATA_BAD_INTERNAL_REF,<a name="line.269"></a>
<span class="sourceLineNo">270</span>                "Unable to convert path [" + path + "] to an internal version reference: "<a name="line.270"></a>
<span class="sourceLineNo">271</span>                    + e.getMessage( ) );<a name="line.271"></a>
<span class="sourceLineNo">272</span>        }<a name="line.272"></a>
<span class="sourceLineNo">273</span>        catch ( RepositoryMetadataException e )<a name="line.273"></a>
<span class="sourceLineNo">274</span>        {<a name="line.274"></a>
<span class="sourceLineNo">275</span>            log.error( "Unable to write version metadata for artifact [{}]: ", path, e );<a name="line.275"></a>
<span class="sourceLineNo">276</span>            triggerConsumerError( TYPE_METADATA_WRITE_FAILURE,<a name="line.276"></a>
<span class="sourceLineNo">277</span>                "Unable to write version metadata for artifact [" + path + "]: " + e.getMessage( ) );<a name="line.277"></a>
<span class="sourceLineNo">278</span>        }<a name="line.278"></a>
<span class="sourceLineNo">279</span>        catch ( IOException e )<a name="line.279"></a>
<span class="sourceLineNo">280</span>        {<a name="line.280"></a>
<span class="sourceLineNo">281</span>            log.warn( "Version metadata not written due to IO warning: ", e );<a name="line.281"></a>
<span class="sourceLineNo">282</span>            triggerConsumerWarning( TYPE_METADATA_IO,<a name="line.282"></a>
<span class="sourceLineNo">283</span>                "Version metadata not written due to IO warning: " + e.getMessage( ) );<a name="line.283"></a>
<span class="sourceLineNo">284</span>        }<a name="line.284"></a>
<span class="sourceLineNo">285</span>        catch ( ContentNotFoundException e )<a name="line.285"></a>
<span class="sourceLineNo">286</span>        {<a name="line.286"></a>
<span class="sourceLineNo">287</span>            log.warn( "Version metadata not written because no versions were found to update: ", e );<a name="line.287"></a>
<span class="sourceLineNo">288</span>            triggerConsumerWarning( TYPE_METADATA_IO,<a name="line.288"></a>
<span class="sourceLineNo">289</span>                "Version metadata not written because no versions were found to update: "<a name="line.289"></a>
<span class="sourceLineNo">290</span>                    + e.getMessage( ) );<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>    @Override<a name="line.295"></a>
<span class="sourceLineNo">296</span>    public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )<a name="line.296"></a>
<span class="sourceLineNo">297</span>    {<a name="line.297"></a>
<span class="sourceLineNo">298</span>        if ( ConfigurationNames.isRepositoryScanning( propertyName ) )<a name="line.298"></a>
<span class="sourceLineNo">299</span>        {<a name="line.299"></a>
<span class="sourceLineNo">300</span>            initIncludes();<a name="line.300"></a>
<span class="sourceLineNo">301</span>        }<a name="line.301"></a>
<span class="sourceLineNo">302</span>    }<a name="line.302"></a>
<span class="sourceLineNo">303</span><a name="line.303"></a>
<span class="sourceLineNo">304</span>    @Override<a name="line.304"></a>
<span class="sourceLineNo">305</span>    public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )<a name="line.305"></a>
<span class="sourceLineNo">306</span>    {<a name="line.306"></a>
<span class="sourceLineNo">307</span>        // do nothing here<a name="line.307"></a>
<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
<span class="sourceLineNo">309</span>    */<a name="line.309"></a>
<span class="sourceLineNo">310</span><a name="line.310"></a>
<span class="sourceLineNo">311</span>    private void initIncludes( )<a name="line.311"></a>
<span class="sourceLineNo">312</span>    {<a name="line.312"></a>
<span class="sourceLineNo">313</span>        includes = new ArrayList&lt;&gt;( filetypes.getFileTypePatterns( FileTypes.ARTIFACTS ) );<a name="line.313"></a>
<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
<span class="sourceLineNo">315</span><a name="line.315"></a>
<span class="sourceLineNo">316</span>    @PostConstruct<a name="line.316"></a>
<span class="sourceLineNo">317</span>    public void initialize( )<a name="line.317"></a>
<span class="sourceLineNo">318</span>    {<a name="line.318"></a>
<span class="sourceLineNo">319</span>        //configuration.addChangeListener( this );<a name="line.319"></a>
<span class="sourceLineNo">320</span><a name="line.320"></a>
<span class="sourceLineNo">321</span>        initIncludes( );<a name="line.321"></a>
<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
<span class="sourceLineNo">323</span>}<a name="line.323"></a>




























































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