Search in sources :

Example 21 with Repository

use of org.apache.archiva.repository.Repository in project archiva by apache.

the class MavenIndexManager method mergeContexts.

@Override
public ArchivaIndexingContext mergeContexts(Repository destinationRepo, List<ArchivaIndexingContext> contexts, boolean packIndex) throws UnsupportedOperationException, IndexCreationFailedException, IllegalArgumentException {
    if (!destinationRepo.supportsFeature(IndexCreationFeature.class)) {
        throw new IllegalArgumentException("The given repository does not support the indexcreation feature");
    }
    Path mergedIndexDirectory = null;
    try {
        mergedIndexDirectory = Files.createTempDirectory("archivaMergedIndex");
    } catch (IOException e) {
        log.error("Could not create temporary directory for merged index: {}", e.getMessage(), e);
        throw new IndexCreationFailedException("IO error while creating temporary directory for merged index: " + e.getMessage(), e);
    }
    IndexCreationFeature indexCreationFeature = destinationRepo.getFeature(IndexCreationFeature.class);
    if (indexCreationFeature.getLocalIndexPath() == null) {
        throw new IllegalArgumentException("The given repository does not have a local index path");
    }
    StorageAsset destinationPath = indexCreationFeature.getLocalIndexPath();
    String tempRepoId = mergedIndexDirectory.getFileName().toString();
    try {
        Path indexLocation = destinationPath.getFilePath();
        List<IndexingContext> members = contexts.stream().filter(ctx -> ctx.supports(IndexingContext.class)).map(ctx -> {
            try {
                return ctx.getBaseContext(IndexingContext.class);
            } catch (UnsupportedBaseContextException e) {
                // does not happen here
                return null;
            }
        }).filter(Objects::nonNull).collect(Collectors.toList());
        ContextMemberProvider memberProvider = new StaticContextMemberProvider(members);
        IndexingContext mergedCtx = indexer.createMergedIndexingContext(tempRepoId, tempRepoId, mergedIndexDirectory.toFile(), indexLocation.toFile(), true, memberProvider);
        mergedCtx.optimize();
        if (packIndex) {
            IndexPackingRequest request = new // 
            IndexPackingRequest(// 
            mergedCtx, // 
            mergedCtx.acquireIndexSearcher().getIndexReader(), indexLocation.toFile());
            indexPacker.packIndex(request);
        }
        return new MavenIndexContext(destinationRepo, mergedCtx);
    } catch (IOException e) {
        throw new IndexCreationFailedException("IO Error during index merge: " + e.getMessage(), e);
    }
}
Also used : Path(java.nio.file.Path) AuthenticationException(org.apache.maven.wagon.authentication.AuthenticationException) ArtifactContext(org.apache.maven.index.ArtifactContext) PathUtil(org.apache.archiva.common.utils.PathUtil) UnsupportedBaseContextException(org.apache.archiva.indexer.UnsupportedBaseContextException) StorageAsset(org.apache.archiva.repository.storage.StorageAsset) FilesystemStorage(org.apache.archiva.repository.storage.fs.FilesystemStorage) LoggerFactory(org.slf4j.LoggerFactory) IndexCreator(org.apache.maven.index.context.IndexCreator) ArchivaIndexManager(org.apache.archiva.indexer.ArchivaIndexManager) StringUtils(org.apache.commons.lang3.StringUtils) Map(java.util.Map) FileUtils(org.apache.archiva.common.utils.FileUtils) IndexCreationFailedException(org.apache.archiva.indexer.IndexCreationFailedException) UnsupportedRepositoryTypeException(org.apache.archiva.repository.UnsupportedRepositoryTypeException) RemoteIndexFeature(org.apache.archiva.repository.features.RemoteIndexFeature) URI(java.net.URI) TransferFailedException(org.apache.maven.wagon.TransferFailedException) Path(java.nio.file.Path) RepositoryStorage(org.apache.archiva.repository.storage.RepositoryStorage) ArchivaIndexingContext(org.apache.archiva.indexer.ArchivaIndexingContext) AbstractHttpClientWagon(org.apache.maven.wagon.shared.http.AbstractHttpClientWagon) TransferEvent(org.apache.maven.wagon.events.TransferEvent) IndexCreationFeature(org.apache.archiva.repository.features.IndexCreationFeature) HttpMethodConfiguration(org.apache.maven.wagon.shared.http.HttpMethodConfiguration) ProxyRegistry(org.apache.archiva.proxy.ProxyRegistry) ProxyInfo(org.apache.maven.wagon.proxy.ProxyInfo) Collection(java.util.Collection) ConnectionException(org.apache.maven.wagon.ConnectionException) AuthorizationException(org.apache.maven.wagon.authorization.AuthorizationException) NetworkProxy(org.apache.archiva.proxy.model.NetworkProxy) WagonFactory(org.apache.archiva.maven.common.proxy.WagonFactory) PasswordCredentials(org.apache.archiva.repository.base.PasswordCredentials) Collectors(java.util.stream.Collectors) Indexer(org.apache.maven.index.Indexer) FileNotFoundException(java.io.FileNotFoundException) ManagedRepository(org.apache.archiva.repository.ManagedRepository) IndexUpdateRequest(org.apache.maven.index.updater.IndexUpdateRequest) Objects(java.util.Objects) IndexUpdateFailedException(org.apache.archiva.indexer.IndexUpdateFailedException) List(java.util.List) HttpConfiguration(org.apache.maven.wagon.shared.http.HttpConfiguration) AssetType(org.apache.archiva.repository.storage.AssetType) IndexFormatTooOldException(org.apache.maven.index_shaded.lucene.index.IndexFormatTooOldException) IndexerEngine(org.apache.maven.index.IndexerEngine) EditableRepository(org.apache.archiva.repository.EditableRepository) Scanner(org.apache.maven.index.Scanner) ArchivaConfiguration(org.apache.archiva.configuration.provider.ArchivaConfiguration) StaticContextMemberProvider(org.apache.maven.index.context.StaticContextMemberProvider) ArtifactContextProducer(org.apache.maven.index.ArtifactContextProducer) IndexUpdater(org.apache.maven.index.updater.IndexUpdater) Inject(javax.inject.Inject) Repository(org.apache.archiva.repository.Repository) RemoteRepository(org.apache.archiva.repository.RemoteRepository) Service(org.springframework.stereotype.Service) WagonFactoryRequest(org.apache.archiva.maven.common.proxy.WagonFactoryRequest) IndexPackingRequest(org.apache.maven.index.packer.IndexPackingRequest) ResourceFetcher(org.apache.maven.index.updater.ResourceFetcher) StreamWagon(org.apache.maven.wagon.StreamWagon) Logger(org.slf4j.Logger) IndexPacker(org.apache.maven.index.packer.IndexPacker) MalformedURLException(java.net.MalformedURLException) Files(java.nio.file.Files) ContextMemberProvider(org.apache.maven.index.context.ContextMemberProvider) DefaultScannerListener(org.apache.maven.index.DefaultScannerListener) ScanningRequest(org.apache.maven.index.ScanningRequest) AuthenticationInfo(org.apache.maven.wagon.authentication.AuthenticationInfo) IOException(java.io.IOException) RepositoryType(org.apache.archiva.repository.RepositoryType) IndexingContext(org.apache.maven.index.context.IndexingContext) ConcurrentSkipListSet(java.util.concurrent.ConcurrentSkipListSet) ResourceDoesNotExistException(org.apache.maven.wagon.ResourceDoesNotExistException) Paths(java.nio.file.Paths) TransferListener(org.apache.maven.wagon.events.TransferListener) Wagon(org.apache.maven.wagon.Wagon) WagonFactoryException(org.apache.archiva.maven.common.proxy.WagonFactoryException) ScanningResult(org.apache.maven.index.ScanningResult) InputStream(java.io.InputStream) StaticContextMemberProvider(org.apache.maven.index.context.StaticContextMemberProvider) ContextMemberProvider(org.apache.maven.index.context.ContextMemberProvider) IOException(java.io.IOException) UnsupportedBaseContextException(org.apache.archiva.indexer.UnsupportedBaseContextException) IndexCreationFeature(org.apache.archiva.repository.features.IndexCreationFeature) IndexPackingRequest(org.apache.maven.index.packer.IndexPackingRequest) IndexCreationFailedException(org.apache.archiva.indexer.IndexCreationFailedException) StorageAsset(org.apache.archiva.repository.storage.StorageAsset) ArchivaIndexingContext(org.apache.archiva.indexer.ArchivaIndexingContext) IndexingContext(org.apache.maven.index.context.IndexingContext) StaticContextMemberProvider(org.apache.maven.index.context.StaticContextMemberProvider)

