<!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 static org.apache.archiva.metadata.repository.cassandra.model.ColumnNames.*;<a name="line.22"></a>
<span class="sourceLineNo">023</span><a name="line.23"></a>
<span class="sourceLineNo">024</span>import me.prettyprint.cassandra.model.BasicColumnDefinition;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import me.prettyprint.cassandra.model.ConfigurableConsistencyLevel;<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.CassandraHostConfigurator;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import me.prettyprint.cassandra.service.ThriftKsDef;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import me.prettyprint.hector.api.Cluster;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import me.prettyprint.hector.api.HConsistencyLevel;<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.ddl.ColumnFamilyDefinition;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import me.prettyprint.hector.api.ddl.ColumnIndexType;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import me.prettyprint.hector.api.ddl.ComparatorType;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import me.prettyprint.hector.api.factory.HFactory;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.archiva.metadata.repository.RepositorySessionFactoryBean;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.commons.lang.StringUtils;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.slf4j.Logger;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.slf4j.LoggerFactory;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.springframework.beans.factory.annotation.Value;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.springframework.context.ApplicationContext;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import org.springframework.stereotype.Service;<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span>import javax.annotation.PostConstruct;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import javax.annotation.PreDestroy;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import javax.inject.Inject;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import java.util.ArrayList;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import java.util.List;<a name="line.48"></a>
<span class="sourceLineNo">049</span><a name="line.49"></a>
<span class="sourceLineNo">050</span>/**<a name="line.50"></a>
<span class="sourceLineNo">051</span> * FIXME make all configuration not hardcoded :-)<a name="line.51"></a>
<span class="sourceLineNo">052</span> *<a name="line.52"></a>
<span class="sourceLineNo">053</span> * @author Olivier Lamy<a name="line.53"></a>
<span class="sourceLineNo">054</span> * @since 2.0.0<a name="line.54"></a>
<span class="sourceLineNo">055</span> */<a name="line.55"></a>
<span class="sourceLineNo">056</span>@Service("archivaEntityManagerFactory#cassandra")<a name="line.56"></a>
<span class="sourceLineNo">057</span>public class DefaultCassandraArchivaManager<a name="line.57"></a>
<span class="sourceLineNo">058</span>    implements CassandraArchivaManager<a name="line.58"></a>
<span class="sourceLineNo">059</span>{<a name="line.59"></a>
<span class="sourceLineNo">060</span><a name="line.60"></a>
<span class="sourceLineNo">061</span>    private Logger logger = LoggerFactory.getLogger( getClass() );<a name="line.61"></a>
<span class="sourceLineNo">062</span><a name="line.62"></a>
<span class="sourceLineNo">063</span>    @Inject<a name="line.63"></a>
<span class="sourceLineNo">064</span>    private ApplicationContext applicationContext;<a name="line.64"></a>
<span class="sourceLineNo">065</span><a name="line.65"></a>
<span class="sourceLineNo">066</span>    private static final String CLUSTER_NAME = "archiva";<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
<span class="sourceLineNo">068</span>    private static final String KEYSPACE_NAME = "ArchivaKeySpace";<a name="line.68"></a>
<span class="sourceLineNo">069</span><a name="line.69"></a>
<span class="sourceLineNo">070</span>    private boolean started;<a name="line.70"></a>
<span class="sourceLineNo">071</span><a name="line.71"></a>
<span class="sourceLineNo">072</span>    private Cluster cluster;<a name="line.72"></a>
<span class="sourceLineNo">073</span><a name="line.73"></a>
<span class="sourceLineNo">074</span>    private Keyspace keyspace;<a name="line.74"></a>
<span class="sourceLineNo">075</span><a name="line.75"></a>
<span class="sourceLineNo">076</span>    // configurable???<a name="line.76"></a>
<span class="sourceLineNo">077</span>    private String repositoryFamilyName = "repository";<a name="line.77"></a>
<span class="sourceLineNo">078</span><a name="line.78"></a>
<span class="sourceLineNo">079</span>    private String namespaceFamilyName = "namespace";<a name="line.79"></a>
<span class="sourceLineNo">080</span><a name="line.80"></a>
<span class="sourceLineNo">081</span>    private String projectFamilyName = PROJECT.toString();<a name="line.81"></a>
<span class="sourceLineNo">082</span><a name="line.82"></a>
<span class="sourceLineNo">083</span>    private String projectVersionMetadataFamilyName = "projectversionmetadata";<a name="line.83"></a>
<span class="sourceLineNo">084</span><a name="line.84"></a>
<span class="sourceLineNo">085</span>    private String artifactMetadataFamilyName = "artifactmetadata";<a name="line.85"></a>
<span class="sourceLineNo">086</span><a name="line.86"></a>
<span class="sourceLineNo">087</span>    private String metadataFacetFamilyName = "metadatafacet";<a name="line.87"></a>
<span class="sourceLineNo">088</span><a name="line.88"></a>
<span class="sourceLineNo">089</span>    private String mailingListFamilyName = "mailinglist";<a name="line.89"></a>
<span class="sourceLineNo">090</span><a name="line.90"></a>
<span class="sourceLineNo">091</span>    private String licenseFamilyName = "license";<a name="line.91"></a>
<span class="sourceLineNo">092</span><a name="line.92"></a>
<span class="sourceLineNo">093</span>    private String dependencyFamilyName = "dependency";<a name="line.93"></a>
<span class="sourceLineNo">094</span><a name="line.94"></a>
<span class="sourceLineNo">095</span>    @Value("${cassandra.host}")<a name="line.95"></a>
<span class="sourceLineNo">096</span>    private String cassandraHost;<a name="line.96"></a>
<span class="sourceLineNo">097</span><a name="line.97"></a>
<span class="sourceLineNo">098</span>    @Value("${cassandra.port}")<a name="line.98"></a>
<span class="sourceLineNo">099</span>    private String cassandraPort;<a name="line.99"></a>
<span class="sourceLineNo">100</span><a name="line.100"></a>
<span class="sourceLineNo">101</span>    @Value("${cassandra.maxActive}")<a name="line.101"></a>
<span class="sourceLineNo">102</span>    private int maxActive;<a name="line.102"></a>
<span class="sourceLineNo">103</span><a name="line.103"></a>
<span class="sourceLineNo">104</span>    @Value("${cassandra.readConsistencyLevel}")<a name="line.104"></a>
<span class="sourceLineNo">105</span>    private String readConsistencyLevel;<a name="line.105"></a>
<span class="sourceLineNo">106</span><a name="line.106"></a>
<span class="sourceLineNo">107</span>    @Value("${cassandra.writeConsistencyLevel}")<a name="line.107"></a>
<span class="sourceLineNo">108</span>    private String writeConsistencyLevel;<a name="line.108"></a>
<span class="sourceLineNo">109</span><a name="line.109"></a>
<span class="sourceLineNo">110</span>    @Value("${cassandra.replicationFactor}")<a name="line.110"></a>
<span class="sourceLineNo">111</span>    private int replicationFactor;<a name="line.111"></a>
<span class="sourceLineNo">112</span><a name="line.112"></a>
<span class="sourceLineNo">113</span>    @Value("${cassandra.keyspace.name}")<a name="line.113"></a>
<span class="sourceLineNo">114</span>    private String keyspaceName;<a name="line.114"></a>
<span class="sourceLineNo">115</span><a name="line.115"></a>
<span class="sourceLineNo">116</span>    @Value("${cassandra.cluster.name}")<a name="line.116"></a>
<span class="sourceLineNo">117</span>    private String clusterName;<a name="line.117"></a>
<span class="sourceLineNo">118</span><a name="line.118"></a>
<span class="sourceLineNo">119</span>    @Inject<a name="line.119"></a>
<span class="sourceLineNo">120</span>    private RepositorySessionFactoryBean repositorySessionFactoryBean;<a name="line.120"></a>
<span class="sourceLineNo">121</span><a name="line.121"></a>
<span class="sourceLineNo">122</span>    @PostConstruct<a name="line.122"></a>
<span class="sourceLineNo">123</span>    public void initialize()<a name="line.123"></a>
<span class="sourceLineNo">124</span>    {<a name="line.124"></a>
<span class="sourceLineNo">125</span>        // skip initialisation if not cassandra<a name="line.125"></a>
<span class="sourceLineNo">126</span>        if ( !StringUtils.equals( repositorySessionFactoryBean.getId(), "cassandra" ) )<a name="line.126"></a>
<span class="sourceLineNo">127</span>        {<a name="line.127"></a>
<span class="sourceLineNo">128</span>            return;<a name="line.128"></a>
<span class="sourceLineNo">129</span>        }<a name="line.129"></a>
<span class="sourceLineNo">130</span>        final CassandraHostConfigurator configurator =<a name="line.130"></a>
<span class="sourceLineNo">131</span>            new CassandraHostConfigurator( cassandraHost + ":" + cassandraPort );<a name="line.131"></a>
<span class="sourceLineNo">132</span>        configurator.setMaxActive( maxActive );<a name="line.132"></a>
<span class="sourceLineNo">133</span>        //configurator.setCassandraThriftSocketTimeout(  );<a name="line.133"></a>
<span class="sourceLineNo">134</span><a name="line.134"></a>
<span class="sourceLineNo">135</span>        cluster = HFactory.getOrCreateCluster( clusterName, configurator );<a name="line.135"></a>
<span class="sourceLineNo">136</span><a name="line.136"></a>
<span class="sourceLineNo">137</span>        final ConfigurableConsistencyLevel consistencyLevelPolicy = new ConfigurableConsistencyLevel();<a name="line.137"></a>
<span class="sourceLineNo">138</span>        consistencyLevelPolicy.setDefaultReadConsistencyLevel( HConsistencyLevel.valueOf( readConsistencyLevel ) );<a name="line.138"></a>
<span class="sourceLineNo">139</span>        consistencyLevelPolicy.setDefaultWriteConsistencyLevel( HConsistencyLevel.valueOf( writeConsistencyLevel ) );<a name="line.139"></a>
<span class="sourceLineNo">140</span>        keyspace = HFactory.createKeyspace( keyspaceName, cluster, consistencyLevelPolicy );<a name="line.140"></a>
<span class="sourceLineNo">141</span><a name="line.141"></a>
<span class="sourceLineNo">142</span>        List&lt;ColumnFamilyDefinition&gt; cfds = new ArrayList&lt;&gt;();<a name="line.142"></a>
<span class="sourceLineNo">143</span><a name="line.143"></a>
<span class="sourceLineNo">144</span>        // namespace table<a name="line.144"></a>
<span class="sourceLineNo">145</span>        {<a name="line.145"></a>
<span class="sourceLineNo">146</span><a name="line.146"></a>
<span class="sourceLineNo">147</span>            final ColumnFamilyDefinition namespace =<a name="line.147"></a>
<span class="sourceLineNo">148</span>                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //<a name="line.148"></a>
<span class="sourceLineNo">149</span>                                                       getNamespaceFamilyName(), //<a name="line.149"></a>
<span class="sourceLineNo">150</span>                                                       ComparatorType.UTF8TYPE );<a name="line.150"></a>
<span class="sourceLineNo">151</span>            cfds.add( namespace );<a name="line.151"></a>
<span class="sourceLineNo">152</span><a name="line.152"></a>
<span class="sourceLineNo">153</span>            // creating indexes for cql query<a name="line.153"></a>
<span class="sourceLineNo">154</span><a name="line.154"></a>
<span class="sourceLineNo">155</span>            BasicColumnDefinition nameColumn = new BasicColumnDefinition();<a name="line.155"></a>
<span class="sourceLineNo">156</span>            nameColumn.setName( StringSerializer.get().toByteBuffer( NAME.toString() ) );<a name="line.156"></a>
<span class="sourceLineNo">157</span>            nameColumn.setIndexName( NAME.toString() );<a name="line.157"></a>
<span class="sourceLineNo">158</span>            nameColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.158"></a>
<span class="sourceLineNo">159</span>            nameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.159"></a>
<span class="sourceLineNo">160</span>            namespace.addColumnDefinition( nameColumn );<a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
<span class="sourceLineNo">162</span>            BasicColumnDefinition repositoryIdColumn = new BasicColumnDefinition();<a name="line.162"></a>
<span class="sourceLineNo">163</span>            repositoryIdColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );<a name="line.163"></a>
<span class="sourceLineNo">164</span>            repositoryIdColumn.setIndexName( REPOSITORY_NAME.toString() );<a name="line.164"></a>
<span class="sourceLineNo">165</span>            repositoryIdColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.165"></a>
<span class="sourceLineNo">166</span>            repositoryIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.166"></a>
<span class="sourceLineNo">167</span>            namespace.addColumnDefinition( repositoryIdColumn );<a name="line.167"></a>
<span class="sourceLineNo">168</span>        }<a name="line.168"></a>
<span class="sourceLineNo">169</span><a name="line.169"></a>
<span class="sourceLineNo">170</span>        // repository table<a name="line.170"></a>
<span class="sourceLineNo">171</span>        {<a name="line.171"></a>
<span class="sourceLineNo">172</span>            final ColumnFamilyDefinition repository =<a name="line.172"></a>
<span class="sourceLineNo">173</span>                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //<a name="line.173"></a>
<span class="sourceLineNo">174</span>                                                       getRepositoryFamilyName(), //<a name="line.174"></a>
<span class="sourceLineNo">175</span>                                                       ComparatorType.UTF8TYPE );<a name="line.175"></a>
<span class="sourceLineNo">176</span><a name="line.176"></a>
<span class="sourceLineNo">177</span>            cfds.add( repository );<a name="line.177"></a>
<span class="sourceLineNo">178</span><a name="line.178"></a>
<span class="sourceLineNo">179</span>            BasicColumnDefinition nameColumn = new BasicColumnDefinition();<a name="line.179"></a>
<span class="sourceLineNo">180</span>            nameColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );<a name="line.180"></a>
<span class="sourceLineNo">181</span>            nameColumn.setIndexName( REPOSITORY_NAME.toString() );<a name="line.181"></a>
<span class="sourceLineNo">182</span>            nameColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.182"></a>
<span class="sourceLineNo">183</span>            nameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.183"></a>
<span class="sourceLineNo">184</span>            repository.addColumnDefinition( nameColumn );<a name="line.184"></a>
<span class="sourceLineNo">185</span>        }<a name="line.185"></a>
<span class="sourceLineNo">186</span><a name="line.186"></a>
<span class="sourceLineNo">187</span>        // project table<a name="line.187"></a>
<span class="sourceLineNo">188</span>        {<a name="line.188"></a>
<span class="sourceLineNo">189</span><a name="line.189"></a>
<span class="sourceLineNo">190</span>            final ColumnFamilyDefinition project = HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //<a name="line.190"></a>
<span class="sourceLineNo">191</span>                                                                                          getProjectFamilyName(), //<a name="line.191"></a>
<span class="sourceLineNo">192</span>                                                                                          ComparatorType.UTF8TYPE );<a name="line.192"></a>
<span class="sourceLineNo">193</span>            cfds.add( project );<a name="line.193"></a>
<span class="sourceLineNo">194</span><a name="line.194"></a>
<span class="sourceLineNo">195</span>            // creating indexes for cql query<a name="line.195"></a>
<span class="sourceLineNo">196</span><a name="line.196"></a>
<span class="sourceLineNo">197</span>            BasicColumnDefinition projectIdColumn = new BasicColumnDefinition();<a name="line.197"></a>
<span class="sourceLineNo">198</span>            projectIdColumn.setName( StringSerializer.get().toByteBuffer( PROJECT_ID.toString() ) );<a name="line.198"></a>
<span class="sourceLineNo">199</span>            projectIdColumn.setIndexName( PROJECT_ID.toString() );<a name="line.199"></a>
<span class="sourceLineNo">200</span>            projectIdColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.200"></a>
<span class="sourceLineNo">201</span>            projectIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.201"></a>
<span class="sourceLineNo">202</span>            project.addColumnDefinition( projectIdColumn );<a name="line.202"></a>
<span class="sourceLineNo">203</span><a name="line.203"></a>
<span class="sourceLineNo">204</span>            BasicColumnDefinition repositoryIdColumn = new BasicColumnDefinition();<a name="line.204"></a>
<span class="sourceLineNo">205</span>            repositoryIdColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );<a name="line.205"></a>
<span class="sourceLineNo">206</span>            repositoryIdColumn.setIndexName( REPOSITORY_NAME.toString() );<a name="line.206"></a>
<span class="sourceLineNo">207</span>            repositoryIdColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.207"></a>
<span class="sourceLineNo">208</span>            repositoryIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.208"></a>
<span class="sourceLineNo">209</span>            project.addColumnDefinition( repositoryIdColumn );<a name="line.209"></a>
<span class="sourceLineNo">210</span><a name="line.210"></a>
<span class="sourceLineNo">211</span>            BasicColumnDefinition namespaceIdColumn = new BasicColumnDefinition();<a name="line.211"></a>
<span class="sourceLineNo">212</span>            namespaceIdColumn.setName( StringSerializer.get().toByteBuffer( NAMESPACE_ID.toString() ) );<a name="line.212"></a>
<span class="sourceLineNo">213</span>            namespaceIdColumn.setIndexName( NAMESPACE_ID.toString() );<a name="line.213"></a>
<span class="sourceLineNo">214</span>            namespaceIdColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.214"></a>
<span class="sourceLineNo">215</span>            namespaceIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.215"></a>
<span class="sourceLineNo">216</span>            project.addColumnDefinition( namespaceIdColumn );<a name="line.216"></a>
<span class="sourceLineNo">217</span>        }<a name="line.217"></a>
<span class="sourceLineNo">218</span><a name="line.218"></a>
<span class="sourceLineNo">219</span>        //projectversionmetadatamodel<a name="line.219"></a>
<span class="sourceLineNo">220</span>        {<a name="line.220"></a>
<span class="sourceLineNo">221</span><a name="line.221"></a>
<span class="sourceLineNo">222</span>            final ColumnFamilyDefinition projectVersionMetadataModel =<a name="line.222"></a>
<span class="sourceLineNo">223</span>                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //<a name="line.223"></a>
<span class="sourceLineNo">224</span>                                                       getProjectVersionMetadataFamilyName(), //<a name="line.224"></a>
<span class="sourceLineNo">225</span>                                                       ComparatorType.UTF8TYPE );<a name="line.225"></a>
<span class="sourceLineNo">226</span>            cfds.add( projectVersionMetadataModel );<a name="line.226"></a>
<span class="sourceLineNo">227</span><a name="line.227"></a>
<span class="sourceLineNo">228</span>            // creating indexes for cql query<a name="line.228"></a>
<span class="sourceLineNo">229</span><a name="line.229"></a>
<span class="sourceLineNo">230</span>            BasicColumnDefinition namespaceIdColumn = new BasicColumnDefinition();<a name="line.230"></a>
<span class="sourceLineNo">231</span>            namespaceIdColumn.setName( StringSerializer.get().toByteBuffer( NAMESPACE_ID.toString() ) );<a name="line.231"></a>
<span class="sourceLineNo">232</span>            namespaceIdColumn.setIndexName( NAMESPACE_ID.toString() );<a name="line.232"></a>
<span class="sourceLineNo">233</span>            namespaceIdColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.233"></a>
<span class="sourceLineNo">234</span>            namespaceIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.234"></a>
<span class="sourceLineNo">235</span>            projectVersionMetadataModel.addColumnDefinition( namespaceIdColumn );<a name="line.235"></a>
<span class="sourceLineNo">236</span><a name="line.236"></a>
<span class="sourceLineNo">237</span>            BasicColumnDefinition repositoryNameColumn = new BasicColumnDefinition();<a name="line.237"></a>
<span class="sourceLineNo">238</span>            repositoryNameColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );<a name="line.238"></a>
<span class="sourceLineNo">239</span>            repositoryNameColumn.setIndexName( REPOSITORY_NAME.toString() );<a name="line.239"></a>
<span class="sourceLineNo">240</span>            repositoryNameColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.240"></a>
<span class="sourceLineNo">241</span>            repositoryNameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.241"></a>
<span class="sourceLineNo">242</span>            projectVersionMetadataModel.addColumnDefinition( repositoryNameColumn );<a name="line.242"></a>
<span class="sourceLineNo">243</span><a name="line.243"></a>
<span class="sourceLineNo">244</span>            BasicColumnDefinition idColumn = new BasicColumnDefinition();<a name="line.244"></a>
<span class="sourceLineNo">245</span>            idColumn.setName( StringSerializer.get().toByteBuffer( ID.toString() ) );<a name="line.245"></a>
<span class="sourceLineNo">246</span>            idColumn.setIndexName( ID.toString() );<a name="line.246"></a>
<span class="sourceLineNo">247</span>            idColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.247"></a>
<span class="sourceLineNo">248</span>            idColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.248"></a>
<span class="sourceLineNo">249</span>            projectVersionMetadataModel.addColumnDefinition( idColumn );<a name="line.249"></a>
<span class="sourceLineNo">250</span><a name="line.250"></a>
<span class="sourceLineNo">251</span>            BasicColumnDefinition projectIdColumn = new BasicColumnDefinition();<a name="line.251"></a>
<span class="sourceLineNo">252</span>            projectIdColumn.setName( StringSerializer.get().toByteBuffer( PROJECT_ID.toString() ) );<a name="line.252"></a>
<span class="sourceLineNo">253</span>            projectIdColumn.setIndexName( PROJECT_ID.toString() );<a name="line.253"></a>
<span class="sourceLineNo">254</span>            projectIdColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.254"></a>
<span class="sourceLineNo">255</span>            projectIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.255"></a>
<span class="sourceLineNo">256</span>            projectVersionMetadataModel.addColumnDefinition( projectIdColumn );<a name="line.256"></a>
<span class="sourceLineNo">257</span><a name="line.257"></a>
<span class="sourceLineNo">258</span>        }<a name="line.258"></a>
<span class="sourceLineNo">259</span><a name="line.259"></a>
<span class="sourceLineNo">260</span>        // artifactmetadatamodel table<a name="line.260"></a>
<span class="sourceLineNo">261</span>        {<a name="line.261"></a>
<span class="sourceLineNo">262</span><a name="line.262"></a>
<span class="sourceLineNo">263</span>            final ColumnFamilyDefinition artifactMetadataModel =<a name="line.263"></a>
<span class="sourceLineNo">264</span>                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //<a name="line.264"></a>
<span class="sourceLineNo">265</span>                                                       getArtifactMetadataFamilyName(), //<a name="line.265"></a>
<span class="sourceLineNo">266</span>                                                       ComparatorType.UTF8TYPE );<a name="line.266"></a>
<span class="sourceLineNo">267</span>            cfds.add( artifactMetadataModel );<a name="line.267"></a>
<span class="sourceLineNo">268</span><a name="line.268"></a>
<span class="sourceLineNo">269</span>            // creating indexes for cql query<a name="line.269"></a>
<span class="sourceLineNo">270</span><a name="line.270"></a>
<span class="sourceLineNo">271</span>            BasicColumnDefinition idColumn = new BasicColumnDefinition();<a name="line.271"></a>
<span class="sourceLineNo">272</span>            idColumn.setName( StringSerializer.get().toByteBuffer( ID.toString() ) );<a name="line.272"></a>
<span class="sourceLineNo">273</span>            idColumn.setIndexName( ID.toString() );<a name="line.273"></a>
<span class="sourceLineNo">274</span>            idColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.274"></a>
<span class="sourceLineNo">275</span>            idColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.275"></a>
<span class="sourceLineNo">276</span>            artifactMetadataModel.addColumnDefinition( idColumn );<a name="line.276"></a>
<span class="sourceLineNo">277</span><a name="line.277"></a>
<span class="sourceLineNo">278</span>            BasicColumnDefinition repositoryNameColumn = new BasicColumnDefinition();<a name="line.278"></a>
<span class="sourceLineNo">279</span>            repositoryNameColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );<a name="line.279"></a>
<span class="sourceLineNo">280</span>            repositoryNameColumn.setIndexName( REPOSITORY_NAME.toString() );<a name="line.280"></a>
<span class="sourceLineNo">281</span>            repositoryNameColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.281"></a>
<span class="sourceLineNo">282</span>            repositoryNameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.282"></a>
<span class="sourceLineNo">283</span>            artifactMetadataModel.addColumnDefinition( repositoryNameColumn );<a name="line.283"></a>
<span class="sourceLineNo">284</span><a name="line.284"></a>
<span class="sourceLineNo">285</span>            BasicColumnDefinition namespaceIdColumn = new BasicColumnDefinition();<a name="line.285"></a>
<span class="sourceLineNo">286</span>            namespaceIdColumn.setName( StringSerializer.get().toByteBuffer( NAMESPACE_ID.toString() ) );<a name="line.286"></a>
<span class="sourceLineNo">287</span>            namespaceIdColumn.setIndexName( NAMESPACE_ID.toString() );<a name="line.287"></a>
<span class="sourceLineNo">288</span>            namespaceIdColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.288"></a>
<span class="sourceLineNo">289</span>            namespaceIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.289"></a>
<span class="sourceLineNo">290</span>            artifactMetadataModel.addColumnDefinition( namespaceIdColumn );<a name="line.290"></a>
<span class="sourceLineNo">291</span><a name="line.291"></a>
<span class="sourceLineNo">292</span>            BasicColumnDefinition projectColumn = new BasicColumnDefinition();<a name="line.292"></a>
<span class="sourceLineNo">293</span>            projectColumn.setName( StringSerializer.get().toByteBuffer( PROJECT.toString() ) );<a name="line.293"></a>
<span class="sourceLineNo">294</span>            projectColumn.setIndexName( PROJECT.toString() );<a name="line.294"></a>
<span class="sourceLineNo">295</span>            projectColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.295"></a>
<span class="sourceLineNo">296</span>            projectColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.296"></a>
<span class="sourceLineNo">297</span>            artifactMetadataModel.addColumnDefinition( projectColumn );<a name="line.297"></a>
<span class="sourceLineNo">298</span><a name="line.298"></a>
<span class="sourceLineNo">299</span>            BasicColumnDefinition projectVersionColumn = new BasicColumnDefinition();<a name="line.299"></a>
<span class="sourceLineNo">300</span>            projectVersionColumn.setName( StringSerializer.get().toByteBuffer( PROJECT_VERSION.toString() ) );<a name="line.300"></a>
<span class="sourceLineNo">301</span>            projectVersionColumn.setIndexName( PROJECT_VERSION.toString() );<a name="line.301"></a>
<span class="sourceLineNo">302</span>            projectVersionColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.302"></a>
<span class="sourceLineNo">303</span>            projectVersionColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.303"></a>
<span class="sourceLineNo">304</span>            artifactMetadataModel.addColumnDefinition( projectVersionColumn );<a name="line.304"></a>
<span class="sourceLineNo">305</span><a name="line.305"></a>
<span class="sourceLineNo">306</span>            BasicColumnDefinition versionColumn = new BasicColumnDefinition();<a name="line.306"></a>
<span class="sourceLineNo">307</span>            versionColumn.setName( StringSerializer.get().toByteBuffer( VERSION.toString() ) );<a name="line.307"></a>
<span class="sourceLineNo">308</span>            versionColumn.setIndexName( VERSION.toString() );<a name="line.308"></a>
<span class="sourceLineNo">309</span>            versionColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.309"></a>
<span class="sourceLineNo">310</span>            versionColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.310"></a>
<span class="sourceLineNo">311</span>            artifactMetadataModel.addColumnDefinition( versionColumn );<a name="line.311"></a>
<span class="sourceLineNo">312</span><a name="line.312"></a>
<span class="sourceLineNo">313</span>            BasicColumnDefinition whenGatheredColumn = new BasicColumnDefinition();<a name="line.313"></a>
<span class="sourceLineNo">314</span>            whenGatheredColumn.setName( StringSerializer.get().toByteBuffer( WHEN_GATHERED.toString() ) );<a name="line.314"></a>
<span class="sourceLineNo">315</span>            whenGatheredColumn.setIndexName( WHEN_GATHERED.toString() );<a name="line.315"></a>
<span class="sourceLineNo">316</span>            whenGatheredColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.316"></a>
<span class="sourceLineNo">317</span>            whenGatheredColumn.setValidationClass( ComparatorType.LONGTYPE.getClassName() );<a name="line.317"></a>
<span class="sourceLineNo">318</span>            artifactMetadataModel.addColumnDefinition( whenGatheredColumn );<a name="line.318"></a>
<span class="sourceLineNo">319</span><a name="line.319"></a>
<span class="sourceLineNo">320</span>            BasicColumnDefinition sha1Column = new BasicColumnDefinition();<a name="line.320"></a>
<span class="sourceLineNo">321</span>            sha1Column.setName( StringSerializer.get().toByteBuffer( SHA1.toString() ) );<a name="line.321"></a>
<span class="sourceLineNo">322</span>            sha1Column.setIndexName( SHA1.toString() );<a name="line.322"></a>
<span class="sourceLineNo">323</span>            sha1Column.setIndexType( ColumnIndexType.KEYS );<a name="line.323"></a>
<span class="sourceLineNo">324</span>            sha1Column.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.324"></a>
<span class="sourceLineNo">325</span>            artifactMetadataModel.addColumnDefinition( sha1Column );<a name="line.325"></a>
<span class="sourceLineNo">326</span><a name="line.326"></a>
<span class="sourceLineNo">327</span>            BasicColumnDefinition md5Column = new BasicColumnDefinition();<a name="line.327"></a>
<span class="sourceLineNo">328</span>            md5Column.setName( StringSerializer.get().toByteBuffer( MD5.toString() ) );<a name="line.328"></a>
<span class="sourceLineNo">329</span>            md5Column.setIndexName( MD5.toString() );<a name="line.329"></a>
<span class="sourceLineNo">330</span>            md5Column.setIndexType( ColumnIndexType.KEYS );<a name="line.330"></a>
<span class="sourceLineNo">331</span>            md5Column.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.331"></a>
<span class="sourceLineNo">332</span>            artifactMetadataModel.addColumnDefinition( md5Column );<a name="line.332"></a>
<span class="sourceLineNo">333</span><a name="line.333"></a>
<span class="sourceLineNo">334</span><a name="line.334"></a>
<span class="sourceLineNo">335</span>        }<a name="line.335"></a>
<span class="sourceLineNo">336</span><a name="line.336"></a>
<span class="sourceLineNo">337</span>        // metadatafacetmodel table<a name="line.337"></a>
<span class="sourceLineNo">338</span>        {<a name="line.338"></a>
<span class="sourceLineNo">339</span>            final ColumnFamilyDefinition metadataFacetModel =<a name="line.339"></a>
<span class="sourceLineNo">340</span>                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //<a name="line.340"></a>
<span class="sourceLineNo">341</span>                                                       getMetadataFacetFamilyName(), //<a name="line.341"></a>
<span class="sourceLineNo">342</span>                                                       ComparatorType.UTF8TYPE );<a name="line.342"></a>
<span class="sourceLineNo">343</span>            cfds.add( metadataFacetModel );<a name="line.343"></a>
<span class="sourceLineNo">344</span><a name="line.344"></a>
<span class="sourceLineNo">345</span>            // creating indexes for cql query<a name="line.345"></a>
<span class="sourceLineNo">346</span><a name="line.346"></a>
<span class="sourceLineNo">347</span>            BasicColumnDefinition facetIdColumn = new BasicColumnDefinition();<a name="line.347"></a>
<span class="sourceLineNo">348</span>            facetIdColumn.setName( StringSerializer.get().toByteBuffer( FACET_ID.toString() ) );<a name="line.348"></a>
<span class="sourceLineNo">349</span>            facetIdColumn.setIndexName( FACET_ID.toString() );<a name="line.349"></a>
<span class="sourceLineNo">350</span>            facetIdColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.350"></a>
<span class="sourceLineNo">351</span>            facetIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.351"></a>
<span class="sourceLineNo">352</span>            metadataFacetModel.addColumnDefinition( facetIdColumn );<a name="line.352"></a>
<span class="sourceLineNo">353</span><a name="line.353"></a>
<span class="sourceLineNo">354</span>            BasicColumnDefinition repositoryNameColumn = new BasicColumnDefinition();<a name="line.354"></a>
<span class="sourceLineNo">355</span>            repositoryNameColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );<a name="line.355"></a>
<span class="sourceLineNo">356</span>            repositoryNameColumn.setIndexName( REPOSITORY_NAME.toString() );<a name="line.356"></a>
<span class="sourceLineNo">357</span>            repositoryNameColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.357"></a>
<span class="sourceLineNo">358</span>            repositoryNameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.358"></a>
<span class="sourceLineNo">359</span>            metadataFacetModel.addColumnDefinition( repositoryNameColumn );<a name="line.359"></a>
<span class="sourceLineNo">360</span><a name="line.360"></a>
<span class="sourceLineNo">361</span>            BasicColumnDefinition nameColumn = new BasicColumnDefinition();<a name="line.361"></a>
<span class="sourceLineNo">362</span>            nameColumn.setName( StringSerializer.get().toByteBuffer( NAME.toString() ) );<a name="line.362"></a>
<span class="sourceLineNo">363</span>            nameColumn.setIndexName( NAME.toString() );<a name="line.363"></a>
<span class="sourceLineNo">364</span>            nameColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.364"></a>
<span class="sourceLineNo">365</span>            nameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.365"></a>
<span class="sourceLineNo">366</span>            metadataFacetModel.addColumnDefinition( nameColumn );<a name="line.366"></a>
<span class="sourceLineNo">367</span><a name="line.367"></a>
<span class="sourceLineNo">368</span>            BasicColumnDefinition namespaceColumn = new BasicColumnDefinition();<a name="line.368"></a>
<span class="sourceLineNo">369</span>            namespaceColumn.setName( StringSerializer.get().toByteBuffer( NAMESPACE_ID.toString() ) );<a name="line.369"></a>
<span class="sourceLineNo">370</span>            namespaceColumn.setIndexName( NAMESPACE_ID.toString() );<a name="line.370"></a>
<span class="sourceLineNo">371</span>            namespaceColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.371"></a>
<span class="sourceLineNo">372</span>            namespaceColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.372"></a>
<span class="sourceLineNo">373</span>            metadataFacetModel.addColumnDefinition( namespaceColumn );<a name="line.373"></a>
<span class="sourceLineNo">374</span><a name="line.374"></a>
<span class="sourceLineNo">375</span>            BasicColumnDefinition projectIdColumn = new BasicColumnDefinition();<a name="line.375"></a>
<span class="sourceLineNo">376</span>            projectIdColumn.setName( StringSerializer.get().toByteBuffer( PROJECT_ID.toString() ) );<a name="line.376"></a>
<span class="sourceLineNo">377</span>            projectIdColumn.setIndexName( PROJECT_ID.toString() );<a name="line.377"></a>
<span class="sourceLineNo">378</span>            projectIdColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.378"></a>
<span class="sourceLineNo">379</span>            projectIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.379"></a>
<span class="sourceLineNo">380</span>            metadataFacetModel.addColumnDefinition( projectIdColumn );<a name="line.380"></a>
<span class="sourceLineNo">381</span><a name="line.381"></a>
<span class="sourceLineNo">382</span>            BasicColumnDefinition projectVersionColumn = new BasicColumnDefinition();<a name="line.382"></a>
<span class="sourceLineNo">383</span>            projectVersionColumn.setName( StringSerializer.get().toByteBuffer( PROJECT_VERSION.toString() ) );<a name="line.383"></a>
<span class="sourceLineNo">384</span>            projectVersionColumn.setIndexName( PROJECT_VERSION.toString() );<a name="line.384"></a>
<span class="sourceLineNo">385</span>            projectVersionColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.385"></a>
<span class="sourceLineNo">386</span>            projectVersionColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.386"></a>
<span class="sourceLineNo">387</span>            metadataFacetModel.addColumnDefinition( projectVersionColumn );<a name="line.387"></a>
<span class="sourceLineNo">388</span><a name="line.388"></a>
<span class="sourceLineNo">389</span>        }<a name="line.389"></a>
<span class="sourceLineNo">390</span><a name="line.390"></a>
<span class="sourceLineNo">391</span>        // mailinglist table<a name="line.391"></a>
<span class="sourceLineNo">392</span>        {<a name="line.392"></a>
<span class="sourceLineNo">393</span>            final ColumnFamilyDefinition mailingListCf =<a name="line.393"></a>
<span class="sourceLineNo">394</span>                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //<a name="line.394"></a>
<span class="sourceLineNo">395</span>                                                       getMailingListFamilyName(), //<a name="line.395"></a>
<span class="sourceLineNo">396</span>                                                       ComparatorType.UTF8TYPE );<a name="line.396"></a>
<span class="sourceLineNo">397</span><a name="line.397"></a>
<span class="sourceLineNo">398</span>            BasicColumnDefinition projectVersionMetadataModel_key = new BasicColumnDefinition();<a name="line.398"></a>
<span class="sourceLineNo">399</span>            projectVersionMetadataModel_key.setName( StringSerializer.get().toByteBuffer( "projectVersionMetadataModel.key" ) );<a name="line.399"></a>
<span class="sourceLineNo">400</span>            projectVersionMetadataModel_key.setIndexName( "projectVersionMetadataModel_key" );<a name="line.400"></a>
<span class="sourceLineNo">401</span>            projectVersionMetadataModel_key.setIndexType( ColumnIndexType.KEYS );<a name="line.401"></a>
<span class="sourceLineNo">402</span>            projectVersionMetadataModel_key.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.402"></a>
<span class="sourceLineNo">403</span>            mailingListCf.addColumnDefinition( projectVersionMetadataModel_key );<a name="line.403"></a>
<span class="sourceLineNo">404</span><a name="line.404"></a>
<span class="sourceLineNo">405</span>            cfds.add( mailingListCf );<a name="line.405"></a>
<span class="sourceLineNo">406</span><a name="line.406"></a>
<span class="sourceLineNo">407</span>            // creating indexes for cql query<a name="line.407"></a>
<span class="sourceLineNo">408</span><a name="line.408"></a>
<span class="sourceLineNo">409</span>        }<a name="line.409"></a>
<span class="sourceLineNo">410</span><a name="line.410"></a>
<span class="sourceLineNo">411</span>        // license table<a name="line.411"></a>
<span class="sourceLineNo">412</span>        {<a name="line.412"></a>
<span class="sourceLineNo">413</span>            final ColumnFamilyDefinition licenseCf =<a name="line.413"></a>
<span class="sourceLineNo">414</span>                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //<a name="line.414"></a>
<span class="sourceLineNo">415</span>                                                       getLicenseFamilyName(), //<a name="line.415"></a>
<span class="sourceLineNo">416</span>                                                       ComparatorType.UTF8TYPE );<a name="line.416"></a>
<span class="sourceLineNo">417</span><a name="line.417"></a>
<span class="sourceLineNo">418</span>            BasicColumnDefinition projectVersionMetadataModel_key = new BasicColumnDefinition();<a name="line.418"></a>
<span class="sourceLineNo">419</span>            projectVersionMetadataModel_key.setName( StringSerializer.get().toByteBuffer( "projectVersionMetadataModel.key" ) );<a name="line.419"></a>
<span class="sourceLineNo">420</span>            projectVersionMetadataModel_key.setIndexName( "projectVersionMetadataModel_key" );<a name="line.420"></a>
<span class="sourceLineNo">421</span>            projectVersionMetadataModel_key.setIndexType( ColumnIndexType.KEYS );<a name="line.421"></a>
<span class="sourceLineNo">422</span>            projectVersionMetadataModel_key.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.422"></a>
<span class="sourceLineNo">423</span>            licenseCf.addColumnDefinition( projectVersionMetadataModel_key );<a name="line.423"></a>
<span class="sourceLineNo">424</span><a name="line.424"></a>
<span class="sourceLineNo">425</span>            cfds.add( licenseCf );<a name="line.425"></a>
<span class="sourceLineNo">426</span><a name="line.426"></a>
<span class="sourceLineNo">427</span>            // creating indexes for cql query<a name="line.427"></a>
<span class="sourceLineNo">428</span><a name="line.428"></a>
<span class="sourceLineNo">429</span>        }<a name="line.429"></a>
<span class="sourceLineNo">430</span><a name="line.430"></a>
<span class="sourceLineNo">431</span>        // dependency table<a name="line.431"></a>
<span class="sourceLineNo">432</span>        {<a name="line.432"></a>
<span class="sourceLineNo">433</span>            final ColumnFamilyDefinition dependencyCf =<a name="line.433"></a>
<span class="sourceLineNo">434</span>                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //<a name="line.434"></a>
<span class="sourceLineNo">435</span>                                                       getDependencyFamilyName(), //<a name="line.435"></a>
<span class="sourceLineNo">436</span>                                                       ComparatorType.UTF8TYPE );<a name="line.436"></a>
<span class="sourceLineNo">437</span>            cfds.add( dependencyCf );<a name="line.437"></a>
<span class="sourceLineNo">438</span><a name="line.438"></a>
<span class="sourceLineNo">439</span>            // creating indexes for cql query<a name="line.439"></a>
<span class="sourceLineNo">440</span><a name="line.440"></a>
<span class="sourceLineNo">441</span>            BasicColumnDefinition groupIdColumn = new BasicColumnDefinition();<a name="line.441"></a>
<span class="sourceLineNo">442</span>            groupIdColumn.setName( StringSerializer.get().toByteBuffer( GROUP_ID.toString() ) );<a name="line.442"></a>
<span class="sourceLineNo">443</span>            groupIdColumn.setIndexName( "groupIdIdx" );<a name="line.443"></a>
<span class="sourceLineNo">444</span>            groupIdColumn.setIndexType( ColumnIndexType.KEYS );<a name="line.444"></a>
<span class="sourceLineNo">445</span>            groupIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.445"></a>
<span class="sourceLineNo">446</span>            dependencyCf.addColumnDefinition( groupIdColumn );<a name="line.446"></a>
<span class="sourceLineNo">447</span><a name="line.447"></a>
<span class="sourceLineNo">448</span>            BasicColumnDefinition projectVersionMetadataModel_key = new BasicColumnDefinition();<a name="line.448"></a>
<span class="sourceLineNo">449</span>            projectVersionMetadataModel_key.setName( StringSerializer.get().toByteBuffer( "projectVersionMetadataModel.key" ) );<a name="line.449"></a>
<span class="sourceLineNo">450</span>            projectVersionMetadataModel_key.setIndexName( "projectVersionMetadataModel_key" );<a name="line.450"></a>
<span class="sourceLineNo">451</span>            projectVersionMetadataModel_key.setIndexType( ColumnIndexType.KEYS );<a name="line.451"></a>
<span class="sourceLineNo">452</span>            projectVersionMetadataModel_key.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );<a name="line.452"></a>
<span class="sourceLineNo">453</span>            dependencyCf.addColumnDefinition( projectVersionMetadataModel_key );<a name="line.453"></a>
<span class="sourceLineNo">454</span><a name="line.454"></a>
<span class="sourceLineNo">455</span>        }<a name="line.455"></a>
<span class="sourceLineNo">456</span><a name="line.456"></a>
<span class="sourceLineNo">457</span>        // TODO take care of update new table!!<a name="line.457"></a>
<span class="sourceLineNo">458</span>        { // ensure keyspace exists, here if the keyspace doesn't exist we suppose nothing exist<a name="line.458"></a>
<span class="sourceLineNo">459</span>            if ( cluster.describeKeyspace( keyspaceName ) == null )<a name="line.459"></a>
<span class="sourceLineNo">460</span>            {<a name="line.460"></a>
<span class="sourceLineNo">461</span>                logger.info( "Creating Archiva Cassandra '" + keyspaceName + "' keyspace." );<a name="line.461"></a>
<span class="sourceLineNo">462</span>                cluster.addKeyspace( HFactory.createKeyspaceDefinition( keyspaceName, //<a name="line.462"></a>
<span class="sourceLineNo">463</span>                                                                        ThriftKsDef.DEF_STRATEGY_CLASS, //<a name="line.463"></a>
<span class="sourceLineNo">464</span>                                                                        replicationFactor, //<a name="line.464"></a>
<span class="sourceLineNo">465</span>                                                                        cfds )<a name="line.465"></a>
<span class="sourceLineNo">466</span>                );<a name="line.466"></a>
<span class="sourceLineNo">467</span>            }<a name="line.467"></a>
<span class="sourceLineNo">468</span>        }<a name="line.468"></a>
<span class="sourceLineNo">469</span><a name="line.469"></a>
<span class="sourceLineNo">470</span>    }<a name="line.470"></a>
<span class="sourceLineNo">471</span><a name="line.471"></a>
<span class="sourceLineNo">472</span>    @Override<a name="line.472"></a>
<span class="sourceLineNo">473</span>    public void start()<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><a name="line.476"></a>
<span class="sourceLineNo">477</span>    @PreDestroy<a name="line.477"></a>
<span class="sourceLineNo">478</span>    @Override<a name="line.478"></a>
<span class="sourceLineNo">479</span>    public void shutdown()<a name="line.479"></a>
<span class="sourceLineNo">480</span>    {<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>    @Override<a name="line.484"></a>
<span class="sourceLineNo">485</span>    public boolean started()<a name="line.485"></a>
<span class="sourceLineNo">486</span>    {<a name="line.486"></a>
<span class="sourceLineNo">487</span>        return started;<a name="line.487"></a>
<span class="sourceLineNo">488</span>    }<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>    @Override<a name="line.491"></a>
<span class="sourceLineNo">492</span>    public Keyspace getKeyspace()<a name="line.492"></a>
<span class="sourceLineNo">493</span>    {<a name="line.493"></a>
<span class="sourceLineNo">494</span>        return keyspace;<a name="line.494"></a>
<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
<span class="sourceLineNo">496</span><a name="line.496"></a>
<span class="sourceLineNo">497</span>    @Override<a name="line.497"></a>
<span class="sourceLineNo">498</span>    public Cluster getCluster()<a name="line.498"></a>
<span class="sourceLineNo">499</span>    {<a name="line.499"></a>
<span class="sourceLineNo">500</span>        return cluster;<a name="line.500"></a>
<span class="sourceLineNo">501</span>    }<a name="line.501"></a>
<span class="sourceLineNo">502</span><a name="line.502"></a>
<span class="sourceLineNo">503</span>    @Override<a name="line.503"></a>
<span class="sourceLineNo">504</span>    public String getRepositoryFamilyName()<a name="line.504"></a>
<span class="sourceLineNo">505</span>    {<a name="line.505"></a>
<span class="sourceLineNo">506</span>        return repositoryFamilyName;<a name="line.506"></a>
<span class="sourceLineNo">507</span>    }<a name="line.507"></a>
<span class="sourceLineNo">508</span><a name="line.508"></a>
<span class="sourceLineNo">509</span>    @Override<a name="line.509"></a>
<span class="sourceLineNo">510</span>    public String getNamespaceFamilyName()<a name="line.510"></a>
<span class="sourceLineNo">511</span>    {<a name="line.511"></a>
<span class="sourceLineNo">512</span>        return namespaceFamilyName;<a name="line.512"></a>
<span class="sourceLineNo">513</span>    }<a name="line.513"></a>
<span class="sourceLineNo">514</span><a name="line.514"></a>
<span class="sourceLineNo">515</span>    @Override<a name="line.515"></a>
<span class="sourceLineNo">516</span>    public String getProjectFamilyName()<a name="line.516"></a>
<span class="sourceLineNo">517</span>    {<a name="line.517"></a>
<span class="sourceLineNo">518</span>        return projectFamilyName;<a name="line.518"></a>
<span class="sourceLineNo">519</span>    }<a name="line.519"></a>
<span class="sourceLineNo">520</span><a name="line.520"></a>
<span class="sourceLineNo">521</span>    @Override<a name="line.521"></a>
<span class="sourceLineNo">522</span>    public String getProjectVersionMetadataFamilyName()<a name="line.522"></a>
<span class="sourceLineNo">523</span>    {<a name="line.523"></a>
<span class="sourceLineNo">524</span>        return projectVersionMetadataFamilyName;<a name="line.524"></a>
<span class="sourceLineNo">525</span>    }<a name="line.525"></a>
<span class="sourceLineNo">526</span><a name="line.526"></a>
<span class="sourceLineNo">527</span>    @Override<a name="line.527"></a>
<span class="sourceLineNo">528</span>    public String getArtifactMetadataFamilyName()<a name="line.528"></a>
<span class="sourceLineNo">529</span>    {<a name="line.529"></a>
<span class="sourceLineNo">530</span>        return artifactMetadataFamilyName;<a name="line.530"></a>
<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
<span class="sourceLineNo">532</span><a name="line.532"></a>
<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
<span class="sourceLineNo">534</span>    public String getMetadataFacetFamilyName()<a name="line.534"></a>
<span class="sourceLineNo">535</span>    {<a name="line.535"></a>
<span class="sourceLineNo">536</span>        return metadataFacetFamilyName;<a name="line.536"></a>
<span class="sourceLineNo">537</span>    }<a name="line.537"></a>
<span class="sourceLineNo">538</span><a name="line.538"></a>
<span class="sourceLineNo">539</span>    @Override<a name="line.539"></a>
<span class="sourceLineNo">540</span>    public String getMailingListFamilyName()<a name="line.540"></a>
<span class="sourceLineNo">541</span>    {<a name="line.541"></a>
<span class="sourceLineNo">542</span>        return mailingListFamilyName;<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>    @Override<a name="line.545"></a>
<span class="sourceLineNo">546</span>    public String getLicenseFamilyName()<a name="line.546"></a>
<span class="sourceLineNo">547</span>    {<a name="line.547"></a>
<span class="sourceLineNo">548</span>        return licenseFamilyName;<a name="line.548"></a>
<span class="sourceLineNo">549</span>    }<a name="line.549"></a>
<span class="sourceLineNo">550</span><a name="line.550"></a>
<span class="sourceLineNo">551</span>    @Override<a name="line.551"></a>
<span class="sourceLineNo">552</span>    public String getDependencyFamilyName()<a name="line.552"></a>
<span class="sourceLineNo">553</span>    {<a name="line.553"></a>
<span class="sourceLineNo">554</span>        return dependencyFamilyName;<a name="line.554"></a>
<span class="sourceLineNo">555</span>    }<a name="line.555"></a>
<span class="sourceLineNo">556</span>}<a name="line.556"></a>




























































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