Search in sources :

Example 1 with ProjectReference

use of org.apache.archiva.model.ProjectReference in project archiva by apache.

the class MetadataToolsTest method testToPathFromProjectReference.

@Test
public void testToPathFromProjectReference() {
    ProjectReference reference = new ProjectReference();
    reference.setGroupId("com.foo");
    reference.setArtifactId("foo-tool");
    assertEquals("com/foo/foo-tool/maven-metadata.xml", tools.toPath(reference));
}
Also used : ProjectReference(org.apache.archiva.model.ProjectReference) Test(org.junit.Test)

Example 2 with ProjectReference

use of org.apache.archiva.model.ProjectReference in project archiva by apache.

the class ManagedDefaultRepositoryContent method getVersions.

/**
 * Gather the Available Versions (on disk) for a specific Project Reference, based on filesystem
 * information.
 *
 * @return the Set of available versions, based on the project reference.
 * @throws LayoutException
 * @throws LayoutException
 */
@Override
public Set<String> getVersions(ProjectReference reference) throws ContentNotFoundException, LayoutException {
    String path = toMetadataPath(reference);
    int idx = path.lastIndexOf('/');
    if (idx > 0) {
        path = path.substring(0, idx);
    }
    Path repoDir = PathUtil.getPathFromUri(repository.getLocation()).resolve(path);
    if (!Files.exists(repoDir)) {
        throw new ContentNotFoundException("Unable to get Versions on a non-existant directory: " + repoDir.toAbsolutePath());
    }
    if (!Files.isDirectory(repoDir)) {
        throw new ContentNotFoundException("Unable to get Versions on a non-directory: " + repoDir.toAbsolutePath());
    }
    final String groupId = reference.getGroupId();
    final String artifactId = reference.getArtifactId();
    try (Stream<Path> stream = Files.list(repoDir)) {
        return stream.filter(Files::isDirectory).map(p -> newVersionedRef(groupId, artifactId, p.getFileName().toString())).filter(this::hasArtifact).map(ref -> ref.getVersion()).collect(Collectors.toSet());
    } catch (IOException e) {
        log.error("Could not read directory {}: {}", repoDir, e.getMessage(), e);
    } catch (RuntimeException e) {
        if (e.getCause() != null && e.getCause() instanceof LayoutException) {
            throw (LayoutException) e.getCause();
        } else {
            throw e;
        }
    }
    return Collections.emptySet();
}
Also used : Path(java.nio.file.Path) StringUtils(org.apache.commons.lang.StringUtils) PathUtil(org.apache.archiva.common.utils.PathUtil) ArtifactMappingProvider(org.apache.archiva.metadata.repository.storage.maven2.ArtifactMappingProvider) DefaultArtifactMappingProvider(org.apache.archiva.metadata.repository.storage.maven2.DefaultArtifactMappingProvider) ProjectReference(org.apache.archiva.model.ProjectReference) HashSet(java.util.HashSet) URI(java.net.URI) LayoutException(org.apache.archiva.repository.LayoutException) Path(java.nio.file.Path) ManagedRepositoryContent(org.apache.archiva.repository.ManagedRepositoryContent) VersionedReference(org.apache.archiva.model.VersionedReference) Files(java.nio.file.Files) RepositoryException(org.apache.archiva.repository.RepositoryException) Set(java.util.Set) FileTypes(org.apache.archiva.configuration.FileTypes) IOException(java.io.IOException) ContentNotFoundException(org.apache.archiva.repository.ContentNotFoundException) ArchivaArtifact(org.apache.archiva.model.ArchivaArtifact) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) List(java.util.List) Stream(java.util.stream.Stream) Paths(java.nio.file.Paths) ArtifactReference(org.apache.archiva.model.ArtifactReference) Collections(java.util.Collections) ContentNotFoundException(org.apache.archiva.repository.ContentNotFoundException) LayoutException(org.apache.archiva.repository.LayoutException) IOException(java.io.IOException) Files(java.nio.file.Files)

