]> source.dussan.org Git - archiva.git/blob
453badc2d86605d3811a1e64bd1ed86053116ac0
[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.indexer.ArchivaIndexingContext;
23 import org.apache.archiva.repository.content.RepositoryStorage;
24 import org.apache.archiva.repository.features.RepositoryFeature;
25
26 import java.net.URI;
27 import java.nio.file.Path;
28 import java.util.Locale;
29 import java.util.Set;
30
31 /**
32  *
33  * Base interface for repositories.
34  *
35  * Created by Martin Stockhammer on 21.09.17.
36  */
37 public interface Repository extends RepositoryEventHandler, RepositoryStorage {
38
39     /**
40      * Return the identifier of the repository. Repository identifier should be unique at least
41      * for the same type.
42      * @return The identifier.
43      */
44     String getId();
45
46     /**
47      * This is the display name of the repository. This string is presented in the user interface.
48      *
49      * @return The display name of the repository
50      */
51     String getName();
52
53     /**
54      * Returns the name in the given locale.
55      * @param locale
56      * @return
57      */
58     String getName(Locale locale);
59
60     /**
61      * Returns a description of this repository.
62      * @return The description.
63      */
64     String getDescription();
65
66     /**
67      * Returns the description for the given locale.
68      * @param locale
69      * @return
70      */
71     String getDescription(Locale locale);
72
73     /**
74      * This identifies the type of repository. Archiva does only support certain types of repositories.
75      *
76      * @return A unique identifier for the repository type.
77      */
78     RepositoryType getType();
79
80
81     /**
82      * Returns the location of this repository. For local repositories this might be a file URI, for
83      * remote repositories a http URL or some very repository specific schemes.
84      * Each repository has only one unique location.
85      *
86      * @return The repository location.
87      */
88     URI getLocation();
89
90
91     /**
92      * Returns the local path that this repository uses, if it stores data locally. You should keep in
93      * mind, that repository implementations may not store any data in this directory. E.g. if the
94      * repository data is handled by a database. So the content of this directory is very implementation
95      * specific. Users of this directory must know about the repository file layout if they use this
96      * path.
97      *
98      * Repository implementations should always return a valid path, even if there is no locally stored data.
99      *
100      * Some extensions may use the path to store their own repository specific data, e.g. statistics, metadata,...
101      *
102      * @return the filesystem path to the repository.
103      */
104     Path getLocalPath();
105
106
107     /**
108      * A repository may allow additional locations that can be used, if the primary location is not available.
109      * @return
110      */
111     Set<URI> getFailoverLocations();
112
113     /**
114      * True, if this repository is scanned regularly.
115      */
116     boolean isScanned();
117
118     /**
119      * Returns the definition, when the repository jobs are executed.
120      * This must return a valid a cron string.
121      *
122      * @See http://www.quartz-scheduler.org/api/2.2.1/org/quartz/CronExpression.html
123      *
124      * @return
125      */
126     String getSchedulingDefinition();
127
128     /**
129      * Returns true, if this repository has a index available
130      * @return
131      */
132     boolean hasIndex();
133
134     /**
135      * Returns a layout definition. The returned string may be implementation specific and is not
136      * standardized.
137      *
138      * @return
139      */
140     String getLayout();
141
142
143     /**
144      * Returns the capabilities of the repository implementation.
145      * @return
146      */
147     RepositoryCapabilities getCapabilities();
148
149
150     /**
151      * Extension method that allows to provide different features that are not supported by all
152      * repository types.
153      *
154      * @param clazz The feature class that is requested
155      * @param <T> This is the class of the feature
156      * @return The feature implementation for this repository instance, if it is supported
157      * @throws UnsupportedFeatureException if the feature is not supported by this repository type
158      */
159     <T extends RepositoryFeature<T>> RepositoryFeature<T> getFeature(Class<T> clazz) throws UnsupportedFeatureException;
160
161
162     /**
163      * Returns true, if the requested feature is supported by this repository.
164      *
165      * @param clazz The requested feature class
166      * @param <T> The requested feature class
167      * @return True, if the feature is supported, otherwise false.
168      */
169     <T extends RepositoryFeature<T>> boolean supportsFeature(Class<T> clazz);
170
171
172     /**
173      * Returns a indexing context.
174      * @return
175      * @throws UnsupportedOperationException
176      */
177     ArchivaIndexingContext getIndexingContext();
178
179     /**
180      * Closes all resources that are opened by this repository.
181      */
182     void close();
183
184
185 }