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