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




























































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