]> source.dussan.org Git - archiva.git/blob
5048353b5870f72a9eea96d2f6c9228f960929e6
[archiva.git] /
1 package org.apache.archiva.metadata.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.metadata.model.ArtifactMetadata;
23 import org.apache.archiva.metadata.model.MetadataFacet;
24 import org.apache.archiva.metadata.model.ProjectMetadata;
25 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
26 import org.apache.archiva.metadata.model.ProjectVersionReference;
27
28 import java.util.Collection;
29 import java.util.Date;
30 import java.util.List;
31
32 public interface MetadataRepository
33 {
34     /**
35      * Update metadata for a particular project in the metadata repository, or create it if it does not already exist.
36      *
37      * @param session
38      * @param repositoryId the repository the project is in
39      * @param project      the project metadata to create or update
40      */
41     void updateProject( RepositorySession session, String repositoryId, ProjectMetadata project )
42         throws MetadataRepositoryException;
43
44     void updateArtifact( RepositorySession session, String repositoryId, String namespace, String projectId, String projectVersion,
45                          ArtifactMetadata artifactMeta )
46         throws MetadataRepositoryException;
47
48     void updateProjectVersion( RepositorySession session, String repositoryId, String namespace, String projectId,
49                                ProjectVersionMetadata versionMetadata )
50         throws MetadataRepositoryException;
51
52     /**
53      * create the namespace in the repository. (if not exist)
54      *
55      *
56      * @param session
57      * @param repositoryId
58      * @param namespace
59      * @throws MetadataRepositoryException
60      */
61     void updateNamespace( RepositorySession session, String repositoryId, String namespace )
62         throws MetadataRepositoryException;
63
64     List<String> getMetadataFacets( RepositorySession session, String repositoryId, String facetId )
65         throws MetadataRepositoryException;
66
67     /**
68      *
69      * @param session
70      * @param repositoryId
71      * @param facetId
72      * @return true if the repository datas for this facetId
73      * @throws MetadataRepositoryException
74      * @since 1.4-M4
75      */
76     boolean hasMetadataFacet( RepositorySession session, String repositoryId, String facetId )
77         throws MetadataRepositoryException;
78
79     MetadataFacet getMetadataFacet( RepositorySession session, String repositoryId, String facetId, String name )
80         throws MetadataRepositoryException;
81
82     void addMetadataFacet( RepositorySession session, String repositoryId, MetadataFacet metadataFacet )
83         throws MetadataRepositoryException;
84
85     void removeMetadataFacets( RepositorySession session, String repositoryId, String facetId )
86         throws MetadataRepositoryException;
87
88     void removeMetadataFacet( RepositorySession session, String repositoryId, String facetId, String name )
89         throws MetadataRepositoryException;
90
91     /**
92      * if startTime or endTime are <code>null</code> they are not used for search
93      *
94      *
95      * @param session
96      * @param repositoryId
97      * @param startTime    can be <code>null</code>
98      * @param endTime      can be <code>null</code>
99      * @return
100      * @throws MetadataRepositoryException
101      */
102     List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession session, String repositoryId, Date startTime, Date endTime )
103         throws MetadataRepositoryException;
104
105     Collection<ArtifactMetadata> getArtifactsByChecksum( RepositorySession session, String repositoryId, String checksum )
106         throws MetadataRepositoryException;
107
108     /**
109      * Get artifacts with a project version metadata key that matches the passed value.
110      *  
111      *
112      * @param session
113      * @param key
114      * @param value
115      * @param repositoryId can be null, meaning search in all repositories
116      * @return a list of artifacts
117      * @throws MetadataRepositoryException
118      */
119     List<ArtifactMetadata> getArtifactsByProjectVersionMetadata( RepositorySession session, String key, String value, String repositoryId )
120         throws MetadataRepositoryException;
121
122     /**
123      * Get artifacts with an artifact metadata key that matches the passed value.
124      *  
125      *
126      * @param session
127      * @param key
128      * @param value
129      * @param repositoryId can be null, meaning search in all repositories
130      * @return a list of artifacts
131      * @throws MetadataRepositoryException
132      */
133     List<ArtifactMetadata> getArtifactsByMetadata( RepositorySession session, String key, String value, String repositoryId )
134         throws MetadataRepositoryException;
135
136     /**
137      * Get artifacts with a property key that matches the passed value.
138      * Possible keys are 'scm.url', 'org.name', 'url', 'mailingList.0.name', 'license.0.name',...
139      *  
140      *
141      * @param session
142      * @param key
143      * @param value
144      * @param repositoryId can be null, meaning search in all repositories
145      * @return a list of artifacts
146      * @throws MetadataRepositoryException
147      */
148     List<ArtifactMetadata> getArtifactsByProperty( RepositorySession session, String key, String value, String repositoryId )
149         throws MetadataRepositoryException;
150
151     void removeArtifact( RepositorySession session, String repositoryId, String namespace, String project, String version, String id )
152         throws MetadataRepositoryException;
153
154     /**
155      * used for deleting timestamped version of SNAPSHOT artifacts
156      *
157      *
158      * @param session
159      * @param artifactMetadata the artifactMetadata with the timestamped version (2.0-20120618.214135-2)
160      * @param baseVersion      the base version of the snapshot (2.0-SNAPSHOT)
161      * @throws MetadataRepositoryException
162      * @since 1.4-M3
163      */
164     void removeArtifact( RepositorySession session, ArtifactMetadata artifactMetadata, String baseVersion )
165         throws MetadataRepositoryException;
166
167     /**
168      * FIXME need a unit test!!!
169      * Only remove {@link MetadataFacet} for the artifact
170      *
171      *
172      * @param session
173      * @param repositoryId
174      * @param namespace
175      * @param project
176      * @param version
177      * @param metadataFacet
178      * @throws MetadataRepositoryException
179      * @since 1.4-M3
180      */
181     void removeArtifact( RepositorySession session, String repositoryId, String namespace, String project, String version,
182                          MetadataFacet metadataFacet )
183         throws MetadataRepositoryException;
184
185     /**
186      * Delete a repository's metadata. This includes all associated metadata facets.
187      *
188      * @param session
189      * @param repositoryId the repository to delete
190      */
191     void removeRepository( RepositorySession session, String repositoryId )
192         throws MetadataRepositoryException;
193
194     /**
195      *
196      * @param session
197      * @param repositoryId
198      * @param namespace    (groupId for maven )
199      * @throws MetadataRepositoryException
200      * @since 1.4-M3
201      */
202     void removeNamespace( RepositorySession session, String repositoryId, String namespace )
203         throws MetadataRepositoryException;
204
205     List<ArtifactMetadata> getArtifacts( RepositorySession session, String repositoryId )
206         throws MetadataRepositoryException;
207
208     /**
209      * basically just checking it exists not complete data returned
210      *
211      *
212      * @param session
213      * @param repoId
214      * @param namespace
215      * @param projectId
216      * @return
217      * @throws MetadataResolutionException
218      */
219     ProjectMetadata getProject( RepositorySession session, String repoId, String namespace, String projectId )
220         throws MetadataResolutionException;
221
222     ProjectVersionMetadata getProjectVersion( RepositorySession session, String repoId, String namespace, String projectId, String projectVersion )
223         throws MetadataResolutionException;
224
225     Collection<String> getArtifactVersions( RepositorySession session, String repoId, String namespace, String projectId, String projectVersion )
226         throws MetadataResolutionException;
227
228     /**
229      * Retrieve project references from the metadata repository. Note that this is not built into the content model for
230      * a project version as a reference may be present (due to reverse-lookup of dependencies) before the actual
231      * project is, and we want to avoid adding a stub model to the content repository.
232      *
233      *
234      * @param session
235      * @param repoId         the repository ID to look within
236      * @param namespace      the namespace of the project to get references to
237      * @param projectId      the identifier of the project to get references to
238      * @param projectVersion the version of the project to get references to
239      * @return a list of project references
240      */
241     Collection<ProjectVersionReference> getProjectReferences( RepositorySession session, String repoId, String namespace, String projectId,
242                                                               String projectVersion )
243         throws MetadataResolutionException;
244
245     Collection<String> getRootNamespaces( RepositorySession session, String repoId )
246         throws MetadataResolutionException;
247
248     /**
249      *
250      * @param session
251      * @param repoId
252      * @param namespace
253      * @return {@link Collection} of child namespaces of the namespace argument
254      * @throws MetadataResolutionException
255      */
256     Collection<String> getNamespaces( RepositorySession session, String repoId, String namespace )
257         throws MetadataResolutionException;
258
259     /**
260      *
261      * @param session
262      * @param repoId
263      * @param namespace
264      * @return
265      * @throws MetadataResolutionException
266      */
267     Collection<String> getProjects( RepositorySession session, String repoId, String namespace )
268         throws MetadataResolutionException;
269
270     /**
271      *
272      * @param session
273      * @param repoId
274      * @param namespace
275      * @param projectId
276      * @return
277      * @throws MetadataResolutionException
278      */
279     Collection<String> getProjectVersions( RepositorySession session, String repoId, String namespace, String projectId )
280         throws MetadataResolutionException;
281
282     /**
283      *
284      * @param session
285      * @param repoId
286      * @param namespace
287      * @param projectId
288      * @param projectVersion
289      * @throws MetadataRepositoryException
290      * @since 1.4-M4
291      */
292     void removeProjectVersion( RepositorySession session, String repoId, String namespace, String projectId, String projectVersion )
293         throws MetadataRepositoryException;
294
295     /**
296      *
297      * @param session
298      * @param repoId
299      * @param namespace
300      * @param projectId
301      * @param projectVersion
302      * @return
303      * @throws MetadataResolutionException
304      */
305     Collection<ArtifactMetadata> getArtifacts( RepositorySession session, String repoId, String namespace, String projectId,
306                                                String projectVersion )
307         throws MetadataResolutionException;
308
309     /**
310      * remove a project
311      *
312      *
313      * @param session
314      * @param repositoryId
315      * @param namespace
316      * @param projectId
317      * @throws MetadataRepositoryException
318      * @since 1.4-M4
319      */
320     void removeProject( RepositorySession session, String repositoryId, String namespace, String projectId )
321         throws MetadataRepositoryException;
322
323
324     void close()
325         throws MetadataRepositoryException;
326
327
328     boolean canObtainAccess( Class<?> aClass );
329
330     <T> T obtainAccess( RepositorySession session,  Class<T> aClass )
331         throws MetadataRepositoryException;
332
333     /**
334      * Full text artifacts search.
335      *  
336      *
337      * @param session
338      * @param repositoryId can be null to search in all repositories
339      * @param text
340      * @param exact running an exact search, the value must exactly match the text.
341      * @return a list of artifacts
342      * @throws MetadataRepositoryException
343      */
344     List<ArtifactMetadata> searchArtifacts( RepositorySession session, String repositoryId, String text, boolean exact )
345         throws MetadataRepositoryException;
346
347     /**
348      * Full text artifacts search inside the specified key.
349      *  
350      *
351      * @param session
352      * @param repositoryId can be null to search in all repositories
353      * @param key search only inside this key
354      * @param text
355      * @param exact running an exact search, the value must exactly match the text.
356      * @return a list of artifacts
357      * @throws MetadataRepositoryException
358      */
359     List<ArtifactMetadata> searchArtifacts( RepositorySession session, String repositoryId, String key, String text, boolean exact )
360         throws MetadataRepositoryException;
361
362 }