Example 22 with Repository

use of org.apache.archiva.repository.Repository in project archiva by apache.

the class MavenIndexManager method reset.

@Override
public ArchivaIndexingContext reset(ArchivaIndexingContext context) throws IndexUpdateFailedException {
    ArchivaIndexingContext ctx;
    executeUpdateFunction(context, indexingContext -> {
        try {
            indexingContext.close(true);
        } catch (IOException e) {
            log.warn("Index close failed");
        }
        org.apache.archiva.repository.storage.util.StorageUtil.deleteRecursively(context.getPath());
    });
    try {
        Repository repo = context.getRepository();
        ctx = createContext(context.getRepository());
        if (repo instanceof EditableRepository) {
            ((EditableRepository) repo).setIndexingContext(ctx);
        }
    } catch (IndexCreationFailedException e) {
        throw new IndexUpdateFailedException("Could not create index");
    }
    return ctx;
}
Also used : ManagedRepository(org.apache.archiva.repository.ManagedRepository) EditableRepository(org.apache.archiva.repository.EditableRepository) Repository(org.apache.archiva.repository.Repository) RemoteRepository(org.apache.archiva.repository.RemoteRepository) IndexCreationFailedException(org.apache.archiva.indexer.IndexCreationFailedException) IOException(java.io.IOException) IndexUpdateFailedException(org.apache.archiva.indexer.IndexUpdateFailedException) ArchivaIndexingContext(org.apache.archiva.indexer.ArchivaIndexingContext) EditableRepository(org.apache.archiva.repository.EditableRepository)

