<!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.cassandra;<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 com.google.common.base.Predicate;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import com.google.common.collect.Iterables;<a name="line.23"></a>
<span class="sourceLineNo">024</span><a name="line.24"></a>
<span class="sourceLineNo">025</span>import me.prettyprint.cassandra.serializers.LongSerializer;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import me.prettyprint.cassandra.serializers.StringSerializer;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import me.prettyprint.cassandra.service.template.ColumnFamilyResult;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import me.prettyprint.cassandra.service.template.ColumnFamilyTemplate;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import me.prettyprint.cassandra.service.template.ColumnFamilyUpdater;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import me.prettyprint.cassandra.service.template.ThriftColumnFamilyTemplate;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import me.prettyprint.hector.api.Keyspace;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import me.prettyprint.hector.api.beans.ColumnSlice;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import me.prettyprint.hector.api.beans.OrderedRows;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import me.prettyprint.hector.api.beans.Row;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import me.prettyprint.hector.api.exceptions.HInvalidRequestException;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import me.prettyprint.hector.api.factory.HFactory;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import me.prettyprint.hector.api.mutation.MutationResult;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import me.prettyprint.hector.api.mutation.Mutator;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import me.prettyprint.hector.api.query.QueryResult;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import me.prettyprint.hector.api.query.RangeSlicesQuery;<a name="line.40"></a>
<span class="sourceLineNo">041</span><a name="line.41"></a>
<span class="sourceLineNo">042</span>import org.apache.archiva.configuration.ArchivaConfiguration;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.archiva.metadata.model.ArtifactMetadata;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.archiva.metadata.model.CiManagement;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import org.apache.archiva.metadata.model.Dependency;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import org.apache.archiva.metadata.model.FacetedMetadata;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.apache.archiva.metadata.model.IssueManagement;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.archiva.metadata.model.License;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import org.apache.archiva.metadata.model.MailingList;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import org.apache.archiva.metadata.model.MetadataFacet;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import org.apache.archiva.metadata.model.MetadataFacetFactory;<a name="line.51"></a>
<span class="sourceLineNo">052</span>import org.apache.archiva.metadata.model.Organization;<a name="line.52"></a>
<span class="sourceLineNo">053</span>import org.apache.archiva.metadata.model.ProjectMetadata;<a name="line.53"></a>
<span class="sourceLineNo">054</span>import org.apache.archiva.metadata.model.ProjectVersionMetadata;<a name="line.54"></a>
<span class="sourceLineNo">055</span>import org.apache.archiva.metadata.model.ProjectVersionReference;<a name="line.55"></a>
<span class="sourceLineNo">056</span>import org.apache.archiva.metadata.model.Scm;<a name="line.56"></a>
<span class="sourceLineNo">057</span>import org.apache.archiva.metadata.repository.MetadataRepository;<a name="line.57"></a>
<span class="sourceLineNo">058</span>import org.apache.archiva.metadata.repository.MetadataRepositoryException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import org.apache.archiva.metadata.repository.MetadataResolutionException;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import org.apache.archiva.metadata.repository.cassandra.model.ArtifactMetadataModel;<a name="line.60"></a>
<span class="sourceLineNo">061</span>import org.apache.archiva.metadata.repository.cassandra.model.MetadataFacetModel;<a name="line.61"></a>
<span class="sourceLineNo">062</span>import org.apache.archiva.metadata.repository.cassandra.model.Namespace;<a name="line.62"></a>
<span class="sourceLineNo">063</span>import org.apache.archiva.metadata.repository.cassandra.model.Project;<a name="line.63"></a>
<span class="sourceLineNo">064</span>import org.apache.archiva.metadata.repository.cassandra.model.ProjectVersionMetadataModel;<a name="line.64"></a>
<span class="sourceLineNo">065</span>import org.apache.archiva.metadata.repository.cassandra.model.Repository;<a name="line.65"></a>
<span class="sourceLineNo">066</span>import org.apache.commons.lang.StringUtils;<a name="line.66"></a>
<span class="sourceLineNo">067</span>import org.modelmapper.ModelMapper;<a name="line.67"></a>
<span class="sourceLineNo">068</span>import org.slf4j.Logger;<a name="line.68"></a>
<span class="sourceLineNo">069</span>import org.slf4j.LoggerFactory;<a name="line.69"></a>
<span class="sourceLineNo">070</span><a name="line.70"></a>
<span class="sourceLineNo">071</span>import javax.persistence.PersistenceException;<a name="line.71"></a>
<span class="sourceLineNo">072</span><a name="line.72"></a>
<span class="sourceLineNo">073</span>import java.util.ArrayList;<a name="line.73"></a>
<span class="sourceLineNo">074</span>import java.util.Collection;<a name="line.74"></a>
<span class="sourceLineNo">075</span>import java.util.Collections;<a name="line.75"></a>
<span class="sourceLineNo">076</span>import java.util.Date;<a name="line.76"></a>
<span class="sourceLineNo">077</span>import java.util.HashMap;<a name="line.77"></a>
<span class="sourceLineNo">078</span>import java.util.HashSet;<a name="line.78"></a>
<span class="sourceLineNo">079</span>import java.util.Iterator;<a name="line.79"></a>
<span class="sourceLineNo">080</span>import java.util.LinkedList;<a name="line.80"></a>
<span class="sourceLineNo">081</span>import java.util.List;<a name="line.81"></a>
<span class="sourceLineNo">082</span>import java.util.Map;<a name="line.82"></a>
<span class="sourceLineNo">083</span>import java.util.Set;<a name="line.83"></a>
<span class="sourceLineNo">084</span>import java.util.UUID;<a name="line.84"></a>
<span class="sourceLineNo">085</span><a name="line.85"></a>
<span class="sourceLineNo">086</span>import static org.apache.archiva.metadata.repository.cassandra.CassandraUtils.*;<a name="line.86"></a>
<span class="sourceLineNo">087</span>import static org.apache.archiva.metadata.repository.cassandra.model.ColumnNames.*;<a name="line.87"></a>
<span class="sourceLineNo">088</span><a name="line.88"></a>
<span class="sourceLineNo">089</span>/**<a name="line.89"></a>
<span class="sourceLineNo">090</span> * @author Olivier Lamy<a name="line.90"></a>
<span class="sourceLineNo">091</span> * @since 2.0.0<a name="line.91"></a>
<span class="sourceLineNo">092</span> */<a name="line.92"></a>
<span class="sourceLineNo">093</span>public class CassandraMetadataRepository<a name="line.93"></a>
<span class="sourceLineNo">094</span>    implements MetadataRepository<a name="line.94"></a>
<span class="sourceLineNo">095</span>{<a name="line.95"></a>
<span class="sourceLineNo">096</span><a name="line.96"></a>
<span class="sourceLineNo">097</span>    private Logger logger = LoggerFactory.getLogger( getClass() );<a name="line.97"></a>
<span class="sourceLineNo">098</span><a name="line.98"></a>
<span class="sourceLineNo">099</span>    private ArchivaConfiguration configuration;<a name="line.99"></a>
<span class="sourceLineNo">100</span><a name="line.100"></a>
<span class="sourceLineNo">101</span>    private final Map&lt;String, MetadataFacetFactory&gt; metadataFacetFactories;<a name="line.101"></a>
<span class="sourceLineNo">102</span><a name="line.102"></a>
<span class="sourceLineNo">103</span>    private final CassandraArchivaManager cassandraArchivaManager;<a name="line.103"></a>
<span class="sourceLineNo">104</span><a name="line.104"></a>
<span class="sourceLineNo">105</span>    private final ColumnFamilyTemplate&lt;String, String&gt; projectVersionMetadataTemplate;<a name="line.105"></a>
<span class="sourceLineNo">106</span><a name="line.106"></a>
<span class="sourceLineNo">107</span>    private final ColumnFamilyTemplate&lt;String, String&gt; projectTemplate;<a name="line.107"></a>
<span class="sourceLineNo">108</span><a name="line.108"></a>
<span class="sourceLineNo">109</span>    private final ColumnFamilyTemplate&lt;String, String&gt; artifactMetadataTemplate;<a name="line.109"></a>
<span class="sourceLineNo">110</span><a name="line.110"></a>
<span class="sourceLineNo">111</span>    private final ColumnFamilyTemplate&lt;String, String&gt; metadataFacetTemplate;<a name="line.111"></a>
<span class="sourceLineNo">112</span><a name="line.112"></a>
<span class="sourceLineNo">113</span>    private final ColumnFamilyTemplate&lt;String, String&gt; mailingListTemplate;<a name="line.113"></a>
<span class="sourceLineNo">114</span><a name="line.114"></a>
<span class="sourceLineNo">115</span>    private final ColumnFamilyTemplate&lt;String, String&gt; licenseTemplate;<a name="line.115"></a>
<span class="sourceLineNo">116</span><a name="line.116"></a>
<span class="sourceLineNo">117</span>    private final ColumnFamilyTemplate&lt;String, String&gt; dependencyTemplate;<a name="line.117"></a>
<span class="sourceLineNo">118</span><a name="line.118"></a>
<span class="sourceLineNo">119</span>    private final Keyspace keyspace;<a name="line.119"></a>
<span class="sourceLineNo">120</span><a name="line.120"></a>
<span class="sourceLineNo">121</span>    private final StringSerializer ss = StringSerializer.get();<a name="line.121"></a>
<span class="sourceLineNo">122</span><a name="line.122"></a>
<span class="sourceLineNo">123</span>    public CassandraMetadataRepository( Map&lt;String, MetadataFacetFactory&gt; metadataFacetFactories,<a name="line.123"></a>
<span class="sourceLineNo">124</span>                                        ArchivaConfiguration configuration,<a name="line.124"></a>
<span class="sourceLineNo">125</span>                                        CassandraArchivaManager cassandraArchivaManager )<a name="line.125"></a>
<span class="sourceLineNo">126</span>    {<a name="line.126"></a>
<span class="sourceLineNo">127</span>        this.metadataFacetFactories = metadataFacetFactories;<a name="line.127"></a>
<span class="sourceLineNo">128</span>        this.configuration = configuration;<a name="line.128"></a>
<span class="sourceLineNo">129</span>        this.cassandraArchivaManager = cassandraArchivaManager;<a name="line.129"></a>
<span class="sourceLineNo">130</span>        this.keyspace = cassandraArchivaManager.getKeyspace();<a name="line.130"></a>
<span class="sourceLineNo">131</span><a name="line.131"></a>
<span class="sourceLineNo">132</span>        this.projectVersionMetadataTemplate =<a name="line.132"></a>
<span class="sourceLineNo">133</span>            new ThriftColumnFamilyTemplate&lt;&gt;( cassandraArchivaManager.getKeyspace(), //<a name="line.133"></a>
<span class="sourceLineNo">134</span>                                              cassandraArchivaManager.getProjectVersionMetadataFamilyName(), //<a name="line.134"></a>
<span class="sourceLineNo">135</span>                                              StringSerializer.get(), //<a name="line.135"></a>
<span class="sourceLineNo">136</span>                                              StringSerializer.get() );<a name="line.136"></a>
<span class="sourceLineNo">137</span><a name="line.137"></a>
<span class="sourceLineNo">138</span>        this.projectTemplate = new ThriftColumnFamilyTemplate&lt;&gt;( cassandraArchivaManager.getKeyspace(), //<a name="line.138"></a>
<span class="sourceLineNo">139</span>                                                                 cassandraArchivaManager.getProjectFamilyName(), //<a name="line.139"></a>
<span class="sourceLineNo">140</span>                                                                 //<a name="line.140"></a>
<span class="sourceLineNo">141</span>                                                                 StringSerializer.get(), //<a name="line.141"></a>
<span class="sourceLineNo">142</span>                                                                 StringSerializer.get() );<a name="line.142"></a>
<span class="sourceLineNo">143</span><a name="line.143"></a>
<span class="sourceLineNo">144</span>        this.artifactMetadataTemplate = new ThriftColumnFamilyTemplate&lt;&gt;( cassandraArchivaManager.getKeyspace(), //<a name="line.144"></a>
<span class="sourceLineNo">145</span>                                                                          cassandraArchivaManager.getArtifactMetadataFamilyName(),<a name="line.145"></a>
<span class="sourceLineNo">146</span>                                                                          StringSerializer.get(), //<a name="line.146"></a>
<span class="sourceLineNo">147</span>                                                                          StringSerializer.get() );<a name="line.147"></a>
<span class="sourceLineNo">148</span><a name="line.148"></a>
<span class="sourceLineNo">149</span>        this.metadataFacetTemplate = new ThriftColumnFamilyTemplate&lt;&gt;( cassandraArchivaManager.getKeyspace(), //<a name="line.149"></a>
<span class="sourceLineNo">150</span>                                                                       cassandraArchivaManager.getMetadataFacetFamilyName(),<a name="line.150"></a>
<span class="sourceLineNo">151</span>                                                                       //<a name="line.151"></a>
<span class="sourceLineNo">152</span>                                                                       StringSerializer.get(), //<a name="line.152"></a>
<span class="sourceLineNo">153</span>                                                                       StringSerializer.get() );<a name="line.153"></a>
<span class="sourceLineNo">154</span><a name="line.154"></a>
<span class="sourceLineNo">155</span>        this.mailingListTemplate = new ThriftColumnFamilyTemplate&lt;&gt;( cassandraArchivaManager.getKeyspace(), //<a name="line.155"></a>
<span class="sourceLineNo">156</span>                                                                     cassandraArchivaManager.getMailingListFamilyName(),<a name="line.156"></a>
<span class="sourceLineNo">157</span>                                                                     //<a name="line.157"></a>
<span class="sourceLineNo">158</span>                                                                     StringSerializer.get(), //<a name="line.158"></a>
<span class="sourceLineNo">159</span>                                                                     StringSerializer.get() );<a name="line.159"></a>
<span class="sourceLineNo">160</span><a name="line.160"></a>
<span class="sourceLineNo">161</span>        this.licenseTemplate = new ThriftColumnFamilyTemplate&lt;&gt;( cassandraArchivaManager.getKeyspace(), //<a name="line.161"></a>
<span class="sourceLineNo">162</span>                                                                 cassandraArchivaManager.getLicenseFamilyName(),<a name="line.162"></a>
<span class="sourceLineNo">163</span>                                                                 //<a name="line.163"></a>
<span class="sourceLineNo">164</span>                                                                 StringSerializer.get(), //<a name="line.164"></a>
<span class="sourceLineNo">165</span>                                                                 StringSerializer.get() );<a name="line.165"></a>
<span class="sourceLineNo">166</span><a name="line.166"></a>
<span class="sourceLineNo">167</span>        this.dependencyTemplate = new ThriftColumnFamilyTemplate&lt;&gt;( cassandraArchivaManager.getKeyspace(), //<a name="line.167"></a>
<span class="sourceLineNo">168</span>                                                                    cassandraArchivaManager.getDependencyFamilyName(),<a name="line.168"></a>
<span class="sourceLineNo">169</span>                                                                    //<a name="line.169"></a>
<span class="sourceLineNo">170</span>                                                                    StringSerializer.get(), //<a name="line.170"></a>
<span class="sourceLineNo">171</span>                                                                    StringSerializer.get() );<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><a name="line.174"></a>
<span class="sourceLineNo">175</span>    /**<a name="line.175"></a>
<span class="sourceLineNo">176</span>     * if the repository doesn't exist it will be created<a name="line.176"></a>
<span class="sourceLineNo">177</span>     *<a name="line.177"></a>
<span class="sourceLineNo">178</span>     * @param repositoryId<a name="line.178"></a>
<span class="sourceLineNo">179</span>     * @return<a name="line.179"></a>
<span class="sourceLineNo">180</span>     */<a name="line.180"></a>
<span class="sourceLineNo">181</span>    public Repository getOrCreateRepository( String repositoryId )<a name="line.181"></a>
<span class="sourceLineNo">182</span>        throws MetadataRepositoryException<a name="line.182"></a>
<span class="sourceLineNo">183</span>    {<a name="line.183"></a>
<span class="sourceLineNo">184</span>        String cf = cassandraArchivaManager.getRepositoryFamilyName();<a name="line.184"></a>
<span class="sourceLineNo">185</span><a name="line.185"></a>
<span class="sourceLineNo">186</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.186"></a>
<span class="sourceLineNo">187</span>            .createRangeSlicesQuery( keyspace, StringSerializer.get(), StringSerializer.get(),<a name="line.187"></a>
<span class="sourceLineNo">188</span>                                     StringSerializer.get() ) //<a name="line.188"></a>
<span class="sourceLineNo">189</span>            .setColumnFamily( cf ) //<a name="line.189"></a>
<span class="sourceLineNo">190</span>            .setColumnNames( REPOSITORY_NAME.toString() ) //<a name="line.190"></a>
<span class="sourceLineNo">191</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.191"></a>
<span class="sourceLineNo">192</span>            .execute();<a name="line.192"></a>
<span class="sourceLineNo">193</span><a name="line.193"></a>
<span class="sourceLineNo">194</span>        if ( result.get().getCount() &lt; 1 )<a name="line.194"></a>
<span class="sourceLineNo">195</span>        {<a name="line.195"></a>
<span class="sourceLineNo">196</span>            // we need to create the repository<a name="line.196"></a>
<span class="sourceLineNo">197</span>            Repository repository = new Repository( repositoryId );<a name="line.197"></a>
<span class="sourceLineNo">198</span><a name="line.198"></a>
<span class="sourceLineNo">199</span>            try<a name="line.199"></a>
<span class="sourceLineNo">200</span>            {<a name="line.200"></a>
<span class="sourceLineNo">201</span>                MutationResult mutationResult = HFactory.createMutator( keyspace, StringSerializer.get() ) //<a name="line.201"></a>
<span class="sourceLineNo">202</span>                    .addInsertion( repositoryId, cf,<a name="line.202"></a>
<span class="sourceLineNo">203</span>                                   CassandraUtils.column( REPOSITORY_NAME.toString(), repository.getName() ) ) //<a name="line.203"></a>
<span class="sourceLineNo">204</span>                    .execute();<a name="line.204"></a>
<span class="sourceLineNo">205</span>                logger.debug( "time to insert repository: {}", mutationResult.getExecutionTimeMicro() );<a name="line.205"></a>
<span class="sourceLineNo">206</span>                return repository;<a name="line.206"></a>
<span class="sourceLineNo">207</span>            }<a name="line.207"></a>
<span class="sourceLineNo">208</span>            catch ( HInvalidRequestException e )<a name="line.208"></a>
<span class="sourceLineNo">209</span>            {<a name="line.209"></a>
<span class="sourceLineNo">210</span>                logger.error( e.getMessage(), e );<a name="line.210"></a>
<span class="sourceLineNo">211</span>                throw new MetadataRepositoryException( e.getMessage(), e );<a name="line.211"></a>
<span class="sourceLineNo">212</span>            }<a name="line.212"></a>
<span class="sourceLineNo">213</span><a name="line.213"></a>
<span class="sourceLineNo">214</span>        }<a name="line.214"></a>
<span class="sourceLineNo">215</span><a name="line.215"></a>
<span class="sourceLineNo">216</span>        return new Repository(<a name="line.216"></a>
<span class="sourceLineNo">217</span>            result.get().getList().get( 0 ).getColumnSlice().getColumnByName( REPOSITORY_NAME.toString() ).getValue() );<a name="line.217"></a>
<span class="sourceLineNo">218</span>    }<a name="line.218"></a>
<span class="sourceLineNo">219</span><a name="line.219"></a>
<span class="sourceLineNo">220</span><a name="line.220"></a>
<span class="sourceLineNo">221</span>    protected Repository getRepository( String repositoryId )<a name="line.221"></a>
<span class="sourceLineNo">222</span>        throws MetadataRepositoryException<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>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.225"></a>
<span class="sourceLineNo">226</span>            .createRangeSlicesQuery( keyspace, StringSerializer.get(), StringSerializer.get(),<a name="line.226"></a>
<span class="sourceLineNo">227</span>                                     StringSerializer.get() ) //<a name="line.227"></a>
<span class="sourceLineNo">228</span>            .setColumnFamily( cassandraArchivaManager.getRepositoryFamilyName() ) //<a name="line.228"></a>
<span class="sourceLineNo">229</span>            .setColumnNames( REPOSITORY_NAME.toString() ) //<a name="line.229"></a>
<span class="sourceLineNo">230</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.230"></a>
<span class="sourceLineNo">231</span>            .execute();<a name="line.231"></a>
<span class="sourceLineNo">232</span>        return ( result.get().getCount() &gt; 0 ) ? new Repository( repositoryId ) : null;<a name="line.232"></a>
<span class="sourceLineNo">233</span>    }<a name="line.233"></a>
<span class="sourceLineNo">234</span><a name="line.234"></a>
<span class="sourceLineNo">235</span>    @Override<a name="line.235"></a>
<span class="sourceLineNo">236</span>    public void updateNamespace( String repositoryId, String namespaceId )<a name="line.236"></a>
<span class="sourceLineNo">237</span>        throws MetadataRepositoryException<a name="line.237"></a>
<span class="sourceLineNo">238</span>    {<a name="line.238"></a>
<span class="sourceLineNo">239</span>        updateOrAddNamespace( repositoryId, namespaceId );<a name="line.239"></a>
<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
<span class="sourceLineNo">241</span><a name="line.241"></a>
<span class="sourceLineNo">242</span>    private Namespace updateOrAddNamespace( String repositoryId, String namespaceId )<a name="line.242"></a>
<span class="sourceLineNo">243</span>        throws MetadataRepositoryException<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>            Repository repository = getOrCreateRepository( repositoryId );<a name="line.247"></a>
<span class="sourceLineNo">248</span><a name="line.248"></a>
<span class="sourceLineNo">249</span>            String key =<a name="line.249"></a>
<span class="sourceLineNo">250</span>                new Namespace.KeyBuilder().withNamespace( namespaceId ).withRepositoryId( repositoryId ).build();<a name="line.250"></a>
<span class="sourceLineNo">251</span><a name="line.251"></a>
<span class="sourceLineNo">252</span>            Namespace namespace = getNamespace( repositoryId, namespaceId );<a name="line.252"></a>
<span class="sourceLineNo">253</span>            if ( namespace == null )<a name="line.253"></a>
<span class="sourceLineNo">254</span>            {<a name="line.254"></a>
<span class="sourceLineNo">255</span>                String cf = cassandraArchivaManager.getNamespaceFamilyName();<a name="line.255"></a>
<span class="sourceLineNo">256</span>                namespace = new Namespace( namespaceId, repository );<a name="line.256"></a>
<span class="sourceLineNo">257</span>                HFactory.createMutator( keyspace, StringSerializer.get() )<a name="line.257"></a>
<span class="sourceLineNo">258</span>                    //  values<a name="line.258"></a>
<span class="sourceLineNo">259</span>                    .addInsertion( key, cf, CassandraUtils.column( NAME.toString(), namespace.getName() ) ) //<a name="line.259"></a>
<span class="sourceLineNo">260</span>                    .addInsertion( key, cf, CassandraUtils.column( REPOSITORY_NAME.toString(), repository.getName() ) ) //<a name="line.260"></a>
<span class="sourceLineNo">261</span>                    .execute();<a name="line.261"></a>
<span class="sourceLineNo">262</span>            }<a name="line.262"></a>
<span class="sourceLineNo">263</span><a name="line.263"></a>
<span class="sourceLineNo">264</span>            return namespace;<a name="line.264"></a>
<span class="sourceLineNo">265</span>        }<a name="line.265"></a>
<span class="sourceLineNo">266</span>        catch ( HInvalidRequestException e )<a name="line.266"></a>
<span class="sourceLineNo">267</span>        {<a name="line.267"></a>
<span class="sourceLineNo">268</span>            logger.error( e.getMessage(), e );<a name="line.268"></a>
<span class="sourceLineNo">269</span>            throw new MetadataRepositoryException( e.getMessage(), e );<a name="line.269"></a>
<span class="sourceLineNo">270</span>        }<a name="line.270"></a>
<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
<span class="sourceLineNo">272</span><a name="line.272"></a>
<span class="sourceLineNo">273</span>    protected Namespace getNamespace( String repositoryId, String namespaceId )<a name="line.273"></a>
<span class="sourceLineNo">274</span>    {<a name="line.274"></a>
<span class="sourceLineNo">275</span><a name="line.275"></a>
<span class="sourceLineNo">276</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.276"></a>
<span class="sourceLineNo">277</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.277"></a>
<span class="sourceLineNo">278</span>            .setColumnFamily( cassandraArchivaManager.getNamespaceFamilyName() ) //<a name="line.278"></a>
<span class="sourceLineNo">279</span>            .setColumnNames( REPOSITORY_NAME.toString(), NAME.toString() ) //<a name="line.279"></a>
<span class="sourceLineNo">280</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.280"></a>
<span class="sourceLineNo">281</span>            .addEqualsExpression( NAME.toString(), namespaceId ) //<a name="line.281"></a>
<span class="sourceLineNo">282</span>            .execute();<a name="line.282"></a>
<span class="sourceLineNo">283</span>        if ( result.get().getCount() &gt; 0 )<a name="line.283"></a>
<span class="sourceLineNo">284</span>        {<a name="line.284"></a>
<span class="sourceLineNo">285</span>            ColumnSlice&lt;String, String&gt; columnSlice = result.get().getList().get( 0 ).getColumnSlice();<a name="line.285"></a>
<span class="sourceLineNo">286</span>            return new Namespace( getStringValue( columnSlice, NAME.toString() ), //<a name="line.286"></a>
<span class="sourceLineNo">287</span>                                  new Repository( getStringValue( columnSlice, REPOSITORY_NAME.toString() ) ) );<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>        return null;<a name="line.290"></a>
<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
<span class="sourceLineNo">292</span><a name="line.292"></a>
<span class="sourceLineNo">293</span><a name="line.293"></a>
<span class="sourceLineNo">294</span>    @Override<a name="line.294"></a>
<span class="sourceLineNo">295</span>    public void removeNamespace( String repositoryId, String namespaceId )<a name="line.295"></a>
<span class="sourceLineNo">296</span>        throws MetadataRepositoryException<a name="line.296"></a>
<span class="sourceLineNo">297</span>    {<a name="line.297"></a>
<span class="sourceLineNo">298</span><a name="line.298"></a>
<span class="sourceLineNo">299</span>        try<a name="line.299"></a>
<span class="sourceLineNo">300</span>        {<a name="line.300"></a>
<span class="sourceLineNo">301</span>            String key = new Namespace.KeyBuilder() //<a name="line.301"></a>
<span class="sourceLineNo">302</span>                .withNamespace( namespaceId ) //<a name="line.302"></a>
<span class="sourceLineNo">303</span>                .withRepositoryId( repositoryId ) //<a name="line.303"></a>
<span class="sourceLineNo">304</span>                .build();<a name="line.304"></a>
<span class="sourceLineNo">305</span><a name="line.305"></a>
<span class="sourceLineNo">306</span>            HFactory.createMutator( cassandraArchivaManager.getKeyspace(), new StringSerializer() ) //<a name="line.306"></a>
<span class="sourceLineNo">307</span>                .addDeletion( key, cassandraArchivaManager.getNamespaceFamilyName() ) //<a name="line.307"></a>
<span class="sourceLineNo">308</span>                .execute();<a name="line.308"></a>
<span class="sourceLineNo">309</span><a name="line.309"></a>
<span class="sourceLineNo">310</span>            QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.310"></a>
<span class="sourceLineNo">311</span>                .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.311"></a>
<span class="sourceLineNo">312</span>                .setColumnFamily( cassandraArchivaManager.getProjectFamilyName() ) //<a name="line.312"></a>
<span class="sourceLineNo">313</span>                .setColumnNames( REPOSITORY_NAME.toString() ) //<a name="line.313"></a>
<span class="sourceLineNo">314</span>                .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.314"></a>
<span class="sourceLineNo">315</span>                .addEqualsExpression( NAMESPACE_ID.toString(), namespaceId ) //<a name="line.315"></a>
<span class="sourceLineNo">316</span>                .execute();<a name="line.316"></a>
<span class="sourceLineNo">317</span><a name="line.317"></a>
<span class="sourceLineNo">318</span>            for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.318"></a>
<span class="sourceLineNo">319</span>            {<a name="line.319"></a>
<span class="sourceLineNo">320</span>                this.projectTemplate.deleteRow( row.getKey() );<a name="line.320"></a>
<span class="sourceLineNo">321</span>            }<a name="line.321"></a>
<span class="sourceLineNo">322</span><a name="line.322"></a>
<span class="sourceLineNo">323</span>            result = HFactory //<a name="line.323"></a>
<span class="sourceLineNo">324</span>                .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.324"></a>
<span class="sourceLineNo">325</span>                .setColumnFamily( cassandraArchivaManager.getProjectVersionMetadataFamilyName() ) //<a name="line.325"></a>
<span class="sourceLineNo">326</span>                .setColumnNames( REPOSITORY_NAME.toString() ) //<a name="line.326"></a>
<span class="sourceLineNo">327</span>                .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.327"></a>
<span class="sourceLineNo">328</span>                .addEqualsExpression( NAMESPACE_ID.toString(), namespaceId ) //<a name="line.328"></a>
<span class="sourceLineNo">329</span>                .execute();<a name="line.329"></a>
<span class="sourceLineNo">330</span><a name="line.330"></a>
<span class="sourceLineNo">331</span>            for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.331"></a>
<span class="sourceLineNo">332</span>            {<a name="line.332"></a>
<span class="sourceLineNo">333</span>                this.projectVersionMetadataTemplate.deleteRow( row.getKey() );<a name="line.333"></a>
<span class="sourceLineNo">334</span>                removeMailingList( row.getKey() );<a name="line.334"></a>
<span class="sourceLineNo">335</span>            }<a name="line.335"></a>
<span class="sourceLineNo">336</span><a name="line.336"></a>
<span class="sourceLineNo">337</span>            result = HFactory //<a name="line.337"></a>
<span class="sourceLineNo">338</span>                .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.338"></a>
<span class="sourceLineNo">339</span>                .setColumnFamily( cassandraArchivaManager.getArtifactMetadataFamilyName() ) //<a name="line.339"></a>
<span class="sourceLineNo">340</span>                .setColumnNames( REPOSITORY_NAME.toString() ) //<a name="line.340"></a>
<span class="sourceLineNo">341</span>                .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.341"></a>
<span class="sourceLineNo">342</span>                .addEqualsExpression( NAMESPACE_ID.toString(), namespaceId ) //<a name="line.342"></a>
<span class="sourceLineNo">343</span>                .execute();<a name="line.343"></a>
<span class="sourceLineNo">344</span><a name="line.344"></a>
<span class="sourceLineNo">345</span>            for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.345"></a>
<span class="sourceLineNo">346</span>            {<a name="line.346"></a>
<span class="sourceLineNo">347</span>                this.artifactMetadataTemplate.deleteRow( row.getKey() );<a name="line.347"></a>
<span class="sourceLineNo">348</span>            }<a name="line.348"></a>
<span class="sourceLineNo">349</span><a name="line.349"></a>
<span class="sourceLineNo">350</span>            result = HFactory //<a name="line.350"></a>
<span class="sourceLineNo">351</span>                .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.351"></a>
<span class="sourceLineNo">352</span>                .setColumnFamily( cassandraArchivaManager.getMetadataFacetFamilyName() ) //<a name="line.352"></a>
<span class="sourceLineNo">353</span>                .setColumnNames( REPOSITORY_NAME.toString() ) //<a name="line.353"></a>
<span class="sourceLineNo">354</span>                .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.354"></a>
<span class="sourceLineNo">355</span>                .addEqualsExpression( NAMESPACE_ID.toString(), namespaceId ) //<a name="line.355"></a>
<span class="sourceLineNo">356</span>                .execute();<a name="line.356"></a>
<span class="sourceLineNo">357</span><a name="line.357"></a>
<span class="sourceLineNo">358</span>            for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.358"></a>
<span class="sourceLineNo">359</span>            {<a name="line.359"></a>
<span class="sourceLineNo">360</span>                this.metadataFacetTemplate.deleteRow( row.getKey() );<a name="line.360"></a>
<span class="sourceLineNo">361</span>            }<a name="line.361"></a>
<span class="sourceLineNo">362</span><a name="line.362"></a>
<span class="sourceLineNo">363</span>        }<a name="line.363"></a>
<span class="sourceLineNo">364</span>        catch ( HInvalidRequestException e )<a name="line.364"></a>
<span class="sourceLineNo">365</span>        {<a name="line.365"></a>
<span class="sourceLineNo">366</span>            logger.error( e.getMessage(), e );<a name="line.366"></a>
<span class="sourceLineNo">367</span>            throw new MetadataRepositoryException( e.getMessage(), e );<a name="line.367"></a>
<span class="sourceLineNo">368</span>        }<a name="line.368"></a>
<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
<span class="sourceLineNo">370</span><a name="line.370"></a>
<span class="sourceLineNo">371</span><a name="line.371"></a>
<span class="sourceLineNo">372</span>    @Override<a name="line.372"></a>
<span class="sourceLineNo">373</span>    public void removeRepository( final String repositoryId )<a name="line.373"></a>
<span class="sourceLineNo">374</span>        throws MetadataRepositoryException<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>        // TODO use cql queries to delete all<a name="line.377"></a>
<span class="sourceLineNo">378</span>        List&lt;String&gt; namespacesKey = new ArrayList&lt;&gt;();<a name="line.378"></a>
<span class="sourceLineNo">379</span><a name="line.379"></a>
<span class="sourceLineNo">380</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.380"></a>
<span class="sourceLineNo">381</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.381"></a>
<span class="sourceLineNo">382</span>            .setColumnFamily( cassandraArchivaManager.getNamespaceFamilyName() ) //<a name="line.382"></a>
<span class="sourceLineNo">383</span>            .setColumnNames( REPOSITORY_NAME.toString() ) //<a name="line.383"></a>
<span class="sourceLineNo">384</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.384"></a>
<span class="sourceLineNo">385</span>            .execute();<a name="line.385"></a>
<span class="sourceLineNo">386</span><a name="line.386"></a>
<span class="sourceLineNo">387</span>        for ( Row&lt;String, String, String&gt; row : result.get().getList() )<a name="line.387"></a>
<span class="sourceLineNo">388</span>        {<a name="line.388"></a>
<span class="sourceLineNo">389</span>            namespacesKey.add( row.getKey() );<a name="line.389"></a>
<span class="sourceLineNo">390</span>        }<a name="line.390"></a>
<span class="sourceLineNo">391</span><a name="line.391"></a>
<span class="sourceLineNo">392</span>        HFactory.createMutator( cassandraArchivaManager.getKeyspace(), ss ) //<a name="line.392"></a>
<span class="sourceLineNo">393</span>            .addDeletion( namespacesKey, cassandraArchivaManager.getNamespaceFamilyName() ) //<a name="line.393"></a>
<span class="sourceLineNo">394</span>            .execute();<a name="line.394"></a>
<span class="sourceLineNo">395</span><a name="line.395"></a>
<span class="sourceLineNo">396</span>        //delete repositoryId<a name="line.396"></a>
<span class="sourceLineNo">397</span>        HFactory.createMutator( cassandraArchivaManager.getKeyspace(), ss ) //<a name="line.397"></a>
<span class="sourceLineNo">398</span>            .addDeletion( repositoryId, cassandraArchivaManager.getRepositoryFamilyName() ) //<a name="line.398"></a>
<span class="sourceLineNo">399</span>            .execute();<a name="line.399"></a>
<span class="sourceLineNo">400</span><a name="line.400"></a>
<span class="sourceLineNo">401</span>        result = HFactory //<a name="line.401"></a>
<span class="sourceLineNo">402</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.402"></a>
<span class="sourceLineNo">403</span>            .setColumnFamily( cassandraArchivaManager.getProjectFamilyName() ) //<a name="line.403"></a>
<span class="sourceLineNo">404</span>            .setColumnNames( REPOSITORY_NAME.toString() ) //<a name="line.404"></a>
<span class="sourceLineNo">405</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.405"></a>
<span class="sourceLineNo">406</span>            .execute();<a name="line.406"></a>
<span class="sourceLineNo">407</span><a name="line.407"></a>
<span class="sourceLineNo">408</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.408"></a>
<span class="sourceLineNo">409</span>        {<a name="line.409"></a>
<span class="sourceLineNo">410</span>            this.projectTemplate.deleteRow( row.getKey() );<a name="line.410"></a>
<span class="sourceLineNo">411</span>        }<a name="line.411"></a>
<span class="sourceLineNo">412</span><a name="line.412"></a>
<span class="sourceLineNo">413</span>        result = HFactory //<a name="line.413"></a>
<span class="sourceLineNo">414</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.414"></a>
<span class="sourceLineNo">415</span>            .setColumnFamily( cassandraArchivaManager.getProjectVersionMetadataFamilyName() ) //<a name="line.415"></a>
<span class="sourceLineNo">416</span>            .setColumnNames( REPOSITORY_NAME.toString() ) //<a name="line.416"></a>
<span class="sourceLineNo">417</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.417"></a>
<span class="sourceLineNo">418</span>            .execute();<a name="line.418"></a>
<span class="sourceLineNo">419</span><a name="line.419"></a>
<span class="sourceLineNo">420</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.420"></a>
<span class="sourceLineNo">421</span>        {<a name="line.421"></a>
<span class="sourceLineNo">422</span>            this.projectVersionMetadataTemplate.deleteRow( row.getKey() );<a name="line.422"></a>
<span class="sourceLineNo">423</span>            removeMailingList( row.getKey() );<a name="line.423"></a>
<span class="sourceLineNo">424</span>        }<a name="line.424"></a>
<span class="sourceLineNo">425</span><a name="line.425"></a>
<span class="sourceLineNo">426</span>        result = HFactory //<a name="line.426"></a>
<span class="sourceLineNo">427</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.427"></a>
<span class="sourceLineNo">428</span>            .setColumnFamily( cassandraArchivaManager.getArtifactMetadataFamilyName() ) //<a name="line.428"></a>
<span class="sourceLineNo">429</span>            .setColumnNames( REPOSITORY_NAME.toString() ) //<a name="line.429"></a>
<span class="sourceLineNo">430</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.430"></a>
<span class="sourceLineNo">431</span>            .execute();<a name="line.431"></a>
<span class="sourceLineNo">432</span><a name="line.432"></a>
<span class="sourceLineNo">433</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.433"></a>
<span class="sourceLineNo">434</span>        {<a name="line.434"></a>
<span class="sourceLineNo">435</span>            this.artifactMetadataTemplate.deleteRow( row.getKey() );<a name="line.435"></a>
<span class="sourceLineNo">436</span>        }<a name="line.436"></a>
<span class="sourceLineNo">437</span><a name="line.437"></a>
<span class="sourceLineNo">438</span>        result = HFactory //<a name="line.438"></a>
<span class="sourceLineNo">439</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.439"></a>
<span class="sourceLineNo">440</span>            .setColumnFamily( cassandraArchivaManager.getMetadataFacetFamilyName() ) //<a name="line.440"></a>
<span class="sourceLineNo">441</span>            .setColumnNames( REPOSITORY_NAME.toString() ) //<a name="line.441"></a>
<span class="sourceLineNo">442</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.442"></a>
<span class="sourceLineNo">443</span>            .execute();<a name="line.443"></a>
<span class="sourceLineNo">444</span><a name="line.444"></a>
<span class="sourceLineNo">445</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.445"></a>
<span class="sourceLineNo">446</span>        {<a name="line.446"></a>
<span class="sourceLineNo">447</span>            this.metadataFacetTemplate.deleteRow( row.getKey() );<a name="line.447"></a>
<span class="sourceLineNo">448</span>        }<a name="line.448"></a>
<span class="sourceLineNo">449</span><a name="line.449"></a>
<span class="sourceLineNo">450</span><a name="line.450"></a>
<span class="sourceLineNo">451</span>    }<a name="line.451"></a>
<span class="sourceLineNo">452</span><a name="line.452"></a>
<span class="sourceLineNo">453</span>    @Override<a name="line.453"></a>
<span class="sourceLineNo">454</span>    public Collection&lt;String&gt; getRepositories()<a name="line.454"></a>
<span class="sourceLineNo">455</span>        throws MetadataRepositoryException<a name="line.455"></a>
<span class="sourceLineNo">456</span>    {<a name="line.456"></a>
<span class="sourceLineNo">457</span>        try<a name="line.457"></a>
<span class="sourceLineNo">458</span>        {<a name="line.458"></a>
<span class="sourceLineNo">459</span>            logger.debug( "getRepositories" );<a name="line.459"></a>
<span class="sourceLineNo">460</span><a name="line.460"></a>
<span class="sourceLineNo">461</span>            final QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; cResult = //<a name="line.461"></a>
<span class="sourceLineNo">462</span>                HFactory.createRangeSlicesQuery( cassandraArchivaManager.getKeyspace(), //<a name="line.462"></a>
<span class="sourceLineNo">463</span>                                                 ss, ss, ss ) //<a name="line.463"></a>
<span class="sourceLineNo">464</span>                    .setColumnFamily( cassandraArchivaManager.getRepositoryFamilyName() ) //<a name="line.464"></a>
<span class="sourceLineNo">465</span>                    .setColumnNames( REPOSITORY_NAME.toString() ) //<a name="line.465"></a>
<span class="sourceLineNo">466</span>                    .setRange( null, null, false, Integer.MAX_VALUE ) //<a name="line.466"></a>
<span class="sourceLineNo">467</span>                    .execute();<a name="line.467"></a>
<span class="sourceLineNo">468</span><a name="line.468"></a>
<span class="sourceLineNo">469</span>            List&lt;String&gt; repoIds = new ArrayList&lt;&gt;( cResult.get().getCount() );<a name="line.469"></a>
<span class="sourceLineNo">470</span><a name="line.470"></a>
<span class="sourceLineNo">471</span>            for ( Row&lt;String, String, String&gt; row : cResult.get() )<a name="line.471"></a>
<span class="sourceLineNo">472</span>            {<a name="line.472"></a>
<span class="sourceLineNo">473</span>                repoIds.add( getStringValue( row.getColumnSlice(), REPOSITORY_NAME.toString() ) );<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>
<span class="sourceLineNo">476</span>            return repoIds;<a name="line.476"></a>
<span class="sourceLineNo">477</span>        }<a name="line.477"></a>
<span class="sourceLineNo">478</span>        catch ( PersistenceException e )<a name="line.478"></a>
<span class="sourceLineNo">479</span>        {<a name="line.479"></a>
<span class="sourceLineNo">480</span>            throw new MetadataRepositoryException( e.getMessage(), e );<a name="line.480"></a>
<span class="sourceLineNo">481</span>        }<a name="line.481"></a>
<span class="sourceLineNo">482</span><a name="line.482"></a>
<span class="sourceLineNo">483</span>    }<a name="line.483"></a>
<span class="sourceLineNo">484</span><a name="line.484"></a>
<span class="sourceLineNo">485</span>    // FIXME this one need peformance improvement maybe a cache?<a name="line.485"></a>
<span class="sourceLineNo">486</span>    @Override<a name="line.486"></a>
<span class="sourceLineNo">487</span>    public Collection&lt;String&gt; getRootNamespaces( final String repoId )<a name="line.487"></a>
<span class="sourceLineNo">488</span>        throws MetadataResolutionException<a name="line.488"></a>
<span class="sourceLineNo">489</span>    {<a name="line.489"></a>
<span class="sourceLineNo">490</span><a name="line.490"></a>
<span class="sourceLineNo">491</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.491"></a>
<span class="sourceLineNo">492</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.492"></a>
<span class="sourceLineNo">493</span>            .setColumnFamily( cassandraArchivaManager.getNamespaceFamilyName() ) //<a name="line.493"></a>
<span class="sourceLineNo">494</span>            .setColumnNames( NAME.toString() ) //<a name="line.494"></a>
<span class="sourceLineNo">495</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repoId ) //<a name="line.495"></a>
<span class="sourceLineNo">496</span>            .execute();<a name="line.496"></a>
<span class="sourceLineNo">497</span><a name="line.497"></a>
<span class="sourceLineNo">498</span>        Set&lt;String&gt; namespaces = new HashSet&lt;String&gt;( result.get().getCount() );<a name="line.498"></a>
<span class="sourceLineNo">499</span><a name="line.499"></a>
<span class="sourceLineNo">500</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.500"></a>
<span class="sourceLineNo">501</span>        {<a name="line.501"></a>
<span class="sourceLineNo">502</span>            namespaces.add( StringUtils.substringBefore( getStringValue( row.getColumnSlice(), NAME.toString() ), "." ) );<a name="line.502"></a>
<span class="sourceLineNo">503</span>        }<a name="line.503"></a>
<span class="sourceLineNo">504</span><a name="line.504"></a>
<span class="sourceLineNo">505</span>        return namespaces;<a name="line.505"></a>
<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
<span class="sourceLineNo">507</span><a name="line.507"></a>
<span class="sourceLineNo">508</span>    // FIXME this one need peformance improvement maybe a cache?<a name="line.508"></a>
<span class="sourceLineNo">509</span>    @Override<a name="line.509"></a>
<span class="sourceLineNo">510</span>    public Collection&lt;String&gt; getNamespaces( final String repoId, final String namespaceId )<a name="line.510"></a>
<span class="sourceLineNo">511</span>        throws MetadataResolutionException<a name="line.511"></a>
<span class="sourceLineNo">512</span>    {<a name="line.512"></a>
<span class="sourceLineNo">513</span><a name="line.513"></a>
<span class="sourceLineNo">514</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.514"></a>
<span class="sourceLineNo">515</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.515"></a>
<span class="sourceLineNo">516</span>            .setColumnFamily( cassandraArchivaManager.getNamespaceFamilyName() ) //<a name="line.516"></a>
<span class="sourceLineNo">517</span>            .setColumnNames( NAME.toString() ) //<a name="line.517"></a>
<span class="sourceLineNo">518</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repoId ) //<a name="line.518"></a>
<span class="sourceLineNo">519</span>            .execute();<a name="line.519"></a>
<span class="sourceLineNo">520</span><a name="line.520"></a>
<span class="sourceLineNo">521</span>        List&lt;String&gt; namespaces = new ArrayList&lt;&gt;( result.get().getCount() );<a name="line.521"></a>
<span class="sourceLineNo">522</span><a name="line.522"></a>
<span class="sourceLineNo">523</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.523"></a>
<span class="sourceLineNo">524</span>        {<a name="line.524"></a>
<span class="sourceLineNo">525</span>            String currentNamespace = getStringValue( row.getColumnSlice(), NAME.toString() );<a name="line.525"></a>
<span class="sourceLineNo">526</span>            if ( StringUtils.startsWith( currentNamespace, namespaceId ) //<a name="line.526"></a>
<span class="sourceLineNo">527</span>                &amp;&amp; ( StringUtils.length( currentNamespace ) &gt; StringUtils.length( namespaceId ) ) )<a name="line.527"></a>
<span class="sourceLineNo">528</span>            {<a name="line.528"></a>
<span class="sourceLineNo">529</span>                // store after namespaceId '.' but before next '.'<a name="line.529"></a>
<span class="sourceLineNo">530</span>                // call org namespace org.apache.maven.shared -&gt; stored apache<a name="line.530"></a>
<span class="sourceLineNo">531</span><a name="line.531"></a>
<span class="sourceLineNo">532</span>                String calledNamespace = StringUtils.endsWith( namespaceId, "." ) ? namespaceId : namespaceId + ".";<a name="line.532"></a>
<span class="sourceLineNo">533</span>                String storedNamespace = StringUtils.substringAfter( currentNamespace, calledNamespace );<a name="line.533"></a>
<span class="sourceLineNo">534</span><a name="line.534"></a>
<span class="sourceLineNo">535</span>                storedNamespace = StringUtils.substringBefore( storedNamespace, "." );<a name="line.535"></a>
<span class="sourceLineNo">536</span><a name="line.536"></a>
<span class="sourceLineNo">537</span>                namespaces.add( storedNamespace );<a name="line.537"></a>
<span class="sourceLineNo">538</span>            }<a name="line.538"></a>
<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
<span class="sourceLineNo">540</span><a name="line.540"></a>
<span class="sourceLineNo">541</span>        return namespaces;<a name="line.541"></a>
<span class="sourceLineNo">542</span><a name="line.542"></a>
<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
<span class="sourceLineNo">544</span><a name="line.544"></a>
<span class="sourceLineNo">545</span>    // only use for testing purpose<a name="line.545"></a>
<span class="sourceLineNo">546</span>    protected List&lt;String&gt; getNamespaces( final String repoId )<a name="line.546"></a>
<span class="sourceLineNo">547</span>        throws MetadataResolutionException<a name="line.547"></a>
<span class="sourceLineNo">548</span>    {<a name="line.548"></a>
<span class="sourceLineNo">549</span><a name="line.549"></a>
<span class="sourceLineNo">550</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.550"></a>
<span class="sourceLineNo">551</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.551"></a>
<span class="sourceLineNo">552</span>            .setColumnFamily( cassandraArchivaManager.getNamespaceFamilyName() ) //<a name="line.552"></a>
<span class="sourceLineNo">553</span>            .setColumnNames( NAME.toString() ) //<a name="line.553"></a>
<span class="sourceLineNo">554</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repoId ) //<a name="line.554"></a>
<span class="sourceLineNo">555</span>            .execute();<a name="line.555"></a>
<span class="sourceLineNo">556</span><a name="line.556"></a>
<span class="sourceLineNo">557</span>        List&lt;String&gt; namespaces = new ArrayList&lt;&gt;( result.get().getCount() );<a name="line.557"></a>
<span class="sourceLineNo">558</span><a name="line.558"></a>
<span class="sourceLineNo">559</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.559"></a>
<span class="sourceLineNo">560</span>        {<a name="line.560"></a>
<span class="sourceLineNo">561</span>            namespaces.add( getStringValue( row.getColumnSlice(), NAME.toString() ) );<a name="line.561"></a>
<span class="sourceLineNo">562</span>        }<a name="line.562"></a>
<span class="sourceLineNo">563</span><a name="line.563"></a>
<span class="sourceLineNo">564</span>        return namespaces;<a name="line.564"></a>
<span class="sourceLineNo">565</span>    }<a name="line.565"></a>
<span class="sourceLineNo">566</span><a name="line.566"></a>
<span class="sourceLineNo">567</span><a name="line.567"></a>
<span class="sourceLineNo">568</span>    @Override<a name="line.568"></a>
<span class="sourceLineNo">569</span>    public void updateProject( String repositoryId, ProjectMetadata projectMetadata )<a name="line.569"></a>
<span class="sourceLineNo">570</span>        throws MetadataRepositoryException<a name="line.570"></a>
<span class="sourceLineNo">571</span>    {<a name="line.571"></a>
<span class="sourceLineNo">572</span><a name="line.572"></a>
<span class="sourceLineNo">573</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.573"></a>
<span class="sourceLineNo">574</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.574"></a>
<span class="sourceLineNo">575</span>            .setColumnFamily( cassandraArchivaManager.getProjectFamilyName() ) //<a name="line.575"></a>
<span class="sourceLineNo">576</span>            .setColumnNames( PROJECT_ID.toString() ) //<a name="line.576"></a>
<span class="sourceLineNo">577</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.577"></a>
<span class="sourceLineNo">578</span>            .addEqualsExpression( NAMESPACE_ID.toString(), projectMetadata.getNamespace() ) //<a name="line.578"></a>
<span class="sourceLineNo">579</span>            .addEqualsExpression( PROJECT_ID.toString(), projectMetadata.getId() ) //<a name="line.579"></a>
<span class="sourceLineNo">580</span>            .execute();<a name="line.580"></a>
<span class="sourceLineNo">581</span><a name="line.581"></a>
<span class="sourceLineNo">582</span>        // project exists ? if yes return nothing to update here<a name="line.582"></a>
<span class="sourceLineNo">583</span>        if ( result.get().getCount() &gt; 0 )<a name="line.583"></a>
<span class="sourceLineNo">584</span>        {<a name="line.584"></a>
<span class="sourceLineNo">585</span>            return;<a name="line.585"></a>
<span class="sourceLineNo">586</span>        }<a name="line.586"></a>
<span class="sourceLineNo">587</span>        else<a name="line.587"></a>
<span class="sourceLineNo">588</span>        {<a name="line.588"></a>
<span class="sourceLineNo">589</span>            Namespace namespace = updateOrAddNamespace( repositoryId, projectMetadata.getNamespace() );<a name="line.589"></a>
<span class="sourceLineNo">590</span><a name="line.590"></a>
<span class="sourceLineNo">591</span>            String key =<a name="line.591"></a>
<span class="sourceLineNo">592</span>                new Project.KeyBuilder().withProjectId( projectMetadata.getId() ).withNamespace( namespace ).build();<a name="line.592"></a>
<span class="sourceLineNo">593</span><a name="line.593"></a>
<span class="sourceLineNo">594</span>            String cf = cassandraArchivaManager.getProjectFamilyName();<a name="line.594"></a>
<span class="sourceLineNo">595</span>            projectTemplate.createMutator()<a name="line.595"></a>
<span class="sourceLineNo">596</span>                //  values<a name="line.596"></a>
<span class="sourceLineNo">597</span>                .addInsertion( key, cf, CassandraUtils.column( PROJECT_ID.toString(), projectMetadata.getId() ) ) //<a name="line.597"></a>
<span class="sourceLineNo">598</span>                .addInsertion( key, cf, CassandraUtils.column( REPOSITORY_NAME.toString(), repositoryId ) ) //<a name="line.598"></a>
<span class="sourceLineNo">599</span>                .addInsertion( key, cf, CassandraUtils.column( NAMESPACE_ID.toString(), projectMetadata.getNamespace() ) )//<a name="line.599"></a>
<span class="sourceLineNo">600</span>                .execute();<a name="line.600"></a>
<span class="sourceLineNo">601</span>        }<a name="line.601"></a>
<span class="sourceLineNo">602</span>    }<a name="line.602"></a>
<span class="sourceLineNo">603</span><a name="line.603"></a>
<span class="sourceLineNo">604</span>    @Override<a name="line.604"></a>
<span class="sourceLineNo">605</span>    public Collection&lt;String&gt; getProjects( final String repoId, final String namespace )<a name="line.605"></a>
<span class="sourceLineNo">606</span>        throws MetadataResolutionException<a name="line.606"></a>
<span class="sourceLineNo">607</span>    {<a name="line.607"></a>
<span class="sourceLineNo">608</span><a name="line.608"></a>
<span class="sourceLineNo">609</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.609"></a>
<span class="sourceLineNo">610</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.610"></a>
<span class="sourceLineNo">611</span>            .setColumnFamily( cassandraArchivaManager.getProjectFamilyName() ) //<a name="line.611"></a>
<span class="sourceLineNo">612</span>            .setColumnNames( PROJECT_ID.toString() ) //<a name="line.612"></a>
<span class="sourceLineNo">613</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repoId ) //<a name="line.613"></a>
<span class="sourceLineNo">614</span>            .addEqualsExpression( NAMESPACE_ID.toString(), namespace ) //<a name="line.614"></a>
<span class="sourceLineNo">615</span>            .execute();<a name="line.615"></a>
<span class="sourceLineNo">616</span><a name="line.616"></a>
<span class="sourceLineNo">617</span>        final Set&lt;String&gt; projects = new HashSet&lt;String&gt;( result.get().getCount() );<a name="line.617"></a>
<span class="sourceLineNo">618</span><a name="line.618"></a>
<span class="sourceLineNo">619</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.619"></a>
<span class="sourceLineNo">620</span>        {<a name="line.620"></a>
<span class="sourceLineNo">621</span>            projects.add( getStringValue( row.getColumnSlice(), PROJECT_ID.toString() ) );<a name="line.621"></a>
<span class="sourceLineNo">622</span>        }<a name="line.622"></a>
<span class="sourceLineNo">623</span><a name="line.623"></a>
<span class="sourceLineNo">624</span>        return projects;<a name="line.624"></a>
<span class="sourceLineNo">625</span>    }<a name="line.625"></a>
<span class="sourceLineNo">626</span><a name="line.626"></a>
<span class="sourceLineNo">627</span>    @Override<a name="line.627"></a>
<span class="sourceLineNo">628</span>    public void removeProject( final String repositoryId, final String namespaceId, final String projectId )<a name="line.628"></a>
<span class="sourceLineNo">629</span>        throws MetadataRepositoryException<a name="line.629"></a>
<span class="sourceLineNo">630</span>    {<a name="line.630"></a>
<span class="sourceLineNo">631</span><a name="line.631"></a>
<span class="sourceLineNo">632</span>        String key = new Project.KeyBuilder() //<a name="line.632"></a>
<span class="sourceLineNo">633</span>            .withProjectId( projectId ) //<a name="line.633"></a>
<span class="sourceLineNo">634</span>            .withNamespace( new Namespace( namespaceId, new Repository( repositoryId ) ) ) //<a name="line.634"></a>
<span class="sourceLineNo">635</span>            .build();<a name="line.635"></a>
<span class="sourceLineNo">636</span><a name="line.636"></a>
<span class="sourceLineNo">637</span>        this.projectTemplate.deleteRow( key );<a name="line.637"></a>
<span class="sourceLineNo">638</span><a name="line.638"></a>
<span class="sourceLineNo">639</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.639"></a>
<span class="sourceLineNo">640</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.640"></a>
<span class="sourceLineNo">641</span>            .setColumnFamily( cassandraArchivaManager.getProjectVersionMetadataFamilyName() ) //<a name="line.641"></a>
<span class="sourceLineNo">642</span>            .setColumnNames( ID.toString() ) //<a name="line.642"></a>
<span class="sourceLineNo">643</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.643"></a>
<span class="sourceLineNo">644</span>            .addEqualsExpression( NAMESPACE_ID.toString(), namespaceId ) //<a name="line.644"></a>
<span class="sourceLineNo">645</span>            .addEqualsExpression( PROJECT_ID.toString(), projectId ) //<a name="line.645"></a>
<span class="sourceLineNo">646</span>            .execute();<a name="line.646"></a>
<span class="sourceLineNo">647</span><a name="line.647"></a>
<span class="sourceLineNo">648</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.648"></a>
<span class="sourceLineNo">649</span>        {<a name="line.649"></a>
<span class="sourceLineNo">650</span>            this.projectVersionMetadataTemplate.deleteRow( row.getKey() );<a name="line.650"></a>
<span class="sourceLineNo">651</span>            removeMailingList( row.getKey() );<a name="line.651"></a>
<span class="sourceLineNo">652</span>        }<a name="line.652"></a>
<span class="sourceLineNo">653</span><a name="line.653"></a>
<span class="sourceLineNo">654</span>        result = HFactory //<a name="line.654"></a>
<span class="sourceLineNo">655</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.655"></a>
<span class="sourceLineNo">656</span>            .setColumnFamily( cassandraArchivaManager.getArtifactMetadataFamilyName() ) //<a name="line.656"></a>
<span class="sourceLineNo">657</span>            .setColumnNames( PROJECT_ID.toString() ) //<a name="line.657"></a>
<span class="sourceLineNo">658</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.658"></a>
<span class="sourceLineNo">659</span>            .addEqualsExpression( NAMESPACE_ID.toString(), namespaceId ) //<a name="line.659"></a>
<span class="sourceLineNo">660</span>            .addEqualsExpression( PROJECT_ID.toString(), projectId ) //<a name="line.660"></a>
<span class="sourceLineNo">661</span>            .execute();<a name="line.661"></a>
<span class="sourceLineNo">662</span><a name="line.662"></a>
<span class="sourceLineNo">663</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.663"></a>
<span class="sourceLineNo">664</span>        {<a name="line.664"></a>
<span class="sourceLineNo">665</span>            this.artifactMetadataTemplate.deleteRow( row.getKey() );<a name="line.665"></a>
<span class="sourceLineNo">666</span>        }<a name="line.666"></a>
<span class="sourceLineNo">667</span>    }<a name="line.667"></a>
<span class="sourceLineNo">668</span><a name="line.668"></a>
<span class="sourceLineNo">669</span>    @Override<a name="line.669"></a>
<span class="sourceLineNo">670</span>    public Collection&lt;String&gt; getProjectVersions( final String repoId, final String namespace, final String projectId )<a name="line.670"></a>
<span class="sourceLineNo">671</span>        throws MetadataResolutionException<a name="line.671"></a>
<span class="sourceLineNo">672</span>    {<a name="line.672"></a>
<span class="sourceLineNo">673</span><a name="line.673"></a>
<span class="sourceLineNo">674</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.674"></a>
<span class="sourceLineNo">675</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.675"></a>
<span class="sourceLineNo">676</span>            .setColumnFamily( cassandraArchivaManager.getProjectVersionMetadataFamilyName() ) //<a name="line.676"></a>
<span class="sourceLineNo">677</span>            .setColumnNames( PROJECT_VERSION.toString() ) //<a name="line.677"></a>
<span class="sourceLineNo">678</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repoId ) //<a name="line.678"></a>
<span class="sourceLineNo">679</span>            .addEqualsExpression( NAMESPACE_ID.toString(), namespace ) //<a name="line.679"></a>
<span class="sourceLineNo">680</span>            .addEqualsExpression( PROJECT_ID.toString(), projectId ) //<a name="line.680"></a>
<span class="sourceLineNo">681</span>            .execute();<a name="line.681"></a>
<span class="sourceLineNo">682</span><a name="line.682"></a>
<span class="sourceLineNo">683</span>        int count = result.get().getCount();<a name="line.683"></a>
<span class="sourceLineNo">684</span><a name="line.684"></a>
<span class="sourceLineNo">685</span>        if ( count &lt; 1 )<a name="line.685"></a>
<span class="sourceLineNo">686</span>        {<a name="line.686"></a>
<span class="sourceLineNo">687</span>            return Collections.emptyList();<a name="line.687"></a>
<span class="sourceLineNo">688</span>        }<a name="line.688"></a>
<span class="sourceLineNo">689</span><a name="line.689"></a>
<span class="sourceLineNo">690</span>        Set&lt;String&gt; versions = new HashSet&lt;String&gt;( count );<a name="line.690"></a>
<span class="sourceLineNo">691</span><a name="line.691"></a>
<span class="sourceLineNo">692</span>        for ( Row&lt;String, String, String&gt; orderedRows : result.get() )<a name="line.692"></a>
<span class="sourceLineNo">693</span>        {<a name="line.693"></a>
<span class="sourceLineNo">694</span>            versions.add( getStringValue( orderedRows.getColumnSlice(), PROJECT_VERSION.toString() ) );<a name="line.694"></a>
<span class="sourceLineNo">695</span>        }<a name="line.695"></a>
<span class="sourceLineNo">696</span><a name="line.696"></a>
<span class="sourceLineNo">697</span>        return versions;<a name="line.697"></a>
<span class="sourceLineNo">698</span><a name="line.698"></a>
<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
<span class="sourceLineNo">700</span><a name="line.700"></a>
<span class="sourceLineNo">701</span>    @Override<a name="line.701"></a>
<span class="sourceLineNo">702</span>    public ProjectMetadata getProject( final String repoId, final String namespace, final String id )<a name="line.702"></a>
<span class="sourceLineNo">703</span>        throws MetadataResolutionException<a name="line.703"></a>
<span class="sourceLineNo">704</span>    {<a name="line.704"></a>
<span class="sourceLineNo">705</span><a name="line.705"></a>
<span class="sourceLineNo">706</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.706"></a>
<span class="sourceLineNo">707</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.707"></a>
<span class="sourceLineNo">708</span>            .setColumnFamily( cassandraArchivaManager.getProjectFamilyName() ) //<a name="line.708"></a>
<span class="sourceLineNo">709</span>            .setColumnNames( PROJECT_ID.toString() ) //<a name="line.709"></a>
<span class="sourceLineNo">710</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repoId ) //<a name="line.710"></a>
<span class="sourceLineNo">711</span>            .addEqualsExpression( NAMESPACE_ID.toString(), namespace ) //<a name="line.711"></a>
<span class="sourceLineNo">712</span>            .addEqualsExpression( PROJECT_ID.toString(), id ) //<a name="line.712"></a>
<span class="sourceLineNo">713</span>            .execute();<a name="line.713"></a>
<span class="sourceLineNo">714</span><a name="line.714"></a>
<span class="sourceLineNo">715</span>        int count = result.get().getCount();<a name="line.715"></a>
<span class="sourceLineNo">716</span><a name="line.716"></a>
<span class="sourceLineNo">717</span>        if ( count &lt; 1 )<a name="line.717"></a>
<span class="sourceLineNo">718</span>        {<a name="line.718"></a>
<span class="sourceLineNo">719</span>            return null;<a name="line.719"></a>
<span class="sourceLineNo">720</span>        }<a name="line.720"></a>
<span class="sourceLineNo">721</span><a name="line.721"></a>
<span class="sourceLineNo">722</span>        ProjectMetadata projectMetadata = new ProjectMetadata();<a name="line.722"></a>
<span class="sourceLineNo">723</span>        projectMetadata.setId( id );<a name="line.723"></a>
<span class="sourceLineNo">724</span>        projectMetadata.setNamespace( namespace );<a name="line.724"></a>
<span class="sourceLineNo">725</span><a name="line.725"></a>
<span class="sourceLineNo">726</span>        logger.debug( "getProject repoId: {}, namespace: {}, projectId: {} -&gt; {}", repoId, namespace, id,<a name="line.726"></a>
<span class="sourceLineNo">727</span>                      projectMetadata );<a name="line.727"></a>
<span class="sourceLineNo">728</span><a name="line.728"></a>
<span class="sourceLineNo">729</span>        return projectMetadata;<a name="line.729"></a>
<span class="sourceLineNo">730</span>    }<a name="line.730"></a>
<span class="sourceLineNo">731</span><a name="line.731"></a>
<span class="sourceLineNo">732</span>    protected ProjectVersionMetadataModel mapProjectVersionMetadataModel( ColumnSlice&lt;String, String&gt; columnSlice )<a name="line.732"></a>
<span class="sourceLineNo">733</span>    {<a name="line.733"></a>
<span class="sourceLineNo">734</span>        ProjectVersionMetadataModel projectVersionMetadataModel = new ProjectVersionMetadataModel();<a name="line.734"></a>
<span class="sourceLineNo">735</span>        projectVersionMetadataModel.setId( getStringValue( columnSlice, ID.toString() ) );<a name="line.735"></a>
<span class="sourceLineNo">736</span>        projectVersionMetadataModel.setDescription( getStringValue( columnSlice, DESCRIPTION.toString() ) );<a name="line.736"></a>
<span class="sourceLineNo">737</span>        projectVersionMetadataModel.setName( getStringValue( columnSlice, NAME.toString() ) );<a name="line.737"></a>
<span class="sourceLineNo">738</span>        Namespace namespace = new Namespace( getStringValue( columnSlice, NAMESPACE_ID.toString() ), //<a name="line.738"></a>
<span class="sourceLineNo">739</span>                                             new Repository( getStringValue( columnSlice, REPOSITORY_NAME.toString() ) ) );<a name="line.739"></a>
<span class="sourceLineNo">740</span>        projectVersionMetadataModel.setNamespace( namespace );<a name="line.740"></a>
<span class="sourceLineNo">741</span>        projectVersionMetadataModel.setIncomplete(<a name="line.741"></a>
<span class="sourceLineNo">742</span>            Boolean.parseBoolean( getStringValue( columnSlice, "incomplete" ) ) );<a name="line.742"></a>
<span class="sourceLineNo">743</span>        projectVersionMetadataModel.setProjectId( getStringValue( columnSlice, PROJECT_ID.toString() ) );<a name="line.743"></a>
<span class="sourceLineNo">744</span>        projectVersionMetadataModel.setUrl( getStringValue( columnSlice, URL.toString() ) );<a name="line.744"></a>
<span class="sourceLineNo">745</span>        return projectVersionMetadataModel;<a name="line.745"></a>
<span class="sourceLineNo">746</span>    }<a name="line.746"></a>
<span class="sourceLineNo">747</span><a name="line.747"></a>
<span class="sourceLineNo">748</span><a name="line.748"></a>
<span class="sourceLineNo">749</span>    @Override<a name="line.749"></a>
<span class="sourceLineNo">750</span>    public void updateProjectVersion( String repositoryId, String namespaceId, String projectId,<a name="line.750"></a>
<span class="sourceLineNo">751</span>                                      ProjectVersionMetadata versionMetadata )<a name="line.751"></a>
<span class="sourceLineNo">752</span>        throws MetadataRepositoryException<a name="line.752"></a>
<span class="sourceLineNo">753</span>    {<a name="line.753"></a>
<span class="sourceLineNo">754</span>        try<a name="line.754"></a>
<span class="sourceLineNo">755</span>        {<a name="line.755"></a>
<span class="sourceLineNo">756</span>            Namespace namespace = getNamespace( repositoryId, namespaceId );<a name="line.756"></a>
<span class="sourceLineNo">757</span><a name="line.757"></a>
<span class="sourceLineNo">758</span>            if ( namespace == null )<a name="line.758"></a>
<span class="sourceLineNo">759</span>            {<a name="line.759"></a>
<span class="sourceLineNo">760</span>                updateOrAddNamespace( repositoryId, namespaceId );<a name="line.760"></a>
<span class="sourceLineNo">761</span>            }<a name="line.761"></a>
<span class="sourceLineNo">762</span><a name="line.762"></a>
<span class="sourceLineNo">763</span>            if ( getProject( repositoryId, namespaceId, projectId ) == null )<a name="line.763"></a>
<span class="sourceLineNo">764</span>            {<a name="line.764"></a>
<span class="sourceLineNo">765</span>                ProjectMetadata projectMetadata = new ProjectMetadata();<a name="line.765"></a>
<span class="sourceLineNo">766</span>                projectMetadata.setNamespace( namespaceId );<a name="line.766"></a>
<span class="sourceLineNo">767</span>                projectMetadata.setId( projectId );<a name="line.767"></a>
<span class="sourceLineNo">768</span>                updateProject( repositoryId, projectMetadata );<a name="line.768"></a>
<span class="sourceLineNo">769</span>            }<a name="line.769"></a>
<span class="sourceLineNo">770</span><a name="line.770"></a>
<span class="sourceLineNo">771</span>        }<a name="line.771"></a>
<span class="sourceLineNo">772</span>        catch ( MetadataResolutionException e )<a name="line.772"></a>
<span class="sourceLineNo">773</span>        {<a name="line.773"></a>
<span class="sourceLineNo">774</span>            throw new MetadataRepositoryException( e.getMessage(), e );<a name="line.774"></a>
<span class="sourceLineNo">775</span>        }<a name="line.775"></a>
<span class="sourceLineNo">776</span><a name="line.776"></a>
<span class="sourceLineNo">777</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.777"></a>
<span class="sourceLineNo">778</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.778"></a>
<span class="sourceLineNo">779</span>            .setColumnFamily( cassandraArchivaManager.getProjectVersionMetadataFamilyName() ) //<a name="line.779"></a>
<span class="sourceLineNo">780</span>            .setColumnNames( PROJECT_VERSION.toString() ) //<a name="line.780"></a>
<span class="sourceLineNo">781</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.781"></a>
<span class="sourceLineNo">782</span>            .addEqualsExpression( NAMESPACE_ID.toString(), namespaceId ) //<a name="line.782"></a>
<span class="sourceLineNo">783</span>            .addEqualsExpression( PROJECT_ID.toString(), projectId ) //<a name="line.783"></a>
<span class="sourceLineNo">784</span>            .addEqualsExpression( PROJECT_VERSION.toString(), versionMetadata.getId() ) //<a name="line.784"></a>
<span class="sourceLineNo">785</span>            .execute();<a name="line.785"></a>
<span class="sourceLineNo">786</span><a name="line.786"></a>
<span class="sourceLineNo">787</span>        ProjectVersionMetadataModel projectVersionMetadataModel = null;<a name="line.787"></a>
<span class="sourceLineNo">788</span>        boolean creation = true;<a name="line.788"></a>
<span class="sourceLineNo">789</span>        if ( result.get().getCount() &gt; 0 )<a name="line.789"></a>
<span class="sourceLineNo">790</span>        {<a name="line.790"></a>
<span class="sourceLineNo">791</span>            projectVersionMetadataModel =<a name="line.791"></a>
<span class="sourceLineNo">792</span>                mapProjectVersionMetadataModel( result.get().getList().get( 0 ).getColumnSlice() );<a name="line.792"></a>
<span class="sourceLineNo">793</span>            creation = false;<a name="line.793"></a>
<span class="sourceLineNo">794</span>        }<a name="line.794"></a>
<span class="sourceLineNo">795</span>        else<a name="line.795"></a>
<span class="sourceLineNo">796</span>        {<a name="line.796"></a>
<span class="sourceLineNo">797</span>            projectVersionMetadataModel = getModelMapper().map( versionMetadata, ProjectVersionMetadataModel.class );<a name="line.797"></a>
<span class="sourceLineNo">798</span>        }<a name="line.798"></a>
<span class="sourceLineNo">799</span><a name="line.799"></a>
<span class="sourceLineNo">800</span>        projectVersionMetadataModel.setProjectId( projectId );<a name="line.800"></a>
<span class="sourceLineNo">801</span>        projectVersionMetadataModel.setNamespace( new Namespace( namespaceId, new Repository( repositoryId ) ) );<a name="line.801"></a>
<span class="sourceLineNo">802</span><a name="line.802"></a>
<span class="sourceLineNo">803</span>        projectVersionMetadataModel.setCiManagement( versionMetadata.getCiManagement() );<a name="line.803"></a>
<span class="sourceLineNo">804</span>        projectVersionMetadataModel.setIssueManagement( versionMetadata.getIssueManagement() );<a name="line.804"></a>
<span class="sourceLineNo">805</span>        projectVersionMetadataModel.setOrganization( versionMetadata.getOrganization() );<a name="line.805"></a>
<span class="sourceLineNo">806</span>        projectVersionMetadataModel.setScm( versionMetadata.getScm() );<a name="line.806"></a>
<span class="sourceLineNo">807</span><a name="line.807"></a>
<span class="sourceLineNo">808</span>        projectVersionMetadataModel.setMailingLists( versionMetadata.getMailingLists() );<a name="line.808"></a>
<span class="sourceLineNo">809</span>        projectVersionMetadataModel.setDependencies( versionMetadata.getDependencies() );<a name="line.809"></a>
<span class="sourceLineNo">810</span>        projectVersionMetadataModel.setLicenses( versionMetadata.getLicenses() );<a name="line.810"></a>
<span class="sourceLineNo">811</span><a name="line.811"></a>
<span class="sourceLineNo">812</span>        // we don't test of repository and namespace really exist !<a name="line.812"></a>
<span class="sourceLineNo">813</span>        String key = new ProjectVersionMetadataModel.KeyBuilder() //<a name="line.813"></a>
<span class="sourceLineNo">814</span>            .withRepository( repositoryId ) //<a name="line.814"></a>
<span class="sourceLineNo">815</span>            .withNamespace( namespaceId ) //<a name="line.815"></a>
<span class="sourceLineNo">816</span>            .withProjectId( projectId ) //<a name="line.816"></a>
<span class="sourceLineNo">817</span>            .withProjectVersion( versionMetadata.getVersion() ) //<a name="line.817"></a>
<span class="sourceLineNo">818</span>            .withId( versionMetadata.getId() ) //<a name="line.818"></a>
<span class="sourceLineNo">819</span>            .build();<a name="line.819"></a>
<span class="sourceLineNo">820</span><a name="line.820"></a>
<span class="sourceLineNo">821</span>        // FIXME nested objects to store!!!<a name="line.821"></a>
<span class="sourceLineNo">822</span>        if ( creation )<a name="line.822"></a>
<span class="sourceLineNo">823</span>        {<a name="line.823"></a>
<span class="sourceLineNo">824</span>            String cf = cassandraArchivaManager.getProjectVersionMetadataFamilyName();<a name="line.824"></a>
<span class="sourceLineNo">825</span>            Mutator&lt;String&gt; mutator = projectVersionMetadataTemplate.createMutator()<a name="line.825"></a>
<span class="sourceLineNo">826</span>                //  values<a name="line.826"></a>
<span class="sourceLineNo">827</span>                .addInsertion( key, cf, column( PROJECT_ID.toString(), projectId ) ) //<a name="line.827"></a>
<span class="sourceLineNo">828</span>                .addInsertion( key, cf, column( REPOSITORY_NAME.toString(), repositoryId ) ) //<a name="line.828"></a>
<span class="sourceLineNo">829</span>                .addInsertion( key, cf, column( NAMESPACE_ID.toString(), namespaceId ) )//<a name="line.829"></a>
<span class="sourceLineNo">830</span>                .addInsertion( key, cf, column( PROJECT_VERSION.toString(), versionMetadata.getVersion() ) ); //<a name="line.830"></a>
<span class="sourceLineNo">831</span><a name="line.831"></a>
<span class="sourceLineNo">832</span>            addInsertion( mutator, key, cf, DESCRIPTION.toString(), versionMetadata.getDescription() );<a name="line.832"></a>
<span class="sourceLineNo">833</span><a name="line.833"></a>
<span class="sourceLineNo">834</span>            addInsertion( mutator, key, cf, NAME.toString(), versionMetadata.getName() );<a name="line.834"></a>
<span class="sourceLineNo">835</span><a name="line.835"></a>
<span class="sourceLineNo">836</span>            addInsertion( mutator, key, cf, "incomplete", Boolean.toString( versionMetadata.isIncomplete() ) );<a name="line.836"></a>
<span class="sourceLineNo">837</span><a name="line.837"></a>
<span class="sourceLineNo">838</span>            addInsertion( mutator, key, cf, URL.toString(), versionMetadata.getUrl() );<a name="line.838"></a>
<span class="sourceLineNo">839</span>            {<a name="line.839"></a>
<span class="sourceLineNo">840</span>                CiManagement ci = versionMetadata.getCiManagement();<a name="line.840"></a>
<span class="sourceLineNo">841</span>                if ( ci != null )<a name="line.841"></a>
<span class="sourceLineNo">842</span>                {<a name="line.842"></a>
<span class="sourceLineNo">843</span>                    addInsertion( mutator, key, cf, "ciManagement.system", ci.getSystem() );<a name="line.843"></a>
<span class="sourceLineNo">844</span>                    addInsertion( mutator, key, cf, "ciManagement.url", ci.getUrl() );<a name="line.844"></a>
<span class="sourceLineNo">845</span>                }<a name="line.845"></a>
<span class="sourceLineNo">846</span>            }<a name="line.846"></a>
<span class="sourceLineNo">847</span><a name="line.847"></a>
<span class="sourceLineNo">848</span>            {<a name="line.848"></a>
<span class="sourceLineNo">849</span>                IssueManagement issueManagement = versionMetadata.getIssueManagement();<a name="line.849"></a>
<span class="sourceLineNo">850</span><a name="line.850"></a>
<span class="sourceLineNo">851</span>                if ( issueManagement != null )<a name="line.851"></a>
<span class="sourceLineNo">852</span>                {<a name="line.852"></a>
<span class="sourceLineNo">853</span>                    addInsertion( mutator, key, cf, "issueManagement.system", issueManagement.getSystem() );<a name="line.853"></a>
<span class="sourceLineNo">854</span>                    addInsertion( mutator, key, cf, "issueManagement.url", issueManagement.getUrl() );<a name="line.854"></a>
<span class="sourceLineNo">855</span>                }<a name="line.855"></a>
<span class="sourceLineNo">856</span>            }<a name="line.856"></a>
<span class="sourceLineNo">857</span><a name="line.857"></a>
<span class="sourceLineNo">858</span>            {<a name="line.858"></a>
<span class="sourceLineNo">859</span>                Organization organization = versionMetadata.getOrganization();<a name="line.859"></a>
<span class="sourceLineNo">860</span>                if ( organization != null )<a name="line.860"></a>
<span class="sourceLineNo">861</span>                {<a name="line.861"></a>
<span class="sourceLineNo">862</span>                    addInsertion( mutator, key, cf, "organization.name", organization.getName() );<a name="line.862"></a>
<span class="sourceLineNo">863</span>                    addInsertion( mutator, key, cf, "organization.url", organization.getUrl() );<a name="line.863"></a>
<span class="sourceLineNo">864</span>                }<a name="line.864"></a>
<span class="sourceLineNo">865</span>            }<a name="line.865"></a>
<span class="sourceLineNo">866</span><a name="line.866"></a>
<span class="sourceLineNo">867</span>            {<a name="line.867"></a>
<span class="sourceLineNo">868</span>                Scm scm = versionMetadata.getScm();<a name="line.868"></a>
<span class="sourceLineNo">869</span>                if ( scm != null )<a name="line.869"></a>
<span class="sourceLineNo">870</span>                {<a name="line.870"></a>
<span class="sourceLineNo">871</span>                    addInsertion( mutator, key, cf, "scm.url", scm.getUrl() );<a name="line.871"></a>
<span class="sourceLineNo">872</span>                    addInsertion( mutator, key, cf, "scm.connection", scm.getConnection() );<a name="line.872"></a>
<span class="sourceLineNo">873</span>                    addInsertion( mutator, key, cf, "scm.developerConnection", scm.getDeveloperConnection() );<a name="line.873"></a>
<span class="sourceLineNo">874</span>                }<a name="line.874"></a>
<span class="sourceLineNo">875</span>            }<a name="line.875"></a>
<span class="sourceLineNo">876</span><a name="line.876"></a>
<span class="sourceLineNo">877</span>            recordMailingList( key, versionMetadata.getMailingLists() );<a name="line.877"></a>
<span class="sourceLineNo">878</span><a name="line.878"></a>
<span class="sourceLineNo">879</span>            recordLicenses( key, versionMetadata.getLicenses() );<a name="line.879"></a>
<span class="sourceLineNo">880</span><a name="line.880"></a>
<span class="sourceLineNo">881</span>            recordDependencies( key, versionMetadata.getDependencies(), repositoryId );<a name="line.881"></a>
<span class="sourceLineNo">882</span><a name="line.882"></a>
<span class="sourceLineNo">883</span>            MutationResult mutationResult = mutator.execute();<a name="line.883"></a>
<span class="sourceLineNo">884</span>        }<a name="line.884"></a>
<span class="sourceLineNo">885</span>        else<a name="line.885"></a>
<span class="sourceLineNo">886</span>        {<a name="line.886"></a>
<span class="sourceLineNo">887</span>            ColumnFamilyUpdater&lt;String, String&gt; updater = projectVersionMetadataTemplate.createUpdater( key );<a name="line.887"></a>
<span class="sourceLineNo">888</span>            addUpdateStringValue( updater, PROJECT_ID.toString(), projectId );<a name="line.888"></a>
<span class="sourceLineNo">889</span>            addUpdateStringValue( updater, REPOSITORY_NAME.toString(), repositoryId );<a name="line.889"></a>
<span class="sourceLineNo">890</span>            addUpdateStringValue( updater, NAMESPACE_ID.toString(), namespaceId );<a name="line.890"></a>
<span class="sourceLineNo">891</span>            addUpdateStringValue( updater, PROJECT_VERSION.toString(), versionMetadata.getVersion() );<a name="line.891"></a>
<span class="sourceLineNo">892</span>            addUpdateStringValue( updater, DESCRIPTION.toString(), versionMetadata.getDescription() );<a name="line.892"></a>
<span class="sourceLineNo">893</span><a name="line.893"></a>
<span class="sourceLineNo">894</span>            addUpdateStringValue( updater, NAME.toString(), versionMetadata.getName() );<a name="line.894"></a>
<span class="sourceLineNo">895</span><a name="line.895"></a>
<span class="sourceLineNo">896</span>            updater.setString( "incomplete", Boolean.toString( versionMetadata.isIncomplete() ) );<a name="line.896"></a>
<span class="sourceLineNo">897</span>            addUpdateStringValue( updater, URL.toString(), versionMetadata.getUrl() );<a name="line.897"></a>
<span class="sourceLineNo">898</span><a name="line.898"></a>
<span class="sourceLineNo">899</span>            {<a name="line.899"></a>
<span class="sourceLineNo">900</span>                CiManagement ci = versionMetadata.getCiManagement();<a name="line.900"></a>
<span class="sourceLineNo">901</span>                if ( ci != null )<a name="line.901"></a>
<span class="sourceLineNo">902</span>                {<a name="line.902"></a>
<span class="sourceLineNo">903</span>                    addUpdateStringValue( updater, "ciManagement.system", ci.getSystem() );<a name="line.903"></a>
<span class="sourceLineNo">904</span>                    addUpdateStringValue( updater, "ciManagement.url", ci.getUrl() );<a name="line.904"></a>
<span class="sourceLineNo">905</span>                }<a name="line.905"></a>
<span class="sourceLineNo">906</span>            }<a name="line.906"></a>
<span class="sourceLineNo">907</span>            {<a name="line.907"></a>
<span class="sourceLineNo">908</span>                IssueManagement issueManagement = versionMetadata.getIssueManagement();<a name="line.908"></a>
<span class="sourceLineNo">909</span>                if ( issueManagement != null )<a name="line.909"></a>
<span class="sourceLineNo">910</span>                {<a name="line.910"></a>
<span class="sourceLineNo">911</span>                    addUpdateStringValue( updater, "issueManagement.system", issueManagement.getSystem() );<a name="line.911"></a>
<span class="sourceLineNo">912</span>                    addUpdateStringValue( updater, "issueManagement.url", issueManagement.getUrl() );<a name="line.912"></a>
<span class="sourceLineNo">913</span>                }<a name="line.913"></a>
<span class="sourceLineNo">914</span>            }<a name="line.914"></a>
<span class="sourceLineNo">915</span>            {<a name="line.915"></a>
<span class="sourceLineNo">916</span>                Organization organization = versionMetadata.getOrganization();<a name="line.916"></a>
<span class="sourceLineNo">917</span>                if ( organization != null )<a name="line.917"></a>
<span class="sourceLineNo">918</span>                {<a name="line.918"></a>
<span class="sourceLineNo">919</span>                    addUpdateStringValue( updater, "organization.name", organization.getName() );<a name="line.919"></a>
<span class="sourceLineNo">920</span>                    addUpdateStringValue( updater, "organization.url", organization.getUrl() );<a name="line.920"></a>
<span class="sourceLineNo">921</span>                }<a name="line.921"></a>
<span class="sourceLineNo">922</span>            }<a name="line.922"></a>
<span class="sourceLineNo">923</span>            {<a name="line.923"></a>
<span class="sourceLineNo">924</span>                Scm scm = versionMetadata.getScm();<a name="line.924"></a>
<span class="sourceLineNo">925</span>                if ( scm != null )<a name="line.925"></a>
<span class="sourceLineNo">926</span>                {<a name="line.926"></a>
<span class="sourceLineNo">927</span>                    addUpdateStringValue( updater, "scm.url", scm.getUrl() );<a name="line.927"></a>
<span class="sourceLineNo">928</span>                    addUpdateStringValue( updater, "scm.connection", scm.getConnection() );<a name="line.928"></a>
<span class="sourceLineNo">929</span>                    addUpdateStringValue( updater, "scm.developerConnection", scm.getDeveloperConnection() );<a name="line.929"></a>
<span class="sourceLineNo">930</span>                }<a name="line.930"></a>
<span class="sourceLineNo">931</span>            }<a name="line.931"></a>
<span class="sourceLineNo">932</span><a name="line.932"></a>
<span class="sourceLineNo">933</span>            // update is a delete record<a name="line.933"></a>
<span class="sourceLineNo">934</span>            removeMailingList( key );<a name="line.934"></a>
<span class="sourceLineNo">935</span>            recordMailingList( key, versionMetadata.getMailingLists() );<a name="line.935"></a>
<span class="sourceLineNo">936</span><a name="line.936"></a>
<span class="sourceLineNo">937</span>            removeLicenses( key );<a name="line.937"></a>
<span class="sourceLineNo">938</span>            recordLicenses( key, versionMetadata.getLicenses() );<a name="line.938"></a>
<span class="sourceLineNo">939</span><a name="line.939"></a>
<span class="sourceLineNo">940</span>            removeDependencies( key );<a name="line.940"></a>
<span class="sourceLineNo">941</span>            recordDependencies( key, versionMetadata.getDependencies(), repositoryId );<a name="line.941"></a>
<span class="sourceLineNo">942</span><a name="line.942"></a>
<span class="sourceLineNo">943</span>            projectVersionMetadataTemplate.update( updater );<a name="line.943"></a>
<span class="sourceLineNo">944</span><a name="line.944"></a>
<span class="sourceLineNo">945</span>        }<a name="line.945"></a>
<span class="sourceLineNo">946</span><a name="line.946"></a>
<span class="sourceLineNo">947</span>        ArtifactMetadataModel artifactMetadataModel = new ArtifactMetadataModel();<a name="line.947"></a>
<span class="sourceLineNo">948</span>        artifactMetadataModel.setRepositoryId( repositoryId );<a name="line.948"></a>
<span class="sourceLineNo">949</span>        artifactMetadataModel.setNamespace( namespaceId );<a name="line.949"></a>
<span class="sourceLineNo">950</span>        artifactMetadataModel.setProject( projectId );<a name="line.950"></a>
<span class="sourceLineNo">951</span>        artifactMetadataModel.setProjectVersion( versionMetadata.getVersion() );<a name="line.951"></a>
<span class="sourceLineNo">952</span>        artifactMetadataModel.setVersion( versionMetadata.getVersion() );<a name="line.952"></a>
<span class="sourceLineNo">953</span>        updateFacets( versionMetadata, artifactMetadataModel );<a name="line.953"></a>
<span class="sourceLineNo">954</span><a name="line.954"></a>
<span class="sourceLineNo">955</span>    }<a name="line.955"></a>
<span class="sourceLineNo">956</span><a name="line.956"></a>
<span class="sourceLineNo">957</span><a name="line.957"></a>
<span class="sourceLineNo">958</span>    @Override<a name="line.958"></a>
<span class="sourceLineNo">959</span>    public ProjectVersionMetadata getProjectVersion( final String repoId, final String namespace,<a name="line.959"></a>
<span class="sourceLineNo">960</span>                                                     final String projectId, final String projectVersion )<a name="line.960"></a>
<span class="sourceLineNo">961</span>        throws MetadataResolutionException<a name="line.961"></a>
<span class="sourceLineNo">962</span>    {<a name="line.962"></a>
<span class="sourceLineNo">963</span><a name="line.963"></a>
<span class="sourceLineNo">964</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.964"></a>
<span class="sourceLineNo">965</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.965"></a>
<span class="sourceLineNo">966</span>            .setColumnFamily( cassandraArchivaManager.getProjectVersionMetadataFamilyName() ) //<a name="line.966"></a>
<span class="sourceLineNo">967</span>            .setColumnNames( PROJECT_VERSION.toString() ) //<a name="line.967"></a>
<span class="sourceLineNo">968</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repoId ) //<a name="line.968"></a>
<span class="sourceLineNo">969</span>            .addEqualsExpression( NAMESPACE_ID.toString(), namespace ) //<a name="line.969"></a>
<span class="sourceLineNo">970</span>            .addEqualsExpression( PROJECT_ID.toString(), projectId ) //<a name="line.970"></a>
<span class="sourceLineNo">971</span>            .addEqualsExpression( PROJECT_VERSION.toString(), projectVersion ) //<a name="line.971"></a>
<span class="sourceLineNo">972</span>            .execute();<a name="line.972"></a>
<span class="sourceLineNo">973</span><a name="line.973"></a>
<span class="sourceLineNo">974</span>        if ( result.get().getCount() &lt; 1 )<a name="line.974"></a>
<span class="sourceLineNo">975</span>        {<a name="line.975"></a>
<span class="sourceLineNo">976</span>            return null;<a name="line.976"></a>
<span class="sourceLineNo">977</span>        }<a name="line.977"></a>
<span class="sourceLineNo">978</span><a name="line.978"></a>
<span class="sourceLineNo">979</span>        String key = result.get().iterator().next().getKey();<a name="line.979"></a>
<span class="sourceLineNo">980</span><a name="line.980"></a>
<span class="sourceLineNo">981</span>        ColumnFamilyResult&lt;String, String&gt; columnFamilyResult = this.projectVersionMetadataTemplate.queryColumns( key );<a name="line.981"></a>
<span class="sourceLineNo">982</span><a name="line.982"></a>
<span class="sourceLineNo">983</span>        if ( !columnFamilyResult.hasResults() )<a name="line.983"></a>
<span class="sourceLineNo">984</span>        {<a name="line.984"></a>
<span class="sourceLineNo">985</span>            return null;<a name="line.985"></a>
<span class="sourceLineNo">986</span>        }<a name="line.986"></a>
<span class="sourceLineNo">987</span><a name="line.987"></a>
<span class="sourceLineNo">988</span>        ProjectVersionMetadata projectVersionMetadata = new ProjectVersionMetadata();<a name="line.988"></a>
<span class="sourceLineNo">989</span>        projectVersionMetadata.setId( columnFamilyResult.getString( PROJECT_VERSION.toString() ) );<a name="line.989"></a>
<span class="sourceLineNo">990</span>        projectVersionMetadata.setDescription( columnFamilyResult.getString( DESCRIPTION.toString() ) );<a name="line.990"></a>
<span class="sourceLineNo">991</span>        projectVersionMetadata.setName( columnFamilyResult.getString( NAME.toString() ) );<a name="line.991"></a>
<span class="sourceLineNo">992</span><a name="line.992"></a>
<span class="sourceLineNo">993</span>        projectVersionMetadata.setIncomplete( Boolean.parseBoolean( columnFamilyResult.getString( "incomplete" ) ) );<a name="line.993"></a>
<span class="sourceLineNo">994</span><a name="line.994"></a>
<span class="sourceLineNo">995</span>        projectVersionMetadata.setUrl( columnFamilyResult.getString( URL.toString() ) );<a name="line.995"></a>
<span class="sourceLineNo">996</span>        {<a name="line.996"></a>
<span class="sourceLineNo">997</span>            String ciUrl = columnFamilyResult.getString( "ciManagement.url" );<a name="line.997"></a>
<span class="sourceLineNo">998</span>            String ciSystem = columnFamilyResult.getString( "ciManagement.system" );<a name="line.998"></a>
<span class="sourceLineNo">999</span><a name="line.999"></a>
<span class="sourceLineNo">1000</span>            if ( StringUtils.isNotEmpty( ciSystem ) || StringUtils.isNotEmpty( ciUrl ) )<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>            {<a name="line.1001"></a>
<span class="sourceLineNo">1002</span>                projectVersionMetadata.setCiManagement( new CiManagement( ciSystem, ciUrl ) );<a name="line.1002"></a>
<span class="sourceLineNo">1003</span>            }<a name="line.1003"></a>
<span class="sourceLineNo">1004</span>        }<a name="line.1004"></a>
<span class="sourceLineNo">1005</span>        {<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>            String issueUrl = columnFamilyResult.getString( "issueManagement.url" );<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>            String issueSystem = columnFamilyResult.getString( "issueManagement.system" );<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>            if ( StringUtils.isNotEmpty( issueSystem ) || StringUtils.isNotEmpty( issueUrl ) )<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>            {<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>                projectVersionMetadata.setIssueManagement( new IssueManagement( issueSystem, issueUrl ) );<a name="line.1010"></a>
<span class="sourceLineNo">1011</span>            }<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>        }<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>        {<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>            String organizationUrl = columnFamilyResult.getString( "organization.url" );<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>            String organizationName = columnFamilyResult.getString( "organization.name" );<a name="line.1015"></a>
<span class="sourceLineNo">1016</span>            if ( StringUtils.isNotEmpty( organizationUrl ) || StringUtils.isNotEmpty( organizationName ) )<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>            {<a name="line.1017"></a>
<span class="sourceLineNo">1018</span>                projectVersionMetadata.setOrganization( new Organization( organizationName, organizationUrl ) );<a name="line.1018"></a>
<span class="sourceLineNo">1019</span>            }<a name="line.1019"></a>
<span class="sourceLineNo">1020</span>        }<a name="line.1020"></a>
<span class="sourceLineNo">1021</span>        {<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>            String devConn = columnFamilyResult.getString( "scm.developerConnection" );<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>            String conn = columnFamilyResult.getString( "scm.connection" );<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>            String url = columnFamilyResult.getString( "scm.url" );<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>            if ( StringUtils.isNotEmpty( devConn ) || StringUtils.isNotEmpty( conn ) || StringUtils.isNotEmpty( url ) )<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>            {<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>                projectVersionMetadata.setScm( new Scm( conn, devConn, url ) );<a name="line.1027"></a>
<span class="sourceLineNo">1028</span>            }<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>        }<a name="line.1029"></a>
<span class="sourceLineNo">1030</span>        projectVersionMetadata.setMailingLists( getMailingLists( key ) );<a name="line.1030"></a>
<span class="sourceLineNo">1031</span>        projectVersionMetadata.setLicenses( getLicenses( key ) );<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>        projectVersionMetadata.setDependencies( getDependencies( key ) );<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>        // facets<a name="line.1033"></a>
<span class="sourceLineNo">1034</span><a name="line.1034"></a>
<span class="sourceLineNo">1035</span>        result = HFactory //<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>            .setColumnFamily( cassandraArchivaManager.getMetadataFacetFamilyName() ) //<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>            .setColumnNames( FACET_ID.toString(), KEY.toString(), VALUE.toString(), NAME.toString() ) //<a name="line.1038"></a>
<span class="sourceLineNo">1039</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repoId ) //<a name="line.1039"></a>
<span class="sourceLineNo">1040</span>            .addEqualsExpression( NAMESPACE_ID.toString(), namespace ) //<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>            .addEqualsExpression( PROJECT_ID.toString(), projectId ) //<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>            .addEqualsExpression( PROJECT_VERSION.toString(), projectVersion ) //<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>            .execute();<a name="line.1043"></a>
<span class="sourceLineNo">1044</span><a name="line.1044"></a>
<span class="sourceLineNo">1045</span>        Map&lt;String, Map&lt;String, String&gt;&gt; metadataFacetsPerFacetIds = new HashMap&lt;&gt;();<a name="line.1045"></a>
<span class="sourceLineNo">1046</span><a name="line.1046"></a>
<span class="sourceLineNo">1047</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.1047"></a>
<span class="sourceLineNo">1048</span>        {<a name="line.1048"></a>
<span class="sourceLineNo">1049</span>            ColumnSlice&lt;String, String&gt; columnSlice = row.getColumnSlice();<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>            String facetId = getStringValue( columnSlice, FACET_ID.toString() );<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>            Map&lt;String, String&gt; metaValues = metadataFacetsPerFacetIds.get( facetId );<a name="line.1051"></a>
<span class="sourceLineNo">1052</span>            if ( metaValues == null )<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>            {<a name="line.1053"></a>
<span class="sourceLineNo">1054</span>                metaValues = new HashMap&lt;&gt;();<a name="line.1054"></a>
<span class="sourceLineNo">1055</span>                metadataFacetsPerFacetIds.put( facetId, metaValues );<a name="line.1055"></a>
<span class="sourceLineNo">1056</span>            }<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>            metaValues.put( getStringValue( columnSlice, KEY.toString() ), getStringValue( columnSlice, VALUE.toString() ) );<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>        }<a name="line.1058"></a>
<span class="sourceLineNo">1059</span><a name="line.1059"></a>
<span class="sourceLineNo">1060</span>        if ( !metadataFacetsPerFacetIds.isEmpty() )<a name="line.1060"></a>
<span class="sourceLineNo">1061</span>        {<a name="line.1061"></a>
<span class="sourceLineNo">1062</span>            for ( Map.Entry&lt;String, Map&lt;String, String&gt;&gt; entry : metadataFacetsPerFacetIds.entrySet() )<a name="line.1062"></a>
<span class="sourceLineNo">1063</span>            {<a name="line.1063"></a>
<span class="sourceLineNo">1064</span>                MetadataFacetFactory metadataFacetFactory = metadataFacetFactories.get( entry.getKey() );<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>                if ( metadataFacetFactory != null )<a name="line.1065"></a>
<span class="sourceLineNo">1066</span>                {<a name="line.1066"></a>
<span class="sourceLineNo">1067</span>                    MetadataFacet metadataFacet = metadataFacetFactory.createMetadataFacet();<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>                    metadataFacet.fromProperties( entry.getValue() );<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>                    projectVersionMetadata.addFacet( metadataFacet );<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>                }<a name="line.1070"></a>
<span class="sourceLineNo">1071</span>            }<a name="line.1071"></a>
<span class="sourceLineNo">1072</span>        }<a name="line.1072"></a>
<span class="sourceLineNo">1073</span><a name="line.1073"></a>
<span class="sourceLineNo">1074</span>        return projectVersionMetadata;<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>    }<a name="line.1075"></a>
<span class="sourceLineNo">1076</span><a name="line.1076"></a>
<span class="sourceLineNo">1077</span>    protected void recordMailingList( String projectVersionMetadataKey, List&lt;MailingList&gt; mailingLists )<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>    {<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>        if ( mailingLists == null || mailingLists.isEmpty() )<a name="line.1079"></a>
<span class="sourceLineNo">1080</span>        {<a name="line.1080"></a>
<span class="sourceLineNo">1081</span>            return;<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>        }<a name="line.1082"></a>
<span class="sourceLineNo">1083</span>        Mutator&lt;String&gt; mailingMutator = this.mailingListTemplate.createMutator();<a name="line.1083"></a>
<span class="sourceLineNo">1084</span>        for ( MailingList mailingList : mailingLists )<a name="line.1084"></a>
<span class="sourceLineNo">1085</span>        {<a name="line.1085"></a>
<span class="sourceLineNo">1086</span>            // we don't care about the key as the real used one with the projectVersionMetadata<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>            String keyMailingList = UUID.randomUUID().toString();<a name="line.1087"></a>
<span class="sourceLineNo">1088</span>            String cfMailingList = cassandraArchivaManager.getMailingListFamilyName();<a name="line.1088"></a>
<span class="sourceLineNo">1089</span><a name="line.1089"></a>
<span class="sourceLineNo">1090</span>            addInsertion( mailingMutator, keyMailingList, cfMailingList, "projectVersionMetadataModel.key",<a name="line.1090"></a>
<span class="sourceLineNo">1091</span>                          projectVersionMetadataKey );<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>            addInsertion( mailingMutator, keyMailingList, cfMailingList, NAME.toString(), mailingList.getName() );<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>            addInsertion( mailingMutator, keyMailingList, cfMailingList, "mainArchiveUrl",<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>                          mailingList.getMainArchiveUrl() );<a name="line.1094"></a>
<span class="sourceLineNo">1095</span>            addInsertion( mailingMutator, keyMailingList, cfMailingList, "postAddress", mailingList.getPostAddress() );<a name="line.1095"></a>
<span class="sourceLineNo">1096</span>            addInsertion( mailingMutator, keyMailingList, cfMailingList, "subscribeAddress",<a name="line.1096"></a>
<span class="sourceLineNo">1097</span>                          mailingList.getSubscribeAddress() );<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>            addInsertion( mailingMutator, keyMailingList, cfMailingList, "unsubscribeAddress",<a name="line.1098"></a>
<span class="sourceLineNo">1099</span>                          mailingList.getUnsubscribeAddress() );<a name="line.1099"></a>
<span class="sourceLineNo">1100</span>            int idx = 0;<a name="line.1100"></a>
<span class="sourceLineNo">1101</span>            for ( String otherArchive : mailingList.getOtherArchives() )<a name="line.1101"></a>
<span class="sourceLineNo">1102</span>            {<a name="line.1102"></a>
<span class="sourceLineNo">1103</span>                addInsertion( mailingMutator, keyMailingList, cfMailingList, "otherArchive." + idx, otherArchive );<a name="line.1103"></a>
<span class="sourceLineNo">1104</span>                idx++;<a name="line.1104"></a>
<span class="sourceLineNo">1105</span>            }<a name="line.1105"></a>
<span class="sourceLineNo">1106</span><a name="line.1106"></a>
<span class="sourceLineNo">1107</span>        }<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>        mailingMutator.execute();<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>    }<a name="line.1109"></a>
<span class="sourceLineNo">1110</span><a name="line.1110"></a>
<span class="sourceLineNo">1111</span>    protected void removeMailingList( String projectVersionMetadataKey )<a name="line.1111"></a>
<span class="sourceLineNo">1112</span>    {<a name="line.1112"></a>
<span class="sourceLineNo">1113</span><a name="line.1113"></a>
<span class="sourceLineNo">1114</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result =<a name="line.1114"></a>
<span class="sourceLineNo">1115</span>            HFactory.createRangeSlicesQuery( cassandraArchivaManager.getKeyspace(), ss, ss, ss ) //<a name="line.1115"></a>
<span class="sourceLineNo">1116</span>                .setColumnFamily( cassandraArchivaManager.getMailingListFamilyName() ) //<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>                .setColumnNames( NAME.toString() ) //<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>                .setRowCount( Integer.MAX_VALUE ) //<a name="line.1118"></a>
<span class="sourceLineNo">1119</span>                .addEqualsExpression( "projectVersionMetadataModel.key", projectVersionMetadataKey ) //<a name="line.1119"></a>
<span class="sourceLineNo">1120</span>                .execute();<a name="line.1120"></a>
<span class="sourceLineNo">1121</span><a name="line.1121"></a>
<span class="sourceLineNo">1122</span>        if ( result.get().getCount() &lt; 1 )<a name="line.1122"></a>
<span class="sourceLineNo">1123</span>        {<a name="line.1123"></a>
<span class="sourceLineNo">1124</span>            return;<a name="line.1124"></a>
<span class="sourceLineNo">1125</span>        }<a name="line.1125"></a>
<span class="sourceLineNo">1126</span><a name="line.1126"></a>
<span class="sourceLineNo">1127</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.1127"></a>
<span class="sourceLineNo">1128</span>        {<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>            this.mailingListTemplate.deleteRow( row.getKey() );<a name="line.1129"></a>
<span class="sourceLineNo">1130</span>        }<a name="line.1130"></a>
<span class="sourceLineNo">1131</span><a name="line.1131"></a>
<span class="sourceLineNo">1132</span>    }<a name="line.1132"></a>
<span class="sourceLineNo">1133</span><a name="line.1133"></a>
<span class="sourceLineNo">1134</span>    protected List&lt;MailingList&gt; getMailingLists( String projectVersionMetadataKey )<a name="line.1134"></a>
<span class="sourceLineNo">1135</span>    {<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>        List&lt;MailingList&gt; mailingLists = new ArrayList&lt;&gt;();<a name="line.1136"></a>
<span class="sourceLineNo">1137</span><a name="line.1137"></a>
<span class="sourceLineNo">1138</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result =<a name="line.1138"></a>
<span class="sourceLineNo">1139</span>            HFactory.createRangeSlicesQuery( cassandraArchivaManager.getKeyspace(), ss, ss, ss ) //<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>                .setColumnFamily( cassandraArchivaManager.getMailingListFamilyName() ) //<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>                .setColumnNames( NAME.toString() ) //<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>                .setRowCount( Integer.MAX_VALUE ) //<a name="line.1142"></a>
<span class="sourceLineNo">1143</span>                .addEqualsExpression( "projectVersionMetadataModel.key", projectVersionMetadataKey ) //<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>                .execute();<a name="line.1144"></a>
<span class="sourceLineNo">1145</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.1145"></a>
<span class="sourceLineNo">1146</span>        {<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>            ColumnFamilyResult&lt;String, String&gt; columnFamilyResult =<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>                this.mailingListTemplate.queryColumns( row.getKey() );<a name="line.1148"></a>
<span class="sourceLineNo">1149</span><a name="line.1149"></a>
<span class="sourceLineNo">1150</span>            MailingList mailingList = new MailingList();<a name="line.1150"></a>
<span class="sourceLineNo">1151</span>            mailingList.setName( columnFamilyResult.getString( NAME.toString() ) );<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>            mailingList.setMainArchiveUrl( columnFamilyResult.getString( "mainArchiveUrl" ) );<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>            mailingList.setPostAddress( columnFamilyResult.getString( "postAddress" ) );<a name="line.1153"></a>
<span class="sourceLineNo">1154</span>            mailingList.setSubscribeAddress( columnFamilyResult.getString( "subscribeAddress" ) );<a name="line.1154"></a>
<span class="sourceLineNo">1155</span>            mailingList.setUnsubscribeAddress( columnFamilyResult.getString( "unsubscribeAddress" ) );<a name="line.1155"></a>
<span class="sourceLineNo">1156</span><a name="line.1156"></a>
<span class="sourceLineNo">1157</span>            List&lt;String&gt; otherArchives = new ArrayList&lt;&gt;();<a name="line.1157"></a>
<span class="sourceLineNo">1158</span><a name="line.1158"></a>
<span class="sourceLineNo">1159</span>            for ( String columnName : columnFamilyResult.getColumnNames() )<a name="line.1159"></a>
<span class="sourceLineNo">1160</span>            {<a name="line.1160"></a>
<span class="sourceLineNo">1161</span>                if ( StringUtils.startsWith( columnName, "otherArchive." ) )<a name="line.1161"></a>
<span class="sourceLineNo">1162</span>                {<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>                    otherArchives.add( columnFamilyResult.getString( columnName ) );<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>                }<a name="line.1164"></a>
<span class="sourceLineNo">1165</span>            }<a name="line.1165"></a>
<span class="sourceLineNo">1166</span><a name="line.1166"></a>
<span class="sourceLineNo">1167</span>            mailingList.setOtherArchives( otherArchives );<a name="line.1167"></a>
<span class="sourceLineNo">1168</span>            mailingLists.add( mailingList );<a name="line.1168"></a>
<span class="sourceLineNo">1169</span>        }<a name="line.1169"></a>
<span class="sourceLineNo">1170</span><a name="line.1170"></a>
<span class="sourceLineNo">1171</span>        return mailingLists;<a name="line.1171"></a>
<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
<span class="sourceLineNo">1173</span><a name="line.1173"></a>
<span class="sourceLineNo">1174</span>    protected void recordLicenses( String projectVersionMetadataKey, List&lt;License&gt; licenses )<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>    {<a name="line.1175"></a>
<span class="sourceLineNo">1176</span><a name="line.1176"></a>
<span class="sourceLineNo">1177</span>        if ( licenses == null || licenses.isEmpty() )<a name="line.1177"></a>
<span class="sourceLineNo">1178</span>        {<a name="line.1178"></a>
<span class="sourceLineNo">1179</span>            return;<a name="line.1179"></a>
<span class="sourceLineNo">1180</span>        }<a name="line.1180"></a>
<span class="sourceLineNo">1181</span>        Mutator&lt;String&gt; licenseMutator = this.licenseTemplate.createMutator();<a name="line.1181"></a>
<span class="sourceLineNo">1182</span><a name="line.1182"></a>
<span class="sourceLineNo">1183</span>        for ( License license : licenses )<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>        {<a name="line.1184"></a>
<span class="sourceLineNo">1185</span>            // we don't care about the key as the real used one with the projectVersionMetadata<a name="line.1185"></a>
<span class="sourceLineNo">1186</span>            String keyLicense = UUID.randomUUID().toString();<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>            String cfLicense = cassandraArchivaManager.getLicenseFamilyName();<a name="line.1187"></a>
<span class="sourceLineNo">1188</span><a name="line.1188"></a>
<span class="sourceLineNo">1189</span>            addInsertion( licenseMutator, keyLicense, cfLicense, "projectVersionMetadataModel.key",<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>                          projectVersionMetadataKey );<a name="line.1190"></a>
<span class="sourceLineNo">1191</span><a name="line.1191"></a>
<span class="sourceLineNo">1192</span>            addInsertion( licenseMutator, keyLicense, cfLicense, NAME.toString(), license.getName() );<a name="line.1192"></a>
<span class="sourceLineNo">1193</span><a name="line.1193"></a>
<span class="sourceLineNo">1194</span>            addInsertion( licenseMutator, keyLicense, cfLicense, URL.toString(), license.getUrl() );<a name="line.1194"></a>
<span class="sourceLineNo">1195</span><a name="line.1195"></a>
<span class="sourceLineNo">1196</span>        }<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>        licenseMutator.execute();<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>    }<a name="line.1198"></a>
<span class="sourceLineNo">1199</span><a name="line.1199"></a>
<span class="sourceLineNo">1200</span>    protected void removeLicenses( String projectVersionMetadataKey )<a name="line.1200"></a>
<span class="sourceLineNo">1201</span>    {<a name="line.1201"></a>
<span class="sourceLineNo">1202</span><a name="line.1202"></a>
<span class="sourceLineNo">1203</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result =<a name="line.1203"></a>
<span class="sourceLineNo">1204</span>            HFactory.createRangeSlicesQuery( cassandraArchivaManager.getKeyspace(), ss, ss, ss ) //<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>                .setColumnFamily( cassandraArchivaManager.getLicenseFamilyName() ) //<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>                .setColumnNames( NAME.toString() ) //<a name="line.1206"></a>
<span class="sourceLineNo">1207</span>                .setRowCount( Integer.MAX_VALUE ) //<a name="line.1207"></a>
<span class="sourceLineNo">1208</span>                .addEqualsExpression( "projectVersionMetadataModel.key", projectVersionMetadataKey ) //<a name="line.1208"></a>
<span class="sourceLineNo">1209</span>                .execute();<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.1210"></a>
<span class="sourceLineNo">1211</span>        {<a name="line.1211"></a>
<span class="sourceLineNo">1212</span>            this.licenseTemplate.deleteRow( row.getKey() );<a name="line.1212"></a>
<span class="sourceLineNo">1213</span>        }<a name="line.1213"></a>
<span class="sourceLineNo">1214</span>    }<a name="line.1214"></a>
<span class="sourceLineNo">1215</span><a name="line.1215"></a>
<span class="sourceLineNo">1216</span>    protected List&lt;License&gt; getLicenses( String projectVersionMetadataKey )<a name="line.1216"></a>
<span class="sourceLineNo">1217</span>    {<a name="line.1217"></a>
<span class="sourceLineNo">1218</span>        List&lt;License&gt; licenses = new ArrayList&lt;&gt;();<a name="line.1218"></a>
<span class="sourceLineNo">1219</span><a name="line.1219"></a>
<span class="sourceLineNo">1220</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result =<a name="line.1220"></a>
<span class="sourceLineNo">1221</span>            HFactory.createRangeSlicesQuery( cassandraArchivaManager.getKeyspace(), ss, ss, ss ) //<a name="line.1221"></a>
<span class="sourceLineNo">1222</span>                .setColumnFamily( cassandraArchivaManager.getLicenseFamilyName() ) //<a name="line.1222"></a>
<span class="sourceLineNo">1223</span>                .setColumnNames( "projectVersionMetadataModel.key" ) //<a name="line.1223"></a>
<span class="sourceLineNo">1224</span>                .setRowCount( Integer.MAX_VALUE ) //<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>                .addEqualsExpression( "projectVersionMetadataModel.key", projectVersionMetadataKey ) //<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>                .execute();<a name="line.1226"></a>
<span class="sourceLineNo">1227</span><a name="line.1227"></a>
<span class="sourceLineNo">1228</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>        {<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>            ColumnFamilyResult&lt;String, String&gt; columnFamilyResult = this.licenseTemplate.queryColumns( row.getKey() );<a name="line.1230"></a>
<span class="sourceLineNo">1231</span><a name="line.1231"></a>
<span class="sourceLineNo">1232</span>            licenses.add(<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>                new License( columnFamilyResult.getString( NAME.toString() ), columnFamilyResult.getString( URL.toString() ) ) );<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>        }<a name="line.1234"></a>
<span class="sourceLineNo">1235</span><a name="line.1235"></a>
<span class="sourceLineNo">1236</span>        return licenses;<a name="line.1236"></a>
<span class="sourceLineNo">1237</span>    }<a name="line.1237"></a>
<span class="sourceLineNo">1238</span><a name="line.1238"></a>
<span class="sourceLineNo">1239</span><a name="line.1239"></a>
<span class="sourceLineNo">1240</span>    protected void recordDependencies( String projectVersionMetadataKey, List&lt;Dependency&gt; dependencies,<a name="line.1240"></a>
<span class="sourceLineNo">1241</span>                                       String repositoryId )<a name="line.1241"></a>
<span class="sourceLineNo">1242</span>    {<a name="line.1242"></a>
<span class="sourceLineNo">1243</span><a name="line.1243"></a>
<span class="sourceLineNo">1244</span>        if ( dependencies == null || dependencies.isEmpty() )<a name="line.1244"></a>
<span class="sourceLineNo">1245</span>        {<a name="line.1245"></a>
<span class="sourceLineNo">1246</span>            return;<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>        }<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>        Mutator&lt;String&gt; dependencyMutator = this.dependencyTemplate.createMutator();<a name="line.1248"></a>
<span class="sourceLineNo">1249</span><a name="line.1249"></a>
<span class="sourceLineNo">1250</span>        for ( Dependency dependency : dependencies )<a name="line.1250"></a>
<span class="sourceLineNo">1251</span>        {<a name="line.1251"></a>
<span class="sourceLineNo">1252</span>            // we don't care about the key as the real used one with the projectVersionMetadata<a name="line.1252"></a>
<span class="sourceLineNo">1253</span>            String keyDependency = UUID.randomUUID().toString();<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>            String cfDependency = cassandraArchivaManager.getDependencyFamilyName();<a name="line.1254"></a>
<span class="sourceLineNo">1255</span><a name="line.1255"></a>
<span class="sourceLineNo">1256</span>            addInsertion( dependencyMutator, keyDependency, cfDependency, "projectVersionMetadataModel.key",<a name="line.1256"></a>
<span class="sourceLineNo">1257</span>                          projectVersionMetadataKey );<a name="line.1257"></a>
<span class="sourceLineNo">1258</span><a name="line.1258"></a>
<span class="sourceLineNo">1259</span>            addInsertion( dependencyMutator, keyDependency, cfDependency, REPOSITORY_NAME.toString(), repositoryId );<a name="line.1259"></a>
<span class="sourceLineNo">1260</span><a name="line.1260"></a>
<span class="sourceLineNo">1261</span>            addInsertion( dependencyMutator, keyDependency, cfDependency, "classifier", dependency.getClassifier() );<a name="line.1261"></a>
<span class="sourceLineNo">1262</span><a name="line.1262"></a>
<span class="sourceLineNo">1263</span>            addInsertion( dependencyMutator, keyDependency, cfDependency, "optional",<a name="line.1263"></a>
<span class="sourceLineNo">1264</span>                          Boolean.toString( dependency.isOptional() ) );<a name="line.1264"></a>
<span class="sourceLineNo">1265</span><a name="line.1265"></a>
<span class="sourceLineNo">1266</span>            addInsertion( dependencyMutator, keyDependency, cfDependency, "scope", dependency.getScope() );<a name="line.1266"></a>
<span class="sourceLineNo">1267</span><a name="line.1267"></a>
<span class="sourceLineNo">1268</span>            addInsertion( dependencyMutator, keyDependency, cfDependency, "systemPath", dependency.getSystemPath() );<a name="line.1268"></a>
<span class="sourceLineNo">1269</span><a name="line.1269"></a>
<span class="sourceLineNo">1270</span>            addInsertion( dependencyMutator, keyDependency, cfDependency, "type", dependency.getType() );<a name="line.1270"></a>
<span class="sourceLineNo">1271</span><a name="line.1271"></a>
<span class="sourceLineNo">1272</span>            addInsertion( dependencyMutator, keyDependency, cfDependency, ARTIFACT_ID.toString(), dependency.getArtifactId() );<a name="line.1272"></a>
<span class="sourceLineNo">1273</span><a name="line.1273"></a>
<span class="sourceLineNo">1274</span>            addInsertion( dependencyMutator, keyDependency, cfDependency, GROUP_ID.toString(), dependency.getGroupId() );<a name="line.1274"></a>
<span class="sourceLineNo">1275</span><a name="line.1275"></a>
<span class="sourceLineNo">1276</span>            addInsertion( dependencyMutator, keyDependency, cfDependency, VERSION.toString(), dependency.getVersion() );<a name="line.1276"></a>
<span class="sourceLineNo">1277</span><a name="line.1277"></a>
<span class="sourceLineNo">1278</span>        }<a name="line.1278"></a>
<span class="sourceLineNo">1279</span>        dependencyMutator.execute();<a name="line.1279"></a>
<span class="sourceLineNo">1280</span>    }<a name="line.1280"></a>
<span class="sourceLineNo">1281</span><a name="line.1281"></a>
<span class="sourceLineNo">1282</span>    protected void removeDependencies( String projectVersionMetadataKey )<a name="line.1282"></a>
<span class="sourceLineNo">1283</span>    {<a name="line.1283"></a>
<span class="sourceLineNo">1284</span><a name="line.1284"></a>
<span class="sourceLineNo">1285</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result =<a name="line.1285"></a>
<span class="sourceLineNo">1286</span>            HFactory.createRangeSlicesQuery( cassandraArchivaManager.getKeyspace(), ss, ss, ss ) //<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>                .setColumnFamily( cassandraArchivaManager.getDependencyFamilyName() ) //<a name="line.1287"></a>
<span class="sourceLineNo">1288</span>                .setColumnNames( GROUP_ID.toString() ) //<a name="line.1288"></a>
<span class="sourceLineNo">1289</span>                .setRowCount( Integer.MAX_VALUE ) //<a name="line.1289"></a>
<span class="sourceLineNo">1290</span>                .addEqualsExpression( "projectVersionMetadataModel.key", projectVersionMetadataKey ) //<a name="line.1290"></a>
<span class="sourceLineNo">1291</span>                .execute();<a name="line.1291"></a>
<span class="sourceLineNo">1292</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.1292"></a>
<span class="sourceLineNo">1293</span>        {<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>            this.dependencyTemplate.deleteRow( row.getKey() );<a name="line.1294"></a>
<span class="sourceLineNo">1295</span>        }<a name="line.1295"></a>
<span class="sourceLineNo">1296</span>    }<a name="line.1296"></a>
<span class="sourceLineNo">1297</span><a name="line.1297"></a>
<span class="sourceLineNo">1298</span>    protected List&lt;Dependency&gt; getDependencies( String projectVersionMetadataKey )<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>    {<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>        List&lt;Dependency&gt; dependencies = new ArrayList&lt;&gt;();<a name="line.1300"></a>
<span class="sourceLineNo">1301</span><a name="line.1301"></a>
<span class="sourceLineNo">1302</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result =<a name="line.1302"></a>
<span class="sourceLineNo">1303</span>            HFactory.createRangeSlicesQuery( cassandraArchivaManager.getKeyspace(), ss, ss, ss ) //<a name="line.1303"></a>
<span class="sourceLineNo">1304</span>                .setColumnFamily( cassandraArchivaManager.getDependencyFamilyName() ) //<a name="line.1304"></a>
<span class="sourceLineNo">1305</span>                .setColumnNames( "projectVersionMetadataModel.key" ) //<a name="line.1305"></a>
<span class="sourceLineNo">1306</span>                .setRowCount( Integer.MAX_VALUE ) //<a name="line.1306"></a>
<span class="sourceLineNo">1307</span>                .addEqualsExpression( "projectVersionMetadataModel.key", projectVersionMetadataKey ) //<a name="line.1307"></a>
<span class="sourceLineNo">1308</span>                .execute();<a name="line.1308"></a>
<span class="sourceLineNo">1309</span><a name="line.1309"></a>
<span class="sourceLineNo">1310</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.1310"></a>
<span class="sourceLineNo">1311</span>        {<a name="line.1311"></a>
<span class="sourceLineNo">1312</span>            ColumnFamilyResult&lt;String, String&gt; columnFamilyResult =<a name="line.1312"></a>
<span class="sourceLineNo">1313</span>                this.dependencyTemplate.queryColumns( row.getKey() );<a name="line.1313"></a>
<span class="sourceLineNo">1314</span><a name="line.1314"></a>
<span class="sourceLineNo">1315</span>            Dependency dependency = new Dependency();<a name="line.1315"></a>
<span class="sourceLineNo">1316</span>            dependency.setClassifier( columnFamilyResult.getString( "classifier" ) );<a name="line.1316"></a>
<span class="sourceLineNo">1317</span><a name="line.1317"></a>
<span class="sourceLineNo">1318</span>            dependency.setOptional( Boolean.parseBoolean( columnFamilyResult.getString( "optional" ) ) );<a name="line.1318"></a>
<span class="sourceLineNo">1319</span><a name="line.1319"></a>
<span class="sourceLineNo">1320</span>            dependency.setScope( columnFamilyResult.getString( "scope" ) );<a name="line.1320"></a>
<span class="sourceLineNo">1321</span><a name="line.1321"></a>
<span class="sourceLineNo">1322</span>            dependency.setSystemPath( columnFamilyResult.getString( "systemPath" ) );<a name="line.1322"></a>
<span class="sourceLineNo">1323</span><a name="line.1323"></a>
<span class="sourceLineNo">1324</span>            dependency.setType( columnFamilyResult.getString( "type" ) );<a name="line.1324"></a>
<span class="sourceLineNo">1325</span><a name="line.1325"></a>
<span class="sourceLineNo">1326</span>            dependency.setArtifactId( columnFamilyResult.getString( ARTIFACT_ID.toString() ) );<a name="line.1326"></a>
<span class="sourceLineNo">1327</span><a name="line.1327"></a>
<span class="sourceLineNo">1328</span>            dependency.setGroupId( columnFamilyResult.getString( GROUP_ID.toString() ) );<a name="line.1328"></a>
<span class="sourceLineNo">1329</span><a name="line.1329"></a>
<span class="sourceLineNo">1330</span>            dependency.setVersion( columnFamilyResult.getString( VERSION.toString() ) );<a name="line.1330"></a>
<span class="sourceLineNo">1331</span><a name="line.1331"></a>
<span class="sourceLineNo">1332</span>            dependencies.add( dependency );<a name="line.1332"></a>
<span class="sourceLineNo">1333</span>        }<a name="line.1333"></a>
<span class="sourceLineNo">1334</span><a name="line.1334"></a>
<span class="sourceLineNo">1335</span>        return dependencies;<a name="line.1335"></a>
<span class="sourceLineNo">1336</span>    }<a name="line.1336"></a>
<span class="sourceLineNo">1337</span><a name="line.1337"></a>
<span class="sourceLineNo">1338</span>    @Override<a name="line.1338"></a>
<span class="sourceLineNo">1339</span>    public void updateArtifact( String repositoryId, String namespaceId, String projectId, String projectVersion,<a name="line.1339"></a>
<span class="sourceLineNo">1340</span>                                ArtifactMetadata artifactMeta )<a name="line.1340"></a>
<span class="sourceLineNo">1341</span>        throws MetadataRepositoryException<a name="line.1341"></a>
<span class="sourceLineNo">1342</span>    {<a name="line.1342"></a>
<span class="sourceLineNo">1343</span><a name="line.1343"></a>
<span class="sourceLineNo">1344</span>        Namespace namespace = getNamespace( repositoryId, namespaceId );<a name="line.1344"></a>
<span class="sourceLineNo">1345</span>        if ( namespace == null )<a name="line.1345"></a>
<span class="sourceLineNo">1346</span>        {<a name="line.1346"></a>
<span class="sourceLineNo">1347</span>            namespace = updateOrAddNamespace( repositoryId, namespaceId );<a name="line.1347"></a>
<span class="sourceLineNo">1348</span>        }<a name="line.1348"></a>
<span class="sourceLineNo">1349</span><a name="line.1349"></a>
<span class="sourceLineNo">1350</span>        ProjectMetadata projectMetadata = new ProjectMetadata();<a name="line.1350"></a>
<span class="sourceLineNo">1351</span>        projectMetadata.setId( projectId );<a name="line.1351"></a>
<span class="sourceLineNo">1352</span>        projectMetadata.setNamespace( namespaceId );<a name="line.1352"></a>
<span class="sourceLineNo">1353</span>        updateProject( repositoryId, projectMetadata );<a name="line.1353"></a>
<span class="sourceLineNo">1354</span><a name="line.1354"></a>
<span class="sourceLineNo">1355</span>        String key = new ArtifactMetadataModel.KeyBuilder().withNamespace( namespace ).withProject( projectId ).withId(<a name="line.1355"></a>
<span class="sourceLineNo">1356</span>            artifactMeta.getId() ).withProjectVersion( projectVersion ).build();<a name="line.1356"></a>
<span class="sourceLineNo">1357</span><a name="line.1357"></a>
<span class="sourceLineNo">1358</span>        // exists?<a name="line.1358"></a>
<span class="sourceLineNo">1359</span><a name="line.1359"></a>
<span class="sourceLineNo">1360</span>        boolean exists = this.artifactMetadataTemplate.isColumnsExist( key );<a name="line.1360"></a>
<span class="sourceLineNo">1361</span><a name="line.1361"></a>
<span class="sourceLineNo">1362</span>        if ( exists )<a name="line.1362"></a>
<span class="sourceLineNo">1363</span>        {<a name="line.1363"></a>
<span class="sourceLineNo">1364</span>            // updater<a name="line.1364"></a>
<span class="sourceLineNo">1365</span>            ColumnFamilyUpdater&lt;String, String&gt; updater = this.artifactMetadataTemplate.createUpdater( key );<a name="line.1365"></a>
<span class="sourceLineNo">1366</span>            updater.setLong( FILE_LAST_MODIFIED.toString(), artifactMeta.getFileLastModified().getTime() );<a name="line.1366"></a>
<span class="sourceLineNo">1367</span>            updater.setLong( WHEN_GATHERED.toString(), artifactMeta.getWhenGathered().getTime() );<a name="line.1367"></a>
<span class="sourceLineNo">1368</span>            updater.setLong( SIZE.toString(), artifactMeta.getSize() );<a name="line.1368"></a>
<span class="sourceLineNo">1369</span>            addUpdateStringValue( updater, MD5.toString(), artifactMeta.getMd5() );<a name="line.1369"></a>
<span class="sourceLineNo">1370</span>            addUpdateStringValue( updater, SHA1.toString(), artifactMeta.getSha1() );<a name="line.1370"></a>
<span class="sourceLineNo">1371</span>            addUpdateStringValue( updater, VERSION.toString(), artifactMeta.getVersion() );<a name="line.1371"></a>
<span class="sourceLineNo">1372</span>            this.artifactMetadataTemplate.update( updater );<a name="line.1372"></a>
<span class="sourceLineNo">1373</span>        }<a name="line.1373"></a>
<span class="sourceLineNo">1374</span>        else<a name="line.1374"></a>
<span class="sourceLineNo">1375</span>        {<a name="line.1375"></a>
<span class="sourceLineNo">1376</span>            String cf = this.cassandraArchivaManager.getArtifactMetadataFamilyName();<a name="line.1376"></a>
<span class="sourceLineNo">1377</span>            // create<a name="line.1377"></a>
<span class="sourceLineNo">1378</span>            this.artifactMetadataTemplate.createMutator() //<a name="line.1378"></a>
<span class="sourceLineNo">1379</span>                .addInsertion( key, cf, column( ID.toString(), artifactMeta.getId() ) )//<a name="line.1379"></a>
<span class="sourceLineNo">1380</span>                .addInsertion( key, cf, column( REPOSITORY_NAME.toString(), repositoryId ) ) //<a name="line.1380"></a>
<span class="sourceLineNo">1381</span>                .addInsertion( key, cf, column( NAMESPACE_ID.toString(), namespaceId ) ) //<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>                .addInsertion( key, cf, column( PROJECT.toString(), artifactMeta.getProject() ) ) //<a name="line.1382"></a>
<span class="sourceLineNo">1383</span>                .addInsertion( key, cf, column( PROJECT_VERSION.toString(), projectVersion ) ) //<a name="line.1383"></a>
<span class="sourceLineNo">1384</span>                .addInsertion( key, cf, column( VERSION.toString(), artifactMeta.getVersion() ) ) //<a name="line.1384"></a>
<span class="sourceLineNo">1385</span>                .addInsertion( key, cf, column( FILE_LAST_MODIFIED.toString(), artifactMeta.getFileLastModified().getTime() ) ) //<a name="line.1385"></a>
<span class="sourceLineNo">1386</span>                .addInsertion( key, cf, column( SIZE.toString(), artifactMeta.getSize() ) ) //<a name="line.1386"></a>
<span class="sourceLineNo">1387</span>                .addInsertion( key, cf, column( MD5.toString(), artifactMeta.getMd5() ) ) //<a name="line.1387"></a>
<span class="sourceLineNo">1388</span>                .addInsertion( key, cf, column( SHA1.toString(), artifactMeta.getSha1() ) ) //<a name="line.1388"></a>
<span class="sourceLineNo">1389</span>                .addInsertion( key, cf, column( WHEN_GATHERED.toString(), artifactMeta.getWhenGathered().getTime() ) )//<a name="line.1389"></a>
<span class="sourceLineNo">1390</span>                .execute();<a name="line.1390"></a>
<span class="sourceLineNo">1391</span>        }<a name="line.1391"></a>
<span class="sourceLineNo">1392</span><a name="line.1392"></a>
<span class="sourceLineNo">1393</span>        key = new ProjectVersionMetadataModel.KeyBuilder() //<a name="line.1393"></a>
<span class="sourceLineNo">1394</span>            .withRepository( repositoryId ) //<a name="line.1394"></a>
<span class="sourceLineNo">1395</span>            .withNamespace( namespace ) //<a name="line.1395"></a>
<span class="sourceLineNo">1396</span>            .withProjectId( projectId ) //<a name="line.1396"></a>
<span class="sourceLineNo">1397</span>            .withProjectVersion( projectVersion ) //<a name="line.1397"></a>
<span class="sourceLineNo">1398</span>            .withId( artifactMeta.getId() ) //<a name="line.1398"></a>
<span class="sourceLineNo">1399</span>            .build();<a name="line.1399"></a>
<span class="sourceLineNo">1400</span><a name="line.1400"></a>
<span class="sourceLineNo">1401</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.1401"></a>
<span class="sourceLineNo">1402</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.1402"></a>
<span class="sourceLineNo">1403</span>            .setColumnFamily( cassandraArchivaManager.getProjectVersionMetadataFamilyName() ) //<a name="line.1403"></a>
<span class="sourceLineNo">1404</span>            .setColumnNames( VERSION.toString() ) //<a name="line.1404"></a>
<span class="sourceLineNo">1405</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.1405"></a>
<span class="sourceLineNo">1406</span>            .addEqualsExpression( NAMESPACE_ID.toString(), namespaceId ) //<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>            .addEqualsExpression( PROJECT_ID.toString(), projectId ) //<a name="line.1407"></a>
<span class="sourceLineNo">1408</span>            .addEqualsExpression( PROJECT_VERSION.toString(), projectVersion ) //<a name="line.1408"></a>
<span class="sourceLineNo">1409</span>            .addEqualsExpression( VERSION.toString(), artifactMeta.getVersion() ) //<a name="line.1409"></a>
<span class="sourceLineNo">1410</span>            .execute();<a name="line.1410"></a>
<span class="sourceLineNo">1411</span><a name="line.1411"></a>
<span class="sourceLineNo">1412</span>        exists = result.get().getCount() &gt; 0;<a name="line.1412"></a>
<span class="sourceLineNo">1413</span><a name="line.1413"></a>
<span class="sourceLineNo">1414</span>        if ( !exists )<a name="line.1414"></a>
<span class="sourceLineNo">1415</span>        {<a name="line.1415"></a>
<span class="sourceLineNo">1416</span>            String cf = this.cassandraArchivaManager.getProjectVersionMetadataFamilyName();<a name="line.1416"></a>
<span class="sourceLineNo">1417</span><a name="line.1417"></a>
<span class="sourceLineNo">1418</span>            projectVersionMetadataTemplate.createMutator() //<a name="line.1418"></a>
<span class="sourceLineNo">1419</span>                .addInsertion( key, cf, column( NAMESPACE_ID.toString(), namespace.getName() ) ) //<a name="line.1419"></a>
<span class="sourceLineNo">1420</span>                .addInsertion( key, cf, column( REPOSITORY_NAME.toString(), repositoryId ) ) //<a name="line.1420"></a>
<span class="sourceLineNo">1421</span>                .addInsertion( key, cf, column( PROJECT_VERSION.toString(), projectVersion ) ) //<a name="line.1421"></a>
<span class="sourceLineNo">1422</span>                .addInsertion( key, cf, column( PROJECT_ID.toString(), projectId ) ) //<a name="line.1422"></a>
<span class="sourceLineNo">1423</span>                .addInsertion( key, cf, column( VERSION.toString(), artifactMeta.getVersion() ) ) //<a name="line.1423"></a>
<span class="sourceLineNo">1424</span>                .execute();<a name="line.1424"></a>
<span class="sourceLineNo">1425</span><a name="line.1425"></a>
<span class="sourceLineNo">1426</span>        }<a name="line.1426"></a>
<span class="sourceLineNo">1427</span><a name="line.1427"></a>
<span class="sourceLineNo">1428</span>        ArtifactMetadataModel artifactMetadataModel = new ArtifactMetadataModel();<a name="line.1428"></a>
<span class="sourceLineNo">1429</span><a name="line.1429"></a>
<span class="sourceLineNo">1430</span>        artifactMetadataModel.setRepositoryId( repositoryId );<a name="line.1430"></a>
<span class="sourceLineNo">1431</span>        artifactMetadataModel.setNamespace( namespaceId );<a name="line.1431"></a>
<span class="sourceLineNo">1432</span>        artifactMetadataModel.setProject( projectId );<a name="line.1432"></a>
<span class="sourceLineNo">1433</span>        artifactMetadataModel.setProjectVersion( projectVersion );<a name="line.1433"></a>
<span class="sourceLineNo">1434</span>        artifactMetadataModel.setVersion( artifactMeta.getVersion() );<a name="line.1434"></a>
<span class="sourceLineNo">1435</span>        artifactMetadataModel.setFileLastModified( artifactMeta.getFileLastModified() == null<a name="line.1435"></a>
<span class="sourceLineNo">1436</span>                                                       ? new Date().getTime()<a name="line.1436"></a>
<span class="sourceLineNo">1437</span>                                                       : artifactMeta.getFileLastModified().getTime() );<a name="line.1437"></a>
<span class="sourceLineNo">1438</span><a name="line.1438"></a>
<span class="sourceLineNo">1439</span>        // now facets<a name="line.1439"></a>
<span class="sourceLineNo">1440</span>        updateFacets( artifactMeta, artifactMetadataModel );<a name="line.1440"></a>
<span class="sourceLineNo">1441</span><a name="line.1441"></a>
<span class="sourceLineNo">1442</span>    }<a name="line.1442"></a>
<span class="sourceLineNo">1443</span><a name="line.1443"></a>
<span class="sourceLineNo">1444</span>    @Override<a name="line.1444"></a>
<span class="sourceLineNo">1445</span>    public Collection&lt;String&gt; getArtifactVersions( final String repoId, final String namespace, final String projectId,<a name="line.1445"></a>
<span class="sourceLineNo">1446</span>                                                   final String projectVersion )<a name="line.1446"></a>
<span class="sourceLineNo">1447</span>        throws MetadataResolutionException<a name="line.1447"></a>
<span class="sourceLineNo">1448</span>    {<a name="line.1448"></a>
<span class="sourceLineNo">1449</span><a name="line.1449"></a>
<span class="sourceLineNo">1450</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.1450"></a>
<span class="sourceLineNo">1451</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.1451"></a>
<span class="sourceLineNo">1452</span>            .setColumnFamily( cassandraArchivaManager.getProjectVersionMetadataFamilyName() ) //<a name="line.1452"></a>
<span class="sourceLineNo">1453</span>            .setColumnNames( VERSION.toString() ) //<a name="line.1453"></a>
<span class="sourceLineNo">1454</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repoId ) //<a name="line.1454"></a>
<span class="sourceLineNo">1455</span>            .addEqualsExpression( NAMESPACE_ID.toString(), namespace ) //<a name="line.1455"></a>
<span class="sourceLineNo">1456</span>            .addEqualsExpression( PROJECT_ID.toString(), projectId ) //<a name="line.1456"></a>
<span class="sourceLineNo">1457</span>            .addEqualsExpression( PROJECT_VERSION.toString(), projectVersion ) //<a name="line.1457"></a>
<span class="sourceLineNo">1458</span>            .execute();<a name="line.1458"></a>
<span class="sourceLineNo">1459</span><a name="line.1459"></a>
<span class="sourceLineNo">1460</span>        final Set&lt;String&gt; versions = new HashSet&lt;String&gt;();<a name="line.1460"></a>
<span class="sourceLineNo">1461</span><a name="line.1461"></a>
<span class="sourceLineNo">1462</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.1462"></a>
<span class="sourceLineNo">1463</span>        {<a name="line.1463"></a>
<span class="sourceLineNo">1464</span>            versions.add( getStringValue( row.getColumnSlice(), VERSION.toString() ) );<a name="line.1464"></a>
<span class="sourceLineNo">1465</span>        }<a name="line.1465"></a>
<span class="sourceLineNo">1466</span><a name="line.1466"></a>
<span class="sourceLineNo">1467</span>        return versions;<a name="line.1467"></a>
<span class="sourceLineNo">1468</span><a name="line.1468"></a>
<span class="sourceLineNo">1469</span>    }<a name="line.1469"></a>
<span class="sourceLineNo">1470</span><a name="line.1470"></a>
<span class="sourceLineNo">1471</span>    /**<a name="line.1471"></a>
<span class="sourceLineNo">1472</span>     * iterate over available facets to remove/add from the artifactMetadata<a name="line.1472"></a>
<span class="sourceLineNo">1473</span>     *<a name="line.1473"></a>
<span class="sourceLineNo">1474</span>     * @param facetedMetadata<a name="line.1474"></a>
<span class="sourceLineNo">1475</span>     * @param artifactMetadataModel only use for the key<a name="line.1475"></a>
<span class="sourceLineNo">1476</span>     */<a name="line.1476"></a>
<span class="sourceLineNo">1477</span>    private void updateFacets( final FacetedMetadata facetedMetadata,<a name="line.1477"></a>
<span class="sourceLineNo">1478</span>                               final ArtifactMetadataModel artifactMetadataModel )<a name="line.1478"></a>
<span class="sourceLineNo">1479</span>    {<a name="line.1479"></a>
<span class="sourceLineNo">1480</span><a name="line.1480"></a>
<span class="sourceLineNo">1481</span>        String cf = cassandraArchivaManager.getMetadataFacetFamilyName();<a name="line.1481"></a>
<span class="sourceLineNo">1482</span><a name="line.1482"></a>
<span class="sourceLineNo">1483</span>        for ( final String facetId : metadataFacetFactories.keySet() )<a name="line.1483"></a>
<span class="sourceLineNo">1484</span>        {<a name="line.1484"></a>
<span class="sourceLineNo">1485</span>            MetadataFacet metadataFacet = facetedMetadata.getFacet( facetId );<a name="line.1485"></a>
<span class="sourceLineNo">1486</span>            if ( metadataFacet == null )<a name="line.1486"></a>
<span class="sourceLineNo">1487</span>            {<a name="line.1487"></a>
<span class="sourceLineNo">1488</span>                continue;<a name="line.1488"></a>
<span class="sourceLineNo">1489</span>            }<a name="line.1489"></a>
<span class="sourceLineNo">1490</span>            // clean first<a name="line.1490"></a>
<span class="sourceLineNo">1491</span><a name="line.1491"></a>
<span class="sourceLineNo">1492</span>            QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result =<a name="line.1492"></a>
<span class="sourceLineNo">1493</span>                HFactory.createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.1493"></a>
<span class="sourceLineNo">1494</span>                    .setColumnFamily( cf ) //<a name="line.1494"></a>
<span class="sourceLineNo">1495</span>                    .setColumnNames( REPOSITORY_NAME.toString() ) //<a name="line.1495"></a>
<span class="sourceLineNo">1496</span>                    .addEqualsExpression( REPOSITORY_NAME.toString(), artifactMetadataModel.getRepositoryId() ) //<a name="line.1496"></a>
<span class="sourceLineNo">1497</span>                    .addEqualsExpression( NAMESPACE_ID.toString(), artifactMetadataModel.getNamespace() ) //<a name="line.1497"></a>
<span class="sourceLineNo">1498</span>                    .addEqualsExpression( PROJECT_ID.toString(), artifactMetadataModel.getProject() ) //<a name="line.1498"></a>
<span class="sourceLineNo">1499</span>                    .addEqualsExpression( PROJECT_VERSION.toString(), artifactMetadataModel.getProjectVersion() ) //<a name="line.1499"></a>
<span class="sourceLineNo">1500</span>                    .addEqualsExpression( FACET_ID.toString(), facetId ) //<a name="line.1500"></a>
<span class="sourceLineNo">1501</span>                    .execute();<a name="line.1501"></a>
<span class="sourceLineNo">1502</span><a name="line.1502"></a>
<span class="sourceLineNo">1503</span>            for ( Row&lt;String, String, String&gt; row : result.get().getList() )<a name="line.1503"></a>
<span class="sourceLineNo">1504</span>            {<a name="line.1504"></a>
<span class="sourceLineNo">1505</span>                this.metadataFacetTemplate.deleteRow( row.getKey() );<a name="line.1505"></a>
<span class="sourceLineNo">1506</span>            }<a name="line.1506"></a>
<span class="sourceLineNo">1507</span><a name="line.1507"></a>
<span class="sourceLineNo">1508</span>            Map&lt;String, String&gt; properties = metadataFacet.toProperties();<a name="line.1508"></a>
<span class="sourceLineNo">1509</span><a name="line.1509"></a>
<span class="sourceLineNo">1510</span>            for ( Map.Entry&lt;String, String&gt; entry : properties.entrySet() )<a name="line.1510"></a>
<span class="sourceLineNo">1511</span>            {<a name="line.1511"></a>
<span class="sourceLineNo">1512</span>                String key = new MetadataFacetModel.KeyBuilder().withKey( entry.getKey() ).withArtifactMetadataModel(<a name="line.1512"></a>
<span class="sourceLineNo">1513</span>                    artifactMetadataModel ).withFacetId( facetId ).withName( metadataFacet.getName() ).build();<a name="line.1513"></a>
<span class="sourceLineNo">1514</span>                Mutator&lt;String&gt; mutator = metadataFacetTemplate.createMutator() //<a name="line.1514"></a>
<span class="sourceLineNo">1515</span>                    .addInsertion( key, cf, column( REPOSITORY_NAME.toString(), artifactMetadataModel.getRepositoryId() ) ) //<a name="line.1515"></a>
<span class="sourceLineNo">1516</span>                    .addInsertion( key, cf, column( NAMESPACE_ID.toString(), artifactMetadataModel.getNamespace() ) ) //<a name="line.1516"></a>
<span class="sourceLineNo">1517</span>                    .addInsertion( key, cf, column( PROJECT_ID.toString(), artifactMetadataModel.getProject() ) ) //<a name="line.1517"></a>
<span class="sourceLineNo">1518</span>                    .addInsertion( key, cf, column( PROJECT_VERSION.toString(), artifactMetadataModel.getProjectVersion() ) ) //<a name="line.1518"></a>
<span class="sourceLineNo">1519</span>                    .addInsertion( key, cf, column( FACET_ID.toString(), facetId ) ) //<a name="line.1519"></a>
<span class="sourceLineNo">1520</span>                    .addInsertion( key, cf, column( KEY.toString(), entry.getKey() ) ) //<a name="line.1520"></a>
<span class="sourceLineNo">1521</span>                    .addInsertion( key, cf, column( VALUE.toString(), entry.getValue() ) );<a name="line.1521"></a>
<span class="sourceLineNo">1522</span><a name="line.1522"></a>
<span class="sourceLineNo">1523</span>                if ( metadataFacet.getName() != null )<a name="line.1523"></a>
<span class="sourceLineNo">1524</span>                {<a name="line.1524"></a>
<span class="sourceLineNo">1525</span>                    mutator.addInsertion( key, cf, column( NAME.toString(), metadataFacet.getName() ) );<a name="line.1525"></a>
<span class="sourceLineNo">1526</span>                }<a name="line.1526"></a>
<span class="sourceLineNo">1527</span><a name="line.1527"></a>
<span class="sourceLineNo">1528</span>                mutator.execute();<a name="line.1528"></a>
<span class="sourceLineNo">1529</span>            }<a name="line.1529"></a>
<span class="sourceLineNo">1530</span>        }<a name="line.1530"></a>
<span class="sourceLineNo">1531</span>    }<a name="line.1531"></a>
<span class="sourceLineNo">1532</span><a name="line.1532"></a>
<span class="sourceLineNo">1533</span><a name="line.1533"></a>
<span class="sourceLineNo">1534</span>    @Override<a name="line.1534"></a>
<span class="sourceLineNo">1535</span>    public List&lt;String&gt; getMetadataFacets( final String repositoryId, final String facetId )<a name="line.1535"></a>
<span class="sourceLineNo">1536</span>        throws MetadataRepositoryException<a name="line.1536"></a>
<span class="sourceLineNo">1537</span>    {<a name="line.1537"></a>
<span class="sourceLineNo">1538</span><a name="line.1538"></a>
<span class="sourceLineNo">1539</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.1539"></a>
<span class="sourceLineNo">1540</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.1540"></a>
<span class="sourceLineNo">1541</span>            .setColumnFamily( cassandraArchivaManager.getMetadataFacetFamilyName() ) //<a name="line.1541"></a>
<span class="sourceLineNo">1542</span>            .setColumnNames( NAME.toString() ) //<a name="line.1542"></a>
<span class="sourceLineNo">1543</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.1543"></a>
<span class="sourceLineNo">1544</span>            .addEqualsExpression( FACET_ID.toString(), facetId ) //<a name="line.1544"></a>
<span class="sourceLineNo">1545</span>            .execute();<a name="line.1545"></a>
<span class="sourceLineNo">1546</span><a name="line.1546"></a>
<span class="sourceLineNo">1547</span>        final List&lt;String&gt; facets = new ArrayList&lt;&gt;();<a name="line.1547"></a>
<span class="sourceLineNo">1548</span><a name="line.1548"></a>
<span class="sourceLineNo">1549</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.1549"></a>
<span class="sourceLineNo">1550</span>        {<a name="line.1550"></a>
<span class="sourceLineNo">1551</span>            facets.add( getStringValue( row.getColumnSlice(), NAME.toString() ) );<a name="line.1551"></a>
<span class="sourceLineNo">1552</span>        }<a name="line.1552"></a>
<span class="sourceLineNo">1553</span>        return facets;<a name="line.1553"></a>
<span class="sourceLineNo">1554</span>    }<a name="line.1554"></a>
<span class="sourceLineNo">1555</span><a name="line.1555"></a>
<span class="sourceLineNo">1556</span>    @Override<a name="line.1556"></a>
<span class="sourceLineNo">1557</span>    public boolean hasMetadataFacet( String repositoryId, String facetId )<a name="line.1557"></a>
<span class="sourceLineNo">1558</span>        throws MetadataRepositoryException<a name="line.1558"></a>
<span class="sourceLineNo">1559</span>    {<a name="line.1559"></a>
<span class="sourceLineNo">1560</span>        return !getMetadataFacets( repositoryId, facetId ).isEmpty();<a name="line.1560"></a>
<span class="sourceLineNo">1561</span>    }<a name="line.1561"></a>
<span class="sourceLineNo">1562</span><a name="line.1562"></a>
<span class="sourceLineNo">1563</span>    @Override<a name="line.1563"></a>
<span class="sourceLineNo">1564</span>    public MetadataFacet getMetadataFacet( final String repositoryId, final String facetId, final String name )<a name="line.1564"></a>
<span class="sourceLineNo">1565</span>        throws MetadataRepositoryException<a name="line.1565"></a>
<span class="sourceLineNo">1566</span>    {<a name="line.1566"></a>
<span class="sourceLineNo">1567</span><a name="line.1567"></a>
<span class="sourceLineNo">1568</span>        MetadataFacetFactory metadataFacetFactory = metadataFacetFactories.get( facetId );<a name="line.1568"></a>
<span class="sourceLineNo">1569</span>        if ( metadataFacetFactory == null )<a name="line.1569"></a>
<span class="sourceLineNo">1570</span>        {<a name="line.1570"></a>
<span class="sourceLineNo">1571</span>            return null;<a name="line.1571"></a>
<span class="sourceLineNo">1572</span>        }<a name="line.1572"></a>
<span class="sourceLineNo">1573</span><a name="line.1573"></a>
<span class="sourceLineNo">1574</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.1574"></a>
<span class="sourceLineNo">1575</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.1575"></a>
<span class="sourceLineNo">1576</span>            .setColumnFamily( cassandraArchivaManager.getMetadataFacetFamilyName() ) //<a name="line.1576"></a>
<span class="sourceLineNo">1577</span>            .setColumnNames( KEY.toString(), VALUE.toString() ) //<a name="line.1577"></a>
<span class="sourceLineNo">1578</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.1578"></a>
<span class="sourceLineNo">1579</span>            .addEqualsExpression( FACET_ID.toString(), facetId ) //<a name="line.1579"></a>
<span class="sourceLineNo">1580</span>            .addEqualsExpression( NAME.toString(), name ) //<a name="line.1580"></a>
<span class="sourceLineNo">1581</span>            .execute();<a name="line.1581"></a>
<span class="sourceLineNo">1582</span><a name="line.1582"></a>
<span class="sourceLineNo">1583</span>        MetadataFacet metadataFacet = metadataFacetFactory.createMetadataFacet( repositoryId, name );<a name="line.1583"></a>
<span class="sourceLineNo">1584</span>        int size = result.get().getCount();<a name="line.1584"></a>
<span class="sourceLineNo">1585</span>        if ( size &lt; 1 )<a name="line.1585"></a>
<span class="sourceLineNo">1586</span>        {<a name="line.1586"></a>
<span class="sourceLineNo">1587</span>            return null;<a name="line.1587"></a>
<span class="sourceLineNo">1588</span>        }<a name="line.1588"></a>
<span class="sourceLineNo">1589</span>        Map&lt;String, String&gt; map = new HashMap&lt;&gt;( size );<a name="line.1589"></a>
<span class="sourceLineNo">1590</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.1590"></a>
<span class="sourceLineNo">1591</span>        {<a name="line.1591"></a>
<span class="sourceLineNo">1592</span>            ColumnSlice&lt;String, String&gt; columnSlice = row.getColumnSlice();<a name="line.1592"></a>
<span class="sourceLineNo">1593</span>            map.put( getStringValue( columnSlice, KEY.toString() ), getStringValue( columnSlice, VALUE.toString() ) );<a name="line.1593"></a>
<span class="sourceLineNo">1594</span>        }<a name="line.1594"></a>
<span class="sourceLineNo">1595</span>        metadataFacet.fromProperties( map );<a name="line.1595"></a>
<span class="sourceLineNo">1596</span>        return metadataFacet;<a name="line.1596"></a>
<span class="sourceLineNo">1597</span>    }<a name="line.1597"></a>
<span class="sourceLineNo">1598</span><a name="line.1598"></a>
<span class="sourceLineNo">1599</span>    @Override<a name="line.1599"></a>
<span class="sourceLineNo">1600</span>    public void addMetadataFacet( String repositoryId, MetadataFacet metadataFacet )<a name="line.1600"></a>
<span class="sourceLineNo">1601</span>        throws MetadataRepositoryException<a name="line.1601"></a>
<span class="sourceLineNo">1602</span>    {<a name="line.1602"></a>
<span class="sourceLineNo">1603</span><a name="line.1603"></a>
<span class="sourceLineNo">1604</span>        if ( metadataFacet == null )<a name="line.1604"></a>
<span class="sourceLineNo">1605</span>        {<a name="line.1605"></a>
<span class="sourceLineNo">1606</span>            return;<a name="line.1606"></a>
<span class="sourceLineNo">1607</span>        }<a name="line.1607"></a>
<span class="sourceLineNo">1608</span><a name="line.1608"></a>
<span class="sourceLineNo">1609</span>        if ( metadataFacet.toProperties().isEmpty() )<a name="line.1609"></a>
<span class="sourceLineNo">1610</span>        {<a name="line.1610"></a>
<span class="sourceLineNo">1611</span>            String key = new MetadataFacetModel.KeyBuilder().withRepositoryId( repositoryId ).withFacetId(<a name="line.1611"></a>
<span class="sourceLineNo">1612</span>                metadataFacet.getFacetId() ).withName( metadataFacet.getName() ).build();<a name="line.1612"></a>
<span class="sourceLineNo">1613</span><a name="line.1613"></a>
<span class="sourceLineNo">1614</span>            boolean exists = this.metadataFacetTemplate.isColumnsExist( key );<a name="line.1614"></a>
<span class="sourceLineNo">1615</span><a name="line.1615"></a>
<span class="sourceLineNo">1616</span>            if ( exists )<a name="line.1616"></a>
<span class="sourceLineNo">1617</span>            {<a name="line.1617"></a>
<span class="sourceLineNo">1618</span>                ColumnFamilyUpdater&lt;String, String&gt; updater = this.metadataFacetTemplate.createUpdater( key );<a name="line.1618"></a>
<span class="sourceLineNo">1619</span>                addUpdateStringValue( updater, FACET_ID.toString(), metadataFacet.getFacetId() );<a name="line.1619"></a>
<span class="sourceLineNo">1620</span>                addUpdateStringValue( updater, NAME.toString(), metadataFacet.getName() );<a name="line.1620"></a>
<span class="sourceLineNo">1621</span>                this.metadataFacetTemplate.update( updater );<a name="line.1621"></a>
<span class="sourceLineNo">1622</span>            }<a name="line.1622"></a>
<span class="sourceLineNo">1623</span>            else<a name="line.1623"></a>
<span class="sourceLineNo">1624</span>            {<a name="line.1624"></a>
<span class="sourceLineNo">1625</span>                String cf = this.cassandraArchivaManager.getMetadataFacetFamilyName();<a name="line.1625"></a>
<span class="sourceLineNo">1626</span>                this.metadataFacetTemplate.createMutator() //<a name="line.1626"></a>
<span class="sourceLineNo">1627</span>                    .addInsertion( key, cf, column( REPOSITORY_NAME.toString(), repositoryId ) ) //<a name="line.1627"></a>
<span class="sourceLineNo">1628</span>                    .addInsertion( key, cf, column( FACET_ID.toString(), metadataFacet.getFacetId() ) ) //<a name="line.1628"></a>
<span class="sourceLineNo">1629</span>                    .addInsertion( key, cf, column( NAME.toString(), metadataFacet.getName() ) ) //<a name="line.1629"></a>
<span class="sourceLineNo">1630</span>                    .execute();<a name="line.1630"></a>
<span class="sourceLineNo">1631</span>            }<a name="line.1631"></a>
<span class="sourceLineNo">1632</span><a name="line.1632"></a>
<span class="sourceLineNo">1633</span>        }<a name="line.1633"></a>
<span class="sourceLineNo">1634</span>        else<a name="line.1634"></a>
<span class="sourceLineNo">1635</span>        {<a name="line.1635"></a>
<span class="sourceLineNo">1636</span>            for ( Map.Entry&lt;String, String&gt; entry : metadataFacet.toProperties().entrySet() )<a name="line.1636"></a>
<span class="sourceLineNo">1637</span>            {<a name="line.1637"></a>
<span class="sourceLineNo">1638</span>                String key = new MetadataFacetModel.KeyBuilder().withRepositoryId( repositoryId ).withFacetId(<a name="line.1638"></a>
<span class="sourceLineNo">1639</span>                    metadataFacet.getFacetId() ).withName( metadataFacet.getName() ).withKey( entry.getKey() ).build();<a name="line.1639"></a>
<span class="sourceLineNo">1640</span><a name="line.1640"></a>
<span class="sourceLineNo">1641</span>                boolean exists = this.metadataFacetTemplate.isColumnsExist( key );<a name="line.1641"></a>
<span class="sourceLineNo">1642</span>                if ( !exists )<a name="line.1642"></a>
<span class="sourceLineNo">1643</span>                {<a name="line.1643"></a>
<span class="sourceLineNo">1644</span>                    String cf = this.cassandraArchivaManager.getMetadataFacetFamilyName();<a name="line.1644"></a>
<span class="sourceLineNo">1645</span>                    this.metadataFacetTemplate.createMutator() //<a name="line.1645"></a>
<span class="sourceLineNo">1646</span>                        .addInsertion( key, cf, column( REPOSITORY_NAME.toString(), repositoryId ) ) //<a name="line.1646"></a>
<span class="sourceLineNo">1647</span>                        .addInsertion( key, cf, column( FACET_ID.toString(), metadataFacet.getFacetId() ) ) //<a name="line.1647"></a>
<span class="sourceLineNo">1648</span>                        .addInsertion( key, cf, column( NAME.toString(), metadataFacet.getName() ) ) //<a name="line.1648"></a>
<span class="sourceLineNo">1649</span>                        .addInsertion( key, cf, column( KEY.toString(), entry.getKey() ) ) //<a name="line.1649"></a>
<span class="sourceLineNo">1650</span>                        .addInsertion( key, cf, column( VALUE.toString(), entry.getValue() ) ) //<a name="line.1650"></a>
<span class="sourceLineNo">1651</span>                        .execute();<a name="line.1651"></a>
<span class="sourceLineNo">1652</span>                }<a name="line.1652"></a>
<span class="sourceLineNo">1653</span>                else<a name="line.1653"></a>
<span class="sourceLineNo">1654</span>                {<a name="line.1654"></a>
<span class="sourceLineNo">1655</span>                    ColumnFamilyUpdater&lt;String, String&gt; updater = this.metadataFacetTemplate.createUpdater( key );<a name="line.1655"></a>
<span class="sourceLineNo">1656</span>                    addUpdateStringValue( updater, VALUE.toString(), entry.getValue() );<a name="line.1656"></a>
<span class="sourceLineNo">1657</span>                    this.metadataFacetTemplate.update( updater );<a name="line.1657"></a>
<span class="sourceLineNo">1658</span>                }<a name="line.1658"></a>
<span class="sourceLineNo">1659</span>            }<a name="line.1659"></a>
<span class="sourceLineNo">1660</span>        }<a name="line.1660"></a>
<span class="sourceLineNo">1661</span>    }<a name="line.1661"></a>
<span class="sourceLineNo">1662</span><a name="line.1662"></a>
<span class="sourceLineNo">1663</span>    @Override<a name="line.1663"></a>
<span class="sourceLineNo">1664</span>    public void removeMetadataFacets( final String repositoryId, final String facetId )<a name="line.1664"></a>
<span class="sourceLineNo">1665</span>        throws MetadataRepositoryException<a name="line.1665"></a>
<span class="sourceLineNo">1666</span>    {<a name="line.1666"></a>
<span class="sourceLineNo">1667</span><a name="line.1667"></a>
<span class="sourceLineNo">1668</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.1668"></a>
<span class="sourceLineNo">1669</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.1669"></a>
<span class="sourceLineNo">1670</span>            .setColumnFamily( cassandraArchivaManager.getMetadataFacetFamilyName() ) //<a name="line.1670"></a>
<span class="sourceLineNo">1671</span>            .setColumnNames( KEY.toString(), VALUE.toString() ) //<a name="line.1671"></a>
<span class="sourceLineNo">1672</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.1672"></a>
<span class="sourceLineNo">1673</span>            .addEqualsExpression( FACET_ID.toString(), facetId ) //<a name="line.1673"></a>
<span class="sourceLineNo">1674</span>            .execute();<a name="line.1674"></a>
<span class="sourceLineNo">1675</span><a name="line.1675"></a>
<span class="sourceLineNo">1676</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.1676"></a>
<span class="sourceLineNo">1677</span>        {<a name="line.1677"></a>
<span class="sourceLineNo">1678</span>            this.metadataFacetTemplate.deleteRow( row.getKey() );<a name="line.1678"></a>
<span class="sourceLineNo">1679</span>        }<a name="line.1679"></a>
<span class="sourceLineNo">1680</span><a name="line.1680"></a>
<span class="sourceLineNo">1681</span>    }<a name="line.1681"></a>
<span class="sourceLineNo">1682</span><a name="line.1682"></a>
<span class="sourceLineNo">1683</span>    @Override<a name="line.1683"></a>
<span class="sourceLineNo">1684</span>    public void removeMetadataFacet( final String repositoryId, final String facetId, final String name )<a name="line.1684"></a>
<span class="sourceLineNo">1685</span>        throws MetadataRepositoryException<a name="line.1685"></a>
<span class="sourceLineNo">1686</span>    {<a name="line.1686"></a>
<span class="sourceLineNo">1687</span><a name="line.1687"></a>
<span class="sourceLineNo">1688</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.1688"></a>
<span class="sourceLineNo">1689</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.1689"></a>
<span class="sourceLineNo">1690</span>            .setColumnFamily( cassandraArchivaManager.getMetadataFacetFamilyName() ) //<a name="line.1690"></a>
<span class="sourceLineNo">1691</span>            .setColumnNames( KEY.toString(), VALUE.toString() ) //<a name="line.1691"></a>
<span class="sourceLineNo">1692</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.1692"></a>
<span class="sourceLineNo">1693</span>            .addEqualsExpression( FACET_ID.toString(), facetId ) //<a name="line.1693"></a>
<span class="sourceLineNo">1694</span>            .addEqualsExpression( NAME.toString(), name ) //<a name="line.1694"></a>
<span class="sourceLineNo">1695</span>            .execute();<a name="line.1695"></a>
<span class="sourceLineNo">1696</span><a name="line.1696"></a>
<span class="sourceLineNo">1697</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.1697"></a>
<span class="sourceLineNo">1698</span>        {<a name="line.1698"></a>
<span class="sourceLineNo">1699</span>            this.metadataFacetTemplate.deleteRow( row.getKey() );<a name="line.1699"></a>
<span class="sourceLineNo">1700</span>        }<a name="line.1700"></a>
<span class="sourceLineNo">1701</span>    }<a name="line.1701"></a>
<span class="sourceLineNo">1702</span><a name="line.1702"></a>
<span class="sourceLineNo">1703</span>    @Override<a name="line.1703"></a>
<span class="sourceLineNo">1704</span>    public List&lt;ArtifactMetadata&gt; getArtifactsByDateRange( final String repositoryId, final Date startTime,<a name="line.1704"></a>
<span class="sourceLineNo">1705</span>                                                           final Date endTime )<a name="line.1705"></a>
<span class="sourceLineNo">1706</span>        throws MetadataRepositoryException<a name="line.1706"></a>
<span class="sourceLineNo">1707</span>    {<a name="line.1707"></a>
<span class="sourceLineNo">1708</span><a name="line.1708"></a>
<span class="sourceLineNo">1709</span>        LongSerializer ls = LongSerializer.get();<a name="line.1709"></a>
<span class="sourceLineNo">1710</span>        RangeSlicesQuery&lt;String, String, Long&gt; query = HFactory //<a name="line.1710"></a>
<span class="sourceLineNo">1711</span>            .createRangeSlicesQuery( keyspace, ss, ss, ls ) //<a name="line.1711"></a>
<span class="sourceLineNo">1712</span>            .setColumnFamily( cassandraArchivaManager.getArtifactMetadataFamilyName() ) //<a name="line.1712"></a>
<span class="sourceLineNo">1713</span>            .setColumnNames( ArtifactMetadataModel.COLUMNS ); //<a name="line.1713"></a>
<span class="sourceLineNo">1714</span><a name="line.1714"></a>
<span class="sourceLineNo">1715</span>        if ( startTime != null )<a name="line.1715"></a>
<span class="sourceLineNo">1716</span>        {<a name="line.1716"></a>
<span class="sourceLineNo">1717</span>            query = query.addGteExpression( WHEN_GATHERED.toString(), startTime.getTime() );<a name="line.1717"></a>
<span class="sourceLineNo">1718</span>        }<a name="line.1718"></a>
<span class="sourceLineNo">1719</span>        if ( endTime != null )<a name="line.1719"></a>
<span class="sourceLineNo">1720</span>        {<a name="line.1720"></a>
<span class="sourceLineNo">1721</span>            query = query.addLteExpression( WHEN_GATHERED.toString(), endTime.getTime() );<a name="line.1721"></a>
<span class="sourceLineNo">1722</span>        }<a name="line.1722"></a>
<span class="sourceLineNo">1723</span>        QueryResult&lt;OrderedRows&lt;String, String, Long&gt;&gt; result = query.execute();<a name="line.1723"></a>
<span class="sourceLineNo">1724</span><a name="line.1724"></a>
<span class="sourceLineNo">1725</span>        List&lt;ArtifactMetadata&gt; artifactMetadatas = new ArrayList&lt;&gt;( result.get().getCount() );<a name="line.1725"></a>
<span class="sourceLineNo">1726</span><a name="line.1726"></a>
<span class="sourceLineNo">1727</span>        for ( Row&lt;String, String, Long&gt; row : result.get() )<a name="line.1727"></a>
<span class="sourceLineNo">1728</span>        {<a name="line.1728"></a>
<span class="sourceLineNo">1729</span>            ColumnSlice&lt;String, Long&gt; columnSlice = row.getColumnSlice();<a name="line.1729"></a>
<span class="sourceLineNo">1730</span>            String repositoryName = getAsStringValue( columnSlice, REPOSITORY_NAME.toString() );<a name="line.1730"></a>
<span class="sourceLineNo">1731</span>            if ( StringUtils.equals( repositoryName, repositoryId ) )<a name="line.1731"></a>
<span class="sourceLineNo">1732</span>            {<a name="line.1732"></a>
<span class="sourceLineNo">1733</span><a name="line.1733"></a>
<span class="sourceLineNo">1734</span>                artifactMetadatas.add( mapArtifactMetadataLongColumnSlice( columnSlice ) );<a name="line.1734"></a>
<span class="sourceLineNo">1735</span>            }<a name="line.1735"></a>
<span class="sourceLineNo">1736</span>        }<a name="line.1736"></a>
<span class="sourceLineNo">1737</span><a name="line.1737"></a>
<span class="sourceLineNo">1738</span>        return artifactMetadatas;<a name="line.1738"></a>
<span class="sourceLineNo">1739</span>    }<a name="line.1739"></a>
<span class="sourceLineNo">1740</span><a name="line.1740"></a>
<span class="sourceLineNo">1741</span><a name="line.1741"></a>
<span class="sourceLineNo">1742</span>    protected ArtifactMetadata mapArtifactMetadataLongColumnSlice( ColumnSlice&lt;String, Long&gt; columnSlice )<a name="line.1742"></a>
<span class="sourceLineNo">1743</span>    {<a name="line.1743"></a>
<span class="sourceLineNo">1744</span>        ArtifactMetadata artifactMetadata = new ArtifactMetadata();<a name="line.1744"></a>
<span class="sourceLineNo">1745</span>        artifactMetadata.setNamespace( getAsStringValue( columnSlice, NAMESPACE_ID.toString() ) );<a name="line.1745"></a>
<span class="sourceLineNo">1746</span>        artifactMetadata.setSize( getLongValue( columnSlice, SIZE.toString() ) );<a name="line.1746"></a>
<span class="sourceLineNo">1747</span>        artifactMetadata.setId( getAsStringValue( columnSlice, ID.toString() ) );<a name="line.1747"></a>
<span class="sourceLineNo">1748</span>        artifactMetadata.setFileLastModified( getLongValue( columnSlice, FILE_LAST_MODIFIED.toString() ) );<a name="line.1748"></a>
<span class="sourceLineNo">1749</span>        artifactMetadata.setMd5( getAsStringValue( columnSlice, MD5.toString() ) );<a name="line.1749"></a>
<span class="sourceLineNo">1750</span>        artifactMetadata.setProject( getAsStringValue( columnSlice, PROJECT.toString() ) );<a name="line.1750"></a>
<span class="sourceLineNo">1751</span>        artifactMetadata.setProjectVersion( getAsStringValue( columnSlice, PROJECT_VERSION.toString() ) );<a name="line.1751"></a>
<span class="sourceLineNo">1752</span>        artifactMetadata.setRepositoryId( getAsStringValue( columnSlice, REPOSITORY_NAME.toString() ) );<a name="line.1752"></a>
<span class="sourceLineNo">1753</span>        artifactMetadata.setSha1( getAsStringValue( columnSlice, SHA1.toString() ) );<a name="line.1753"></a>
<span class="sourceLineNo">1754</span>        artifactMetadata.setVersion( getAsStringValue( columnSlice, VERSION.toString() ) );<a name="line.1754"></a>
<span class="sourceLineNo">1755</span>        Long whenGathered = getLongValue( columnSlice, WHEN_GATHERED.toString() );<a name="line.1755"></a>
<span class="sourceLineNo">1756</span>        if ( whenGathered != null )<a name="line.1756"></a>
<span class="sourceLineNo">1757</span>        {<a name="line.1757"></a>
<span class="sourceLineNo">1758</span>            artifactMetadata.setWhenGathered( new Date( whenGathered ) );<a name="line.1758"></a>
<span class="sourceLineNo">1759</span>        }<a name="line.1759"></a>
<span class="sourceLineNo">1760</span>        return artifactMetadata;<a name="line.1760"></a>
<span class="sourceLineNo">1761</span>    }<a name="line.1761"></a>
<span class="sourceLineNo">1762</span><a name="line.1762"></a>
<span class="sourceLineNo">1763</span>    protected ArtifactMetadata mapArtifactMetadataStringColumnSlice( ColumnSlice&lt;String, String&gt; columnSlice )<a name="line.1763"></a>
<span class="sourceLineNo">1764</span>    {<a name="line.1764"></a>
<span class="sourceLineNo">1765</span>        ArtifactMetadata artifactMetadata = new ArtifactMetadata();<a name="line.1765"></a>
<span class="sourceLineNo">1766</span>        artifactMetadata.setNamespace( getStringValue( columnSlice, NAMESPACE_ID.toString() ) );<a name="line.1766"></a>
<span class="sourceLineNo">1767</span>        artifactMetadata.setSize( getAsLongValue( columnSlice, SIZE.toString() ) );<a name="line.1767"></a>
<span class="sourceLineNo">1768</span>        artifactMetadata.setId( getStringValue( columnSlice, ID.toString() ) );<a name="line.1768"></a>
<span class="sourceLineNo">1769</span>        artifactMetadata.setFileLastModified( getAsLongValue( columnSlice, FILE_LAST_MODIFIED.toString() ) );<a name="line.1769"></a>
<span class="sourceLineNo">1770</span>        artifactMetadata.setMd5( getStringValue( columnSlice, MD5.toString() ) );<a name="line.1770"></a>
<span class="sourceLineNo">1771</span>        artifactMetadata.setProject( getStringValue( columnSlice, PROJECT.toString() ) );<a name="line.1771"></a>
<span class="sourceLineNo">1772</span>        artifactMetadata.setProjectVersion( getStringValue( columnSlice, PROJECT_VERSION.toString() ) );<a name="line.1772"></a>
<span class="sourceLineNo">1773</span>        artifactMetadata.setRepositoryId( getStringValue( columnSlice, REPOSITORY_NAME.toString() ) );<a name="line.1773"></a>
<span class="sourceLineNo">1774</span>        artifactMetadata.setSha1( getStringValue( columnSlice, SHA1.toString() ) );<a name="line.1774"></a>
<span class="sourceLineNo">1775</span>        artifactMetadata.setVersion( getStringValue( columnSlice, VERSION.toString() ) );<a name="line.1775"></a>
<span class="sourceLineNo">1776</span>        Long whenGathered = getAsLongValue( columnSlice, WHEN_GATHERED.toString() );<a name="line.1776"></a>
<span class="sourceLineNo">1777</span>        if ( whenGathered != null )<a name="line.1777"></a>
<span class="sourceLineNo">1778</span>        {<a name="line.1778"></a>
<span class="sourceLineNo">1779</span>            artifactMetadata.setWhenGathered( new Date( whenGathered ) );<a name="line.1779"></a>
<span class="sourceLineNo">1780</span>        }<a name="line.1780"></a>
<span class="sourceLineNo">1781</span>        return artifactMetadata;<a name="line.1781"></a>
<span class="sourceLineNo">1782</span>    }<a name="line.1782"></a>
<span class="sourceLineNo">1783</span><a name="line.1783"></a>
<span class="sourceLineNo">1784</span>    @Override<a name="line.1784"></a>
<span class="sourceLineNo">1785</span>    public Collection&lt;ArtifactMetadata&gt; getArtifactsByChecksum( final String repositoryId, final String checksum )<a name="line.1785"></a>
<span class="sourceLineNo">1786</span>        throws MetadataRepositoryException<a name="line.1786"></a>
<span class="sourceLineNo">1787</span>    {<a name="line.1787"></a>
<span class="sourceLineNo">1788</span><a name="line.1788"></a>
<span class="sourceLineNo">1789</span>        // cql cannot run or in queries so running twice the query<a name="line.1789"></a>
<span class="sourceLineNo">1790</span>        Map&lt;String, ArtifactMetadata&gt; artifactMetadataMap = new HashMap&lt;&gt;();<a name="line.1790"></a>
<span class="sourceLineNo">1791</span><a name="line.1791"></a>
<span class="sourceLineNo">1792</span>        RangeSlicesQuery&lt;String, String, String&gt; query = HFactory //<a name="line.1792"></a>
<span class="sourceLineNo">1793</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.1793"></a>
<span class="sourceLineNo">1794</span>            .setColumnFamily( cassandraArchivaManager.getArtifactMetadataFamilyName() ) //<a name="line.1794"></a>
<span class="sourceLineNo">1795</span>            .setColumnNames( ArtifactMetadataModel.COLUMNS ); //<a name="line.1795"></a>
<span class="sourceLineNo">1796</span><a name="line.1796"></a>
<span class="sourceLineNo">1797</span>        query = query.addEqualsExpression( SHA1.toString(), checksum ).addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId );<a name="line.1797"></a>
<span class="sourceLineNo">1798</span><a name="line.1798"></a>
<span class="sourceLineNo">1799</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = query.execute();<a name="line.1799"></a>
<span class="sourceLineNo">1800</span><a name="line.1800"></a>
<span class="sourceLineNo">1801</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.1801"></a>
<span class="sourceLineNo">1802</span>        {<a name="line.1802"></a>
<span class="sourceLineNo">1803</span>            ColumnSlice&lt;String, String&gt; columnSlice = row.getColumnSlice();<a name="line.1803"></a>
<span class="sourceLineNo">1804</span><a name="line.1804"></a>
<span class="sourceLineNo">1805</span>            artifactMetadataMap.put( row.getKey(), mapArtifactMetadataStringColumnSlice( columnSlice ) );<a name="line.1805"></a>
<span class="sourceLineNo">1806</span><a name="line.1806"></a>
<span class="sourceLineNo">1807</span>        }<a name="line.1807"></a>
<span class="sourceLineNo">1808</span><a name="line.1808"></a>
<span class="sourceLineNo">1809</span>        query = HFactory //<a name="line.1809"></a>
<span class="sourceLineNo">1810</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.1810"></a>
<span class="sourceLineNo">1811</span>            .setColumnFamily( cassandraArchivaManager.getArtifactMetadataFamilyName() ) //<a name="line.1811"></a>
<span class="sourceLineNo">1812</span>            .setColumnNames( NAMESPACE_ID.toString(), SIZE.toString(), ID.toString(), FILE_LAST_MODIFIED.toString(), MD5.toString(), PROJECT.toString(), PROJECT_VERSION.toString(),<a name="line.1812"></a>
<span class="sourceLineNo">1813</span>                             REPOSITORY_NAME.toString(), VERSION.toString(), WHEN_GATHERED.toString(), SHA1.toString() ); //<a name="line.1813"></a>
<span class="sourceLineNo">1814</span><a name="line.1814"></a>
<span class="sourceLineNo">1815</span>        query = query.addEqualsExpression( MD5.toString(), checksum ).addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId );<a name="line.1815"></a>
<span class="sourceLineNo">1816</span><a name="line.1816"></a>
<span class="sourceLineNo">1817</span>        result = query.execute();<a name="line.1817"></a>
<span class="sourceLineNo">1818</span><a name="line.1818"></a>
<span class="sourceLineNo">1819</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.1819"></a>
<span class="sourceLineNo">1820</span>        {<a name="line.1820"></a>
<span class="sourceLineNo">1821</span>            ColumnSlice&lt;String, String&gt; columnSlice = row.getColumnSlice();<a name="line.1821"></a>
<span class="sourceLineNo">1822</span><a name="line.1822"></a>
<span class="sourceLineNo">1823</span>            artifactMetadataMap.put( row.getKey(), mapArtifactMetadataStringColumnSlice( columnSlice ) );<a name="line.1823"></a>
<span class="sourceLineNo">1824</span><a name="line.1824"></a>
<span class="sourceLineNo">1825</span>        }<a name="line.1825"></a>
<span class="sourceLineNo">1826</span><a name="line.1826"></a>
<span class="sourceLineNo">1827</span>        return artifactMetadataMap.values();<a name="line.1827"></a>
<span class="sourceLineNo">1828</span>    }<a name="line.1828"></a>
<span class="sourceLineNo">1829</span><a name="line.1829"></a>
<span class="sourceLineNo">1830</span>    /**<a name="line.1830"></a>
<span class="sourceLineNo">1831</span>     * Project version and artifact level metadata are stored in the same place, no distinctions in Cassandra<a name="line.1831"></a>
<span class="sourceLineNo">1832</span>     * implementation, just calls {@link #getArtifactsByMetadata(String, String, String)}<a name="line.1832"></a>
<span class="sourceLineNo">1833</span>     */<a name="line.1833"></a>
<span class="sourceLineNo">1834</span>    @Override<a name="line.1834"></a>
<span class="sourceLineNo">1835</span>    public List&lt;ArtifactMetadata&gt; getArtifactsByProjectVersionMetadata( String key, String value, String repositoryId )<a name="line.1835"></a>
<span class="sourceLineNo">1836</span>        throws MetadataRepositoryException<a name="line.1836"></a>
<span class="sourceLineNo">1837</span>    {<a name="line.1837"></a>
<span class="sourceLineNo">1838</span>        return getArtifactsByMetadata( key, value, repositoryId );<a name="line.1838"></a>
<span class="sourceLineNo">1839</span>    }<a name="line.1839"></a>
<span class="sourceLineNo">1840</span><a name="line.1840"></a>
<span class="sourceLineNo">1841</span>    @Override<a name="line.1841"></a>
<span class="sourceLineNo">1842</span>    public List&lt;ArtifactMetadata&gt; getArtifactsByMetadata( String key, String value, String repositoryId )<a name="line.1842"></a>
<span class="sourceLineNo">1843</span>        throws MetadataRepositoryException<a name="line.1843"></a>
<span class="sourceLineNo">1844</span>    {<a name="line.1844"></a>
<span class="sourceLineNo">1845</span>        RangeSlicesQuery&lt;String, String, String&gt; query =<a name="line.1845"></a>
<span class="sourceLineNo">1846</span>            HFactory.createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.1846"></a>
<span class="sourceLineNo">1847</span>            .setColumnFamily( cassandraArchivaManager.getMetadataFacetFamilyName() ) //<a name="line.1847"></a>
<span class="sourceLineNo">1848</span>            .setColumnNames( MetadataFacetModel.COLUMNS ) //<a name="line.1848"></a>
<span class="sourceLineNo">1849</span>            .addEqualsExpression( VALUE.toString(), value );<a name="line.1849"></a>
<span class="sourceLineNo">1850</span><a name="line.1850"></a>
<span class="sourceLineNo">1851</span>        if ( key != null )<a name="line.1851"></a>
<span class="sourceLineNo">1852</span>        {<a name="line.1852"></a>
<span class="sourceLineNo">1853</span>            query.addEqualsExpression( KEY.toString(), key ); //<a name="line.1853"></a>
<span class="sourceLineNo">1854</span>        }<a name="line.1854"></a>
<span class="sourceLineNo">1855</span>        if ( repositoryId != null )<a name="line.1855"></a>
<span class="sourceLineNo">1856</span>        {<a name="line.1856"></a>
<span class="sourceLineNo">1857</span>            query.addEqualsExpression( "repositoryName", repositoryId );<a name="line.1857"></a>
<span class="sourceLineNo">1858</span>        }<a name="line.1858"></a>
<span class="sourceLineNo">1859</span><a name="line.1859"></a>
<span class="sourceLineNo">1860</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; metadataFacetResult = query.execute();<a name="line.1860"></a>
<span class="sourceLineNo">1861</span>        if ( metadataFacetResult.get() == null || metadataFacetResult.get().getCount() &lt; 1 )<a name="line.1861"></a>
<span class="sourceLineNo">1862</span>        {<a name="line.1862"></a>
<span class="sourceLineNo">1863</span>            return Collections.emptyList();<a name="line.1863"></a>
<span class="sourceLineNo">1864</span>        }<a name="line.1864"></a>
<span class="sourceLineNo">1865</span><a name="line.1865"></a>
<span class="sourceLineNo">1866</span>        List&lt;ArtifactMetadata&gt; artifactMetadatas = new LinkedList&lt;ArtifactMetadata&gt;();<a name="line.1866"></a>
<span class="sourceLineNo">1867</span><a name="line.1867"></a>
<span class="sourceLineNo">1868</span>        // TODO doing multiple queries, there should be a way to get all the artifactMetadatas for any number of<a name="line.1868"></a>
<span class="sourceLineNo">1869</span>        // projects<a name="line.1869"></a>
<span class="sourceLineNo">1870</span>        for ( Row&lt;String, String, String&gt; row : metadataFacetResult.get() )<a name="line.1870"></a>
<span class="sourceLineNo">1871</span>        {<a name="line.1871"></a>
<span class="sourceLineNo">1872</span>            QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; artifactMetadataResult =<a name="line.1872"></a>
<span class="sourceLineNo">1873</span>                HFactory.createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.1873"></a>
<span class="sourceLineNo">1874</span>                .setColumnFamily( cassandraArchivaManager.getArtifactMetadataFamilyName() ) //<a name="line.1874"></a>
<span class="sourceLineNo">1875</span>                .setColumnNames( ArtifactMetadataModel.COLUMNS ) //<a name="line.1875"></a>
<span class="sourceLineNo">1876</span>                .setRowCount( Integer.MAX_VALUE ) //<a name="line.1876"></a>
<span class="sourceLineNo">1877</span>                .addEqualsExpression( REPOSITORY_NAME.toString(),<a name="line.1877"></a>
<span class="sourceLineNo">1878</span>                                      getStringValue( row.getColumnSlice(), REPOSITORY_NAME ) ) //<a name="line.1878"></a>
<span class="sourceLineNo">1879</span>                .addEqualsExpression( NAMESPACE_ID.toString(), getStringValue( row.getColumnSlice(), NAMESPACE_ID ) ) //<a name="line.1879"></a>
<span class="sourceLineNo">1880</span>                .addEqualsExpression( PROJECT.toString(), getStringValue( row.getColumnSlice(), PROJECT_ID ) ) //<a name="line.1880"></a>
<span class="sourceLineNo">1881</span>                .addEqualsExpression( PROJECT_VERSION.toString(),<a name="line.1881"></a>
<span class="sourceLineNo">1882</span>                                      getStringValue( row.getColumnSlice(), PROJECT_VERSION ) ) //<a name="line.1882"></a>
<span class="sourceLineNo">1883</span>                .execute();<a name="line.1883"></a>
<span class="sourceLineNo">1884</span><a name="line.1884"></a>
<span class="sourceLineNo">1885</span>            if ( artifactMetadataResult.get() == null || artifactMetadataResult.get().getCount() &lt; 1 )<a name="line.1885"></a>
<span class="sourceLineNo">1886</span>            {<a name="line.1886"></a>
<span class="sourceLineNo">1887</span>                return Collections.emptyList();<a name="line.1887"></a>
<span class="sourceLineNo">1888</span>            }<a name="line.1888"></a>
<span class="sourceLineNo">1889</span><a name="line.1889"></a>
<span class="sourceLineNo">1890</span>            for ( Row&lt;String, String, String&gt; artifactMetadataRow : artifactMetadataResult.get() )<a name="line.1890"></a>
<span class="sourceLineNo">1891</span>            {<a name="line.1891"></a>
<span class="sourceLineNo">1892</span>                artifactMetadatas.add( mapArtifactMetadataStringColumnSlice( artifactMetadataRow.getColumnSlice() ) );<a name="line.1892"></a>
<span class="sourceLineNo">1893</span>            }<a name="line.1893"></a>
<span class="sourceLineNo">1894</span>        }<a name="line.1894"></a>
<span class="sourceLineNo">1895</span><a name="line.1895"></a>
<span class="sourceLineNo">1896</span>        return mapArtifactMetadataToArtifact( metadataFacetResult, artifactMetadatas );<a name="line.1896"></a>
<span class="sourceLineNo">1897</span>    }<a name="line.1897"></a>
<span class="sourceLineNo">1898</span><a name="line.1898"></a>
<span class="sourceLineNo">1899</span>    @Override<a name="line.1899"></a>
<span class="sourceLineNo">1900</span>    public List&lt;ArtifactMetadata&gt; getArtifactsByProperty( String key, String value, String repositoryId )<a name="line.1900"></a>
<span class="sourceLineNo">1901</span>        throws MetadataRepositoryException<a name="line.1901"></a>
<span class="sourceLineNo">1902</span>    {<a name="line.1902"></a>
<span class="sourceLineNo">1903</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result =<a name="line.1903"></a>
<span class="sourceLineNo">1904</span>            HFactory.createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.1904"></a>
<span class="sourceLineNo">1905</span>            .setColumnFamily( cassandraArchivaManager.getProjectVersionMetadataFamilyName() ) //<a name="line.1905"></a>
<span class="sourceLineNo">1906</span>            .setColumnNames( PROJECT_ID.toString(), REPOSITORY_NAME.toString(), NAMESPACE_ID.toString(),<a name="line.1906"></a>
<span class="sourceLineNo">1907</span>                             PROJECT_VERSION.toString() ) //<a name="line.1907"></a>
<span class="sourceLineNo">1908</span>            .addEqualsExpression( key, value ) //<a name="line.1908"></a>
<span class="sourceLineNo">1909</span>            .execute();<a name="line.1909"></a>
<span class="sourceLineNo">1910</span><a name="line.1910"></a>
<span class="sourceLineNo">1911</span>        int count = result.get().getCount();<a name="line.1911"></a>
<span class="sourceLineNo">1912</span><a name="line.1912"></a>
<span class="sourceLineNo">1913</span>        if ( count &lt; 1 )<a name="line.1913"></a>
<span class="sourceLineNo">1914</span>        {<a name="line.1914"></a>
<span class="sourceLineNo">1915</span>            return Collections.emptyList();<a name="line.1915"></a>
<span class="sourceLineNo">1916</span>        }<a name="line.1916"></a>
<span class="sourceLineNo">1917</span><a name="line.1917"></a>
<span class="sourceLineNo">1918</span>        List&lt;ArtifactMetadata&gt; artifacts = new LinkedList&lt;ArtifactMetadata&gt;();<a name="line.1918"></a>
<span class="sourceLineNo">1919</span><a name="line.1919"></a>
<span class="sourceLineNo">1920</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.1920"></a>
<span class="sourceLineNo">1921</span>        {<a name="line.1921"></a>
<span class="sourceLineNo">1922</span>            // TODO doing multiple queries, there should be a way to get all the artifactMetadatas for any number of<a name="line.1922"></a>
<span class="sourceLineNo">1923</span>            // projects<a name="line.1923"></a>
<span class="sourceLineNo">1924</span>            try<a name="line.1924"></a>
<span class="sourceLineNo">1925</span>            {<a name="line.1925"></a>
<span class="sourceLineNo">1926</span>                artifacts.addAll( getArtifacts( getStringValue( row.getColumnSlice(), REPOSITORY_NAME ),<a name="line.1926"></a>
<span class="sourceLineNo">1927</span>                                                getStringValue( row.getColumnSlice(), NAMESPACE_ID ),<a name="line.1927"></a>
<span class="sourceLineNo">1928</span>                                                getStringValue( row.getColumnSlice(), PROJECT_ID ),<a name="line.1928"></a>
<span class="sourceLineNo">1929</span>                                                getStringValue( row.getColumnSlice(), PROJECT_VERSION ) ) );<a name="line.1929"></a>
<span class="sourceLineNo">1930</span>            }<a name="line.1930"></a>
<span class="sourceLineNo">1931</span>            catch ( MetadataResolutionException e )<a name="line.1931"></a>
<span class="sourceLineNo">1932</span>            {<a name="line.1932"></a>
<span class="sourceLineNo">1933</span>                // never raised<a name="line.1933"></a>
<span class="sourceLineNo">1934</span>                throw new IllegalStateException( e );<a name="line.1934"></a>
<span class="sourceLineNo">1935</span>            }<a name="line.1935"></a>
<span class="sourceLineNo">1936</span>        }<a name="line.1936"></a>
<span class="sourceLineNo">1937</span>        return artifacts;<a name="line.1937"></a>
<span class="sourceLineNo">1938</span>    }<a name="line.1938"></a>
<span class="sourceLineNo">1939</span><a name="line.1939"></a>
<span class="sourceLineNo">1940</span>    @Override<a name="line.1940"></a>
<span class="sourceLineNo">1941</span>    public void removeArtifact( final String repositoryId, final String namespace, final String project,<a name="line.1941"></a>
<span class="sourceLineNo">1942</span>                                final String version, final String id )<a name="line.1942"></a>
<span class="sourceLineNo">1943</span>        throws MetadataRepositoryException<a name="line.1943"></a>
<span class="sourceLineNo">1944</span>    {<a name="line.1944"></a>
<span class="sourceLineNo">1945</span>        logger.debug( "removeArtifact repositoryId: '{}', namespace: '{}', project: '{}', version: '{}', id: '{}'",<a name="line.1945"></a>
<span class="sourceLineNo">1946</span>                      repositoryId, namespace, project, version, id );<a name="line.1946"></a>
<span class="sourceLineNo">1947</span>        String key =<a name="line.1947"></a>
<span class="sourceLineNo">1948</span>            new ArtifactMetadataModel.KeyBuilder().withRepositoryId( repositoryId ).withNamespace( namespace ).withId(<a name="line.1948"></a>
<span class="sourceLineNo">1949</span>                id ).withProjectVersion( version ).withProject( project ).build();<a name="line.1949"></a>
<span class="sourceLineNo">1950</span><a name="line.1950"></a>
<span class="sourceLineNo">1951</span>        this.artifactMetadataTemplate.deleteRow( key );<a name="line.1951"></a>
<span class="sourceLineNo">1952</span><a name="line.1952"></a>
<span class="sourceLineNo">1953</span>        key = new ProjectVersionMetadataModel.KeyBuilder() //<a name="line.1953"></a>
<span class="sourceLineNo">1954</span>            .withRepository( repositoryId ) //<a name="line.1954"></a>
<span class="sourceLineNo">1955</span>            .withNamespace( namespace ) //<a name="line.1955"></a>
<span class="sourceLineNo">1956</span>            .withProjectId( project ) //<a name="line.1956"></a>
<span class="sourceLineNo">1957</span>            .withProjectVersion( version ) //<a name="line.1957"></a>
<span class="sourceLineNo">1958</span>            .withId( id ) //<a name="line.1958"></a>
<span class="sourceLineNo">1959</span>            .build();<a name="line.1959"></a>
<span class="sourceLineNo">1960</span><a name="line.1960"></a>
<span class="sourceLineNo">1961</span>        this.projectVersionMetadataTemplate.deleteRow( key );<a name="line.1961"></a>
<span class="sourceLineNo">1962</span>    }<a name="line.1962"></a>
<span class="sourceLineNo">1963</span><a name="line.1963"></a>
<span class="sourceLineNo">1964</span>    @Override<a name="line.1964"></a>
<span class="sourceLineNo">1965</span>    public void removeArtifact( ArtifactMetadata artifactMetadata, String baseVersion )<a name="line.1965"></a>
<span class="sourceLineNo">1966</span>        throws MetadataRepositoryException<a name="line.1966"></a>
<span class="sourceLineNo">1967</span>    {<a name="line.1967"></a>
<span class="sourceLineNo">1968</span>        logger.debug( "removeArtifact repositoryId: '{}', namespace: '{}', project: '{}', version: '{}', id: '{}'",<a name="line.1968"></a>
<span class="sourceLineNo">1969</span>                      artifactMetadata.getRepositoryId(), artifactMetadata.getNamespace(),<a name="line.1969"></a>
<span class="sourceLineNo">1970</span>                      artifactMetadata.getProject(), baseVersion, artifactMetadata.getId() );<a name="line.1970"></a>
<span class="sourceLineNo">1971</span>        String key =<a name="line.1971"></a>
<span class="sourceLineNo">1972</span>            new ArtifactMetadataModel.KeyBuilder().withRepositoryId( artifactMetadata.getRepositoryId() ).withNamespace(<a name="line.1972"></a>
<span class="sourceLineNo">1973</span>                artifactMetadata.getNamespace() ).withId( artifactMetadata.getId() ).withProjectVersion(<a name="line.1973"></a>
<span class="sourceLineNo">1974</span>                baseVersion ).withProject( artifactMetadata.getProject() ).build();<a name="line.1974"></a>
<span class="sourceLineNo">1975</span><a name="line.1975"></a>
<span class="sourceLineNo">1976</span>        this.artifactMetadataTemplate.deleteRow( key );<a name="line.1976"></a>
<span class="sourceLineNo">1977</span><a name="line.1977"></a>
<span class="sourceLineNo">1978</span>    }<a name="line.1978"></a>
<span class="sourceLineNo">1979</span><a name="line.1979"></a>
<span class="sourceLineNo">1980</span>    @Override<a name="line.1980"></a>
<span class="sourceLineNo">1981</span>    public void removeArtifact( final String repositoryId, final String namespace, final String project,<a name="line.1981"></a>
<span class="sourceLineNo">1982</span>                                final String version, final MetadataFacet metadataFacet )<a name="line.1982"></a>
<span class="sourceLineNo">1983</span>        throws MetadataRepositoryException<a name="line.1983"></a>
<span class="sourceLineNo">1984</span>    {<a name="line.1984"></a>
<span class="sourceLineNo">1985</span><a name="line.1985"></a>
<span class="sourceLineNo">1986</span>        RangeSlicesQuery&lt;String, String, String&gt; query = HFactory //<a name="line.1986"></a>
<span class="sourceLineNo">1987</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.1987"></a>
<span class="sourceLineNo">1988</span>            .setColumnFamily( cassandraArchivaManager.getArtifactMetadataFamilyName() ) //<a name="line.1988"></a>
<span class="sourceLineNo">1989</span>            .setColumnNames( NAMESPACE_ID.toString() ); //<a name="line.1989"></a>
<span class="sourceLineNo">1990</span><a name="line.1990"></a>
<span class="sourceLineNo">1991</span>        query = query.addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId ) //<a name="line.1991"></a>
<span class="sourceLineNo">1992</span>            .addEqualsExpression( NAMESPACE_ID.toString(), namespace ) //<a name="line.1992"></a>
<span class="sourceLineNo">1993</span>            .addEqualsExpression( PROJECT.toString(), project ) //<a name="line.1993"></a>
<span class="sourceLineNo">1994</span>            .addEqualsExpression( VERSION.toString(), version );<a name="line.1994"></a>
<span class="sourceLineNo">1995</span><a name="line.1995"></a>
<span class="sourceLineNo">1996</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = query.execute();<a name="line.1996"></a>
<span class="sourceLineNo">1997</span><a name="line.1997"></a>
<span class="sourceLineNo">1998</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.1998"></a>
<span class="sourceLineNo">1999</span>        {<a name="line.1999"></a>
<span class="sourceLineNo">2000</span>            this.artifactMetadataTemplate.deleteRow( row.getKey() );<a name="line.2000"></a>
<span class="sourceLineNo">2001</span>        }<a name="line.2001"></a>
<span class="sourceLineNo">2002</span>    }<a name="line.2002"></a>
<span class="sourceLineNo">2003</span><a name="line.2003"></a>
<span class="sourceLineNo">2004</span><a name="line.2004"></a>
<span class="sourceLineNo">2005</span>    @Override<a name="line.2005"></a>
<span class="sourceLineNo">2006</span>    public List&lt;ArtifactMetadata&gt; getArtifacts( final String repositoryId )<a name="line.2006"></a>
<span class="sourceLineNo">2007</span>        throws MetadataRepositoryException<a name="line.2007"></a>
<span class="sourceLineNo">2008</span>    {<a name="line.2008"></a>
<span class="sourceLineNo">2009</span><a name="line.2009"></a>
<span class="sourceLineNo">2010</span>        RangeSlicesQuery&lt;String, String, String&gt; query = HFactory //<a name="line.2010"></a>
<span class="sourceLineNo">2011</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.2011"></a>
<span class="sourceLineNo">2012</span>            .setColumnFamily( cassandraArchivaManager.getArtifactMetadataFamilyName() ) //<a name="line.2012"></a>
<span class="sourceLineNo">2013</span>            .setColumnNames( ArtifactMetadataModel.COLUMNS ); //<a name="line.2013"></a>
<span class="sourceLineNo">2014</span><a name="line.2014"></a>
<span class="sourceLineNo">2015</span>        query = query.addEqualsExpression( REPOSITORY_NAME.toString(), repositoryId );<a name="line.2015"></a>
<span class="sourceLineNo">2016</span><a name="line.2016"></a>
<span class="sourceLineNo">2017</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = query.execute();<a name="line.2017"></a>
<span class="sourceLineNo">2018</span><a name="line.2018"></a>
<span class="sourceLineNo">2019</span>        List&lt;ArtifactMetadata&gt; artifactMetadatas = new ArrayList&lt;&gt;( result.get().getCount() );<a name="line.2019"></a>
<span class="sourceLineNo">2020</span><a name="line.2020"></a>
<span class="sourceLineNo">2021</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.2021"></a>
<span class="sourceLineNo">2022</span>        {<a name="line.2022"></a>
<span class="sourceLineNo">2023</span>            ColumnSlice&lt;String, String&gt; columnSlice = row.getColumnSlice();<a name="line.2023"></a>
<span class="sourceLineNo">2024</span><a name="line.2024"></a>
<span class="sourceLineNo">2025</span>            artifactMetadatas.add( mapArtifactMetadataStringColumnSlice( columnSlice ) );<a name="line.2025"></a>
<span class="sourceLineNo">2026</span><a name="line.2026"></a>
<span class="sourceLineNo">2027</span>        }<a name="line.2027"></a>
<span class="sourceLineNo">2028</span><a name="line.2028"></a>
<span class="sourceLineNo">2029</span>        return artifactMetadatas;<a name="line.2029"></a>
<span class="sourceLineNo">2030</span>    }<a name="line.2030"></a>
<span class="sourceLineNo">2031</span><a name="line.2031"></a>
<span class="sourceLineNo">2032</span><a name="line.2032"></a>
<span class="sourceLineNo">2033</span>    @Override<a name="line.2033"></a>
<span class="sourceLineNo">2034</span>    public Collection&lt;ProjectVersionReference&gt; getProjectReferences( String repoId, String namespace, String projectId,<a name="line.2034"></a>
<span class="sourceLineNo">2035</span>                                                                     String projectVersion )<a name="line.2035"></a>
<span class="sourceLineNo">2036</span>        throws MetadataResolutionException<a name="line.2036"></a>
<span class="sourceLineNo">2037</span>    {<a name="line.2037"></a>
<span class="sourceLineNo">2038</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.2038"></a>
<span class="sourceLineNo">2039</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.2039"></a>
<span class="sourceLineNo">2040</span>            .setColumnFamily( cassandraArchivaManager.getDependencyFamilyName() ) //<a name="line.2040"></a>
<span class="sourceLineNo">2041</span>            .setColumnNames( "projectVersionMetadataModel.key" ) //<a name="line.2041"></a>
<span class="sourceLineNo">2042</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repoId ) //<a name="line.2042"></a>
<span class="sourceLineNo">2043</span>            .addEqualsExpression( GROUP_ID.toString(), namespace ) //<a name="line.2043"></a>
<span class="sourceLineNo">2044</span>            .addEqualsExpression( ARTIFACT_ID.toString(), projectId ) //<a name="line.2044"></a>
<span class="sourceLineNo">2045</span>            .addEqualsExpression( VERSION.toString(), projectVersion ) //<a name="line.2045"></a>
<span class="sourceLineNo">2046</span>            .execute();<a name="line.2046"></a>
<span class="sourceLineNo">2047</span><a name="line.2047"></a>
<span class="sourceLineNo">2048</span>        List&lt;String&gt; dependenciesIds = new ArrayList&lt;&gt;( result.get().getCount() );<a name="line.2048"></a>
<span class="sourceLineNo">2049</span><a name="line.2049"></a>
<span class="sourceLineNo">2050</span>        for ( Row&lt;String, String, String&gt; row : result.get().getList() )<a name="line.2050"></a>
<span class="sourceLineNo">2051</span>        {<a name="line.2051"></a>
<span class="sourceLineNo">2052</span>            dependenciesIds.add( getStringValue( row.getColumnSlice(), "projectVersionMetadataModel.key" ) );<a name="line.2052"></a>
<span class="sourceLineNo">2053</span>        }<a name="line.2053"></a>
<span class="sourceLineNo">2054</span><a name="line.2054"></a>
<span class="sourceLineNo">2055</span>        List&lt;ProjectVersionReference&gt; references = new ArrayList&lt;&gt;( result.get().getCount() );<a name="line.2055"></a>
<span class="sourceLineNo">2056</span><a name="line.2056"></a>
<span class="sourceLineNo">2057</span>        for ( String key : dependenciesIds )<a name="line.2057"></a>
<span class="sourceLineNo">2058</span>        {<a name="line.2058"></a>
<span class="sourceLineNo">2059</span>            ColumnFamilyResult&lt;String, String&gt; columnFamilyResult =<a name="line.2059"></a>
<span class="sourceLineNo">2060</span>                this.projectVersionMetadataTemplate.queryColumns( key );<a name="line.2060"></a>
<span class="sourceLineNo">2061</span>            references.add( new ProjectVersionReference( ProjectVersionReference.ReferenceType.DEPENDENCY, //<a name="line.2061"></a>
<span class="sourceLineNo">2062</span>                                                         columnFamilyResult.getString( PROJECT_ID.toString() ), //<a name="line.2062"></a>
<span class="sourceLineNo">2063</span>                                                         columnFamilyResult.getString( NAMESPACE_ID.toString() ), //<a name="line.2063"></a>
<span class="sourceLineNo">2064</span>                                                         columnFamilyResult.getString( PROJECT_VERSION.toString() ) ) );<a name="line.2064"></a>
<span class="sourceLineNo">2065</span>        }<a name="line.2065"></a>
<span class="sourceLineNo">2066</span><a name="line.2066"></a>
<span class="sourceLineNo">2067</span>        return references;<a name="line.2067"></a>
<span class="sourceLineNo">2068</span>    }<a name="line.2068"></a>
<span class="sourceLineNo">2069</span><a name="line.2069"></a>
<span class="sourceLineNo">2070</span>    @Override<a name="line.2070"></a>
<span class="sourceLineNo">2071</span>    public void removeProjectVersion( final String repoId, final String namespace, final String projectId,<a name="line.2071"></a>
<span class="sourceLineNo">2072</span>                                      final String projectVersion )<a name="line.2072"></a>
<span class="sourceLineNo">2073</span>        throws MetadataRepositoryException<a name="line.2073"></a>
<span class="sourceLineNo">2074</span>    {<a name="line.2074"></a>
<span class="sourceLineNo">2075</span><a name="line.2075"></a>
<span class="sourceLineNo">2076</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result = HFactory //<a name="line.2076"></a>
<span class="sourceLineNo">2077</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.2077"></a>
<span class="sourceLineNo">2078</span>            .setColumnFamily( cassandraArchivaManager.getProjectVersionMetadataFamilyName() ) //<a name="line.2078"></a>
<span class="sourceLineNo">2079</span>            .setColumnNames( VERSION.toString() ) //<a name="line.2079"></a>
<span class="sourceLineNo">2080</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repoId ) //<a name="line.2080"></a>
<span class="sourceLineNo">2081</span>            .addEqualsExpression( NAMESPACE_ID.toString(), namespace ) //<a name="line.2081"></a>
<span class="sourceLineNo">2082</span>            .addEqualsExpression( PROJECT_ID.toString(), projectId ) //<a name="line.2082"></a>
<span class="sourceLineNo">2083</span>            .addEqualsExpression( PROJECT_VERSION.toString(), projectVersion ) //<a name="line.2083"></a>
<span class="sourceLineNo">2084</span>            .execute();<a name="line.2084"></a>
<span class="sourceLineNo">2085</span><a name="line.2085"></a>
<span class="sourceLineNo">2086</span>        for ( Row&lt;String, String, String&gt; row : result.get().getList() )<a name="line.2086"></a>
<span class="sourceLineNo">2087</span>        {<a name="line.2087"></a>
<span class="sourceLineNo">2088</span>            this.projectVersionMetadataTemplate.deleteRow( row.getKey() );<a name="line.2088"></a>
<span class="sourceLineNo">2089</span>            removeMailingList( row.getKey() );<a name="line.2089"></a>
<span class="sourceLineNo">2090</span>            removeLicenses( row.getKey() );<a name="line.2090"></a>
<span class="sourceLineNo">2091</span>            removeDependencies( row.getKey() );<a name="line.2091"></a>
<span class="sourceLineNo">2092</span>        }<a name="line.2092"></a>
<span class="sourceLineNo">2093</span><a name="line.2093"></a>
<span class="sourceLineNo">2094</span>        RangeSlicesQuery&lt;String, String, String&gt; query = HFactory //<a name="line.2094"></a>
<span class="sourceLineNo">2095</span>            .createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.2095"></a>
<span class="sourceLineNo">2096</span>            .setColumnFamily( cassandraArchivaManager.getArtifactMetadataFamilyName() ) //<a name="line.2096"></a>
<span class="sourceLineNo">2097</span>            .setColumnNames( NAMESPACE_ID.toString() ); //<a name="line.2097"></a>
<span class="sourceLineNo">2098</span><a name="line.2098"></a>
<span class="sourceLineNo">2099</span>        query = query.addEqualsExpression( REPOSITORY_NAME.toString(), repoId ) //<a name="line.2099"></a>
<span class="sourceLineNo">2100</span>            .addEqualsExpression( NAMESPACE_ID.toString(), namespace ) //<a name="line.2100"></a>
<span class="sourceLineNo">2101</span>            .addEqualsExpression( PROJECT.toString(), projectId ) //<a name="line.2101"></a>
<span class="sourceLineNo">2102</span>            .addEqualsExpression( PROJECT_VERSION.toString(), projectVersion );<a name="line.2102"></a>
<span class="sourceLineNo">2103</span><a name="line.2103"></a>
<span class="sourceLineNo">2104</span>        result = query.execute();<a name="line.2104"></a>
<span class="sourceLineNo">2105</span><a name="line.2105"></a>
<span class="sourceLineNo">2106</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.2106"></a>
<span class="sourceLineNo">2107</span>        {<a name="line.2107"></a>
<span class="sourceLineNo">2108</span>            this.artifactMetadataTemplate.deleteRow( row.getKey() );<a name="line.2108"></a>
<span class="sourceLineNo">2109</span><a name="line.2109"></a>
<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
<span class="sourceLineNo">2111</span>    }<a name="line.2111"></a>
<span class="sourceLineNo">2112</span><a name="line.2112"></a>
<span class="sourceLineNo">2113</span>    @Override<a name="line.2113"></a>
<span class="sourceLineNo">2114</span>    public Collection&lt;ArtifactMetadata&gt; getArtifacts( final String repoId, final String namespace,<a name="line.2114"></a>
<span class="sourceLineNo">2115</span>                                                      final String projectId, final String projectVersion )<a name="line.2115"></a>
<span class="sourceLineNo">2116</span>        throws MetadataResolutionException<a name="line.2116"></a>
<span class="sourceLineNo">2117</span>    {<a name="line.2117"></a>
<span class="sourceLineNo">2118</span><a name="line.2118"></a>
<span class="sourceLineNo">2119</span>        QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result =<a name="line.2119"></a>
<span class="sourceLineNo">2120</span>            HFactory.createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.2120"></a>
<span class="sourceLineNo">2121</span>                .setColumnFamily( cassandraArchivaManager.getArtifactMetadataFamilyName() ) //<a name="line.2121"></a>
<span class="sourceLineNo">2122</span>                .setColumnNames( ArtifactMetadataModel.COLUMNS )//<a name="line.2122"></a>
<span class="sourceLineNo">2123</span>                .setRowCount( Integer.MAX_VALUE ) //<a name="line.2123"></a>
<span class="sourceLineNo">2124</span>                .addEqualsExpression( REPOSITORY_NAME.toString(), repoId ) //<a name="line.2124"></a>
<span class="sourceLineNo">2125</span>                .addEqualsExpression( NAMESPACE_ID.toString(), namespace ) //<a name="line.2125"></a>
<span class="sourceLineNo">2126</span>                .addEqualsExpression( PROJECT.toString(), projectId ) //<a name="line.2126"></a>
<span class="sourceLineNo">2127</span>                .addEqualsExpression( PROJECT_VERSION.toString(), projectVersion ) //<a name="line.2127"></a>
<span class="sourceLineNo">2128</span>                .execute();<a name="line.2128"></a>
<span class="sourceLineNo">2129</span><a name="line.2129"></a>
<span class="sourceLineNo">2130</span>        if ( result.get() == null || result.get().getCount() &lt; 1 )<a name="line.2130"></a>
<span class="sourceLineNo">2131</span>        {<a name="line.2131"></a>
<span class="sourceLineNo">2132</span>            return Collections.emptyList();<a name="line.2132"></a>
<span class="sourceLineNo">2133</span>        }<a name="line.2133"></a>
<span class="sourceLineNo">2134</span><a name="line.2134"></a>
<span class="sourceLineNo">2135</span>        List&lt;ArtifactMetadata&gt; artifactMetadatas = new ArrayList&lt;&gt;( result.get().getCount() );<a name="line.2135"></a>
<span class="sourceLineNo">2136</span><a name="line.2136"></a>
<span class="sourceLineNo">2137</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.2137"></a>
<span class="sourceLineNo">2138</span>        {<a name="line.2138"></a>
<span class="sourceLineNo">2139</span>            artifactMetadatas.add( mapArtifactMetadataStringColumnSlice( row.getColumnSlice() ) );<a name="line.2139"></a>
<span class="sourceLineNo">2140</span>        }<a name="line.2140"></a>
<span class="sourceLineNo">2141</span><a name="line.2141"></a>
<span class="sourceLineNo">2142</span>        result = HFactory.createRangeSlicesQuery( keyspace, ss, ss, ss ) //<a name="line.2142"></a>
<span class="sourceLineNo">2143</span>            .setColumnFamily( cassandraArchivaManager.getMetadataFacetFamilyName() ) //<a name="line.2143"></a>
<span class="sourceLineNo">2144</span>            .setColumnNames( MetadataFacetModel.COLUMNS ) //<a name="line.2144"></a>
<span class="sourceLineNo">2145</span>            .setRowCount( Integer.MAX_VALUE ) //<a name="line.2145"></a>
<span class="sourceLineNo">2146</span>            .addEqualsExpression( REPOSITORY_NAME.toString(), repoId ) //<a name="line.2146"></a>
<span class="sourceLineNo">2147</span>            .addEqualsExpression( NAMESPACE_ID.toString(), namespace ) //<a name="line.2147"></a>
<span class="sourceLineNo">2148</span>            .addEqualsExpression( PROJECT_ID.toString(), projectId ) //<a name="line.2148"></a>
<span class="sourceLineNo">2149</span>            .addEqualsExpression( PROJECT_VERSION.toString(), projectVersion ) //<a name="line.2149"></a>
<span class="sourceLineNo">2150</span>            .execute();<a name="line.2150"></a>
<span class="sourceLineNo">2151</span><a name="line.2151"></a>
<span class="sourceLineNo">2152</span>        return mapArtifactMetadataToArtifact(result, artifactMetadatas);<a name="line.2152"></a>
<span class="sourceLineNo">2153</span>    }<a name="line.2153"></a>
<span class="sourceLineNo">2154</span><a name="line.2154"></a>
<span class="sourceLineNo">2155</span>    /**<a name="line.2155"></a>
<span class="sourceLineNo">2156</span>     * Attach metadata to each of the  ArtifactMetadata objects<a name="line.2156"></a>
<span class="sourceLineNo">2157</span>     */<a name="line.2157"></a>
<span class="sourceLineNo">2158</span>    private List&lt;ArtifactMetadata&gt; mapArtifactMetadataToArtifact(QueryResult&lt;OrderedRows&lt;String, String, String&gt;&gt; result, List&lt;ArtifactMetadata&gt; artifactMetadatas) {<a name="line.2158"></a>
<span class="sourceLineNo">2159</span>        if ( result.get() == null || result.get().getCount() &lt; 1 )<a name="line.2159"></a>
<span class="sourceLineNo">2160</span>        {<a name="line.2160"></a>
<span class="sourceLineNo">2161</span>            return artifactMetadatas;<a name="line.2161"></a>
<span class="sourceLineNo">2162</span>        }<a name="line.2162"></a>
<span class="sourceLineNo">2163</span><a name="line.2163"></a>
<span class="sourceLineNo">2164</span>        final List&lt;MetadataFacetModel&gt; metadataFacetModels = new ArrayList&lt;&gt;( result.get().getCount() );<a name="line.2164"></a>
<span class="sourceLineNo">2165</span><a name="line.2165"></a>
<span class="sourceLineNo">2166</span>        for ( Row&lt;String, String, String&gt; row : result.get() )<a name="line.2166"></a>
<span class="sourceLineNo">2167</span>        {<a name="line.2167"></a>
<span class="sourceLineNo">2168</span>            ColumnSlice&lt;String, String&gt; columnSlice = row.getColumnSlice();<a name="line.2168"></a>
<span class="sourceLineNo">2169</span>            MetadataFacetModel metadataFacetModel = new MetadataFacetModel();<a name="line.2169"></a>
<span class="sourceLineNo">2170</span>            metadataFacetModel.setFacetId( getStringValue( columnSlice, FACET_ID.toString() ) );<a name="line.2170"></a>
<span class="sourceLineNo">2171</span>            metadataFacetModel.setName( getStringValue( columnSlice, NAME.toString() ) );<a name="line.2171"></a>
<span class="sourceLineNo">2172</span>            metadataFacetModel.setValue( getStringValue( columnSlice, VALUE.toString() ) );<a name="line.2172"></a>
<span class="sourceLineNo">2173</span>            metadataFacetModel.setKey( getStringValue( columnSlice, KEY.toString() ) );<a name="line.2173"></a>
<span class="sourceLineNo">2174</span>            metadataFacetModel.setProjectVersion( getStringValue( columnSlice, PROJECT_VERSION.toString() ) );<a name="line.2174"></a>
<span class="sourceLineNo">2175</span>            metadataFacetModels.add( metadataFacetModel );<a name="line.2175"></a>
<span class="sourceLineNo">2176</span>        }<a name="line.2176"></a>
<span class="sourceLineNo">2177</span><a name="line.2177"></a>
<span class="sourceLineNo">2178</span>        // rebuild MetadataFacet for artifacts<a name="line.2178"></a>
<span class="sourceLineNo">2179</span><a name="line.2179"></a>
<span class="sourceLineNo">2180</span>        for ( final ArtifactMetadata artifactMetadata : artifactMetadatas )<a name="line.2180"></a>
<span class="sourceLineNo">2181</span>        {<a name="line.2181"></a>
<span class="sourceLineNo">2182</span>            Iterable&lt;MetadataFacetModel&gt; metadataFacetModelIterable =<a name="line.2182"></a>
<span class="sourceLineNo">2183</span>                Iterables.filter( metadataFacetModels, new Predicate&lt;MetadataFacetModel&gt;()<a name="line.2183"></a>
<span class="sourceLineNo">2184</span>                {<a name="line.2184"></a>
<span class="sourceLineNo">2185</span>                    @Override<a name="line.2185"></a>
<span class="sourceLineNo">2186</span>                    public boolean apply( MetadataFacetModel metadataFacetModel )<a name="line.2186"></a>
<span class="sourceLineNo">2187</span>                    {<a name="line.2187"></a>
<span class="sourceLineNo">2188</span>                        if ( metadataFacetModel != null )<a name="line.2188"></a>
<span class="sourceLineNo">2189</span>                        {<a name="line.2189"></a>
<span class="sourceLineNo">2190</span>                            return StringUtils.equals( artifactMetadata.getVersion(),<a name="line.2190"></a>
<span class="sourceLineNo">2191</span>                                                       metadataFacetModel.getProjectVersion() );<a name="line.2191"></a>
<span class="sourceLineNo">2192</span>                        }<a name="line.2192"></a>
<span class="sourceLineNo">2193</span>                        return false;<a name="line.2193"></a>
<span class="sourceLineNo">2194</span>                    }<a name="line.2194"></a>
<span class="sourceLineNo">2195</span>                } );<a name="line.2195"></a>
<span class="sourceLineNo">2196</span>            Iterator&lt;MetadataFacetModel&gt; iterator = metadataFacetModelIterable.iterator();<a name="line.2196"></a>
<span class="sourceLineNo">2197</span>            Map&lt;String, List&lt;MetadataFacetModel&gt;&gt; metadataFacetValuesPerFacetId = new HashMap&lt;&gt;();<a name="line.2197"></a>
<span class="sourceLineNo">2198</span>            while ( iterator.hasNext() )<a name="line.2198"></a>
<span class="sourceLineNo">2199</span>            {<a name="line.2199"></a>
<span class="sourceLineNo">2200</span>                MetadataFacetModel metadataFacetModel = iterator.next();<a name="line.2200"></a>
<span class="sourceLineNo">2201</span>                List&lt;MetadataFacetModel&gt; values = metadataFacetValuesPerFacetId.get( metadataFacetModel.getName() );<a name="line.2201"></a>
<span class="sourceLineNo">2202</span>                if ( values == null )<a name="line.2202"></a>
<span class="sourceLineNo">2203</span>                {<a name="line.2203"></a>
<span class="sourceLineNo">2204</span>                    values = new ArrayList&lt;&gt;();<a name="line.2204"></a>
<span class="sourceLineNo">2205</span>                    metadataFacetValuesPerFacetId.put( metadataFacetModel.getFacetId(), values );<a name="line.2205"></a>
<span class="sourceLineNo">2206</span>                }<a name="line.2206"></a>
<span class="sourceLineNo">2207</span>                values.add( metadataFacetModel );<a name="line.2207"></a>
<span class="sourceLineNo">2208</span><a name="line.2208"></a>
<span class="sourceLineNo">2209</span>            }<a name="line.2209"></a>
<span class="sourceLineNo">2210</span><a name="line.2210"></a>
<span class="sourceLineNo">2211</span>            for ( Map.Entry&lt;String, List&lt;MetadataFacetModel&gt;&gt; entry : metadataFacetValuesPerFacetId.entrySet() )<a name="line.2211"></a>
<span class="sourceLineNo">2212</span>            {<a name="line.2212"></a>
<span class="sourceLineNo">2213</span>                MetadataFacetFactory metadataFacetFactory = metadataFacetFactories.get( entry.getKey() );<a name="line.2213"></a>
<span class="sourceLineNo">2214</span>                if ( metadataFacetFactory != null )<a name="line.2214"></a>
<span class="sourceLineNo">2215</span>                {<a name="line.2215"></a>
<span class="sourceLineNo">2216</span>                    List&lt;MetadataFacetModel&gt; facetModels = entry.getValue();<a name="line.2216"></a>
<span class="sourceLineNo">2217</span>                    if ( !facetModels.isEmpty() )<a name="line.2217"></a>
<span class="sourceLineNo">2218</span>                    {<a name="line.2218"></a>
<span class="sourceLineNo">2219</span>                        MetadataFacet metadataFacet = metadataFacetFactory.createMetadataFacet();<a name="line.2219"></a>
<span class="sourceLineNo">2220</span>                        Map&lt;String, String&gt; props = new HashMap&lt;&gt;( facetModels.size() );<a name="line.2220"></a>
<span class="sourceLineNo">2221</span>                        for ( MetadataFacetModel metadataFacetModel : facetModels )<a name="line.2221"></a>
<span class="sourceLineNo">2222</span>                        {<a name="line.2222"></a>
<span class="sourceLineNo">2223</span>                            props.put( metadataFacetModel.getKey(), metadataFacetModel.getValue() );<a name="line.2223"></a>
<span class="sourceLineNo">2224</span>                        }<a name="line.2224"></a>
<span class="sourceLineNo">2225</span>                        metadataFacet.fromProperties( props );<a name="line.2225"></a>
<span class="sourceLineNo">2226</span>                        artifactMetadata.addFacet( metadataFacet );<a name="line.2226"></a>
<span class="sourceLineNo">2227</span>                    }<a name="line.2227"></a>
<span class="sourceLineNo">2228</span>                }<a name="line.2228"></a>
<span class="sourceLineNo">2229</span>            }<a name="line.2229"></a>
<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
<span class="sourceLineNo">2231</span><a name="line.2231"></a>
<span class="sourceLineNo">2232</span>        return artifactMetadatas;<a name="line.2232"></a>
<span class="sourceLineNo">2233</span>    }<a name="line.2233"></a>
<span class="sourceLineNo">2234</span><a name="line.2234"></a>
<span class="sourceLineNo">2235</span>    @Override<a name="line.2235"></a>
<span class="sourceLineNo">2236</span>    public void save()<a name="line.2236"></a>
<span class="sourceLineNo">2237</span>    {<a name="line.2237"></a>
<span class="sourceLineNo">2238</span>        logger.trace( "save" );<a name="line.2238"></a>
<span class="sourceLineNo">2239</span>    }<a name="line.2239"></a>
<span class="sourceLineNo">2240</span><a name="line.2240"></a>
<span class="sourceLineNo">2241</span>    @Override<a name="line.2241"></a>
<span class="sourceLineNo">2242</span>    public void close()<a name="line.2242"></a>
<span class="sourceLineNo">2243</span>        throws MetadataRepositoryException<a name="line.2243"></a>
<span class="sourceLineNo">2244</span>    {<a name="line.2244"></a>
<span class="sourceLineNo">2245</span>        logger.trace( "close" );<a name="line.2245"></a>
<span class="sourceLineNo">2246</span>    }<a name="line.2246"></a>
<span class="sourceLineNo">2247</span><a name="line.2247"></a>
<span class="sourceLineNo">2248</span>    @Override<a name="line.2248"></a>
<span class="sourceLineNo">2249</span>    public void revert()<a name="line.2249"></a>
<span class="sourceLineNo">2250</span>    {<a name="line.2250"></a>
<span class="sourceLineNo">2251</span>        logger.warn( "CassandraMetadataRepository cannot revert" );<a name="line.2251"></a>
<span class="sourceLineNo">2252</span>    }<a name="line.2252"></a>
<span class="sourceLineNo">2253</span><a name="line.2253"></a>
<span class="sourceLineNo">2254</span>    @Override<a name="line.2254"></a>
<span class="sourceLineNo">2255</span>    public boolean canObtainAccess( Class&lt;?&gt; aClass )<a name="line.2255"></a>
<span class="sourceLineNo">2256</span>    {<a name="line.2256"></a>
<span class="sourceLineNo">2257</span>        return false;<a name="line.2257"></a>
<span class="sourceLineNo">2258</span>    }<a name="line.2258"></a>
<span class="sourceLineNo">2259</span><a name="line.2259"></a>
<span class="sourceLineNo">2260</span>    @Override<a name="line.2260"></a>
<span class="sourceLineNo">2261</span>    public &lt;T&gt; T obtainAccess( Class&lt;T&gt; aClass )<a name="line.2261"></a>
<span class="sourceLineNo">2262</span>        throws MetadataRepositoryException<a name="line.2262"></a>
<span class="sourceLineNo">2263</span>    {<a name="line.2263"></a>
<span class="sourceLineNo">2264</span>        throw new IllegalArgumentException(<a name="line.2264"></a>
<span class="sourceLineNo">2265</span>            "Access using " + aClass + " is not supported on the cassandra metadata storage" );<a name="line.2265"></a>
<span class="sourceLineNo">2266</span>    }<a name="line.2266"></a>
<span class="sourceLineNo">2267</span><a name="line.2267"></a>
<span class="sourceLineNo">2268</span><a name="line.2268"></a>
<span class="sourceLineNo">2269</span>    private static class ModelMapperHolder<a name="line.2269"></a>
<span class="sourceLineNo">2270</span>    {<a name="line.2270"></a>
<span class="sourceLineNo">2271</span>        private static ModelMapper MODEL_MAPPER = new ModelMapper();<a name="line.2271"></a>
<span class="sourceLineNo">2272</span>    }<a name="line.2272"></a>
<span class="sourceLineNo">2273</span><a name="line.2273"></a>
<span class="sourceLineNo">2274</span>    protected ModelMapper getModelMapper()<a name="line.2274"></a>
<span class="sourceLineNo">2275</span>    {<a name="line.2275"></a>
<span class="sourceLineNo">2276</span>        return ModelMapperHolder.MODEL_MAPPER;<a name="line.2276"></a>
<span class="sourceLineNo">2277</span>    }<a name="line.2277"></a>
<span class="sourceLineNo">2278</span><a name="line.2278"></a>
<span class="sourceLineNo">2279</span>    /**<a name="line.2279"></a>
<span class="sourceLineNo">2280</span>     * This implementation just calls getArtifactsByMetadata( null, text, repositoryId ). We can't search artifacts by<a name="line.2280"></a>
<span class="sourceLineNo">2281</span>     * any property.<a name="line.2281"></a>
<span class="sourceLineNo">2282</span>     */<a name="line.2282"></a>
<span class="sourceLineNo">2283</span>    @Override<a name="line.2283"></a>
<span class="sourceLineNo">2284</span>    public List&lt;ArtifactMetadata&gt; searchArtifacts( String text, String repositoryId, boolean exact )<a name="line.2284"></a>
<span class="sourceLineNo">2285</span>        throws MetadataRepositoryException<a name="line.2285"></a>
<span class="sourceLineNo">2286</span>    {<a name="line.2286"></a>
<span class="sourceLineNo">2287</span>        return getArtifactsByMetadata( null, text, repositoryId );<a name="line.2287"></a>
<span class="sourceLineNo">2288</span>    }<a name="line.2288"></a>
<span class="sourceLineNo">2289</span><a name="line.2289"></a>
<span class="sourceLineNo">2290</span>    /**<a name="line.2290"></a>
<span class="sourceLineNo">2291</span>     * The exact parameter is ignored as we can't do non exact searches in Cassandra<a name="line.2291"></a>
<span class="sourceLineNo">2292</span>     */<a name="line.2292"></a>
<span class="sourceLineNo">2293</span>    @Override<a name="line.2293"></a>
<span class="sourceLineNo">2294</span>    public List&lt;ArtifactMetadata&gt; searchArtifacts( String key, String text, String repositoryId, boolean exact )<a name="line.2294"></a>
<span class="sourceLineNo">2295</span>        throws MetadataRepositoryException<a name="line.2295"></a>
<span class="sourceLineNo">2296</span>    {<a name="line.2296"></a>
<span class="sourceLineNo">2297</span>        // TODO optimize<a name="line.2297"></a>
<span class="sourceLineNo">2298</span>        List&lt;ArtifactMetadata&gt; artifacts = new LinkedList&lt;ArtifactMetadata&gt;();<a name="line.2298"></a>
<span class="sourceLineNo">2299</span>        artifacts.addAll( getArtifactsByMetadata( key, text, repositoryId ) );<a name="line.2299"></a>
<span class="sourceLineNo">2300</span>        artifacts.addAll( getArtifactsByProperty( key, text, repositoryId ) );<a name="line.2300"></a>
<span class="sourceLineNo">2301</span>        return artifacts;<a name="line.2301"></a>
<span class="sourceLineNo">2302</span>    }<a name="line.2302"></a>
<span class="sourceLineNo">2303</span>}<a name="line.2303"></a>




























































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