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