@Override public void updateLocalIndexPath(Repository repo) { if (repo.supportsFeature(IndexCreationFeature.class)) { IndexCreationFeature icf = repo.getFeature(IndexCreationFeature.class).get(); try { icf.setLocalIndexPath(getIndexPath(repo)); } catch (IOException e) { log.error("Could not set local index path for {}. New URI: {}", repo.getId(), icf.getIndexPath()); } } }
/** * Resets the indexing context of a given repository. * * @param repo * @throws IndexUpdateFailedException */ @SuppressWarnings( "unchecked" ) public void resetIndexingContext(Repository repo) throws IndexUpdateFailedException { if (repo.hasIndex() && repo instanceof EditableRepository) { EditableRepository eRepo = (EditableRepository) repo; ArchivaIndexingContext newCtx = getIndexManager(repo.getType()).reset(repo.getIndexingContext()); eRepo.setIndexingContext(newCtx); } }
private Path getPackedIndexPath(Repository repo) throws IOException { IndexCreationFeature icf = repo.getFeature(IndexCreationFeature.class).get(); Path repoDir = repo.getLocalPath(); URI indexDir = icf.getPackedIndexPath(); Path indexDirectory = null; if ( ! StringUtils.isEmpty(indexDir.toString( ) ) ) { indexDirectory = PathUtil.getPathFromUri( indexDir ); // not absolute so create it in repository directory if ( !indexDirectory.isAbsolute( ) ) { indexDirectory = repoDir.resolve( indexDirectory ); } } else { indexDirectory = repoDir.resolve( DEFAULT_PACKED_INDEX_DIR ); } if ( !Files.exists( indexDirectory ) ) { Files.createDirectories( indexDirectory ); } return indexDirectory; }
private IndexingContext getIndexingContext( Repository repository, String contextKey, Path repoDir, Path indexDirectory, String indexUrl ) throws IOException { return indexer.createIndexingContext( contextKey, repository.getId( ), repoDir.toFile( ), indexDirectory.toFile( ), repository.getLocation( ) == null ? null : repository.getLocation( ).toString( ), indexUrl, true, false, indexCreators ); }
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());
@Override public void update(final ArchivaIndexingContext context, final boolean fullUpdate) throws IndexUpdateFailedException log.info( "start download remote index for remote repository {}", context.getRepository( ).getId( ) ); URI remoteUpdateUri; if ( !( context.getRepository( ) instanceof RemoteRepository ) || !(context.getRepository().supportsFeature(RemoteIndexFeature.class)) ) RemoteIndexFeature rif = context.getRepository().getFeature(RemoteIndexFeature.class).get(); remoteUpdateUri = context.getRepository().getLocation().resolve(rif.getIndexUri());
@Override public ArchivaIndexingContext createContext( Repository repository ) throws IndexCreationFailedException { log.debug("Creating context for repo {}, type: {}", repository.getId(), repository.getType()); if ( repository.getType( ) != RepositoryType.MAVEN ) { throw new UnsupportedRepositoryTypeException( repository.getType( ) ); } IndexingContext mvnCtx = null; try { if ( repository instanceof RemoteRepository ) { mvnCtx = createRemoteContext( (RemoteRepository) repository ); } else if ( repository instanceof ManagedRepository ) { mvnCtx = createManagedContext( (ManagedRepository) repository ); } } catch ( IOException e ) { log.error( "IOException during context creation " + e.getMessage( ), e ); throw new IndexCreationFailedException( "Could not create index context for repository " + repository.getId( ) + ( StringUtils.isNotEmpty( e.getMessage( ) ) ? ": " + e.getMessage( ) : "" ), e ); } MavenIndexContext context = new MavenIndexContext( repository, mvnCtx ); return context; }
repositoryRegistry.getRepository( id ) ).filter( repo -> repo.getType().equals( RepositoryType.MAVEN ) ) .map( repo -> { try return repo.getIndexingContext().getBaseContext( IndexingContext.class );
@SuppressWarnings( "unchecked" ) @Override public <T extends RepositoryContent, V extends Repository> T createContent( Class<T> clazz, V repository ) throws RepositoryException { if (!supports( repository.getType() )) { throw new RepositoryException( "Repository type "+repository.getType()+" is not supported by this implementation." ); } if (repository instanceof ManagedRepository && ManagedRepositoryContent.class.isAssignableFrom( clazz ) ) { return (T) this.createManagedContent( (ManagedRepository) repository ); } else if (repository instanceof RemoteRepository && RemoteRepository.class.isAssignableFrom( clazz )) { return (T) this.createRemoteContent( (RemoteRepository) repository ); } else { throw new RepositoryException( "Repository flavour is not supported: "+repository.getClass().getName() ); } }
@SuppressWarnings( "unchecked" ) @Override public <T> void raise(RepositoryEvent<T> event) { if (event instanceof IndexCreationEvent ) { if (managedRepositories.containsKey(event.getRepository().getId()) || remoteRepositories.containsKey(event.getRepository().getId())) { EditableRepository repo = (EditableRepository) event.getRepository(); if (repo != null && repo.getIndexingContext()!=null) { try { ArchivaIndexManager idxmgr = getIndexManager(repo.getType()); if (idxmgr != null) { ArchivaIndexingContext newCtx = idxmgr.move(repo.getIndexingContext(), repo); repo.setIndexingContext(newCtx); idxmgr.updateLocalIndexPath(repo); } } catch (IndexCreationFailedException e) { log.error("Could not move index to new directory {}", e.getMessage(), e); } } } } for(RepositoryEventListener listener : listeners) { listener.raise(event); } } }
private IndexingContext getIndexingContext(String id) { String repoId; if (StringUtils.startsWith(id, "remote-")) { repoId = StringUtils.substringAfter(id, "remote-"); } else { repoId = id; } Repository repo = repositoryRegistry.getRepository(repoId); if (repo==null) { return null; } else { if (repo.getIndexingContext()!=null) { try { return repo.getIndexingContext().getBaseContext(IndexingContext.class); } catch (UnsupportedBaseContextException e) { return null; } } else { return null; } } }
@Override public void updateLocalIndexPath(Repository repo) { if (repo.supportsFeature(IndexCreationFeature.class)) { IndexCreationFeature icf = repo.getFeature(IndexCreationFeature.class).get(); try { icf.setLocalIndexPath(getIndexPath(repo)); icf.setLocalPackedIndexPath(getPackedIndexPath(repo)); } catch (IOException e) { log.error("Could not set local index path for {}. New URI: {}", repo.getId(), icf.getIndexPath()); } } }
private Path getIndexPath(Repository repo) throws IOException { IndexCreationFeature icf = repo.getFeature(IndexCreationFeature.class).get(); Path repoDir = repo.getLocalPath(); URI indexDir = icf.getIndexPath(); Path indexDirectory = null; if ( ! StringUtils.isEmpty(indexDir.toString( ) ) ) { indexDirectory = PathUtil.getPathFromUri( indexDir ); // not absolute so create it in repository directory if ( !indexDirectory.isAbsolute( ) ) { indexDirectory = repoDir.resolve( indexDirectory ); } } else { indexDirectory = repoDir.resolve( DEFAULT_INDEXER_DIR); } if ( !Files.exists( indexDirectory ) ) { Files.createDirectories( indexDirectory ); } return indexDirectory; }
private Path getIndexPath(Repository repo) throws IOException { IndexCreationFeature icf = repo.getFeature(IndexCreationFeature.class).get(); Path repoDir = repo.getLocalPath(); URI indexDir = icf.getIndexPath(); Path indexDirectory = null; if ( ! StringUtils.isEmpty(indexDir.toString( ) ) ) { indexDirectory = PathUtil.getPathFromUri( indexDir ); // not absolute so create it in repository directory if ( !indexDirectory.isAbsolute( ) ) { indexDirectory = repoDir.resolve( indexDirectory ); } } else { indexDirectory = repoDir.resolve( DEFAULT_INDEXER_DIR ); } if ( !Files.exists( indexDirectory ) ) { Files.createDirectories( indexDirectory ); } return indexDirectory; }