]> source.dussan.org Git - archiva.git/blob
ad55d5c464c926248b88788941f2c082e1792cb8
[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 Set<URI> failoverLocations = new HashSet<>(  );
52     private Set<URI> uFailoverLocations = Collections.unmodifiableSet( failoverLocations );
53     private boolean scanned = true;
54     String schedulingDefinition = "0 0 02 * *";
55     private boolean index = true;
56     private String layout;
57     public static final CronDefinition CRON_DEFINITION = CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ);
58
59     public AbstractRepository(RepositoryType type, String id, String name) {
60         this.id = id;
61         this.names.put( primaryLocale, name);
62         this.type = type;
63     }
64
65     public AbstractRepository(Locale primaryLocale, RepositoryType type, String id, String name) {
66         setPrimaryLocale( primaryLocale );
67         this.id = id;
68         this.names.put( primaryLocale, name);
69         this.type = type;
70     }
71
72     protected void setPrimaryLocale(Locale locale) {
73         this.primaryLocale = locale;
74     }
75
76     @Override
77     public String getId( )
78     {
79         return id;
80     }
81
82     @Override
83     public String getName( )
84     {
85         return getName( primaryLocale );
86     }
87
88     @Override
89     public String getName( Locale locale )
90     {
91         return names.get(locale);
92     }
93
94     @Override
95     public String getDescription( )
96     {
97         return getDescription( primaryLocale );
98     }
99
100     @Override
101     public String getDescription( Locale locale )
102     {
103         return descriptions.get(primaryLocale);
104     }
105
106     @Override
107     public RepositoryType getType( )
108     {
109         return type;
110     }
111
112     @Override
113     public URI getLocation( )
114     {
115         return location;
116     }
117
118     @Override
119     public Set<URI> getFailoverLocations( )
120     {
121         return uFailoverLocations;
122     }
123
124     @Override
125     public boolean isScanned( )
126     {
127         return scanned;
128     }
129
130     @Override
131     public String getSchedulingDefinition( )
132     {
133         return schedulingDefinition;
134     }
135
136     @Override
137     public boolean hasIndex( )
138     {
139         return index;
140     }
141
142     @Override
143     public String getLayout( )
144     {
145         return layout;
146     }
147
148     @Override
149     public abstract RepositoryCapabilities getCapabilities( );
150
151     @Override
152     public <T extends RepositoryFeature<T>> RepositoryFeature<T> getFeature( Class<T> clazz ) throws UnsupportedFeatureException
153     {
154         throw new UnsupportedFeatureException( "Feature "+clazz+" not supported"  );
155     }
156
157     @Override
158     public <T extends RepositoryFeature<T>> boolean supportsFeature( Class<T> clazz )
159     {
160         return false;
161     }
162
163     @Override
164     public Locale getPrimaryLocale( )
165     {
166         return primaryLocale;
167     }
168
169     @Override
170     public void setName( Locale locale, String name )
171     {
172         names.put(locale, name);
173     }
174
175     @Override
176     public void setDescription( Locale locale, String description )
177     {
178         descriptions.put(locale, description);
179     }
180
181     @Override
182     public void setLocation( URI location )
183     {
184         this.location = location;
185     }
186
187     @Override
188     public void addFailoverLocation( URI location )
189     {
190         this.failoverLocations.add(location);
191     }
192
193     @Override
194     public void removeFailoverLocation( URI location )
195     {
196         this.failoverLocations.remove( location );
197     }
198
199     @Override
200     public void clearFailoverLocations( )
201     {
202         this.failoverLocations.clear();
203     }
204
205     @Override
206     public void setScanned( boolean scanned )
207     {
208         this.scanned = scanned;
209     }
210
211     @Override
212     public void setIndex( boolean hasIndex )
213     {
214         this.index = hasIndex;
215     }
216
217     @Override
218     public void setLayout( String layout )
219     {
220         this.layout = layout;
221     }
222
223     @Override
224     public void setSchedulingDefinition(String cronExpression) {
225         CronParser parser = new CronParser(CRON_DEFINITION);
226         parser.parse(cronExpression).validate();
227         this.schedulingDefinition = cronExpression;
228     }
229 }