Example 23 with Repository

use of org.apache.archiva.repository.Repository in project archiva by apache.

the class MavenRepositorySearch method addIndexingContexts.

/**
 * @param selectedRepos
 * @return indexing contextId used
 */
private List<String> addIndexingContexts(List<String> selectedRepos) {
    Set<String> indexingContextIds = new HashSet<>();
    for (String repo : selectedRepos) {
        try {
            Repository rRepo = repositoryRegistry.getRepository(repo);
            if (rRepo != null) {
                if (rRepo.getType().equals(RepositoryType.MAVEN)) {
                    assert rRepo.getIndexingContext() != null;
                    IndexingContext context = rRepo.getIndexingContext().getBaseContext(IndexingContext.class);
                    if (context.isSearchable()) {
                        indexingContextIds.addAll(getRemoteIndexingContextIds(repo));
                        indexingContextIds.add(context.getId());
                    } else {
                        log.warn("indexingContext with id {} not searchable", rRepo.getId());
                    }
                }
            } else {
                log.warn("Repository '{}' not found in configuration.", repo);
            }
        } catch (RepositorySearchException e) {
            log.warn("RepositorySearchException occured while accessing index of repository '{}' : {}", repo, e.getMessage());
            continue;
        } catch (UnsupportedBaseContextException e) {
            log.error("Fatal situation: Maven repository without IndexingContext found.");
            continue;
        }
    }
    return new ArrayList<>(indexingContextIds);
}
Also used : UnsupportedBaseContextException(org.apache.archiva.indexer.UnsupportedBaseContextException) Repository(org.apache.archiva.repository.Repository) RemoteRepository(org.apache.archiva.repository.RemoteRepository) ArrayList(java.util.ArrayList) IndexingContext(org.apache.maven.index.context.IndexingContext) RepositorySearchException(org.apache.archiva.indexer.search.RepositorySearchException) HashSet(java.util.HashSet)

Example 24 with Repository

use of org.apache.archiva.repository.Repository in project archiva by apache.

the class NewVersionsOfArtifactRssFeedProcessor method processNewVersionsOfArtifact.

private SyndFeed processNewVersionsOfArtifact(String groupId, String artifactId) throws FeedException {
    List<ArtifactMetadata> artifacts = new ArrayList<>();
    try (RepositorySession session = repositorySessionFactory.createSession()) {
        final MetadataRepository metadataRepository = session.getRepository();
        for (Repository repo : repositoryRegistry.getRepositories()) {
            final String repoId = repo.getId();
            Collection<String> versions = metadataRepository.getProjectVersions(session, repoId, groupId, artifactId);
            for (String version : versions) {
                artifacts.addAll(metadataRepository.getArtifacts(session, repoId, groupId, artifactId, version));
            }
        }
    } catch (MetadataRepositoryException e) {
        throw new FeedException("Unable to construct feed, metadata could not be retrieved: " + e.getMessage(), e);
    } catch (MetadataResolutionException e) {
        throw new FeedException("Unable to construct feed, metadata could not be retrieved: " + e.getMessage(), e);
    }
    long tmp = 0;
    RssFeedEntry entry = null;
    List<RssFeedEntry> entries = new ArrayList<>();
    String description = "";
    int idx = 0;
    for (ArtifactMetadata artifact : artifacts) {
        long whenGathered = artifact.getWhenGathered().toInstant().toEpochMilli();
        if (tmp != whenGathered) {
            if (entry != null) {
                entry.setDescription(description);
                entries.add(entry);
                entry = null;
            }
            entry = new RssFeedEntry(this.getTitle() + "\'" + groupId + ":" + artifactId + "\'" + " as of " + new Date(whenGathered));
            entry.setPublishedDate(Date.from(artifact.getWhenGathered().toInstant()));
            description = this.getDescription() + "\'" + groupId + ":" + artifactId + "\'" + ": \n" + artifact.getId() + " | ";
        } else {
            description = description + artifact.getId() + " | ";
        }
        if (idx == (artifacts.size() - 1)) {
            entry.setDescription(description);
            entries.add(entry);
        }
        tmp = whenGathered;
        idx++;
    }
    String key = groupId + ":" + artifactId;
    return generator.generateFeed(getTitle() + "\'" + key + "\'", "New versions of artifact " + "\'" + key + "\' found during repository scan.", entries);
}
Also used : FeedException(com.rometools.rome.io.FeedException) ArrayList(java.util.ArrayList) RssFeedEntry(org.apache.archiva.rss.RssFeedEntry) Date(java.util.Date) Repository(org.apache.archiva.repository.Repository) ArtifactMetadata(org.apache.archiva.metadata.model.ArtifactMetadata)

