]> source.dussan.org Git - archiva.git/blob
e52071970f116bcf5467efd256cc94112abe6b2c
[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.ManagedRepository;
23 import org.apache.archiva.repository.ManagedRepositoryContent;
24 import org.apache.archiva.repository.RepositoryContent;
25 import org.apache.archiva.repository.content.Project;
26 import org.apache.archiva.repository.storage.StorageAsset;
27 import org.apache.commons.lang3.StringUtils;
28
29 /**
30  * Immutable class, that represents a project.
31  */
32 public class ArchivaProject extends ArchivaContentItem implements Project
33 {
34     private String namespace;
35     private String id;
36     private RepositoryContent repositoryContent;
37     private StorageAsset asset;
38
39     // Setting all setters to private. Builder is the way to go.
40     private ArchivaProject() {
41
42     }
43
44
45     /**
46      * Creates the builder that allows to create a new instance.
47      * @param id the project id, must not be <code>null</code>
48      * @return a builder instance
49      */
50     public static Builder withId( String id) {
51         return new Builder( ).withId( id );
52     }
53
54
55     @Override
56     public String getNamespace( )
57     {
58         return this.namespace;
59     }
60
61     @Override
62     public String getId( )
63     {
64         return this.id;
65     }
66
67     @Override
68     public RepositoryContent getRepository( )
69     {
70         return this.repositoryContent;
71     }
72
73     @Override
74     public StorageAsset getAsset( )
75     {
76         return asset;
77     }
78
79
80
81     /*
82      * Builder interface chaining is used to restrict mandatory attributes
83      * This interface is for the optional arguments.
84      */
85     public interface OptBuilder {
86
87         OptBuilder withAsset( StorageAsset asset );
88
89         OptBuilder withNamespace( String namespace);
90
91         OptBuilder withAttribute( String key, String value );
92
93     }
94     /*
95      * Builder classes for instantiation
96      */
97     public static final class Builder implements OptBuilder
98     {
99         final private ArchivaProject project = new ArchivaProject();
100
101         private Builder( )
102         {
103
104         }
105
106         private Builder withId(String id) {
107             if ( StringUtils.isEmpty( id ) ) {
108                 throw new IllegalArgumentException( "Null or empty value not allowed for id" );
109             }
110             project.id = id;
111             return this;
112         }
113
114
115         public OptBuilder withRepository( RepositoryContent repository ) {
116             project.repositoryContent = repository;
117             return this;
118         }
119
120         @Override
121         public OptBuilder withAsset( StorageAsset asset )
122         {
123             project.asset = asset;
124             return this;
125         }
126
127         public OptBuilder withNamespace( String namespace) {
128             if (namespace==null) {
129                 throw new IllegalArgumentException( "Null value not allowed for namespace" );
130             }
131             project.namespace = namespace;
132             return this;
133         }
134
135         public OptBuilder withAttribute( String key, String value) {
136             project.putAttribute( key, value );
137             return this;
138         }
139
140         ArchivaProject build() {
141             if (project.namespace==null) {
142                 project.namespace = "";
143             }
144             if (project.asset == null) {
145                 if (project.getRepository() instanceof ManagedRepositoryContent) {
146                     project.asset = (( ManagedRepositoryContent)project.getRepository( )).getRepository( ).getAsset( "" );
147                 }
148
149             }
150             return project;
151         }
152     }
153
154
155
156 }