]> source.dussan.org Git - archiva.git/blob
0d67d5da31823566783d36f9fc017ca5e5c94a4d
[archiva.git] /
1 package org.apache.archiva.repository;
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.cronutils.model.CronType;
23 import com.cronutils.model.definition.CronDefinition;
24 import com.cronutils.model.definition.CronDefinitionBuilder;
25 import com.cronutils.parser.CronParser;
26 import org.apache.archiva.repository.features.RepositoryFeature;
27
28 import java.net.URI;
29 import java.util.ArrayList;
30 import java.util.Collections;
31 import java.util.HashMap;
32 import java.util.HashSet;
33 import java.util.List;
34 import java.util.Locale;
35 import java.util.Map;
36 import java.util.Set;
37
38 /**
39  * Implementation of a repository with the necessary fields for a bare repository.
40  * No features are provided. Capabilities and features must be implemented by concrete classes.
41  *
42  */
43 public abstract class AbstractRepository implements EditableRepository
44 {
45
46     private final RepositoryType type;
47     private final String id;
48     private Map<Locale, String> names = new HashMap<>(  );
49     private Map<Locale, String> descriptions = new HashMap<>(  );
50
51     private Locale primaryLocale = new Locale("en_US");
52     private URI location;
53     private Set<URI> failoverLocations = new HashSet<>(  );
54     private Set<URI> uFailoverLocations = Collections.unmodifiableSet( failoverLocations );
55     private boolean scanned = true;
56     String schedulingDefinition = "0 0 02 * *";
57     private boolean index;
58     private URI indexPath;
59     private String layout;
60     private Set<ReleaseScheme> activeReleaseSchemes = new HashSet<>(  );
61     private Set<ReleaseScheme> uActiveReleaseSchemes = Collections.unmodifiableSet( activeReleaseSchemes );
62     public static final CronDefinition CRON_DEFINITION = CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ);
63
64     public AbstractRepository(RepositoryType type, String id, String name) {
65         this.id = id;
66         this.names.put( primaryLocale, name);
67         this.type = type;
68     }
69
70     public AbstractRepository(Locale primaryLocale, RepositoryType type, String id, String name) {
71         setPrimaryLocale( primaryLocale );
72         this.id = id;
73         this.names.put( primaryLocale, name);
74         this.type = type;
75     }
76
77     protected void setPrimaryLocale(Locale locale) {
78         this.primaryLocale = locale;
79     }
80
81     @Override
82     public String getId( )
83     {
84         return id;
85     }
86
87     @Override
88     public String getName( )
89     {
90         return getName( primaryLocale );
91     }
92
93     @Override
94     public String getName( Locale locale )
95     {
96         return names.get(locale);
97     }
98
99     @Override
100     public String getDescription( )
101     {
102         return getDescription( primaryLocale );
103     }
104
105     @Override
106     public String getDescription( Locale locale )
107     {
108         return descriptions.get(primaryLocale);
109     }
110
111     @Override
112     public RepositoryType getType( )
113     {
114         return type;
115     }
116
117     @Override
118     public URI getLocation( )
119     {
120         return location;
121     }
122
123     @Override
124     public Set<URI> getFailoverLocations( )
125     {
126         return uFailoverLocations;
127     }
128
129     @Override
130     public boolean isScanned( )
131     {
132         return scanned;
133     }
134
135     @Override
136     public String getSchedulingDefinition( )
137     {
138         return schedulingDefinition;
139     }
140
141     @Override
142     public boolean hasIndex( )
143     {
144         return index;
145     }
146
147     @Override
148     public URI getIndexPath( )
149     {
150         return indexPath;
151     }
152
153     @Override
154     public String getLayout( )
155     {
156         return layout;
157     }
158
159     @Override
160     public Set<ReleaseScheme> getActiveReleaseSchemes( )
161     {
162         return uActiveReleaseSchemes;
163     }
164
165     @Override
166     public abstract RepositoryCapabilities getCapabilities( );
167
168     @Override
169     public <T extends RepositoryFeature<T>> RepositoryFeature<T> getFeature( Class<T> clazz ) throws UnsupportedFeatureException
170     {
171         throw new UnsupportedFeatureException( "Feature "+clazz+" not supported"  );
172     }
173
174     @Override
175     public <T extends RepositoryFeature<T>> boolean supportsFeature( Class<T> clazz )
176     {
177         return false;
178     }
179
180     @Override
181     public Locale getPrimaryLocale( )
182     {
183         return primaryLocale;
184     }
185
186     @Override
187     public void setName( Locale locale, String name )
188     {
189         names.put(locale, name);
190     }
191
192     @Override
193     public void setDescription( Locale locale, String description )
194     {
195         descriptions.put(locale, description);
196     }
197
198     @Override
199     public void setLocation( URI location )
200     {
201         this.location = location;
202     }
203
204     @Override
205     public void addFailoverLocation( URI location )
206     {
207         this.failoverLocations.add(location);
208     }
209
210     @Override
211     public void removeFailoverLocation( URI location )
212     {
213         this.failoverLocations.remove( location );
214     }
215
216     @Override
217     public void clearFailoverLocations( )
218     {
219         this.failoverLocations.clear();
220     }
221
222     @Override
223     public void setScanned( boolean scanned )
224     {
225         this.scanned = scanned;
226     }
227
228     @Override
229     public void setIndex( boolean hasIndex )
230     {
231         this.index = hasIndex;
232     }
233
234     @Override
235     public void setIndexPath( URI indexPath )
236     {
237         this.indexPath = indexPath;
238     }
239
240     @Override
241     public void setLayout( String layout )
242     {
243         this.layout = layout;
244     }
245
246     @Override
247     public void addActiveReleaseScheme( ReleaseScheme scheme )
248     {
249         this.activeReleaseSchemes.add(scheme);
250     }
251
252     @Override
253     public void removeActiveReleaseScheme( ReleaseScheme scheme )
254     {
255         this.activeReleaseSchemes.remove(scheme);
256     }
257
258     @Override
259     public void clearActiveReleaseSchemes( )
260     {
261         this.activeReleaseSchemes.clear();
262     }
263
264     @Override
265     public void setSchedulingDefinition(String cronExpression) {
266         CronParser parser = new CronParser(CRON_DEFINITION);
267         parser.parse(cronExpression).validate();
268         this.schedulingDefinition = cronExpression;
269     }
270 }