]> source.dussan.org Git - archiva.git/blob
3e508848d394312308bc0c5be275728924421fdc
[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 org.apache.archiva.repository.features.RepositoryFeature;
23
24 import java.net.URI;
25 import java.util.List;
26 import java.util.Locale;
27 import java.util.Set;
28
29 /**
30  *
31  * Base interface for repositories.
32  *
33  * Created by Martin Stockhammer on 21.09.17.
34  */
35 public interface Repository {
36
37     /**
38      * Return the identifier of the repository. Repository identifier should be unique at least
39      * for the same type.
40      * @return The identifier.
41      */
42     String getId();
43
44     /**
45      * This is the display name of the repository. This string is presented in the user interface.
46      *
47      * @return The display name of the repository
48      */
49     String getName();
50
51     /**
52      * Returns the name in the given locale.
53      * @param locale
54      * @return
55      */
56     String getName(Locale locale);
57
58     /**
59      * Returns a description of this repository.
60      * @return The description.
61      */
62     String getDescription();
63
64     /**
65      * Returns the description for the given locale.
66      * @param locale
67      * @return
68      */
69     String getDescription(Locale locale);
70
71     /**
72      * This identifies the type of repository. Archiva does only support certain types of repositories.
73      *
74      * @return A unique identifier for the repository type.
75      */
76     RepositoryType getType();
77
78
79     /**
80      * Returns the location of this repository. For local repositories this might be a file URI, for
81      * remote repositories a http URL or some very repository specific schemes.
82      * Each repository has only one unique location.
83      *
84      * @return The repository location.
85      */
86     URI getLocation();
87
88
89     /**
90      * A repository may allow additional locations that can be used, if the primary location is not available.
91      * @return
92      */
93     Set<URI> getFailoverLocations();
94
95     /**
96      * True, if this repository is scanned regularly.
97      */
98     boolean isScanned();
99
100     /**
101      * Returns the definition, when the repository jobs are executed.
102      * This must return a valid a cron string.
103      *
104      * @See http://www.quartz-scheduler.org/api/2.2.1/org/quartz/CronExpression.html
105      *
106      * @return
107      */
108     String getSchedulingDefinition();
109
110     /**
111      * Returns true, if this repository has a index available
112      * @return
113      */
114     boolean hasIndex();
115
116     /**
117      * Returns the path to the index parent folder. May be a HTTP URL or a file path.
118      * @return
119      */
120     URI getIndexPath();
121
122     /**
123      * Returns a layout definition. The returned string may be implementation specific and is not
124      * standardized.
125      *
126      * @return
127      */
128     String getLayout();
129
130     /**
131      * Returns the release schemes that are active by this repository. E.g. for maven repositories
132      * this may either be a release repository, a snapshot repository or a combined repository.
133      * @return
134      */
135     Set<ReleaseScheme> getActiveReleaseSchemes();
136
137
138     /**
139      * Returns the capabilities of the repository implementation.
140      * @return
141      */
142     RepositoryCapabilities getCapabilities();
143
144
145     /**
146      * Extension method that allows to provide different features that are not supported by all
147      * repository types.
148      *
149      * @param clazz The feature class that is requested
150      * @param <T> This is the class of the feature
151      * @return The feature implementation for this repository instance, if it is supported
152      * @throws UnsupportedFeatureException if the feature is not supported by this repository type
153      */
154     <T extends RepositoryFeature<T>> RepositoryFeature<T> getFeature(Class<T> clazz) throws UnsupportedFeatureException;
155
156
157     /**
158      * Returns true, if the requested feature is supported by this repository.
159      *
160      * @param clazz The requested feature class
161      * @param <T> The requested feature class
162      * @return True, if the feature is supported, otherwise false.
163      */
164     <T extends RepositoryFeature<T>> boolean supportsFeature(Class<T> clazz);
165
166
167 }