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.admin.model.beans.ManagedRepository; 23 import org.apache.archiva.model.ArchivaArtifact; 24 import org.apache.archiva.model.ArtifactReference; 25 import org.apache.archiva.model.ProjectReference; 26 import org.apache.archiva.model.VersionedReference; 27 import org.apache.archiva.repository.layout.LayoutException; 28 29 import java.io.File; 30 import java.util.Set; 31 32 /** 33 * ManagedRepositoryContent interface for interacting with a managed repository in an abstract way, 34 * without the need for processing based on filesystem paths, or working with the database. 35 */ 36 public interface ManagedRepositoryContent 37 { 38 /** 39 * Delete from the managed repository all files / directories associated with the 40 * provided version reference. 41 * 42 * @param reference the version reference to delete. 43 * @throws ContentNotFoundException 44 */ 45 void deleteVersion( VersionedReference reference ) 46 throws ContentNotFoundException; 47 48 /** 49 * delete a specified artifact from the repository 50 * 51 * @param artifactReference 52 * @throws ContentNotFoundException 53 */ 54 void deleteArtifact( ArtifactReference artifactReference ) 55 throws ContentNotFoundException; 56 57 /** 58 * @param groupId 59 * @throws ContentNotFoundException 60 * @since 1.4-M3 61 */ 62 void deleteGroupId( String groupId ) 63 throws ContentNotFoundException; 64 65 /** 66 * 67 * @param namespace groupId for maven 68 * @param projectId artifactId for maven 69 * @throws ContentNotFoundException 70 */ 71 void deleteProject( String namespace, String projectId ) 72 throws RepositoryException; 73 74 /** 75 * <p> 76 * Convenience method to get the repository id. 77 * </p> 78 * <p> 79 * Equivalent to calling <code>.getRepository().getId()</code> 80 * </p> 81 * 82 * @return the repository id. 83 */ 84 String getId(); 85 86 /** 87 * <p> 88 * Gather up the list of related artifacts to the ArtifactReference provided. 89 * This typically inclues the pom files, and those things with 90 * classifiers (such as doc, source code, test libs, etc...) 91 * </p> 92 * <p> 93 * <strong>NOTE:</strong> Some layouts (such as maven 1 "legacy") are not compatible with this query. 94 * </p> 95 * 96 * @param reference the reference to work off of. 97 * @return the set of ArtifactReferences for related artifacts. 98 * @throws ContentNotFoundException if the initial artifact reference does not exist within the repository. 99 */ 100 Set<ArtifactReference> getRelatedArtifacts( ArtifactReference reference ) 101 throws ContentNotFoundException; 102 103 /** 104 * <p> 105 * Convenience method to get the repository (on disk) root directory. 106 * </p> 107 * <p> 108 * Equivalent to calling <code>.getRepository().getLocation()</code> 109 * </p> 110 * 111 * @return the repository (on disk) root directory. 112 */ 113 String getRepoRoot(); 114 115 /** 116 * Get the repository configuration associated with this 117 * repository content. 118 * 119 * @return the repository that is associated with this repository content. 120 */ 121 ManagedRepository getRepository(); 122 123 /** 124 * Given a specific {@link ProjectReference}, return the list of available versions for 125 * that project reference. 126 * 127 * @param reference the project reference to work off of. 128 * @return the list of versions found for that project reference. 129 * @throws ContentNotFoundException if the project reference does nto exist within the repository. 130 * @throws LayoutException 131 */ 132 Set<String> getVersions( ProjectReference reference ) 133 throws ContentNotFoundException, LayoutException; 134 135 /** 136 * <p> 137 * Given a specific {@link VersionedReference}, return the list of available versions for that 138 * versioned reference. 139 * </p> 140 * <p> 141 * <strong>NOTE:</strong> This is really only useful when working with SNAPSHOTs. 142 * </p> 143 * 144 * @param reference the versioned reference to work off of. 145 * @return the set of versions found. 146 * @throws ContentNotFoundException if the versioned reference does not exist within the repository. 147 */ 148 Set<String> getVersions( VersionedReference reference ) 149 throws ContentNotFoundException; 150 151 /** 152 * Determines if the artifact referenced exists in the repository. 153 * 154 * @param reference the artifact reference to check for. 155 * @return true if the artifact referenced exists. 156 */ 157 boolean hasContent( ArtifactReference reference ); 158 159 /** 160 * Determines if the project referenced exists in the repository. 161 * 162 * @param reference the project reference to check for. 163 * @return true it the project referenced exists. 164 */ 165 boolean hasContent( ProjectReference reference ); 166 167 /** 168 * Determines if the version reference exists in the repository. 169 * 170 * @param reference the version reference to check for. 171 * @return true if the version referenced exists. 172 */ 173 boolean hasContent( VersionedReference reference ); 174 175 /** 176 * Set the repository configuration to associate with this 177 * repository content. 178 * 179 * @param repo the repository to associate with this repository content. 180 */ 181 void setRepository( ManagedRepository repo ); 182 183 /** 184 * Given a repository relative path to a filename, return the {@link VersionedReference} object suitable for the path. 185 * 186 * @param path the path relative to the repository base dir for the artifact. 187 * @return the {@link ArtifactReference} representing the path. (or null if path cannot be converted to 188 * a {@link ArtifactReference}) 189 * @throws LayoutException if there was a problem converting the path to an artifact. 190 */ 191 ArtifactReference toArtifactReference( String path ) 192 throws LayoutException; 193 194 /** 195 * Given an {@link ArtifactReference}, return the file reference to the artifact. 196 * 197 * @param reference the artifact reference to use. 198 * @return the relative path to the artifact. 199 */ 200 File toFile( ArtifactReference reference ); 201 202 /** 203 * Given an {@link ArchivaArtifact}, return the file reference to the artifact. 204 * 205 * @param reference the archiva artifact to use. 206 * @return the relative path to the artifact. 207 */ 208 File toFile( ArchivaArtifact reference ); 209 210 /** 211 * Given a {@link ProjectReference}, return the path to the metadata for 212 * the project. 213 * 214 * @param reference the reference to use. 215 * @return the path to the metadata file, or null if no metadata is appropriate. 216 */ 217 String toMetadataPath( ProjectReference reference ); 218 219 /** 220 * Given a {@link VersionedReference}, return the path to the metadata for 221 * the specific version of the project. 222 * 223 * @param reference the reference to use. 224 * @return the path to the metadata file, or null if no metadata is appropriate. 225 */ 226 String toMetadataPath( VersionedReference reference ); 227 228 /** 229 * Given an {@link ArtifactReference}, return the relative path to the artifact. 230 * 231 * @param reference the artifact reference to use. 232 * @return the relative path to the artifact. 233 */ 234 String toPath( ArtifactReference reference ); 235 236 /** 237 * Given an {@link ArchivaArtifact}, return the relative path to the artifact. 238 * 239 * @param reference the archiva artifact to use. 240 * @return the relative path to the artifact. 241 */ 242 String toPath( ArchivaArtifact reference ); 243 }