Example 3 with ProjectReference

use of org.apache.archiva.model.ProjectReference in project archiva by apache.

the class ManagedDefaultRepositoryContentTest method testToMetadataPathFromProjectReference.

@Test
public void testToMetadataPathFromProjectReference() {
    ProjectReference reference = new ProjectReference();
    reference.setGroupId("com.foo");
    reference.setArtifactId("foo-tool");
    assertEquals("com/foo/foo-tool/maven-metadata.xml", repoContent.toMetadataPath(reference));
}
Also used : ProjectReference(org.apache.archiva.model.ProjectReference) Test(org.junit.Test)

Example 4 with ProjectReference

use of org.apache.archiva.model.ProjectReference in project archiva by apache.

the class CleanupReleasedSnapshotsRepositoryPurge method updateMetadata.

/*
     * TODO: Uses a deprecated API, but if we use the API with location string, it does not work as expected
     * -> not sure what needs to be changed here.
     */
@SuppressWarnings("deprecation")
private void updateMetadata(ArtifactReference artifact) {
    VersionedReference versionRef = new VersionedReference();
    versionRef.setGroupId(artifact.getGroupId());
    versionRef.setArtifactId(artifact.getArtifactId());
    versionRef.setVersion(artifact.getVersion());
    ProjectReference projectRef = new ProjectReference();
    projectRef.setGroupId(artifact.getGroupId());
    projectRef.setArtifactId(artifact.getArtifactId());
    try {
        metadataTools.updateMetadata(repository, versionRef);
    } catch (ContentNotFoundException e) {
    // Ignore. (Just means we have no snapshot versions left to reference).
    } catch (RepositoryMetadataException e) {
    // Ignore.
    } catch (IOException e) {
    // Ignore.
    } catch (LayoutException e) {
    // Ignore.
    }
    try {
        metadataTools.updateMetadata(repository, projectRef);
    } catch (ContentNotFoundException e) {
    // Ignore. (Just means we have no snapshot versions left to reference).
    } catch (RepositoryMetadataException e) {
    // Ignore.
    } catch (IOException e) {
    // Ignore.
    } catch (LayoutException e) {
    // Ignore.
    }
}
Also used : ProjectReference(org.apache.archiva.model.ProjectReference) VersionedReference(org.apache.archiva.model.VersionedReference) RepositoryMetadataException(org.apache.archiva.repository.metadata.RepositoryMetadataException) ContentNotFoundException(org.apache.archiva.repository.ContentNotFoundException) LayoutException(org.apache.archiva.repository.LayoutException) IOException(java.io.IOException)

Example 5 with ProjectReference

use of org.apache.archiva.model.ProjectReference in project archiva by apache.

the class CleanupReleasedSnapshotsRepositoryPurge method process.

