]> source.dussan.org Git - archiva.git/blob
ac72f6217f28c51eda76bb1bd22fe717c5c3cda1
[archiva.git] /
1 package org.apache.archiva.repository.content.base;
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 org.apache.archiva.repository.content.Namespace;
23 import org.apache.archiva.repository.content.Project;
24 import org.apache.archiva.repository.content.base.builder.ProjectOptBuilder;
25 import org.apache.archiva.repository.content.base.builder.ProjectWithIdBuilder;
26 import org.apache.archiva.repository.content.base.builder.WithNamespaceObjectBuilder;
27 import org.apache.archiva.repository.storage.StorageAsset;
28 import org.apache.commons.lang3.StringUtils;
29
30 /**
31  * Immutable class, that represents a project.
32  * <p>
33  * The namespace and id are required attributes for each instance.
34  * <p>
35  * Two project instances are equal if the id, and the namespace are equal and if the base attributes
36  * repository and asset match.
37  *
38  * @author Martin Stockhammer <martin_s@apache.org>
39  * @since 3.0
40  */
41 public class ArchivaProject extends ArchivaContentItem implements Project
42 {
43     private Namespace namespace;
44     private String id;
45
46     // Setting all setters to private. Builder is the way to go.
47     private ArchivaProject( )
48     {
49
50     }
51
52
53     /**
54      * Creates the builder for creating new archiva project instances.
55      * You have to set all required attributes before you can call the build() method.
56      *
57      * @param storageAsset the asset
58      * @return a builder instance
59      */
60     public static WithNamespaceObjectBuilder withAsset( StorageAsset storageAsset )
61     {
62         return new Builder( ).withAsset( storageAsset );
63     }
64
65     @Override
66     public Namespace getNamespace( )
67     {
68         return this.namespace;
69     }
70
71     @Override
72     public String getId( )
73     {
74         return this.id;
75     }
76
77
78     @Override
79     public boolean equals( Object o )
80     {
81         if ( this == o ) return true;
82         if ( o == null || getClass( ) != o.getClass( ) ) return false;
83         if ( !super.equals( o ) ) return false;
84
85         ArchivaProject that = (ArchivaProject) o;
86
87         if ( !namespace.equals( that.namespace ) ) return false;
88         return id.equals( that.id );
89     }
90
91     @Override
92     public int hashCode( )
93     {
94         int result = super.hashCode( );
95         result = 31 * result + namespace.hashCode( );
96         result = 31 * result + id.hashCode( );
97         return result;
98     }
99
100     @Override
101     public String toString( )
102     {
103         return id + ", namespace="+namespace.toString();
104     }
105
106     /*
107      * Builder class
108      */
109     public static final class Builder
110         extends ContentItemBuilder<ArchivaProject, ProjectOptBuilder, WithNamespaceObjectBuilder>
111         implements ProjectOptBuilder, ProjectWithIdBuilder, WithNamespaceObjectBuilder
112     {
113         private Builder( )
114         {
115             super( new ArchivaProject( ) );
116         }
117
118
119         @Override
120         protected ProjectOptBuilder getOptBuilder( )
121         {
122             return this;
123         }
124
125         @Override
126         protected WithNamespaceObjectBuilder getNextBuilder( )
127         {
128             return this;
129         }
130
131         @Override
132         public ProjectOptBuilder withId( String id )
133         {
134             if ( StringUtils.isEmpty( id ) )
135             {
136                 throw new IllegalArgumentException( "Null or empty value not allowed for id" );
137             }
138             item.id = id;
139             return this;
140         }
141
142         @Override
143         public ProjectWithIdBuilder withNamespace( Namespace namespace )
144         {
145             if ( namespace == null )
146             {
147                 throw new IllegalArgumentException( "Null value not allowed for namespace" );
148             }
149             item.namespace = namespace;
150             super.setRepository( namespace.getRepository( ) );
151             return this;
152         }
153
154         @Override
155         public ArchivaProject build( )
156         {
157             super.build( );
158             if ( item.namespace == null )
159             {
160                 throw new IllegalArgumentException( "Namespace may not be null" );
161             }
162             return item;
163         }
164     }
165
166
167 }