]> source.dussan.org Git - archiva.git/blob
b4c03d93b1dc3a275162c1ff261fc4d4d63e3363
[archiva.git] /
1 package org.apache.archiva.metadata.repository.cassandra;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import me.prettyprint.cassandra.serializers.LongSerializer;
23 import me.prettyprint.cassandra.serializers.SerializerTypeInferer;
24 import me.prettyprint.cassandra.serializers.StringSerializer;
25 import me.prettyprint.cassandra.service.template.ColumnFamilyUpdater;
26 import me.prettyprint.hector.api.Serializer;
27 import me.prettyprint.hector.api.beans.ColumnSlice;
28 import me.prettyprint.hector.api.beans.HColumn;
29 import me.prettyprint.hector.api.factory.HFactory;
30 import me.prettyprint.hector.api.mutation.Mutator;
31 import org.apache.commons.lang.StringUtils;
32
33 /**
34  * @author Olivier Lamy
35  * @since 2.0.0
36  */
37 public class CassandraUtils
38 {
39
40     private static final String EMPTY_VALUE = "";
41
42     public static final String SEPARATOR = "->";
43
44     public static String generateKey( final String... bases )
45     {
46         final StringBuilder builder = new StringBuilder();
47         if ( bases == null || bases.length == 0 )
48         {
49             return builder.toString();
50         }
51
52         for ( final String s : bases )
53         {
54             if ( s != null )
55             {
56                 builder.append( s );
57             }
58             else
59             {
60                 builder.append( EMPTY_VALUE );
61             }
62             builder.append( SEPARATOR );
63         }
64         if ( builder.length() > 0 )
65         {
66             builder.setLength( builder.length() - SEPARATOR.length() );
67         }
68         return builder.toString();
69     }
70
71     public static <A, B> HColumn<A, B> column( final A name, final B value )
72     {
73
74         return HFactory.createColumn( name, //
75                                       value, //
76                                       (Serializer<A>) SerializerTypeInferer.getSerializer( name ), //
77                                       (Serializer<B>) SerializerTypeInferer.getSerializer( value ) );
78     }
79
80     public static String getStringValue( ColumnSlice<String, String> columnSlice, String columnName )
81     {
82         if ( StringUtils.isEmpty( columnName ) )
83         {
84             return null;
85         }
86
87         HColumn<String, String> hColumn = columnSlice.getColumnByName( columnName );
88         return hColumn == null ? null : hColumn.getValue();
89     }
90
91     public static Long getLongValue( ColumnSlice<String, Long> columnSlice, String columnName )
92     {
93         if ( StringUtils.isEmpty( columnName ) )
94         {
95             return null;
96         }
97
98         HColumn<String, Long> hColumn = columnSlice.getColumnByName( columnName );
99         return hColumn == null ? null : hColumn.getValue();
100     }
101
102     public static String getAsStringValue( ColumnSlice<String, Long> columnSlice, String columnName )
103     {
104         StringSerializer ss = StringSerializer.get();
105         if ( StringUtils.isEmpty( columnName ) )
106         {
107             return null;
108         }
109
110         HColumn<String, Long> hColumn = columnSlice.getColumnByName( columnName );
111         return hColumn == null ? null : ss.fromByteBuffer( hColumn.getValueBytes() );
112     }
113
114     public static Long getAsLongValue( ColumnSlice<String, String> columnSlice, String columnName )
115     {
116         LongSerializer ls = LongSerializer.get();
117         if ( StringUtils.isEmpty( columnName ) )
118         {
119             return null;
120         }
121
122         HColumn<String, String> hColumn = columnSlice.getColumnByName( columnName );
123         return hColumn == null ? null : ls.fromByteBuffer( hColumn.getValueBytes() );
124     }
125
126     public static void addInsertion( Mutator<String> mutator, String key, String columnFamily, String columnName,
127                                      String value )
128     {
129         if ( value != null )
130         {
131             mutator.addInsertion( key, columnFamily, column( columnName, value ) );
132         }
133     }
134
135     /**
136      * null check on the value to prevent {@link java.lang.IllegalArgumentException}
137      * @param updater
138      * @param columnName
139      * @param value
140      */
141     public static void addUpdateStringValue(ColumnFamilyUpdater<String,String> updater, String columnName, String value )
142     {
143         if (value == null)
144         {
145             return;
146         }
147         updater.setString( columnName, value );
148
149     }
150
151     private CassandraUtils()
152     {
153         // no-op
154     }
155
156 }