]> source.dussan.org Git - archiva.git/blob
fbb7d95f9c89978ee82cd7f419c608477466b8a9
[archiva.git] /
1 package org.apache.archiva.metadata.repository.cassandra.model;
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 com.netflix.astyanax.entitystore.Serializer;
23 import com.netflix.astyanax.serializers.LongSerializer;
24 import org.apache.archiva.metadata.repository.cassandra.CassandraUtils;
25
26 import javax.persistence.Column;
27 import javax.persistence.Entity;
28 import javax.persistence.Id;
29 import java.io.Serializable;
30 import java.util.Date;
31
32 /**
33  * Cassandra storage model for {@link org.apache.archiva.metadata.model.ArtifactMetadata}
34  *
35  * @author Olivier Lamy
36  */
37 @Entity
38 public class ArtifactMetadataModel
39     implements Serializable
40 {
41
42     // repositoryId + namespaceId + project + projectVersion + id
43     @Id
44     @Serializer( HugeStringSerializer.class )
45     private String artifactMetadataModelId;
46
47     @Column( name = "id" )
48     @Serializer( HugeStringSerializer.class )
49     private String id;
50
51     @Column( name = "repositoryId" )
52     @Serializer( HugeStringSerializer.class )
53     private String repositoryId;
54
55     @Column( name = "namespace" )
56     @Serializer( HugeStringSerializer.class )
57     private String namespace;
58
59     @Column( name = "project" )
60     @Serializer( HugeStringSerializer.class )
61     private String project;
62
63     @Column( name = "projectVersion" )
64     @Serializer( HugeStringSerializer.class )
65     private String projectVersion;
66
67     @Column( name = "version" )
68     @Serializer( HugeStringSerializer.class )
69     private String version;
70
71     @Column( name = "fileLastModified" )
72     @Serializer( LongSerializer.class )
73     private long fileLastModified;
74
75     @Column( name = "size" )
76     @Serializer( LongSerializer.class )
77     private long size;
78
79     @Column( name = "md5" )
80     @Serializer( HugeStringSerializer.class )
81     private String md5;
82
83     @Column( name = "sha1" )
84     @Serializer( HugeStringSerializer.class )
85     private String sha1;
86
87     @Column( name = "whenGathered" )
88     @Serializer( LongSerializer.class )
89     private long whenGathered;
90
91     public ArtifactMetadataModel()
92     {
93         // no op
94     }
95
96     public ArtifactMetadataModel( String artifactMetadataModelId, String id, String repositoryId, String namespace,
97                                   String project, String projectVersion, String version, Date fileLastModified,
98                                   long size, String md5, String sha1, Date whenGathered )
99     {
100         this.artifactMetadataModelId = artifactMetadataModelId;
101         this.id = id;
102         this.repositoryId = repositoryId;
103         this.namespace = namespace;
104         this.project = project;
105         this.projectVersion = projectVersion;
106         this.version = version;
107         this.fileLastModified = ( fileLastModified != null ? fileLastModified.getTime() : 0 );
108         this.size = size;
109         this.md5 = md5;
110         this.sha1 = sha1;
111         this.whenGathered = whenGathered != null ? whenGathered.getTime() : new Date().getTime();
112     }
113
114     public String getArtifactMetadataModelId()
115     {
116         return artifactMetadataModelId;
117     }
118
119     public void setArtifactMetadataModelId( String artifactMetadataModelId )
120     {
121         this.artifactMetadataModelId = artifactMetadataModelId;
122     }
123
124     public String getId()
125     {
126         return id;
127     }
128
129     public void setId( String id )
130     {
131         this.id = id;
132     }
133
134     public String getRepositoryId()
135     {
136         return repositoryId;
137     }
138
139     public void setRepositoryId( String repositoryId )
140     {
141         this.repositoryId = repositoryId;
142     }
143
144     public String getNamespace()
145     {
146         return namespace;
147     }
148
149     public void setNamespace( String namespace )
150     {
151         this.namespace = namespace;
152     }
153
154     public String getProject()
155     {
156         return project;
157     }
158
159     public void setProject( String project )
160     {
161         this.project = project;
162     }
163
164     public String getProjectVersion()
165     {
166         return projectVersion;
167     }
168
169     public void setProjectVersion( String projectVersion )
170     {
171         this.projectVersion = projectVersion;
172     }
173
174     public String getVersion()
175     {
176         return version;
177     }
178
179     public void setVersion( String version )
180     {
181         this.version = version;
182     }
183
184     public long getFileLastModified()
185     {
186         return fileLastModified;
187     }
188
189     public void setFileLastModified( long fileLastModified )
190     {
191         this.fileLastModified = fileLastModified;
192     }
193
194     public long getSize()
195     {
196         return size;
197     }
198
199     public void setSize( long size )
200     {
201         this.size = size;
202     }
203
204     public String getMd5()
205     {
206         return md5;
207     }
208
209     public void setMd5( String md5 )
210     {
211         this.md5 = md5;
212     }
213
214     public String getSha1()
215     {
216         return sha1;
217     }
218
219     public void setSha1( String sha1 )
220     {
221         this.sha1 = sha1;
222     }
223
224     public Date getWhenGathered()
225     {
226         return new Date( whenGathered );
227     }
228
229     public void setWhenGathered( long whenGathered )
230     {
231         this.whenGathered = whenGathered;
232     }
233
234     @Override
235     public boolean equals( Object o )
236     {
237         if ( this == o )
238         {
239             return true;
240         }
241         if ( o == null || getClass() != o.getClass() )
242         {
243             return false;
244         }
245
246         ArtifactMetadataModel that = (ArtifactMetadataModel) o;
247
248         if ( !artifactMetadataModelId.equals( that.artifactMetadataModelId ) )
249         {
250             return false;
251         }
252
253         return true;
254     }
255
256     @Override
257     public int hashCode()
258     {
259         return artifactMetadataModelId.hashCode();
260     }
261
262     @Override
263     public String toString()
264     {
265         final StringBuilder sb = new StringBuilder( "ArtifactMetadataModel{" );
266         sb.append( "artifactMetadataModelId='" ).append( artifactMetadataModelId ).append( '\'' );
267         sb.append( ", id='" ).append( id ).append( '\'' );
268         sb.append( ", repositoryId='" ).append( repositoryId ).append( '\'' );
269         sb.append( ", namespace='" ).append( namespace ).append( '\'' );
270         sb.append( ", project='" ).append( project ).append( '\'' );
271         sb.append( ", projectVersion='" ).append( projectVersion ).append( '\'' );
272         sb.append( ", version='" ).append( version ).append( '\'' );
273         sb.append( ", fileLastModified=" ).append( fileLastModified );
274         sb.append( ", size=" ).append( size );
275         sb.append( ", md5='" ).append( md5 ).append( '\'' );
276         sb.append( ", sha1='" ).append( sha1 ).append( '\'' );
277         sb.append( ", whenGathered=" ).append( whenGathered );
278         sb.append( '}' );
279         return sb.toString();
280     }
281
282     public static class KeyBuilder
283     {
284
285         private String project;
286
287         private String id;
288
289         private String namespaceId;
290
291         private String repositoryId;
292
293         private String projectVersion;
294
295         public KeyBuilder()
296         {
297
298         }
299
300         public KeyBuilder withId( String id )
301         {
302             this.id = id;
303             return this;
304         }
305
306
307         public KeyBuilder withNamespace( Namespace namespace )
308         {
309             this.namespaceId = namespace.getName();
310             this.repositoryId = namespace.getRepository().getId();
311             return this;
312         }
313
314         public KeyBuilder withNamespace( String namespaceId )
315         {
316             this.namespaceId = namespaceId;
317             return this;
318         }
319
320         public KeyBuilder withProject( String project )
321         {
322             this.project = project;
323             return this;
324         }
325
326         public KeyBuilder withProjectVersion( String projectVersion )
327         {
328             this.projectVersion = projectVersion;
329             return this;
330         }
331
332         public KeyBuilder withRepositoryId( String repositoryId )
333         {
334             this.repositoryId = repositoryId;
335             return this;
336         }
337
338         public String build()
339         {
340             //repositoryId + namespaceId + project + projectVersion + id
341             // FIXME add some controls
342
343             String str =
344                 CassandraUtils.generateKey( this.repositoryId, this.namespaceId, this.project, this.projectVersion,
345                                             this.id );
346
347             //return Long.toString( str.hashCode() );
348             return str;
349         }
350     }
351
352 }