]> source.dussan.org Git - archiva.git/blob
6a8f93f80b4cbba07cdfad40ddfda5f2b4c42bf3
[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 repositoryId the repository the project is in
38      * @param project      the project metadata to create or update
39      */
40     void updateProject( String repositoryId, ProjectMetadata project )
41         throws MetadataRepositoryException;
42
43     void updateArtifact( String repositoryId, String namespace, String projectId, String projectVersion,
44                          ArtifactMetadata artifactMeta )
45         throws MetadataRepositoryException;
46
47     void updateProjectVersion( String repositoryId, String namespace, String projectId,
48                                ProjectVersionMetadata versionMetadata )
49         throws MetadataRepositoryException;
50
51     /**
52      * create the namespace in the repository. (if not exist)
53      * @param repositoryId
54      * @param namespace
55      * @throws MetadataRepositoryException
56      */
57     void updateNamespace( String repositoryId, String namespace )
58         throws MetadataRepositoryException;
59
60     List<String> getMetadataFacets( String repositoryId, String facetId )
61         throws MetadataRepositoryException;
62
63     /**
64      *
65      * @param repositoryId
66      * @param facetId
67      * @return true if the repository datas for this facetId
68      * @since 1.4-M4
69      * @throws MetadataRepositoryException
70      */
71     boolean hasMetadataFacet( String repositoryId, String facetId )
72         throws MetadataRepositoryException;
73
74     MetadataFacet getMetadataFacet( String repositoryId, String facetId, String name )
75         throws MetadataRepositoryException;
76
77     void addMetadataFacet( String repositoryId, MetadataFacet metadataFacet )
78         throws MetadataRepositoryException;
79
80     void removeMetadataFacets( String repositoryId, String facetId )
81         throws MetadataRepositoryException;
82
83     void removeMetadataFacet( String repositoryId, String facetId, String name )
84         throws MetadataRepositoryException;
85
86     /**
87      * if startTime or endTime are <code>null</code> they are not used for search
88      * @param repositoryId
89      * @param startTime can be <code>null</code>
90      * @param endTime can be <code>null</code>
91      * @return
92      * @throws MetadataRepositoryException
93      */
94     List<ArtifactMetadata> getArtifactsByDateRange( String repositoryId, Date startTime, Date endTime )
95         throws MetadataRepositoryException;
96
97     // TODO: remove from API, just use configuration
98     Collection<String> getRepositories()
99         throws MetadataRepositoryException;
100
101     Collection<ArtifactMetadata> getArtifactsByChecksum( String repositoryId, String checksum )
102         throws MetadataRepositoryException;
103
104     void removeArtifact( String repositoryId, String namespace, String project, String version, String id )
105         throws MetadataRepositoryException;
106
107     /**
108      * used for deleting timestamped version of SNAPSHOT artifacts
109      *
110      * @param artifactMetadata the artifactMetadata with the timestamped version (2.0-20120618.214135-2)
111      * @param baseVersion      the base version of the snapshot (2.0-SNAPSHOT)
112      * @throws MetadataRepositoryException
113      * @since 1.4-M3
114      */
115     void removeArtifact( ArtifactMetadata artifactMetadata, String baseVersion )
116         throws MetadataRepositoryException;
117
118     /**
119      * FIXME need a unit test!!!
120      * Only remove {@link MetadataFacet} for the artifact
121      * @param repositoryId
122      * @param namespace
123      * @param project
124      * @param version
125      * @param metadataFacet
126      * @throws MetadataRepositoryException
127      * @since 1.4-M3
128      */
129     void removeArtifact( String repositoryId, String namespace, String project, String version,
130                          MetadataFacet metadataFacet )
131         throws MetadataRepositoryException;
132
133     /**
134      * Delete a repository's metadata. This includes all associated metadata facets.
135      *
136      * @param repositoryId the repository to delete
137      */
138     void removeRepository( String repositoryId )
139         throws MetadataRepositoryException;
140
141     /**
142      * @param repositoryId
143      * @param namespace    (groupId for maven )
144      * @throws MetadataRepositoryException
145      * @since 1.4-M3
146      */
147     void removeNamespace( String repositoryId, String namespace )
148         throws MetadataRepositoryException;
149
150     List<ArtifactMetadata> getArtifacts( String repositoryId )
151         throws MetadataRepositoryException;
152
153     /**
154      * basically just checking it exists not complete data returned
155      * @param repoId
156      * @param namespace
157      * @param projectId
158      * @return
159      * @throws MetadataResolutionException
160      */
161     ProjectMetadata getProject( String repoId, String namespace, String projectId )
162         throws MetadataResolutionException;
163
164     ProjectVersionMetadata getProjectVersion( String repoId, String namespace, String projectId, String projectVersion )
165         throws MetadataResolutionException;
166
167     Collection<String> getArtifactVersions( String repoId, String namespace, String projectId, String projectVersion )
168         throws MetadataResolutionException;
169
170     /**
171      * Retrieve project references from the metadata repository. Note that this is not built into the content model for
172      * a project version as a reference may be present (due to reverse-lookup of dependencies) before the actual
173      * project is, and we want to avoid adding a stub model to the content repository.
174      *
175      * @param repoId         the repository ID to look within
176      * @param namespace      the namespace of the project to get references to
177      * @param projectId      the identifier of the project to get references to
178      * @param projectVersion the version of the project to get references to
179      * @return a list of project references
180      */
181     Collection<ProjectVersionReference> getProjectReferences( String repoId, String namespace, String projectId,
182                                                               String projectVersion )
183         throws MetadataResolutionException;
184
185     Collection<String> getRootNamespaces( String repoId )
186         throws MetadataResolutionException;
187
188     /**
189      *
190      * @param repoId
191      * @param namespace
192      * @return {@link Collection} of child namespaces of the namespace argument
193      * @throws MetadataResolutionException
194      */
195     Collection<String> getNamespaces( String repoId, String namespace )
196         throws MetadataResolutionException;
197
198     Collection<String> getProjects( String repoId, String namespace )
199         throws MetadataResolutionException;
200
201     Collection<String> getProjectVersions( String repoId, String namespace, String projectId )
202         throws MetadataResolutionException;
203
204     /**
205      * @param repoId
206      * @param namespace
207      * @param projectId
208      * @param projectVersion
209      * @throws MetadataRepositoryException
210      * @since 1.4-M4
211      */
212     void removeProjectVersion( String repoId, String namespace, String projectId, String projectVersion )
213         throws MetadataRepositoryException;
214
215     Collection<ArtifactMetadata> getArtifacts( String repoId, String namespace, String projectId,
216                                                String projectVersion )
217         throws MetadataResolutionException;
218
219     /**
220      * remove a project
221      * @param repositoryId
222      * @param namespace
223      * @param projectId
224      * @throws MetadataRepositoryException
225      * @since 1.4-M4
226      */
227     void removeProject( String repositoryId, String namespace, String projectId )
228         throws MetadataRepositoryException;
229
230
231     /**
232      * <b>implementations can throw RuntimeException</b>
233      */
234     void save();
235
236
237     void close()
238         throws MetadataRepositoryException;
239
240     /**
241      * <b>implementations can throw RuntimeException</b>
242      */
243     void revert();
244
245     boolean canObtainAccess( Class<?> aClass );
246
247     <T>T obtainAccess( Class<T> aClass )
248         throws MetadataRepositoryException;
249 }