Example 25 with Repository

use of org.apache.archiva.repository.Repository in project archiva by apache.

the class NewVersionsOfArtifactRssFeedProcessorTest method setUp.

@Before
@Override
public void setUp() throws Exception {
    super.setUp();
    newVersionsProcessor = new NewVersionsOfArtifactRssFeedProcessor();
    newVersionsProcessor.setGenerator(new RssFeedGenerator());
    metadataRepository = mock(MetadataRepository.class);
    sessionFactory = mock(RepositorySessionFactory.class);
    session = mock(RepositorySession.class);
    when(sessionFactory.createSession()).thenReturn(session);
    when(session.getRepository()).thenReturn(metadataRepository);
    repositoryRegistry = mock(ArchivaRepositoryRegistry.class);
    List<Repository> reg = new ArrayList<>();
    reg.add(new BasicManagedRepository(TEST_REPO, TEST_REPO, new FilesystemStorage(Paths.get("target/test-storage"), new DefaultFileLockManager())));
    when(repositoryRegistry.getRepositories()).thenReturn(reg);
    newVersionsProcessor.setRepositorySessionFactory(sessionFactory);
    newVersionsProcessor.setRepositoryRegistry(repositoryRegistry);
}
Also used : MetadataRepository(org.apache.archiva.metadata.repository.MetadataRepository) Repository(org.apache.archiva.repository.Repository) MetadataRepository(org.apache.archiva.metadata.repository.MetadataRepository) BasicManagedRepository(org.apache.archiva.repository.base.managed.BasicManagedRepository) BasicManagedRepository(org.apache.archiva.repository.base.managed.BasicManagedRepository) RepositorySessionFactory(org.apache.archiva.metadata.repository.RepositorySessionFactory) FilesystemStorage(org.apache.archiva.repository.storage.fs.FilesystemStorage) ArrayList(java.util.ArrayList) DefaultFileLockManager(org.apache.archiva.common.filelock.DefaultFileLockManager) RepositorySession(org.apache.archiva.metadata.repository.RepositorySession) RssFeedGenerator(org.apache.archiva.rss.RssFeedGenerator) ArchivaRepositoryRegistry(org.apache.archiva.repository.base.ArchivaRepositoryRegistry) Before(org.junit.Before)

Aggregations

Repository (org.apache.archiva.repository.Repository)25 RemoteRepository (org.apache.archiva.repository.RemoteRepository)15 ManagedRepository (org.apache.archiva.repository.ManagedRepository)12 IOException (java.io.IOException)10 ArchivaIndexingContext (org.apache.archiva.indexer.ArchivaIndexingContext)9 IndexCreationFailedException (org.apache.archiva.indexer.IndexCreationFailedException)8 EditableRepository (org.apache.archiva.repository.EditableRepository)8 IndexUpdateFailedException (org.apache.archiva.indexer.IndexUpdateFailedException)7 Path (java.nio.file.Path)5 ArrayList (java.util.ArrayList)5 UnsupportedBaseContextException (org.apache.archiva.indexer.UnsupportedBaseContextException)5 BasicManagedRepository (org.apache.archiva.repository.base.managed.BasicManagedRepository)5 IndexCreationFeature (org.apache.archiva.repository.features.IndexCreationFeature)5 IndexingContext (org.apache.maven.index.context.IndexingContext)5 List (java.util.List)4 Inject (javax.inject.Inject)4 ArchivaConfiguration (org.apache.archiva.configuration.provider.ArchivaConfiguration)4 RepositoryException (org.apache.archiva.repository.RepositoryException)4 RepositoryType (org.apache.archiva.repository.RepositoryType)4 Files (java.nio.file.Files)3