@Override
public void process(String path) throws RepositoryPurgeException {
    try {
        Path artifactFile = Paths.get(repository.getRepoRoot(), path);
        if (!Files.exists(artifactFile)) {
            // Nothing to do here, file doesn't exist, skip it.
            return;
        }
        ArtifactReference artifactRef = repository.toArtifactReference(path);
        if (!VersionUtil.isSnapshot(artifactRef.getVersion())) {
            // Nothing to do here, not a snapshot, skip it.
            return;
        }
        ProjectReference reference = new ProjectReference();
        reference.setGroupId(artifactRef.getGroupId());
        reference.setArtifactId(artifactRef.getArtifactId());
        // Gether the released versions
        List<String> releasedVersions = new ArrayList<>();
        Collection<org.apache.archiva.repository.ManagedRepository> repos = repositoryRegistry.getManagedRepositories();
        for (org.apache.archiva.repository.ManagedRepository repo : repos) {
            if (repo.getActiveReleaseSchemes().contains(ReleaseScheme.RELEASE)) {
                try {
                    ManagedRepositoryContent repoContent = repo.getContent();
                    for (String version : repoContent.getVersions(reference)) {
                        if (!VersionUtil.isSnapshot(version)) {
                            releasedVersions.add(version);
                        }
                    }
                } catch (RepositoryException e) {
                // swallow
                }
            }
        }
        Collections.sort(releasedVersions, VersionComparator.getInstance());
        // Now clean out any version that is earlier than the highest released version.
        boolean needsMetadataUpdate = false;
        VersionedReference versionRef = new VersionedReference();
        versionRef.setGroupId(artifactRef.getGroupId());
        versionRef.setArtifactId(artifactRef.getArtifactId());
        MetadataRepository metadataRepository = repositorySession.getRepository();
        if (releasedVersions.contains(VersionUtil.getReleaseVersion(artifactRef.getVersion()))) {
            versionRef.setVersion(artifactRef.getVersion());
            repository.deleteVersion(versionRef);
            for (RepositoryListener listener : listeners) {
                listener.deleteArtifact(metadataRepository, repository.getId(), artifactRef.getGroupId(), artifactRef.getArtifactId(), artifactRef.getVersion(), artifactFile.getFileName().toString());
            }
            metadataRepository.removeProjectVersion(repository.getId(), artifactRef.getGroupId(), artifactRef.getArtifactId(), artifactRef.getVersion());
            needsMetadataUpdate = true;
        }
        if (needsMetadataUpdate) {
            updateMetadata(artifactRef);
        }
    } catch (LayoutException e) {
        log.debug("Not processing file that is not an artifact: {}", e.getMessage());
    } catch (ContentNotFoundException e) {
        throw new RepositoryPurgeException(e.getMessage(), e);
    } catch (MetadataRepositoryException e) {
        log.error("Could not remove metadata during cleanup of released snapshots of {}", path, e);
    }
}
Also used : Path(java.nio.file.Path) RepositoryListener(org.apache.archiva.repository.events.RepositoryListener) MetadataRepositoryException(org.apache.archiva.metadata.repository.MetadataRepositoryException) ProjectReference(org.apache.archiva.model.ProjectReference) ContentNotFoundException(org.apache.archiva.repository.ContentNotFoundException) ArrayList(java.util.ArrayList) RepositoryException(org.apache.archiva.repository.RepositoryException) MetadataRepositoryException(org.apache.archiva.metadata.repository.MetadataRepositoryException) MetadataRepository(org.apache.archiva.metadata.repository.MetadataRepository) VersionedReference(org.apache.archiva.model.VersionedReference) LayoutException(org.apache.archiva.repository.LayoutException) ManagedRepositoryContent(org.apache.archiva.repository.ManagedRepositoryContent) ArtifactReference(org.apache.archiva.model.ArtifactReference)

Aggregations

ProjectReference (org.apache.archiva.model.ProjectReference)20 Path (java.nio.file.Path)11 ManagedRepositoryContent (org.apache.archiva.repository.ManagedRepositoryContent)4 Test (org.junit.Test)4 IOException (java.io.IOException)3 VersionedReference (org.apache.archiva.model.VersionedReference)3 ContentNotFoundException (org.apache.archiva.repository.ContentNotFoundException)3 LayoutException (org.apache.archiva.repository.LayoutException)3 StringWriter (java.io.StringWriter)2 ArrayList (java.util.ArrayList)2 ArchivaRepositoryMetadata (org.apache.archiva.model.ArchivaRepositoryMetadata)2 ArtifactReference (org.apache.archiva.model.ArtifactReference)2 RepositoryException (org.apache.archiva.repository.RepositoryException)2 RepositoryMetadataException (org.apache.archiva.repository.metadata.RepositoryMetadataException)2 URI (java.net.URI)1 Files (java.nio.file.Files)1 Paths (java.nio.file.Paths)1 Collections (java.util.Collections)1 HashSet (java.util.HashSet)1 List (java.util.List)1