<!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.metadata.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.metadata.model.ArtifactMetadata;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.archiva.metadata.model.ProjectMetadata;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.archiva.metadata.model.ProjectVersionMetadata;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.archiva.metadata.model.ProjectVersionReference;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.archiva.metadata.repository.filter.ExcludesFilter;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.archiva.metadata.repository.storage.ReadMetadataRequest;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.archiva.metadata.repository.storage.RepositoryStorage;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataInvalidException;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataNotFoundException;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.archiva.metadata.repository.storage.RepositoryStorageRuntimeException;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.archiva.redback.components.cache.Cache;<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.slf4j.Logger;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.slf4j.LoggerFactory;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.springframework.beans.factory.annotation.Autowired;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.springframework.stereotype.Service;<a name="line.37"></a>
<span class="sourceLineNo">038</span><a name="line.38"></a>
<span class="sourceLineNo">039</span>import javax.inject.Inject;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import javax.inject.Named;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import java.util.ArrayList;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import java.util.Collection;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import java.util.List;<a name="line.43"></a>
<span class="sourceLineNo">044</span><a name="line.44"></a>
<span class="sourceLineNo">045</span>/**<a name="line.45"></a>
<span class="sourceLineNo">046</span> * &lt;p&gt;<a name="line.46"></a>
<span class="sourceLineNo">047</span> * Default implementation of the metadata resolver API. At present it will handle updating the content repository<a name="line.47"></a>
<span class="sourceLineNo">048</span> * from new or changed information in the model and artifacts from the repository storage.<a name="line.48"></a>
<span class="sourceLineNo">049</span> * &lt;/p&gt;<a name="line.49"></a>
<span class="sourceLineNo">050</span> * &lt;p&gt;<a name="line.50"></a>
<span class="sourceLineNo">051</span> * This is a singleton component to allow an alternate implementation to be provided. It is intended to be the same<a name="line.51"></a>
<span class="sourceLineNo">052</span> * system-wide for the whole content repository instead of on a per-managed-repository basis. Therefore, the session is<a name="line.52"></a>
<span class="sourceLineNo">053</span> * passed in as an argument to obtain any necessary resources, rather than the class being instantiated within the<a name="line.53"></a>
<span class="sourceLineNo">054</span> * session in the context of a single managed repository's resolution needs.<a name="line.54"></a>
<span class="sourceLineNo">055</span> * &lt;/p&gt;<a name="line.55"></a>
<span class="sourceLineNo">056</span> * &lt;p&gt;<a name="line.56"></a>
<span class="sourceLineNo">057</span> * Note that the caller is responsible for the session, such as closing and saving (which is implied by the resolver<a name="line.57"></a>
<span class="sourceLineNo">058</span> * being obtained from within the session). The {@link RepositorySession#markDirty()} method is used as a hint to ensure<a name="line.58"></a>
<span class="sourceLineNo">059</span> * that the session knows we've made changes at close. We cannot ensure the changes will be persisted if the caller<a name="line.59"></a>
<span class="sourceLineNo">060</span> * chooses to revert first. This is preferable to storing the metadata immediately - a separate session would require<a name="line.60"></a>
<span class="sourceLineNo">061</span> * having a bi-directional link with the session factory, and saving the existing session might save other changes<a name="line.61"></a>
<span class="sourceLineNo">062</span> * unknowingly by the caller.<a name="line.62"></a>
<span class="sourceLineNo">063</span> * &lt;/p&gt;<a name="line.63"></a>
<span class="sourceLineNo">064</span> */<a name="line.64"></a>
<span class="sourceLineNo">065</span>@Service("metadataResolver#default")<a name="line.65"></a>
<span class="sourceLineNo">066</span>public class DefaultMetadataResolver<a name="line.66"></a>
<span class="sourceLineNo">067</span>    implements MetadataResolver<a name="line.67"></a>
<span class="sourceLineNo">068</span>{<a name="line.68"></a>
<span class="sourceLineNo">069</span><a name="line.69"></a>
<span class="sourceLineNo">070</span>    private Logger log = LoggerFactory.getLogger( DefaultMetadataResolver.class );<a name="line.70"></a>
<span class="sourceLineNo">071</span><a name="line.71"></a>
<span class="sourceLineNo">072</span>    /**<a name="line.72"></a>
<span class="sourceLineNo">073</span>     * &lt;p&gt;<a name="line.73"></a>
<span class="sourceLineNo">074</span>     * FIXME: this needs to be configurable based on storage type - and could also be instantiated per repo. Change to a<a name="line.74"></a>
<span class="sourceLineNo">075</span>     * factory, and perhaps retrieve from the session. We should avoid creating one per request, however.<a name="line.75"></a>
<span class="sourceLineNo">076</span>     * &lt;/p&gt;<a name="line.76"></a>
<span class="sourceLineNo">077</span>     * &lt;p&gt;<a name="line.77"></a>
<span class="sourceLineNo">078</span>     * TODO: Also need to accommodate availability of proxy module<a name="line.78"></a>
<span class="sourceLineNo">079</span>     * ... could be a different type since we need methods to modify the storage metadata, which would also allow more<a name="line.79"></a>
<span class="sourceLineNo">080</span>     * appropriate methods to pass in the already determined repository configuration, for example, instead of the ID<a name="line.80"></a>
<span class="sourceLineNo">081</span>     * &lt;/p&gt;<a name="line.81"></a>
<span class="sourceLineNo">082</span>     */<a name="line.82"></a>
<span class="sourceLineNo">083</span>    @Inject<a name="line.83"></a>
<span class="sourceLineNo">084</span>    @Named(value = "repositoryStorage#maven2")<a name="line.84"></a>
<span class="sourceLineNo">085</span>    private RepositoryStorage repositoryStorage;<a name="line.85"></a>
<span class="sourceLineNo">086</span><a name="line.86"></a>
<span class="sourceLineNo">087</span>    @Inject<a name="line.87"></a>
<span class="sourceLineNo">088</span>    @Autowired(required = false)<a name="line.88"></a>
<span class="sourceLineNo">089</span>    private List&lt;RepositoryListener&gt; listeners = new ArrayList&lt;&gt;();<a name="line.89"></a>
<span class="sourceLineNo">090</span><a name="line.90"></a>
<span class="sourceLineNo">091</span>    /**<a name="line.91"></a>
<span class="sourceLineNo">092</span>     * Cache used for namespaces<a name="line.92"></a>
<span class="sourceLineNo">093</span>     */<a name="line.93"></a>
<span class="sourceLineNo">094</span>    @Inject<a name="line.94"></a>
<span class="sourceLineNo">095</span>    @Named( value = "cache#namespaces" )<a name="line.95"></a>
<span class="sourceLineNo">096</span>    private Cache&lt;String, Collection&lt;String&gt;&gt; namespacesCache;<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 ProjectVersionMetadata resolveProjectVersion( RepositorySession session, String repoId, String namespace,<a name="line.99"></a>
<span class="sourceLineNo">100</span>                                                         String projectId, String projectVersion )<a name="line.100"></a>
<span class="sourceLineNo">101</span>        throws MetadataResolutionException<a name="line.101"></a>
<span class="sourceLineNo">102</span>    {<a name="line.102"></a>
<span class="sourceLineNo">103</span>        MetadataRepository metadataRepository = session.getRepository();<a name="line.103"></a>
<span class="sourceLineNo">104</span><a name="line.104"></a>
<span class="sourceLineNo">105</span>        ProjectVersionMetadata metadata =<a name="line.105"></a>
<span class="sourceLineNo">106</span>            metadataRepository.getProjectVersion( repoId, namespace, projectId, projectVersion );<a name="line.106"></a>
<span class="sourceLineNo">107</span>        // TODO: do we want to detect changes as well by comparing timestamps? isProjectVersionNewerThan(updated)<a name="line.107"></a>
<span class="sourceLineNo">108</span>        //       in such cases we might also remove/update stale metadata, including adjusting plugin-based facets<a name="line.108"></a>
<span class="sourceLineNo">109</span>        //       This would also be better than checking for completeness - we can then refresh only when fixed (though<a name="line.109"></a>
<span class="sourceLineNo">110</span>        //       sometimes this has an additional dependency - such as a parent - requesting the user to force an update<a name="line.110"></a>
<span class="sourceLineNo">111</span>        //       may then work here and be more efficient than always trying again)<a name="line.111"></a>
<span class="sourceLineNo">112</span>        if ( metadata == null || metadata.isIncomplete() )<a name="line.112"></a>
<span class="sourceLineNo">113</span>        {<a name="line.113"></a>
<span class="sourceLineNo">114</span>            try<a name="line.114"></a>
<span class="sourceLineNo">115</span>            {<a name="line.115"></a>
<span class="sourceLineNo">116</span>                ReadMetadataRequest readMetadataRequest =<a name="line.116"></a>
<span class="sourceLineNo">117</span>                    new ReadMetadataRequest().repositoryId( repoId ).namespace( namespace ).projectId(<a name="line.117"></a>
<span class="sourceLineNo">118</span>                        projectId ).projectVersion( projectVersion ).browsingRequest( true );<a name="line.118"></a>
<span class="sourceLineNo">119</span>                metadata = repositoryStorage.readProjectVersionMetadata( readMetadataRequest );<a name="line.119"></a>
<span class="sourceLineNo">120</span><a name="line.120"></a>
<span class="sourceLineNo">121</span>                log.debug( "Resolved project version metadata from storage: {}", metadata );<a name="line.121"></a>
<span class="sourceLineNo">122</span><a name="line.122"></a>
<span class="sourceLineNo">123</span>                // FIXME: make this a more generic post-processing that plugins can take advantage of<a name="line.123"></a>
<span class="sourceLineNo">124</span>                //       eg. maven projects should be able to process parent here<a name="line.124"></a>
<span class="sourceLineNo">125</span>                if ( !metadata.getDependencies().isEmpty() )<a name="line.125"></a>
<span class="sourceLineNo">126</span>                {<a name="line.126"></a>
<span class="sourceLineNo">127</span>                    ProjectVersionReference ref = new ProjectVersionReference();<a name="line.127"></a>
<span class="sourceLineNo">128</span>                    ref.setNamespace( namespace );<a name="line.128"></a>
<span class="sourceLineNo">129</span>                    ref.setProjectId( projectId );<a name="line.129"></a>
<span class="sourceLineNo">130</span>                    ref.setProjectVersion( projectVersion );<a name="line.130"></a>
<span class="sourceLineNo">131</span>                    ref.setReferenceType( ProjectVersionReference.ReferenceType.DEPENDENCY );<a name="line.131"></a>
<span class="sourceLineNo">132</span>                }<a name="line.132"></a>
<span class="sourceLineNo">133</span>                try<a name="line.133"></a>
<span class="sourceLineNo">134</span>                {<a name="line.134"></a>
<span class="sourceLineNo">135</span>                    for ( RepositoryListener listener : listeners )<a name="line.135"></a>
<span class="sourceLineNo">136</span>                    {<a name="line.136"></a>
<span class="sourceLineNo">137</span>                        listener.addArtifact( session, repoId, namespace, projectId, metadata );<a name="line.137"></a>
<span class="sourceLineNo">138</span>                    }<a name="line.138"></a>
<span class="sourceLineNo">139</span>                    metadataRepository.updateProjectVersion( repoId, namespace, projectId, metadata );<a name="line.139"></a>
<span class="sourceLineNo">140</span>                }<a name="line.140"></a>
<span class="sourceLineNo">141</span>                catch ( MetadataRepositoryException e )<a name="line.141"></a>
<span class="sourceLineNo">142</span>                {<a name="line.142"></a>
<span class="sourceLineNo">143</span>                    log.warn( "Unable to persist resolved information: {}", e.getMessage(), e );<a name="line.143"></a>
<span class="sourceLineNo">144</span>                }<a name="line.144"></a>
<span class="sourceLineNo">145</span><a name="line.145"></a>
<span class="sourceLineNo">146</span>                session.markDirty();<a name="line.146"></a>
<span class="sourceLineNo">147</span>            }<a name="line.147"></a>
<span class="sourceLineNo">148</span>            catch ( RepositoryStorageMetadataInvalidException e )<a name="line.148"></a>
<span class="sourceLineNo">149</span>            {<a name="line.149"></a>
<span class="sourceLineNo">150</span>                for ( RepositoryListener listener : listeners )<a name="line.150"></a>
<span class="sourceLineNo">151</span>                {<a name="line.151"></a>
<span class="sourceLineNo">152</span>                    listener.addArtifactProblem( session, repoId, namespace, projectId, projectVersion, e );<a name="line.152"></a>
<span class="sourceLineNo">153</span>                }<a name="line.153"></a>
<span class="sourceLineNo">154</span>                throw new MetadataResolutionException( e.getMessage(), e );<a name="line.154"></a>
<span class="sourceLineNo">155</span>            }<a name="line.155"></a>
<span class="sourceLineNo">156</span>            catch ( RepositoryStorageMetadataNotFoundException e )<a name="line.156"></a>
<span class="sourceLineNo">157</span>            {<a name="line.157"></a>
<span class="sourceLineNo">158</span>                for ( RepositoryListener listener : listeners )<a name="line.158"></a>
<span class="sourceLineNo">159</span>                {<a name="line.159"></a>
<span class="sourceLineNo">160</span>                    listener.addArtifactProblem( session, repoId, namespace, projectId, projectVersion, e );<a name="line.160"></a>
<span class="sourceLineNo">161</span>                }<a name="line.161"></a>
<span class="sourceLineNo">162</span>                // no need to rethrow - return null<a name="line.162"></a>
<span class="sourceLineNo">163</span>            }<a name="line.163"></a>
<span class="sourceLineNo">164</span>            catch ( RepositoryStorageRuntimeException e )<a name="line.164"></a>
<span class="sourceLineNo">165</span>            {<a name="line.165"></a>
<span class="sourceLineNo">166</span>                for ( RepositoryListener listener : listeners )<a name="line.166"></a>
<span class="sourceLineNo">167</span>                {<a name="line.167"></a>
<span class="sourceLineNo">168</span>                    listener.addArtifactProblem( session, repoId, namespace, projectId, projectVersion, e );<a name="line.168"></a>
<span class="sourceLineNo">169</span>                }<a name="line.169"></a>
<span class="sourceLineNo">170</span>                throw new MetadataResolutionException( e.getMessage(), e );<a name="line.170"></a>
<span class="sourceLineNo">171</span>            }<a name="line.171"></a>
<span class="sourceLineNo">172</span><a name="line.172"></a>
<span class="sourceLineNo">173</span>        }<a name="line.173"></a>
<span class="sourceLineNo">174</span>        return metadata;<a name="line.174"></a>
<span class="sourceLineNo">175</span>    }<a name="line.175"></a>
<span class="sourceLineNo">176</span><a name="line.176"></a>
<span class="sourceLineNo">177</span>    @Override<a name="line.177"></a>
<span class="sourceLineNo">178</span>    public Collection&lt;ProjectVersionReference&gt; resolveProjectReferences( RepositorySession session, String repoId,<a name="line.178"></a>
<span class="sourceLineNo">179</span>                                                                         String namespace, String projectId,<a name="line.179"></a>
<span class="sourceLineNo">180</span>                                                                         String projectVersion )<a name="line.180"></a>
<span class="sourceLineNo">181</span>        throws MetadataResolutionException<a name="line.181"></a>
<span class="sourceLineNo">182</span>    {<a name="line.182"></a>
<span class="sourceLineNo">183</span>        // TODO: is this assumption correct? could a storage mech. actually know all references in a non-Maven scenario?<a name="line.183"></a>
<span class="sourceLineNo">184</span>        // not passed to the storage mechanism as resolving references would require iterating all artifacts<a name="line.184"></a>
<span class="sourceLineNo">185</span>        MetadataRepository metadataRepository = session.getRepository();<a name="line.185"></a>
<span class="sourceLineNo">186</span>        return metadataRepository.getProjectReferences( repoId, namespace, projectId, projectVersion );<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>    @Override<a name="line.189"></a>
<span class="sourceLineNo">190</span>    public Collection&lt;String&gt; resolveRootNamespaces( RepositorySession session, String repoId )<a name="line.190"></a>
<span class="sourceLineNo">191</span>        throws MetadataResolutionException<a name="line.191"></a>
<span class="sourceLineNo">192</span>    {<a name="line.192"></a>
<span class="sourceLineNo">193</span>        try<a name="line.193"></a>
<span class="sourceLineNo">194</span>        {<a name="line.194"></a>
<span class="sourceLineNo">195</span><a name="line.195"></a>
<span class="sourceLineNo">196</span>            Collection&lt;String&gt; namespaces = namespacesCache.get( repoId );<a name="line.196"></a>
<span class="sourceLineNo">197</span>            if ( namespaces != null )<a name="line.197"></a>
<span class="sourceLineNo">198</span>            {<a name="line.198"></a>
<span class="sourceLineNo">199</span>                return namespaces;<a name="line.199"></a>
<span class="sourceLineNo">200</span>            }<a name="line.200"></a>
<span class="sourceLineNo">201</span><a name="line.201"></a>
<span class="sourceLineNo">202</span>            MetadataRepository metadataRepository = session.getRepository();<a name="line.202"></a>
<span class="sourceLineNo">203</span>            namespaces = metadataRepository.getRootNamespaces( repoId );<a name="line.203"></a>
<span class="sourceLineNo">204</span>            Collection&lt;String&gt; storageNamespaces =<a name="line.204"></a>
<span class="sourceLineNo">205</span>                repositoryStorage.listRootNamespaces( repoId, new ExcludesFilter&lt;String&gt;( namespaces ) );<a name="line.205"></a>
<span class="sourceLineNo">206</span>            if ( storageNamespaces != null &amp;&amp; !storageNamespaces.isEmpty() )<a name="line.206"></a>
<span class="sourceLineNo">207</span>            {<a name="line.207"></a>
<span class="sourceLineNo">208</span><a name="line.208"></a>
<span class="sourceLineNo">209</span>                log.debug( "Resolved root namespaces from storage: {}", storageNamespaces );<a name="line.209"></a>
<span class="sourceLineNo">210</span><a name="line.210"></a>
<span class="sourceLineNo">211</span>                for ( String n : storageNamespaces )<a name="line.211"></a>
<span class="sourceLineNo">212</span>                {<a name="line.212"></a>
<span class="sourceLineNo">213</span>                    try<a name="line.213"></a>
<span class="sourceLineNo">214</span>                    {<a name="line.214"></a>
<span class="sourceLineNo">215</span>                        metadataRepository.updateNamespace( repoId, n );<a name="line.215"></a>
<span class="sourceLineNo">216</span>                        // just invalidate cache entry<a name="line.216"></a>
<span class="sourceLineNo">217</span>                        String cacheKey = repoId + "-" + n;<a name="line.217"></a>
<span class="sourceLineNo">218</span>                        namespacesCache.remove( cacheKey );<a name="line.218"></a>
<span class="sourceLineNo">219</span>                    }<a name="line.219"></a>
<span class="sourceLineNo">220</span>                    catch ( MetadataRepositoryException e )<a name="line.220"></a>
<span class="sourceLineNo">221</span>                    {<a name="line.221"></a>
<span class="sourceLineNo">222</span>                        log.warn( "Unable to persist resolved information: {}", e.getMessage(), e );<a name="line.222"></a>
<span class="sourceLineNo">223</span>                    }<a name="line.223"></a>
<span class="sourceLineNo">224</span>                }<a name="line.224"></a>
<span class="sourceLineNo">225</span>                session.markDirty();<a name="line.225"></a>
<span class="sourceLineNo">226</span><a name="line.226"></a>
<span class="sourceLineNo">227</span>                namespaces = new ArrayList&lt;&gt;( namespaces );<a name="line.227"></a>
<span class="sourceLineNo">228</span>                namespaces.addAll( storageNamespaces );<a name="line.228"></a>
<span class="sourceLineNo">229</span>            }<a name="line.229"></a>
<span class="sourceLineNo">230</span><a name="line.230"></a>
<span class="sourceLineNo">231</span>            namespacesCache.put( repoId, namespaces );<a name="line.231"></a>
<span class="sourceLineNo">232</span><a name="line.232"></a>
<span class="sourceLineNo">233</span>            return namespaces;<a name="line.233"></a>
<span class="sourceLineNo">234</span>        }<a name="line.234"></a>
<span class="sourceLineNo">235</span>        catch ( RepositoryStorageRuntimeException e )<a name="line.235"></a>
<span class="sourceLineNo">236</span>        {<a name="line.236"></a>
<span class="sourceLineNo">237</span>            throw new MetadataResolutionException( e.getMessage(), e );<a name="line.237"></a>
<span class="sourceLineNo">238</span>        }<a name="line.238"></a>
<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
<span class="sourceLineNo">240</span><a name="line.240"></a>
<span class="sourceLineNo">241</span>    @Override<a name="line.241"></a>
<span class="sourceLineNo">242</span>    public Collection&lt;String&gt; resolveNamespaces( RepositorySession session, String repoId, String namespace )<a name="line.242"></a>
<span class="sourceLineNo">243</span>        throws MetadataResolutionException<a name="line.243"></a>
<span class="sourceLineNo">244</span>    {<a name="line.244"></a>
<span class="sourceLineNo">245</span>        try<a name="line.245"></a>
<span class="sourceLineNo">246</span>        {<a name="line.246"></a>
<span class="sourceLineNo">247</span>            MetadataRepository metadataRepository = session.getRepository();<a name="line.247"></a>
<span class="sourceLineNo">248</span>            String cacheKey = repoId + "-" + namespace;<a name="line.248"></a>
<span class="sourceLineNo">249</span>            Collection&lt;String&gt; namespaces = namespacesCache.get( cacheKey );<a name="line.249"></a>
<span class="sourceLineNo">250</span>            if ( namespaces == null )<a name="line.250"></a>
<span class="sourceLineNo">251</span>            {<a name="line.251"></a>
<span class="sourceLineNo">252</span>                namespaces = metadataRepository.getNamespaces( repoId, namespace );<a name="line.252"></a>
<span class="sourceLineNo">253</span>                namespacesCache.put( cacheKey, namespaces );<a name="line.253"></a>
<span class="sourceLineNo">254</span>            }<a name="line.254"></a>
<span class="sourceLineNo">255</span>            Collection&lt;String&gt; exclusions = new ArrayList&lt;&gt;( namespaces );<a name="line.255"></a>
<span class="sourceLineNo">256</span>            exclusions.addAll( metadataRepository.getProjects( repoId, namespace ) );<a name="line.256"></a>
<span class="sourceLineNo">257</span>            Collection&lt;String&gt; storageNamespaces =<a name="line.257"></a>
<span class="sourceLineNo">258</span>                repositoryStorage.listNamespaces( repoId, namespace, new ExcludesFilter&lt;String&gt;( exclusions ) );<a name="line.258"></a>
<span class="sourceLineNo">259</span>            if ( storageNamespaces != null &amp;&amp; !storageNamespaces.isEmpty() )<a name="line.259"></a>
<span class="sourceLineNo">260</span>            {<a name="line.260"></a>
<span class="sourceLineNo">261</span><a name="line.261"></a>
<span class="sourceLineNo">262</span>                log.debug( "Resolved namespaces from storage: {}", storageNamespaces );<a name="line.262"></a>
<span class="sourceLineNo">263</span><a name="line.263"></a>
<span class="sourceLineNo">264</span>                for ( String n : storageNamespaces )<a name="line.264"></a>
<span class="sourceLineNo">265</span>                {<a name="line.265"></a>
<span class="sourceLineNo">266</span>                    try<a name="line.266"></a>
<span class="sourceLineNo">267</span>                    {<a name="line.267"></a>
<span class="sourceLineNo">268</span>                        metadataRepository.updateNamespace( repoId, namespace + "." + n );<a name="line.268"></a>
<span class="sourceLineNo">269</span>                        // just invalidate cache entry<a name="line.269"></a>
<span class="sourceLineNo">270</span>                        cacheKey = repoId + "-" + namespace + "." + n;<a name="line.270"></a>
<span class="sourceLineNo">271</span>                        namespacesCache.remove( cacheKey );<a name="line.271"></a>
<span class="sourceLineNo">272</span>                    }<a name="line.272"></a>
<span class="sourceLineNo">273</span>                    catch ( MetadataRepositoryException e )<a name="line.273"></a>
<span class="sourceLineNo">274</span>                    {<a name="line.274"></a>
<span class="sourceLineNo">275</span>                        log.warn( "Unable to persist resolved information: {}", e.getMessage(), e );<a name="line.275"></a>
<span class="sourceLineNo">276</span>                    }<a name="line.276"></a>
<span class="sourceLineNo">277</span>                }<a name="line.277"></a>
<span class="sourceLineNo">278</span>                session.markDirty();<a name="line.278"></a>
<span class="sourceLineNo">279</span><a name="line.279"></a>
<span class="sourceLineNo">280</span>                namespaces = new ArrayList&lt;&gt;( namespaces );<a name="line.280"></a>
<span class="sourceLineNo">281</span>                namespaces.addAll( storageNamespaces );<a name="line.281"></a>
<span class="sourceLineNo">282</span>            }<a name="line.282"></a>
<span class="sourceLineNo">283</span>            return namespaces;<a name="line.283"></a>
<span class="sourceLineNo">284</span>        }<a name="line.284"></a>
<span class="sourceLineNo">285</span>        catch ( RepositoryStorageRuntimeException e )<a name="line.285"></a>
<span class="sourceLineNo">286</span>        {<a name="line.286"></a>
<span class="sourceLineNo">287</span>            throw new MetadataResolutionException( e.getMessage(), e );<a name="line.287"></a>
<span class="sourceLineNo">288</span>        }<a name="line.288"></a>
<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
<span class="sourceLineNo">290</span><a name="line.290"></a>
<span class="sourceLineNo">291</span>    @Override<a name="line.291"></a>
<span class="sourceLineNo">292</span>    public Collection&lt;String&gt; resolveProjects( RepositorySession session, String repoId, String namespace )<a name="line.292"></a>
<span class="sourceLineNo">293</span>        throws MetadataResolutionException<a name="line.293"></a>
<span class="sourceLineNo">294</span>    {<a name="line.294"></a>
<span class="sourceLineNo">295</span>        try<a name="line.295"></a>
<span class="sourceLineNo">296</span>        {<a name="line.296"></a>
<span class="sourceLineNo">297</span>            MetadataRepository metadataRepository = session.getRepository();<a name="line.297"></a>
<span class="sourceLineNo">298</span>            Collection&lt;String&gt; projects = metadataRepository.getProjects( repoId, namespace );<a name="line.298"></a>
<span class="sourceLineNo">299</span>            Collection&lt;String&gt; exclusions = new ArrayList&lt;&gt;( projects );<a name="line.299"></a>
<span class="sourceLineNo">300</span><a name="line.300"></a>
<span class="sourceLineNo">301</span>            String cacheKey = repoId + "-" + namespace;<a name="line.301"></a>
<span class="sourceLineNo">302</span>            Collection&lt;String&gt; namespaces = namespacesCache.get( cacheKey );<a name="line.302"></a>
<span class="sourceLineNo">303</span>            if ( namespaces == null )<a name="line.303"></a>
<span class="sourceLineNo">304</span>            {<a name="line.304"></a>
<span class="sourceLineNo">305</span>                namespaces = metadataRepository.getNamespaces( repoId, namespace );<a name="line.305"></a>
<span class="sourceLineNo">306</span>                namespacesCache.put( cacheKey, namespaces );<a name="line.306"></a>
<span class="sourceLineNo">307</span>            }<a name="line.307"></a>
<span class="sourceLineNo">308</span><a name="line.308"></a>
<span class="sourceLineNo">309</span>            exclusions.addAll( namespaces );<a name="line.309"></a>
<span class="sourceLineNo">310</span><a name="line.310"></a>
<span class="sourceLineNo">311</span>            Collection&lt;String&gt; storageProjects =<a name="line.311"></a>
<span class="sourceLineNo">312</span>                repositoryStorage.listProjects( repoId, namespace, new ExcludesFilter&lt;&gt;( exclusions ) );<a name="line.312"></a>
<span class="sourceLineNo">313</span>            if ( storageProjects != null &amp;&amp; !storageProjects.isEmpty() )<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>                log.debug( "Resolved projects from storage: {}", storageProjects );<a name="line.316"></a>
<span class="sourceLineNo">317</span>                for ( String projectId : storageProjects )<a name="line.317"></a>
<span class="sourceLineNo">318</span>                {<a name="line.318"></a>
<span class="sourceLineNo">319</span>                    ProjectMetadata projectMetadata =<a name="line.319"></a>
<span class="sourceLineNo">320</span>                        repositoryStorage.readProjectMetadata( repoId, namespace, projectId );<a name="line.320"></a>
<span class="sourceLineNo">321</span>                    if ( projectMetadata != null )<a name="line.321"></a>
<span class="sourceLineNo">322</span>                    {<a name="line.322"></a>
<span class="sourceLineNo">323</span>                        try<a name="line.323"></a>
<span class="sourceLineNo">324</span>                        {<a name="line.324"></a>
<span class="sourceLineNo">325</span>                            metadataRepository.updateProject( repoId, projectMetadata );<a name="line.325"></a>
<span class="sourceLineNo">326</span>                        }<a name="line.326"></a>
<span class="sourceLineNo">327</span>                        catch ( MetadataRepositoryException e )<a name="line.327"></a>
<span class="sourceLineNo">328</span>                        {<a name="line.328"></a>
<span class="sourceLineNo">329</span>                            log.warn( "Unable to persist resolved information: {}", e.getMessage(), e );<a name="line.329"></a>
<span class="sourceLineNo">330</span>                        }<a name="line.330"></a>
<span class="sourceLineNo">331</span>                    }<a name="line.331"></a>
<span class="sourceLineNo">332</span>                }<a name="line.332"></a>
<span class="sourceLineNo">333</span>                session.markDirty();<a name="line.333"></a>
<span class="sourceLineNo">334</span><a name="line.334"></a>
<span class="sourceLineNo">335</span>                projects = new ArrayList&lt;&gt;( projects );<a name="line.335"></a>
<span class="sourceLineNo">336</span>                projects.addAll( storageProjects );<a name="line.336"></a>
<span class="sourceLineNo">337</span>            }<a name="line.337"></a>
<span class="sourceLineNo">338</span>            return projects;<a name="line.338"></a>
<span class="sourceLineNo">339</span>        }<a name="line.339"></a>
<span class="sourceLineNo">340</span>        catch ( RepositoryStorageRuntimeException e )<a name="line.340"></a>
<span class="sourceLineNo">341</span>        {<a name="line.341"></a>
<span class="sourceLineNo">342</span>            throw new MetadataResolutionException( e.getMessage(), e );<a name="line.342"></a>
<span class="sourceLineNo">343</span>        }<a name="line.343"></a>
<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
<span class="sourceLineNo">345</span><a name="line.345"></a>
<span class="sourceLineNo">346</span>    @Override<a name="line.346"></a>
<span class="sourceLineNo">347</span>    public Collection&lt;String&gt; resolveProjectVersions( RepositorySession session, String repoId, String namespace,<a name="line.347"></a>
<span class="sourceLineNo">348</span>                                                      String projectId )<a name="line.348"></a>
<span class="sourceLineNo">349</span>        throws MetadataResolutionException<a name="line.349"></a>
<span class="sourceLineNo">350</span>    {<a name="line.350"></a>
<span class="sourceLineNo">351</span>        try<a name="line.351"></a>
<span class="sourceLineNo">352</span>        {<a name="line.352"></a>
<span class="sourceLineNo">353</span>            MetadataRepository metadataRepository = session.getRepository();<a name="line.353"></a>
<span class="sourceLineNo">354</span><a name="line.354"></a>
<span class="sourceLineNo">355</span>            Collection&lt;String&gt; projectVersions = metadataRepository.getProjectVersions( repoId, namespace, projectId );<a name="line.355"></a>
<span class="sourceLineNo">356</span>            Collection&lt;String&gt; storageProjectVersions =<a name="line.356"></a>
<span class="sourceLineNo">357</span>                repositoryStorage.listProjectVersions( repoId, namespace, projectId,<a name="line.357"></a>
<span class="sourceLineNo">358</span>                                                       new ExcludesFilter&lt;String&gt;( projectVersions ) );<a name="line.358"></a>
<span class="sourceLineNo">359</span>            if ( storageProjectVersions != null &amp;&amp; !storageProjectVersions.isEmpty() )<a name="line.359"></a>
<span class="sourceLineNo">360</span>            {<a name="line.360"></a>
<span class="sourceLineNo">361</span>                log.debug( "Resolved project versions from storage: {}", storageProjectVersions );<a name="line.361"></a>
<span class="sourceLineNo">362</span><a name="line.362"></a>
<span class="sourceLineNo">363</span>                for ( String projectVersion : storageProjectVersions )<a name="line.363"></a>
<span class="sourceLineNo">364</span>                {<a name="line.364"></a>
<span class="sourceLineNo">365</span>                    try<a name="line.365"></a>
<span class="sourceLineNo">366</span>                    {<a name="line.366"></a>
<span class="sourceLineNo">367</span>                        ReadMetadataRequest readMetadataRequest =<a name="line.367"></a>
<span class="sourceLineNo">368</span>                            new ReadMetadataRequest().repositoryId( repoId ).namespace( namespace ).projectId(<a name="line.368"></a>
<span class="sourceLineNo">369</span>                                projectId ).projectVersion( projectVersion );<a name="line.369"></a>
<span class="sourceLineNo">370</span>                        ProjectVersionMetadata versionMetadata =<a name="line.370"></a>
<span class="sourceLineNo">371</span>                            repositoryStorage.readProjectVersionMetadata( readMetadataRequest );<a name="line.371"></a>
<span class="sourceLineNo">372</span>                        for ( RepositoryListener listener : listeners )<a name="line.372"></a>
<span class="sourceLineNo">373</span>                        {<a name="line.373"></a>
<span class="sourceLineNo">374</span>                            listener.addArtifact( session, repoId, namespace, projectId, versionMetadata );<a name="line.374"></a>
<span class="sourceLineNo">375</span>                        }<a name="line.375"></a>
<span class="sourceLineNo">376</span><a name="line.376"></a>
<span class="sourceLineNo">377</span>                        metadataRepository.updateProjectVersion( repoId, namespace, projectId, versionMetadata );<a name="line.377"></a>
<span class="sourceLineNo">378</span>                    }<a name="line.378"></a>
<span class="sourceLineNo">379</span>                    catch ( MetadataRepositoryException e )<a name="line.379"></a>
<span class="sourceLineNo">380</span>                    {<a name="line.380"></a>
<span class="sourceLineNo">381</span>                        log.warn( "Unable to persist resolved information: {}", e.getMessage(), e );<a name="line.381"></a>
<span class="sourceLineNo">382</span>                    }<a name="line.382"></a>
<span class="sourceLineNo">383</span>                    catch ( RepositoryStorageMetadataInvalidException e )<a name="line.383"></a>
<span class="sourceLineNo">384</span>                    {<a name="line.384"></a>
<span class="sourceLineNo">385</span>                        log.warn(<a name="line.385"></a>
<span class="sourceLineNo">386</span>                            "Not update project in metadata repository due to an error resolving it from storage: {}",<a name="line.386"></a>
<span class="sourceLineNo">387</span>                            e.getMessage() );<a name="line.387"></a>
<span class="sourceLineNo">388</span><a name="line.388"></a>
<span class="sourceLineNo">389</span>                        for ( RepositoryListener listener : listeners )<a name="line.389"></a>
<span class="sourceLineNo">390</span>                        {<a name="line.390"></a>
<span class="sourceLineNo">391</span>                            listener.addArtifactProblem( session, repoId, namespace, projectId, projectVersion, e );<a name="line.391"></a>
<span class="sourceLineNo">392</span>                        }<a name="line.392"></a>
<span class="sourceLineNo">393</span>                    }<a name="line.393"></a>
<span class="sourceLineNo">394</span>                    catch ( RepositoryStorageMetadataNotFoundException e )<a name="line.394"></a>
<span class="sourceLineNo">395</span>                    {<a name="line.395"></a>
<span class="sourceLineNo">396</span>                        for ( RepositoryListener listener : listeners )<a name="line.396"></a>
<span class="sourceLineNo">397</span>                        {<a name="line.397"></a>
<span class="sourceLineNo">398</span>                            listener.addArtifactProblem( session, repoId, namespace, projectId, projectVersion, e );<a name="line.398"></a>
<span class="sourceLineNo">399</span>                        }<a name="line.399"></a>
<span class="sourceLineNo">400</span>                    }<a name="line.400"></a>
<span class="sourceLineNo">401</span>                }<a name="line.401"></a>
<span class="sourceLineNo">402</span>                session.markDirty();<a name="line.402"></a>
<span class="sourceLineNo">403</span><a name="line.403"></a>
<span class="sourceLineNo">404</span>                projectVersions = new ArrayList&lt;&gt;( projectVersions );<a name="line.404"></a>
<span class="sourceLineNo">405</span>                projectVersions.addAll( storageProjectVersions );<a name="line.405"></a>
<span class="sourceLineNo">406</span>            }<a name="line.406"></a>
<span class="sourceLineNo">407</span>            return projectVersions;<a name="line.407"></a>
<span class="sourceLineNo">408</span>        }<a name="line.408"></a>
<span class="sourceLineNo">409</span>        catch ( RepositoryStorageRuntimeException e )<a name="line.409"></a>
<span class="sourceLineNo">410</span>        {<a name="line.410"></a>
<span class="sourceLineNo">411</span>            throw new MetadataResolutionException( e.getMessage(), e );<a name="line.411"></a>
<span class="sourceLineNo">412</span>        }<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>    @Override<a name="line.415"></a>
<span class="sourceLineNo">416</span>    public Collection&lt;ArtifactMetadata&gt; resolveArtifacts( RepositorySession session, String repoId, String namespace,<a name="line.416"></a>
<span class="sourceLineNo">417</span>                                                          String projectId, String projectVersion )<a name="line.417"></a>
<span class="sourceLineNo">418</span>        throws MetadataResolutionException<a name="line.418"></a>
<span class="sourceLineNo">419</span>    {<a name="line.419"></a>
<span class="sourceLineNo">420</span>        try<a name="line.420"></a>
<span class="sourceLineNo">421</span>        {<a name="line.421"></a>
<span class="sourceLineNo">422</span>            MetadataRepository metadataRepository = session.getRepository();<a name="line.422"></a>
<span class="sourceLineNo">423</span>            Collection&lt;ArtifactMetadata&gt; artifacts =<a name="line.423"></a>
<span class="sourceLineNo">424</span>                metadataRepository.getArtifacts( repoId, namespace, projectId, projectVersion );<a name="line.424"></a>
<span class="sourceLineNo">425</span>            ExcludesFilter&lt;String&gt; filter = new ExcludesFilter&lt;String&gt;( createArtifactIdList( artifacts ) );<a name="line.425"></a>
<span class="sourceLineNo">426</span><a name="line.426"></a>
<span class="sourceLineNo">427</span>            ReadMetadataRequest readMetadataRequest =<a name="line.427"></a>
<span class="sourceLineNo">428</span>                new ReadMetadataRequest().repositoryId( repoId ).namespace( namespace ).projectId(<a name="line.428"></a>
<span class="sourceLineNo">429</span>                    projectId ).projectVersion( projectVersion ).filter( filter );<a name="line.429"></a>
<span class="sourceLineNo">430</span><a name="line.430"></a>
<span class="sourceLineNo">431</span>            Collection&lt;ArtifactMetadata&gt; storageArtifacts =<a name="line.431"></a>
<span class="sourceLineNo">432</span>                repositoryStorage.readArtifactsMetadata( readMetadataRequest );<a name="line.432"></a>
<span class="sourceLineNo">433</span>            if ( storageArtifacts != null &amp;&amp; !storageArtifacts.isEmpty() )<a name="line.433"></a>
<span class="sourceLineNo">434</span>            {<a name="line.434"></a>
<span class="sourceLineNo">435</span><a name="line.435"></a>
<span class="sourceLineNo">436</span>                log.debug( "Resolved artifacts from storage: {}", storageArtifacts );<a name="line.436"></a>
<span class="sourceLineNo">437</span><a name="line.437"></a>
<span class="sourceLineNo">438</span>                for ( ArtifactMetadata artifact : storageArtifacts )<a name="line.438"></a>
<span class="sourceLineNo">439</span>                {<a name="line.439"></a>
<span class="sourceLineNo">440</span>                    try<a name="line.440"></a>
<span class="sourceLineNo">441</span>                    {<a name="line.441"></a>
<span class="sourceLineNo">442</span>                        metadataRepository.updateArtifact( repoId, namespace, projectId, projectVersion, artifact );<a name="line.442"></a>
<span class="sourceLineNo">443</span>                    }<a name="line.443"></a>
<span class="sourceLineNo">444</span>                    catch ( MetadataRepositoryException e )<a name="line.444"></a>
<span class="sourceLineNo">445</span>                    {<a name="line.445"></a>
<span class="sourceLineNo">446</span>                        log.warn( "Unable to persist resolved information: {}", e.getMessage(), e );<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>
<span class="sourceLineNo">449</span>                session.markDirty();<a name="line.449"></a>
<span class="sourceLineNo">450</span><a name="line.450"></a>
<span class="sourceLineNo">451</span>                artifacts = new ArrayList&lt;&gt;( artifacts );<a name="line.451"></a>
<span class="sourceLineNo">452</span>                artifacts.addAll( storageArtifacts );<a name="line.452"></a>
<span class="sourceLineNo">453</span>            }<a name="line.453"></a>
<span class="sourceLineNo">454</span>            return artifacts;<a name="line.454"></a>
<span class="sourceLineNo">455</span>        }<a name="line.455"></a>
<span class="sourceLineNo">456</span>        catch ( RepositoryStorageRuntimeException e )<a name="line.456"></a>
<span class="sourceLineNo">457</span>        {<a name="line.457"></a>
<span class="sourceLineNo">458</span>            for ( RepositoryListener listener : listeners )<a name="line.458"></a>
<span class="sourceLineNo">459</span>            {<a name="line.459"></a>
<span class="sourceLineNo">460</span>                listener.addArtifactProblem( session, repoId, namespace, projectId, projectVersion, e );<a name="line.460"></a>
<span class="sourceLineNo">461</span>            }<a name="line.461"></a>
<span class="sourceLineNo">462</span>            throw new MetadataResolutionException( e.getMessage(), e );<a name="line.462"></a>
<span class="sourceLineNo">463</span>        }<a name="line.463"></a>
<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
<span class="sourceLineNo">465</span><a name="line.465"></a>
<span class="sourceLineNo">466</span>    private Collection&lt;String&gt; createArtifactIdList( Collection&lt;ArtifactMetadata&gt; artifacts )<a name="line.466"></a>
<span class="sourceLineNo">467</span>    {<a name="line.467"></a>
<span class="sourceLineNo">468</span>        Collection&lt;String&gt; artifactIds = new ArrayList&lt;&gt;();<a name="line.468"></a>
<span class="sourceLineNo">469</span>        for ( ArtifactMetadata artifact : artifacts )<a name="line.469"></a>
<span class="sourceLineNo">470</span>        {<a name="line.470"></a>
<span class="sourceLineNo">471</span>            artifactIds.add( artifact.getId() );<a name="line.471"></a>
<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
<span class="sourceLineNo">473</span>        return artifactIds;<a name="line.473"></a>
<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
<span class="sourceLineNo">475</span>}<a name="line.475"></a>




























































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