http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicManagedRepository.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicManagedRepository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicManagedRepository.java index 6c1a285..8df9883 100644 --- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicManagedRepository.java +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicManagedRepository.java @@ -19,10 +19,14 @@ package org.apache.archiva.repository; * under the License. */ +import org.apache.archiva.indexer.ArchivaIndexingContext; import org.apache.archiva.repository.features.ArtifactCleanupFeature; import org.apache.archiva.repository.features.IndexCreationFeature; import org.apache.archiva.repository.features.StagingRepositoryFeature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.io.IOException; import java.nio.file.Path; import java.util.Locale; @@ -35,8 +39,8 @@ import java.util.Locale; public class BasicManagedRepository extends AbstractManagedRepository { + Logger log = LoggerFactory.getLogger(BasicManagedRepository.class); ArtifactCleanupFeature artifactCleanupFeature = new ArtifactCleanupFeature( ); - IndexCreationFeature indexCreationFeature = new IndexCreationFeature( ); StagingRepositoryFeature stagingRepositoryFeature = new StagingRepositoryFeature( ); @@ -60,6 +64,7 @@ public class BasicManagedRepository extends AbstractManagedRepository } private void initFeatures() { + IndexCreationFeature indexCreationFeature = new IndexCreationFeature(this.getId(), this); addFeature( artifactCleanupFeature ); addFeature( indexCreationFeature ); addFeature( stagingRepositoryFeature );
http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicRemoteRepository.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicRemoteRepository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicRemoteRepository.java index 64b705c..70c38a5 100644 --- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicRemoteRepository.java +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicRemoteRepository.java @@ -19,8 +19,13 @@ package org.apache.archiva.repository; * under the License. */ +import org.apache.archiva.indexer.ArchivaIndexingContext; +import org.apache.archiva.repository.features.IndexCreationFeature; import org.apache.archiva.repository.features.RemoteIndexFeature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.io.IOException; import java.nio.file.Path; import java.util.Locale; @@ -33,13 +38,17 @@ import java.util.Locale; public class BasicRemoteRepository extends AbstractRemoteRepository { + Logger log = LoggerFactory.getLogger(BasicRemoteRepository.class); + RemoteIndexFeature remoteIndexFeature = new RemoteIndexFeature(); + IndexCreationFeature indexCreationFeature = new IndexCreationFeature(true); static final StandardCapabilities CAPABILITIES = new StandardCapabilities( new ReleaseScheme[] { ReleaseScheme.RELEASE, ReleaseScheme.SNAPSHOT }, new String[] {"default"}, new String[0], new String[] { - RemoteIndexFeature.class.toString() + RemoteIndexFeature.class.toString(), + IndexCreationFeature.class.toString() }, true, true, true, true, true ); public BasicRemoteRepository( String id, String name, Path basePath ) @@ -56,6 +65,7 @@ public class BasicRemoteRepository extends AbstractRemoteRepository private void initFeatures() { addFeature( remoteIndexFeature ); + addFeature( indexCreationFeature ); } @Override http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java index 557ee9e..17a08f7 100644 --- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java @@ -26,24 +26,22 @@ import org.apache.archiva.configuration.ConfigurationListener; import org.apache.archiva.configuration.IndeterminateConfigurationException; import org.apache.archiva.configuration.ManagedRepositoryConfiguration; import org.apache.archiva.configuration.RemoteRepositoryConfiguration; -import org.apache.archiva.indexer.ArchivaIndexingContext; -import org.apache.archiva.indexer.IndexManagerFactory; +import org.apache.archiva.indexer.*; import org.apache.archiva.redback.components.registry.RegistryException; import org.apache.archiva.repository.features.ArtifactCleanupFeature; +import org.apache.archiva.repository.features.IndexCreationEvent; +import org.apache.archiva.repository.features.IndexCreationFeature; import org.apache.archiva.repository.features.StagingRepositoryFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; import javax.inject.Inject; import javax.inject.Named; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.io.IOException; +import java.util.*; import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -58,7 +56,7 @@ import java.util.stream.Stream; * TODO: Audit events should be sent, but we don't want dependency to the repsitory-metadata-api */ @Service( "repositoryRegistry" ) -public class RepositoryRegistry implements ConfigurationListener { +public class RepositoryRegistry implements ConfigurationListener, RepositoryEventHandler, RepositoryEventListener { private static final Logger log = LoggerFactory.getLogger( RepositoryRegistry.class ); @@ -78,6 +76,7 @@ public class RepositoryRegistry implements ConfigurationListener { @Named("repositoryContentFactory#default") RepositoryContentFactory repositoryContentFactory; + private List<RepositoryEventListener> listeners = new ArrayList<>(); private Map<String, ManagedRepository> managedRepositories = new HashMap<>( ); @@ -98,8 +97,15 @@ public class RepositoryRegistry implements ConfigurationListener { rwLock.writeLock( ).lock( ); try { + log.debug("Initializing repository registry"); + for(ManagedRepository rep : managedRepositories.values()) { + rep.close(); + } managedRepositories.clear( ); managedRepositories.putAll( getManagedRepositoriesFromConfig( ) ); + for (RemoteRepository repo : remoteRepositories.values()) { + repo.close(); + } remoteRepositories.clear( ); remoteRepositories.putAll( getRemoteRepositoriesFromConfig( ) ); // archivaConfiguration.addChangeListener(this); @@ -111,6 +117,18 @@ public class RepositoryRegistry implements ConfigurationListener { } } + @PreDestroy + public void destroy() { + for(ManagedRepository rep : managedRepositories.values()) { + rep.close(); + } + for (RemoteRepository repo : remoteRepositories.values()) { + repo.close(); + } + } + + + private Map<RepositoryType, RepositoryProvider> createProviderMap( ) { Map<RepositoryType, RepositoryProvider> map = new HashMap<>( ); @@ -173,7 +191,9 @@ public class RepositoryRegistry implements ConfigurationListener { private ManagedRepository createNewManagedRepository( RepositoryProvider provider, ManagedRepositoryConfiguration cfg ) throws RepositoryException { + log.debug("Creating repo {}", cfg.getId()); ManagedRepository repo = provider.createManagedInstance( cfg ); + repo.addListener(this); updateRepositoryReferences( provider, repo, cfg , null); return repo; @@ -181,6 +201,7 @@ public class RepositoryRegistry implements ConfigurationListener { private void updateRepositoryReferences(RepositoryProvider provider, ManagedRepository repo, ManagedRepositoryConfiguration cfg, Configuration configuration) throws RepositoryException { + log.debug("Updating references of repo {}",repo.getId()); if ( repo.supportsFeature( StagingRepositoryFeature.class ) ) { StagingRepositoryFeature feature = repo.getFeature( StagingRepositoryFeature.class ).get( ); @@ -194,9 +215,33 @@ public class RepositoryRegistry implements ConfigurationListener { } } } - if ( repo instanceof EditableManagedRepository && repo.getContent() == null) + if ( repo instanceof EditableManagedRepository) { - ( (EditableManagedRepository) repo ).setContent( repositoryContentFactory.getManagedRepositoryContent( repo ) ); + EditableManagedRepository editableRepo = (EditableManagedRepository) repo; + if (repo.getContent()==null) { + editableRepo.setContent(repositoryContentFactory.getManagedRepositoryContent(repo)); + } + log.debug("Index repo: "+repo.hasIndex()); + if (repo.hasIndex() && repo.getIndexingContext()==null) { + log.debug("Creating indexing context for {}", repo.getId()); + createIndexingContext(editableRepo); + } + } + + } + + private ArchivaIndexManager getIndexManager(RepositoryType type) { + return indexManagerFactory.getIndexManager(type); + } + + private void createIndexingContext(EditableRepository editableRepo) throws RepositoryException { + if (editableRepo.supportsFeature(IndexCreationFeature.class)) { + ArchivaIndexManager idxManager = getIndexManager(editableRepo.getType()); + try { + editableRepo.setIndexingContext(idxManager.createContext(editableRepo)); + } catch (IndexCreationFailedException e) { + throw new RepositoryException("Could not create index for repository "+editableRepo.getId()+": "+e.getMessage(),e); + } } } @@ -263,7 +308,9 @@ public class RepositoryRegistry implements ConfigurationListener { private RemoteRepository createNewRemoteRepository( RepositoryProvider provider, RemoteRepositoryConfiguration cfg ) throws RepositoryException { + log.debug("Creating remote repo {}", cfg.getId()); RemoteRepository repo = provider.createRemoteInstance( cfg ); + repo.addListener(this); updateRepositoryReferences( provider, repo, cfg , null); return repo; @@ -273,7 +320,13 @@ public class RepositoryRegistry implements ConfigurationListener { { if ( repo instanceof EditableRemoteRepository && repo.getContent() == null) { - ( (EditableRemoteRepository) repo ).setContent( repositoryContentFactory.getRemoteRepositoryContent( repo ) ); + EditableRemoteRepository editableRepo = (EditableRemoteRepository) repo; + if (repo.getContent()==null) { + editableRepo.setContent( repositoryContentFactory.getRemoteRepositoryContent( repo ) ); + } + if (repo.supportsFeature(IndexCreationFeature.class) && repo.getIndexingContext()==null ) { + createIndexingContext(editableRepo); + } } } @@ -346,12 +399,15 @@ public class RepositoryRegistry implements ConfigurationListener { rwLock.readLock( ).lock( ); try { + log.debug("getRepository {}", repoId); if ( managedRepositories.containsKey( repoId ) ) { + log.debug("Managed repo"); return managedRepositories.get( repoId ); } else { + log.debug("Remote repo"); return remoteRepositories.get( repoId ); } } @@ -422,6 +478,9 @@ public class RepositoryRegistry implements ConfigurationListener { ManagedRepository originRepo = managedRepositories.put( id, managedRepository ); try { + if (originRepo!=null) { + originRepo.close(); + } RepositoryProvider provider = getProvider( managedRepository.getType() ); ManagedRepositoryConfiguration newCfg = provider.getManagedConfiguration( managedRepository ); Configuration configuration = getArchivaConfiguration( ).getConfiguration( ); @@ -521,6 +580,7 @@ public class RepositoryRegistry implements ConfigurationListener { } else { repo = getProvider( repoType ).createManagedInstance( managedRepositoryConfiguration ); + repo.addListener(this); managedRepositories.put(id, repo); } updateRepositoryReferences( getProvider( repoType ), repo, managedRepositoryConfiguration, configuration ); @@ -563,6 +623,9 @@ public class RepositoryRegistry implements ConfigurationListener { RemoteRepositoryConfiguration newCfg=null; try { + if (originRepo!=null) { + originRepo.close(); + } final RepositoryProvider provider = getProvider( remoteRepository.getType() ); newCfg = provider.getRemoteConfiguration( remoteRepository ); updateRepositoryReferences( provider, remoteRepository, newCfg, configuration ); @@ -698,6 +761,7 @@ public class RepositoryRegistry implements ConfigurationListener { } else { repo = getProvider( repoType ).createRemoteInstance( remoteRepositoryConfiguration ); + repo.addListener(this); remoteRepositories.put(id, repo); } updateRepositoryReferences( getProvider( repoType ), repo, remoteRepositoryConfiguration, configuration ); @@ -712,6 +776,12 @@ public class RepositoryRegistry implements ConfigurationListener { } + public void removeRepository(String repoId) throws RepositoryException { + Repository repo = getRepository(repoId); + if (repo!=null) { + removeRepository(repo); + } + } public void removeRepository(Repository repo) throws RepositoryException { if (repo instanceof RemoteRepository ) { @@ -739,6 +809,7 @@ public class RepositoryRegistry implements ConfigurationListener { try { repo = managedRepositories.remove( id ); if (repo!=null) { + repo.close(); Configuration configuration = getArchivaConfiguration().getConfiguration(); ManagedRepositoryConfiguration cfg = configuration.findManagedRepositoryById( id ); if (cfg!=null) { @@ -754,8 +825,7 @@ public class RepositoryRegistry implements ConfigurationListener { log.error("Could not save config after repository removal: {}", e.getMessage(), e); managedRepositories.put(repo.getId(), repo); throw new RepositoryException( "Could not save configuration after repository removal: "+e.getMessage() ); - } - finally + } finally { rwLock.writeLock().unlock(); } @@ -771,13 +841,13 @@ public class RepositoryRegistry implements ConfigurationListener { try { repo = managedRepositories.remove( id ); if (repo!=null) { + repo.close(); ManagedRepositoryConfiguration cfg = configuration.findManagedRepositoryById( id ); if (cfg!=null) { configuration.removeManagedRepository( cfg ); } } - } - finally + } finally { rwLock.writeLock().unlock(); } @@ -800,7 +870,9 @@ public class RepositoryRegistry implements ConfigurationListener { rwLock.writeLock().lock(); try { repo = remoteRepositories.remove( id ); + if (repo!=null) { + repo.close(); Configuration configuration = getArchivaConfiguration().getConfiguration(); RemoteRepositoryConfiguration cfg = configuration.findRemoteRepositoryById( id ); if (cfg!=null) { @@ -816,8 +888,7 @@ public class RepositoryRegistry implements ConfigurationListener { log.error("Could not save config after repository removal: {}", e.getMessage(), e); remoteRepositories.put(repo.getId(), repo); throw new RepositoryException( "Could not save configuration after repository removal: "+e.getMessage() ); - } - finally + } finally { rwLock.writeLock().unlock(); } @@ -833,13 +904,13 @@ public class RepositoryRegistry implements ConfigurationListener { try { repo = remoteRepositories.remove( id ); if (repo!=null) { + repo.close(); RemoteRepositoryConfiguration cfg = configuration.findRemoteRepositoryById( id ); if (cfg!=null) { configuration.removeRemoteRepository( cfg ); } } - } - finally + } finally { rwLock.writeLock().unlock(); } @@ -854,6 +925,20 @@ public class RepositoryRegistry implements ConfigurationListener { initialize(); } + /** + * Resets the indexing context of a given repository. + * + * @param repo + * @throws IndexUpdateFailedException + */ + 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); + } + } + /** * Creates a new repository instance with the same settings as this one. The cloned repository is not @@ -871,6 +956,7 @@ public class RepositoryRegistry implements ConfigurationListener { ManagedRepositoryConfiguration cfg = provider.getManagedConfiguration(repo); cfg.setId(newId); ManagedRepository cloned = provider.createManagedInstance(cfg); + cloned.addListener(this); return cloned; } @@ -900,6 +986,7 @@ public class RepositoryRegistry implements ConfigurationListener { RemoteRepositoryConfiguration cfg = provider.getRemoteConfiguration(repo); cfg.setId(newId); RemoteRepository cloned = provider.createRemoteInstance(cfg); + cloned.addListener(this); return cloned; } @@ -910,5 +997,41 @@ public class RepositoryRegistry implements ConfigurationListener { } + @Override + public void addListener(RepositoryEventListener listener) { + if (!this.listeners.contains(listener)) { + this.listeners.add(listener); + } + } + + @Override + public void removeListener(RepositoryEventListener listener) { + this.listeners.remove(listener); + } + + @Override + public void clearListeners() { + this.listeners.clear(); + } + @Override + public <T> void raise(RepositoryEvent<T> event) { + if (event.getType().equals(IndexCreationEvent.Index.URI_CHANGE)) { + if (managedRepositories.containsKey(event.getRepositoryId()) || + remoteRepositories.containsKey(event.getRepositoryId())) { + EditableRepository repo = (EditableRepository) getRepository(event.getRepositoryId()); + if (repo != null && repo.getIndexingContext()!=null) { + try { + ArchivaIndexingContext newCtx = getIndexManager(repo.getType()).move(repo.getIndexingContext(), repo); + repo.setIndexingContext(newCtx); + } catch (IndexCreationFailedException e) { + log.error("Could not move index to new directory {}", e.getMessage(), e); + } + } + } + } + for(RepositoryEventListener listener : listeners) { + listener.raise(event); + } + } } http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/AbstractFeature.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/AbstractFeature.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/AbstractFeature.java new file mode 100644 index 0000000..2f5831f --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/AbstractFeature.java @@ -0,0 +1,66 @@ +package org.apache.archiva.repository.features; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.archiva.repository.RepositoryEvent; +import org.apache.archiva.repository.RepositoryEventListener; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class AbstractFeature { + private List<RepositoryEventListener> listener = new ArrayList<>(); + + AbstractFeature() { + + } + + AbstractFeature(RepositoryEventListener listener) { + this.listener.add(listener); + } + + AbstractFeature(Collection<RepositoryEventListener> listeners) { + this.listener.addAll(listeners); + } + + public void addListener(RepositoryEventListener listener) { + if (!this.listener.contains(listener)) { + this.listener.add(listener); + } + this.listener.add(listener); + } + + public void removeListener(RepositoryEventListener listener) { + this.listener.remove(listener); + } + + public void clearListeners() { + this.listener.clear(); + } + + protected void raiseEvent(RepositoryEvent event) { + for(RepositoryEventListener listr : listener) { + listr.raise(event); + } + } + + +} http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationEvent.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationEvent.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationEvent.java new file mode 100644 index 0000000..f871dc9 --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationEvent.java @@ -0,0 +1,35 @@ +package org.apache.archiva.repository.features; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.archiva.repository.RepositoryEvent; + +import java.net.URI; + +public class IndexCreationEvent extends RepositoryEvent<URI> { + + public enum Index implements EventType { + URI_CHANGE + } + + IndexCreationEvent(String repo, URI oldValue, URI value) { + super(Index.URI_CHANGE, repo, oldValue, value); + } +} http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java index 9c6b70c..eaf532f 100644 --- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java @@ -20,26 +20,36 @@ package org.apache.archiva.repository.features; */ +import org.apache.archiva.repository.Repository; +import org.apache.archiva.repository.RepositoryEventListener; import org.apache.commons.lang.StringUtils; import java.net.URI; import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.EventListener; +import java.util.List; /** * * This feature provides some information about index creation. * */ -public class IndexCreationFeature implements RepositoryFeature<IndexCreationFeature> { +public class IndexCreationFeature extends AbstractFeature implements RepositoryFeature<IndexCreationFeature>{ + private boolean skipPackedIndexCreation = false; private URI indexPath; - public IndexCreationFeature() { + private String repo; + + public IndexCreationFeature(String repoId, RepositoryEventListener listener) { + super(listener); + this.repo = repoId; try { - this.indexPath = new URI(".indexer"); + setIndexPath(new URI(".indexer")); } catch ( URISyntaxException e ) { @@ -89,7 +99,10 @@ public class IndexCreationFeature implements RepositoryFeature<IndexCreationFeat */ public void setIndexPath( URI indexPath ) { + URI oldVal = this.indexPath; this.indexPath = indexPath; + raiseEvent(new IndexCreationEvent(repo, oldVal, this.indexPath)); + } http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ArchivaIndexManagerMock.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ArchivaIndexManagerMock.java b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ArchivaIndexManagerMock.java new file mode 100644 index 0000000..e81bcff --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ArchivaIndexManagerMock.java @@ -0,0 +1,85 @@ +package org.apache.archiva.repository.mock; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.archiva.indexer.ArchivaIndexManager; +import org.apache.archiva.indexer.ArchivaIndexingContext; +import org.apache.archiva.indexer.IndexCreationFailedException; +import org.apache.archiva.indexer.IndexUpdateFailedException; +import org.apache.archiva.repository.Repository; +import org.apache.archiva.repository.RepositoryType; +import org.springframework.stereotype.Service; + +import java.net.URI; +import java.util.Collection; + +/** + * @author Martin Stockhammer <[email protected]> + */ +@Service("archivaIndexManager#maven") +public class ArchivaIndexManagerMock implements ArchivaIndexManager { + + + + @Override + public void pack(ArchivaIndexingContext context) throws IndexUpdateFailedException { + + } + + @Override + public void scan(ArchivaIndexingContext context) throws IndexUpdateFailedException { + + } + + @Override + public void update(ArchivaIndexingContext context, boolean fullUpdate) throws IndexUpdateFailedException { + + } + + @Override + public void addArtifactsToIndex(ArchivaIndexingContext context, Collection<URI> artifactReference) throws IndexUpdateFailedException { + + } + + @Override + public void removeArtifactsFromIndex(ArchivaIndexingContext context, Collection<URI> artifactReference) throws IndexUpdateFailedException { + + } + + @Override + public boolean supportsRepository(RepositoryType type) { + return true; + } + + @Override + public ArchivaIndexingContext createContext(Repository repository) throws IndexCreationFailedException { + return null; + } + + @Override + public ArchivaIndexingContext reset(ArchivaIndexingContext context) throws IndexUpdateFailedException { + return null; + } + + @Override + public ArchivaIndexingContext move(ArchivaIndexingContext context, Repository repo) throws IndexCreationFailedException { + return null; + } +} http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java index d4a78a6..82e1047 100644 --- a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java @@ -21,18 +21,7 @@ package org.apache.archiva.repository.mock; import org.apache.archiva.configuration.ManagedRepositoryConfiguration; import org.apache.archiva.configuration.RemoteRepositoryConfiguration; -import org.apache.archiva.repository.BasicManagedRepository; -import org.apache.archiva.repository.BasicRemoteRepository; -import org.apache.archiva.repository.EditableManagedRepository; -import org.apache.archiva.repository.EditableRemoteRepository; -import org.apache.archiva.repository.ManagedRepository; -import org.apache.archiva.repository.PasswordCredentials; -import org.apache.archiva.repository.ReleaseScheme; -import org.apache.archiva.repository.RemoteRepository; -import org.apache.archiva.repository.RepositoryCredentials; -import org.apache.archiva.repository.RepositoryException; -import org.apache.archiva.repository.RepositoryProvider; -import org.apache.archiva.repository.RepositoryType; +import org.apache.archiva.repository.*; import org.apache.archiva.repository.features.ArtifactCleanupFeature; import org.apache.archiva.repository.features.IndexCreationFeature; import org.apache.archiva.repository.features.RemoteIndexFeature; @@ -230,4 +219,8 @@ public class RepositoryProviderMock implements RepositoryProvider return configuration; } + @Override + public <T> void raise(RepositoryEvent<T> event) { + + } } http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/pom.xml ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/pom.xml b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/pom.xml index 2f2c624..66e6e5e 100644 --- a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/pom.xml +++ b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/pom.xml @@ -184,6 +184,12 @@ <scope>test</scope> </dependency> + <dependency> + <groupId>org.apache.archiva</groupId> + <artifactId>archiva-maven2-indexer</artifactId> + <scope>test</scope> + </dependency> + </dependencies> <build> http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java index 1bab921..4893bcd 100644 --- a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java +++ b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java @@ -22,6 +22,8 @@ package org.apache.archiva.scheduler.indexing; import org.apache.archiva.admin.model.RepositoryAdminException; import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin; +import org.apache.archiva.indexer.ArchivaIndexingContext; +import org.apache.archiva.indexer.UnsupportedBaseContextException; import org.apache.archiva.redback.components.taskqueue.Task; import org.apache.archiva.redback.components.taskqueue.execution.TaskExecutionException; import org.apache.archiva.redback.components.taskqueue.execution.TaskExecutor; @@ -86,7 +88,16 @@ public class ArchivaIndexingTaskExecutor ArtifactIndexingTask indexingTask = (ArtifactIndexingTask) task; ManagedRepository repository = indexingTask.getRepository( ); - IndexingContext context = indexingTask.getContext( ); + ArchivaIndexingContext archivaContext = indexingTask.getContext( ); + IndexingContext context = null; + try { + context = archivaContext.getBaseContext(IndexingContext.class); + } catch (UnsupportedBaseContextException e) { + throw new TaskExecutionException("Bad repository type.", e); + } + if (!nexusIndexer.getIndexingContexts().containsKey(context.getId())) { + nexusIndexer.addIndexingContext(context); + } if ( ArtifactIndexingTask.Action.FINISH.equals( indexingTask.getAction( ) ) && indexingTask.isExecuteOnEntireRepo( ) ) @@ -117,9 +128,10 @@ public class ArchivaIndexingTaskExecutor ( indexingTask.getResourceFile( ) == null ? "none" : indexingTask.getResourceFile( ) ) ); - context = managedRepositoryAdmin.createIndexContext( repository ); + archivaContext = repository.getIndexingContext(); + context = archivaContext.getBaseContext(IndexingContext.class); } - catch ( RepositoryAdminException e ) + catch ( UnsupportedBaseContextException e ) { log.error( "Error occurred while creating context: {}", e.getMessage( ) ); throw new TaskExecutionException( "Error occurred while creating context: " + e.getMessage( ), e ); http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArtifactIndexingTask.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArtifactIndexingTask.java b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArtifactIndexingTask.java index d2ca16e..dcf7428 100644 --- a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArtifactIndexingTask.java +++ b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArtifactIndexingTask.java @@ -19,9 +19,9 @@ package org.apache.archiva.scheduler.indexing; * under the License. */ +import org.apache.archiva.indexer.ArchivaIndexingContext; import org.apache.archiva.redback.components.taskqueue.Task; import org.apache.archiva.repository.ManagedRepository; -import org.apache.maven.index.context.IndexingContext; import java.nio.file.Path; @@ -42,7 +42,7 @@ public class ArtifactIndexingTask private final Action action; - private final IndexingContext context; + private final ArchivaIndexingContext context; private boolean executeOnEntireRepo = true; @@ -52,7 +52,7 @@ public class ArtifactIndexingTask private boolean onlyUpdate = false; public ArtifactIndexingTask( ManagedRepository repository, Path resourceFile, Action action, - IndexingContext context ) + ArchivaIndexingContext context ) { this.repository = repository; this.resourceFile = resourceFile; @@ -61,14 +61,14 @@ public class ArtifactIndexingTask } public ArtifactIndexingTask( ManagedRepository repository, Path resourceFile, Action action, - IndexingContext context, boolean executeOnEntireRepo ) + ArchivaIndexingContext context, boolean executeOnEntireRepo ) { this( repository, resourceFile, action, context ); this.executeOnEntireRepo = executeOnEntireRepo; } public ArtifactIndexingTask( ManagedRepository repository, Path resourceFile, Action action, - IndexingContext context, boolean executeOnEntireRepo, boolean onlyUpdate ) + ArchivaIndexingContext context, boolean executeOnEntireRepo, boolean onlyUpdate ) { this( repository, resourceFile, action, context, executeOnEntireRepo ); this.onlyUpdate = onlyUpdate; @@ -111,7 +111,7 @@ public class ArtifactIndexingTask return repository; } - public IndexingContext getContext() + public ArchivaIndexingContext getContext() { return context; } http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/DefaultDownloadRemoteIndexScheduler.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/DefaultDownloadRemoteIndexScheduler.java b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/DefaultDownloadRemoteIndexScheduler.java index b1f3955..d936bdd 100644 --- a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/DefaultDownloadRemoteIndexScheduler.java +++ b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/DefaultDownloadRemoteIndexScheduler.java @@ -29,7 +29,10 @@ import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException; import org.apache.archiva.configuration.ArchivaConfiguration; import org.apache.archiva.configuration.ConfigurationEvent; import org.apache.archiva.configuration.ConfigurationListener; +import org.apache.archiva.indexer.UnsupportedBaseContextException; import org.apache.archiva.proxy.common.WagonFactory; +import org.apache.archiva.repository.RepositoryRegistry; +import org.apache.archiva.repository.features.RemoteIndexFeature; import org.apache.commons.lang.StringUtils; import org.apache.maven.index.NexusIndexer; import org.apache.maven.index.context.IndexingContext; @@ -67,6 +70,9 @@ public class DefaultDownloadRemoteIndexScheduler private TaskScheduler taskScheduler; @Inject + RepositoryRegistry repositoryRegistry; + + @Inject private ArchivaConfiguration archivaConfiguration; @Inject @@ -95,24 +101,25 @@ public class DefaultDownloadRemoteIndexScheduler @PostConstruct public void startup() - throws ArchivaException, RepositoryAdminException, PlexusSisuBridgeException, IOException, - UnsupportedExistingLuceneIndexException, DownloadRemoteIndexException - { + throws ArchivaException, RepositoryAdminException, PlexusSisuBridgeException, IOException, + UnsupportedExistingLuceneIndexException, DownloadRemoteIndexException, UnsupportedBaseContextException { archivaConfiguration.addListener( this ); // TODO add indexContexts even if null - for ( RemoteRepository remoteRepository : remoteRepositoryAdmin.getRemoteRepositories() ) + for ( org.apache.archiva.repository.RemoteRepository remoteRepository : repositoryRegistry.getRemoteRepositories() ) { String contextKey = "remote-" + remoteRepository.getId(); - IndexingContext context = nexusIndexer.getIndexingContexts().get( contextKey ); + IndexingContext context = remoteRepository.getIndexingContext().getBaseContext(IndexingContext.class); if ( context == null ) { continue; } + RemoteIndexFeature rif = remoteRepository.getFeature(RemoteIndexFeature.class).get(); + // TODO record jobs from configuration - if ( remoteRepository.isDownloadRemoteIndex() && StringUtils.isNotEmpty( - remoteRepository.getCronExpression() ) ) + if ( rif.isDownloadRemoteIndex() && StringUtils.isNotEmpty( + remoteRepository.getSchedulingDefinition() ) ) { boolean fullDownload = context.getIndexDirectoryFile().list().length == 0; scheduleDownloadRemote( remoteRepository.getId(), false, fullDownload ); http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutorTest.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutorTest.java b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutorTest.java index d0e6532..ebfcb55 100644 --- a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutorTest.java +++ b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutorTest.java @@ -22,9 +22,9 @@ package org.apache.archiva.scheduler.indexing; import junit.framework.TestCase; import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin; import org.apache.archiva.common.utils.PathUtil; -import org.apache.archiva.repository.BasicManagedRepository; -import org.apache.archiva.repository.ManagedRepository; -import org.apache.archiva.repository.ReleaseScheme; +import org.apache.archiva.indexer.ArchivaIndexingContext; +import org.apache.archiva.indexer.UnsupportedBaseContextException; +import org.apache.archiva.repository.*; import org.apache.archiva.repository.features.ArtifactCleanupFeature; import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; import org.apache.maven.index.ArtifactInfo; @@ -57,6 +57,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Set; /** @@ -76,10 +77,7 @@ public class ArchivaIndexingTaskExecutorTest private NexusIndexer indexer; @Inject - List<IndexCreator> indexCreators; - - @Inject - ManagedRepositoryAdmin managedRepositoryAdmin; + RepositoryRegistry repositoryRegistry; @Inject private IndexUpdater indexUpdater; @@ -99,7 +97,7 @@ public class ArchivaIndexingTaskExecutorTest repositoryConfig.setScanned( true ); repositoryConfig.addActiveReleaseScheme( ReleaseScheme.RELEASE ); repositoryConfig.removeActiveReleaseScheme( ReleaseScheme.SNAPSHOT ); - managedRepositoryAdmin.createIndexContext( repositoryConfig ); + repositoryRegistry.putRepository(repositoryConfig); } @After @@ -112,6 +110,7 @@ public class ArchivaIndexingTaskExecutorTest { indexer.removeIndexingContext( indexingContext, true ); } + repositoryRegistry.destroy(); /* removeIndexingContext with true cleanup files. // delete created index in the repository @@ -126,9 +125,12 @@ public class ArchivaIndexingTaskExecutorTest super.tearDown(); } - protected IndexingContext getIndexingContext() - { - return indexer.getIndexingContexts().get( repositoryConfig.getId() ); + protected IndexingContext getIndexingContext() throws UnsupportedBaseContextException { + Repository repo = repositoryRegistry.getRepository(repositoryConfig.getId()); + assert repo != null; + ArchivaIndexingContext ctx = repo.getIndexingContext(); + assert ctx != null; + return ctx.getBaseContext(IndexingContext.class); } @Test @@ -139,12 +141,14 @@ public class ArchivaIndexingTaskExecutorTest Path artifactFile = basePath.resolve( "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" ); + ManagedRepository repo = repositoryRegistry.getManagedRepository(repositoryConfig.getId()); ArtifactIndexingTask task = new ArtifactIndexingTask( repositoryConfig, artifactFile, ArtifactIndexingTask.Action.ADD, - getIndexingContext() ); + repo.getIndexingContext()); indexingExecutor.executeTask( task ); + Map<String, IndexingContext> ctxs = indexer.getIndexingContexts(); BooleanQuery q = new BooleanQuery(); q.add( indexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( "org.apache.archiva" ) ), BooleanClause.Occur.SHOULD ); @@ -152,17 +156,6 @@ public class ArchivaIndexingTaskExecutorTest indexer.constructQuery( MAVEN.ARTIFACT_ID, new StringSearchExpression( "archiva-index-methods-jar-test" ) ), BooleanClause.Occur.SHOULD ); - if ( !indexer.getIndexingContexts().containsKey( repositoryConfig.getId() ) ) - { - IndexingContext context = indexer.addIndexingContext( repositoryConfig.getId(), // - repositoryConfig.getId(), // - basePath.toFile(), // - basePath.resolve(".indexer" ).toFile() - // - , null, null, indexCreators ); - context.setSearchable( true ); - } - FlatSearchRequest request = new FlatSearchRequest( q ); FlatSearchResponse response = indexer.searchFlat( request ); @@ -187,9 +180,10 @@ public class ArchivaIndexingTaskExecutorTest Path artifactFile = basePath.resolve( "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" ); + ManagedRepository repo = repositoryRegistry.getManagedRepository(repositoryConfig.getId()); ArtifactIndexingTask task = new ArtifactIndexingTask( repositoryConfig, artifactFile, ArtifactIndexingTask.Action.ADD, - getIndexingContext() ); + repo.getIndexingContext() ); indexingExecutor.executeTask( task ); indexingExecutor.executeTask( task ); @@ -201,7 +195,7 @@ public class ArchivaIndexingTaskExecutorTest indexer.constructQuery( MAVEN.ARTIFACT_ID, new StringSearchExpression( "archiva-index-methods-jar-test" ) ), BooleanClause.Occur.SHOULD ); - IndexingContext ctx = indexer.getIndexingContexts().get( repositoryConfig.getId() ); + IndexingContext ctx = getIndexingContext(); IndexSearcher searcher = ctx.acquireIndexSearcher(); TopDocs topDocs = searcher.search( q, null, 10 ); @@ -224,9 +218,10 @@ public class ArchivaIndexingTaskExecutorTest Path artifactFile = basePath.resolve( "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" ); + ManagedRepository repo = repositoryRegistry.getManagedRepository(repositoryConfig.getId()); ArtifactIndexingTask task = new ArtifactIndexingTask( repositoryConfig, artifactFile, ArtifactIndexingTask.Action.ADD, - getIndexingContext() ); + repo.getIndexingContext() ); // add artifact to index indexingExecutor.executeTask( task ); @@ -251,11 +246,11 @@ public class ArchivaIndexingTaskExecutorTest // remove added artifact from index task = new ArtifactIndexingTask( repositoryConfig, artifactFile, ArtifactIndexingTask.Action.DELETE, - getIndexingContext() ); + repo.getIndexingContext()); indexingExecutor.executeTask( task ); task = new ArtifactIndexingTask( repositoryConfig, artifactFile, ArtifactIndexingTask.Action.FINISH, - getIndexingContext() ); + repo.getIndexingContext() ); indexingExecutor.executeTask( task ); q = new BooleanQuery(); @@ -301,16 +296,16 @@ public class ArchivaIndexingTaskExecutorTest Path artifactFile = basePath.resolve( "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" ); - + ManagedRepository repo = repositoryRegistry.getManagedRepository(repositoryConfig.getId()); ArtifactIndexingTask task = new ArtifactIndexingTask( repositoryConfig, artifactFile, ArtifactIndexingTask.Action.ADD, - getIndexingContext() ); + repo.getIndexingContext() ); task.setExecuteOnEntireRepo( false ); indexingExecutor.executeTask( task ); task = new ArtifactIndexingTask( repositoryConfig, null, ArtifactIndexingTask.Action.FINISH, - getIndexingContext() ); + repo.getIndexingContext() ); task.setExecuteOnEntireRepo( false ); http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/DownloadRemoteIndexTaskTest.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/DownloadRemoteIndexTaskTest.java b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/DownloadRemoteIndexTaskTest.java index 0c80cd4..aeeaa67 100644 --- a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/DownloadRemoteIndexTaskTest.java +++ b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/DownloadRemoteIndexTaskTest.java @@ -21,11 +21,10 @@ package org.apache.archiva.scheduler.indexing; import org.apache.archiva.admin.model.beans.RemoteRepository; import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin; import org.apache.archiva.common.utils.FileUtils; +import org.apache.archiva.repository.RepositoryRegistry; import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; -import org.apache.maven.index.FlatSearchRequest; -import org.apache.maven.index.FlatSearchResponse; -import org.apache.maven.index.MAVEN; -import org.apache.maven.index.NexusIndexer; +import org.apache.maven.index.*; +import org.apache.maven.index.context.IndexingContext; import org.apache.maven.index.expr.StringSearchExpression; import org.apache.maven.index_shaded.lucene.search.BooleanClause; import org.apache.maven.index_shaded.lucene.search.BooleanQuery; @@ -77,12 +76,27 @@ public class DownloadRemoteIndexTaskTest DefaultDownloadRemoteIndexScheduler downloadRemoteIndexScheduler; @Inject + Indexer indexer; + + @Inject + RepositoryRegistry repositoryRegistry; + + @Inject NexusIndexer nexusIndexer; @Before public void initialize() throws Exception { + Path cfgFile = Paths.get("target/appserver-base/conf/archiva.xml"); + if (Files.exists(cfgFile)) { + Files.delete(cfgFile); + } + try { + remoteRepositoryAdmin.deleteRemoteRepository("test-repo-re", null); + } catch (Exception e) { + // Ignore + } server = new Server( ); serverConnector = new ServerConnector( server, new HttpConnectionFactory()); server.addConnector( serverConnector ); @@ -108,7 +122,13 @@ public class DownloadRemoteIndexTaskTest public void tearDown() throws Exception { - server.stop(); + if (server!=null) { + server.stop(); + } + Path cfgFile = Paths.get("target/appserver-base/conf/archiva.xml"); + if (Files.exists(cfgFile)) { + Files.delete(cfgFile); + } } @Test @@ -121,23 +141,24 @@ public class DownloadRemoteIndexTaskTest downloadRemoteIndexScheduler.startup(); - downloadRemoteIndexScheduler.scheduleDownloadRemote( "test-repo", true, true ); + downloadRemoteIndexScheduler.scheduleDownloadRemote( "test-repo-re", true, true ); ( (ThreadPoolTaskScheduler) downloadRemoteIndexScheduler.getTaskScheduler() ).getScheduledExecutor().awaitTermination( 10, TimeUnit.SECONDS ); - remoteRepositoryAdmin.deleteRemoteRepository( "test-repo", null ); + remoteRepositoryAdmin.deleteRemoteRepository( "test-repo-re", null ); // search BooleanQuery iQuery = new BooleanQuery(); - iQuery.add( nexusIndexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( "commons-logging" ) ), + iQuery.add( indexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( "commons-logging" ) ), BooleanClause.Occur.SHOULD ); + remoteRepositoryAdmin.addRemoteRepository(remoteRepository, null); FlatSearchRequest rq = new FlatSearchRequest( iQuery ); rq.setContexts( - Arrays.asList( nexusIndexer.getIndexingContexts().get( "remote-" + getRemoteRepository().getId() ) ) ); + Arrays.asList( repositoryRegistry.getRemoteRepository(remoteRepository.getId()).getIndexingContext().getBaseContext(IndexingContext.class) ) ); - FlatSearchResponse response = nexusIndexer.searchFlat( rq ); + FlatSearchResponse response = indexer.searchFlat(rq); log.info( "returned hit count:{}", response.getReturnedHitsCount() ); assertThat( response.getReturnedHitsCount() ).isEqualTo( 8 ); @@ -155,9 +176,10 @@ public class DownloadRemoteIndexTaskTest remoteRepository.setName( "foo" ); remoteRepository.setIndexDirectory( indexDirectory.toAbsolutePath().toString() ); remoteRepository.setDownloadRemoteIndex( true ); - remoteRepository.setId( "test-repo" ); + remoteRepository.setId( "test-repo-re" ); remoteRepository.setUrl( "http://localhost:" + port ); remoteRepository.setRemoteIndexUrl( "http://localhost:" + port + "/index-updates/" ); + return remoteRepository; } http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/resources/spring-context.xml ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/resources/spring-context.xml b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/resources/spring-context.xml index fc6f65a..3c9ef40 100644 --- a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/resources/spring-context.xml +++ b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/resources/spring-context.xml @@ -25,7 +25,7 @@ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" default-lazy-init="true"> - <context:component-scan base-package="org.apache.archiva.repository.content.maven2" /> + <context:component-scan base-package="org.apache.archiva.repository.content.maven2,org.apache.archiva.indexer.maven" /> <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler"> <property name="properties"> http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/mock/MockManagedRepositoryAdmin.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/mock/MockManagedRepositoryAdmin.java b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/mock/MockManagedRepositoryAdmin.java index 22aea17..3f28ddd 100644 --- a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/mock/MockManagedRepositoryAdmin.java +++ b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/mock/MockManagedRepositoryAdmin.java @@ -121,16 +121,5 @@ public class MockManagedRepositoryAdmin this.archivaConfiguration = archivaConfiguration; } - @Override - public IndexingContext createIndexContext( ManagedRepository repository ) - throws RepositoryAdminException - { - return null; - } - @Override - public IndexingContext createIndexContext( org.apache.archiva.repository.ManagedRepository repository ) throws RepositoryAdminException - { - return null; - } } http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml index 74a963a..28c507e 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml @@ -439,7 +439,10 @@ <include>**/*Tests.java</include> <include>**/*Test.java</include> </includes> + <!-- <argLine>-Xms1024m -Xmx3072m -server -XX:MaxPermSize=256m @{jacocoproperty}</argLine> + --> + <argLine>-Xms1024m -Xmx3072m -server -XX:MaxPermSize=256m</argLine> <systemPropertyVariables> <appserver.base>${project.build.directory}/appserver-base</appserver.base> <plexus.home>${project.build.directory}/appserver-base</plexus.home> http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java index 155546d..eaf37c3 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java @@ -200,10 +200,9 @@ public class DefaultRepositoriesService org.apache.archiva.repository.ManagedRepository repository = repositoryRegistry.getManagedRepository( repositoryId ); - IndexingContext context = managedRepositoryAdmin.createIndexContext( repository ); ArtifactIndexingTask task = - new ArtifactIndexingTask( repository, null, ArtifactIndexingTask.Action.FINISH, context ); + new ArtifactIndexingTask( repository, null, ArtifactIndexingTask.Action.FINISH, repository.getIndexingContext() ); task.setExecuteOnEntireRepo( true ); task.setOnlyUpdate( !fullScan ); http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java index c055aee..c4247c0 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java @@ -448,7 +448,7 @@ public abstract class AbstractArchivaRestTest managedRepository.setLocation( Paths.get( repoPath ).toString() ); managedRepository.setIndexDirectory( - System.getProperty( "java.io.tmpdir" ) + "/target/.index-" + Long.toString( new Date().getTime() ) ); + System.getProperty( "java.io.tmpdir" ) + "/.index-" + Long.toString( new Date().getTime() ) ); managedRepository.setStageRepoNeeded( stageNeeded ); managedRepository.setSnapshots( true ); http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/resources/log4j2-test.xml ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/resources/log4j2-test.xml b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/resources/log4j2-test.xml index 1c258ef..0da8a7f 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/resources/log4j2-test.xml +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/resources/log4j2-test.xml @@ -24,17 +24,29 @@ <Console name="console" target="SYSTEM_OUT"> <PatternLayout pattern="%highlight{%d{HH:mm:ss.SSS} [%L] [%t] %-5level %logger{3} - %msg%n}" /> </Console> + <RollingRandomAccessFile name="rolling" fileName="/tmp/archiva.log" + filePattern="/tmp/archiva-%d{yyyyMMdd}.log" + immediateFlush="true" append="true"> + <PatternLayout> + <pattern>%d [%t] %-5p %c %x - %m%n</pattern> + </PatternLayout> + <Policies> + <TimeBasedTriggeringPolicy /> + </Policies> + </RollingRandomAccessFile> </appenders> + <loggers> <logger name="org.apache.archiva.redback.rest.services" level="error"/> <logger name="JPOX" level="error"/> <logger name="org.apache.archiva.rest.services" level="info"/> - <logger name="org.springframework" level="error"/> - <logger name="org.apache.commons.configuration" level="error"/> + <logger name="org.springframework" level="info"/> + <logger name="org.apache.commons.configuration" level="info"/> <root level="info"> <appender-ref ref="console"/> + <appender-ref ref="rolling" /> </root> </loggers> </configuration> http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-web/archiva-security/pom.xml ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-web/archiva-security/pom.xml b/archiva-modules/archiva-web/archiva-security/pom.xml index 913d6ed..6e6a1da 100644 --- a/archiva-modules/archiva-web/archiva-security/pom.xml +++ b/archiva-modules/archiva-web/archiva-security/pom.xml @@ -197,6 +197,11 @@ <artifactId>xercesImpl</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.apache.archiva</groupId> + <artifactId>archiva-maven2-indexer</artifactId> + <scope>test</scope> + </dependency> </dependencies> <build> <plugins> http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/AbstractSecurityTest.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/AbstractSecurityTest.java b/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/AbstractSecurityTest.java index 25b0ed6..b58aae8 100644 --- a/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/AbstractSecurityTest.java +++ b/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/AbstractSecurityTest.java @@ -96,9 +96,8 @@ public abstract class AbstractSecurityTest repoConfig.setLocation( Paths.get( "target/test-repo/" + repoId ).toString() ); if ( !archivaConfiguration.getConfiguration().getManagedRepositoriesAsMap().containsKey( repoId ) ) { - archivaConfiguration.getConfiguration().addManagedRepository( repoConfig ); + repositoryRegistry.putRepository( repoConfig ); } - repositoryRegistry.reload(); // Add repo roles to security. userRepos.createMissingRepositoryRoles( repoId ); @@ -152,6 +151,9 @@ public abstract class AbstractSecurityTest // Setup Guest User. User guestUser = createUser( USER_GUEST, "Guest User" ); roleManager.assignRole( ArchivaRoleConstants.TEMPLATE_GUEST, guestUser.getUsername() ); + + repositoryRegistry.setArchivaConfiguration(archivaConfiguration); + repositoryRegistry.reload(); } protected void restoreGuestInitialValues( String userId ) http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/DefaultUserRepositoriesTest.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/DefaultUserRepositoriesTest.java b/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/DefaultUserRepositoriesTest.java index cef6887..c92dc43 100644 --- a/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/DefaultUserRepositoriesTest.java +++ b/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/DefaultUserRepositoriesTest.java @@ -73,7 +73,7 @@ public class DefaultUserRepositoriesTest assertRepoIds( new String[]{ "central", "corporate" }, userRepos.getObservableRepositoryIds( USER_ALPACA ) ); assertRepoIds( new String[]{ "coporate" }, userRepos.getObservableRepositoryIds( USER_GUEST ) ); - assertRepoIds( new String[]{ "central", "internal", "corporate", "snapshots", "secret" }, + assertRepoIds( new String[]{ "central", "internal","corporate", "snapshots", "secret" }, userRepos.getObservableRepositoryIds( USER_ADMIN ) ); } http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-web/archiva-web-common/pom.xml ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-web/archiva-web-common/pom.xml b/archiva-modules/archiva-web/archiva-web-common/pom.xml index 92c056d..0f4d583 100644 --- a/archiva-modules/archiva-web/archiva-web-common/pom.xml +++ b/archiva-modules/archiva-web/archiva-web-common/pom.xml @@ -495,7 +495,10 @@ <artifactId>maven-surefire-plugin</artifactId> <configuration> <reuseForks>false</reuseForks> +<!-- <argLine>-Xms1024m -Xmx2048m -server -XX:MaxPermSize=256m @{jacocoproperty}</argLine> +--> + <argLine>-Xms1024m -Xmx2048m -server -XX:MaxPermSize=256m</argLine> <systemPropertyVariables> <appserver.base>${project.build.directory}/appserver-base</appserver.base> <plexus.home>${project.build.directory}/appserver-base</plexus.home> http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-web/archiva-webdav/pom.xml ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-web/archiva-webdav/pom.xml b/archiva-modules/archiva-web/archiva-webdav/pom.xml index adfa9ac..0dc99c9 100644 --- a/archiva-modules/archiva-web/archiva-webdav/pom.xml +++ b/archiva-modules/archiva-web/archiva-webdav/pom.xml @@ -257,6 +257,7 @@ <artifactId>assertj-core</artifactId> <scope>test</scope> </dependency> + </dependencies> <build> <plugins> http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/AbstractRepositoryServletTestCase.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/AbstractRepositoryServletTestCase.java b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/AbstractRepositoryServletTestCase.java index ce2d851..1a65a35 100644 --- a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/AbstractRepositoryServletTestCase.java +++ b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/AbstractRepositoryServletTestCase.java @@ -142,8 +142,6 @@ public abstract class AbstractRepositoryServletTestCase createManagedRepository( REPOID_INTERNAL, "Internal Test Repo", repoRootInternal, true ) ); repositoryRegistry.reload(); - managedRepositoryAdmin.createIndexContext( managedRepositoryAdmin.getManagedRepository( REPOID_INTERNAL ) ); - config.getProxyConnectors().clear(); config.getRemoteRepositories().clear(); http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletBrowseTest.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletBrowseTest.java b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletBrowseTest.java index a453021..90e13c4 100644 --- a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletBrowseTest.java +++ b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletBrowseTest.java @@ -67,7 +67,7 @@ public class RepositoryServletBrowseTest // dumpResponse( response ); - List<String> expectedLinks = Arrays.asList( ".indexer/", "commons-lang/", "net/", "org/" ); + List<String> expectedLinks = Arrays.asList( "commons-lang/", "net/", "org/" ); Document document = Jsoup.parse( response.getContentAsString() ); Elements elements = document.getElementsByTag( "a" ); http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java ---------------------------------------------------------------------- diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java index 4678950..62089c8 100644 --- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java +++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java @@ -20,10 +20,8 @@ package org.apache.archiva.metadata.repository.storage.maven2; */ import org.apache.archiva.admin.model.RepositoryAdminException; -import org.apache.archiva.admin.model.beans.ManagedRepository; import org.apache.archiva.admin.model.beans.NetworkProxy; import org.apache.archiva.admin.model.beans.ProxyConnector; -import org.apache.archiva.admin.model.beans.RemoteRepository; import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin; import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin; import org.apache.archiva.admin.model.proxyconnector.ProxyConnectorAdmin; @@ -45,9 +43,10 @@ import org.apache.archiva.model.SnapshotVersion; import org.apache.archiva.policies.ProxyDownloadException; import org.apache.archiva.proxy.common.WagonFactory; import org.apache.archiva.proxy.model.RepositoryProxyConnectors; -import org.apache.archiva.repository.ManagedRepositoryContent; +import org.apache.archiva.repository.*; import org.apache.archiva.repository.content.PathParser; -import org.apache.archiva.repository.LayoutException; +import org.apache.archiva.repository.features.RepositoryFeature; +import org.apache.archiva.repository.features.StagingRepositoryFeature; import org.apache.archiva.xml.XMLException; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; @@ -99,10 +98,7 @@ public class Maven2RepositoryStorage private ModelBuilder builder; @Inject - private RemoteRepositoryAdmin remoteRepositoryAdmin; - - @Inject - private ManagedRepositoryAdmin managedRepositoryAdmin; + RepositoryRegistry repositoryRegistry; @Inject private ProxyConnectorAdmin proxyConnectorAdmin; @@ -155,8 +151,9 @@ public class Maven2RepositoryStorage { try { - ManagedRepository managedRepository = - managedRepositoryAdmin.getManagedRepository( readMetadataRequest.getRepositoryId() ); + ManagedRepository managedRepository = repositoryRegistry.getManagedRepository(readMetadataRequest.getRepositoryId()); + boolean isReleases = managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.RELEASE); + boolean isSnapshots = managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.SNAPSHOT); String artifactVersion = readMetadataRequest.getProjectVersion(); // olamy: in case of browsing via the ui we can mix repos (parent of a SNAPSHOT can come from release repo) if ( !readMetadataRequest.isBrowsingRequest() ) @@ -164,7 +161,7 @@ public class Maven2RepositoryStorage if ( VersionUtil.isSnapshot( artifactVersion ) ) { // skygo trying to improve speed by honoring managed configuration MRM-1658 - if ( managedRepository.isReleases() && !managedRepository.isSnapshots() ) + if ( isReleases && !isSnapshots ) { throw new RepositoryStorageRuntimeException( "lookforsnaponreleaseonly", "managed repo is configured for release only" ); @@ -172,7 +169,7 @@ public class Maven2RepositoryStorage } else { - if ( !managedRepository.isReleases() && managedRepository.isSnapshots() ) + if ( !isReleases && isSnapshots) { throw new RepositoryStorageRuntimeException( "lookforsreleaseonsneponly", "managed repo is configured for snapshot only" ); @@ -231,7 +228,7 @@ public class Maven2RepositoryStorage for ( ProxyConnector proxyConnector : proxyConnectors ) { RemoteRepository remoteRepoConfig = - remoteRepositoryAdmin.getRemoteRepository( proxyConnector.getTargetRepoId() ); + repositoryRegistry.getRemoteRepository( proxyConnector.getTargetRepoId() ); if ( remoteRepoConfig != null ) { @@ -253,7 +250,7 @@ public class Maven2RepositoryStorage // can have released parent pom if ( readMetadataRequest.isBrowsingRequest() ) { - remoteRepositories.addAll( remoteRepositoryAdmin.getRemoteRepositories() ); + remoteRepositories.addAll( repositoryRegistry.getRemoteRepositories() ); } ModelBuildingRequest req = @@ -516,16 +513,9 @@ public class Maven2RepositoryStorage private Path getRepositoryBasedir( String repoId ) throws RepositoryStorageRuntimeException { - try - { - ManagedRepository repositoryConfiguration = managedRepositoryAdmin.getManagedRepository( repoId ); + ManagedRepository repositoryConfiguration = repositoryRegistry.getManagedRepository( repoId ); - return Paths.get( repositoryConfiguration.getLocation() ); - } - catch ( RepositoryAdminException e ) - { - throw new RepositoryStorageRuntimeException( "repo-admin", e.getMessage(), e ); - } + return Paths.get( repositoryConfiguration.getLocation() ); } @Override http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/RepositoryModelResolver.java ---------------------------------------------------------------------- diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/RepositoryModelResolver.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/RepositoryModelResolver.java index b769fb2..a6c3c24 100644 --- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/RepositoryModelResolver.java +++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/RepositoryModelResolver.java @@ -19,9 +19,7 @@ package org.apache.archiva.metadata.repository.storage.maven2; * under the License. */ -import org.apache.archiva.admin.model.beans.ManagedRepository; import org.apache.archiva.admin.model.beans.NetworkProxy; -import org.apache.archiva.admin.model.beans.RemoteRepository; import org.apache.archiva.common.utils.VersionUtil; import org.apache.archiva.maven2.metadata.MavenMetadataReader; import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator; @@ -30,8 +28,13 @@ import org.apache.archiva.model.SnapshotVersion; import org.apache.archiva.proxy.common.WagonFactory; import org.apache.archiva.proxy.common.WagonFactoryException; import org.apache.archiva.proxy.common.WagonFactoryRequest; +import org.apache.archiva.repository.ManagedRepository; +import org.apache.archiva.repository.RemoteRepository; +import org.apache.archiva.repository.RepositoryCredentials; +import org.apache.archiva.repository.features.RemoteIndexFeature; import org.apache.archiva.xml.XMLException; import org.apache.commons.lang.StringUtils; +import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.maven.model.Repository; import org.apache.maven.model.building.FileModelSource; import org.apache.maven.model.building.ModelSource; @@ -53,6 +56,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.time.temporal.ChronoUnit; import java.util.List; import java.util.Map; @@ -228,15 +232,15 @@ public class RepositoryModelResolver Path tmpSha1 = null; Path tmpResource = null; String artifactPath = pathTranslator.toPath( groupId, artifactId, version, filename ); - Path resource = Paths.get( targetRepository.getLocation(), artifactPath ); + Path resource = Paths.get(targetRepository.getLocation()).resolve( artifactPath ); - Path workingDirectory = createWorkingDirectory( targetRepository.getLocation() ); + Path workingDirectory = createWorkingDirectory( targetRepository.getLocation().toString() ); try { Wagon wagon = null; try { - String protocol = getProtocol( remoteRepository.getUrl() ); + String protocol = getProtocol( remoteRepository.getLocation().toString() ); final NetworkProxy networkProxy = this.networkProxyMap.get( remoteRepository.getId() ); wagon = wagonFactory.getWagon( @@ -357,7 +361,7 @@ public class RepositoryModelResolver networkProxy.setPassword( proxyConnector.getPassword() ); String msg = "Using network proxy " + networkProxy.getHost() + ":" + networkProxy.getPort() - + " to connect to remote repository " + remoteRepository.getUrl(); + + " to connect to remote repository " + remoteRepository.getLocation(); if ( networkProxy.getNonProxyHosts() != null ) { msg += "; excluding hosts: " + networkProxy.getNonProxyHosts(); @@ -372,19 +376,24 @@ public class RepositoryModelResolver } AuthenticationInfo authInfo = null; - String username = remoteRepository.getUserName(); - String password = remoteRepository.getPassword(); + RepositoryCredentials creds = remoteRepository.getLoginCredentials(); + String username = ""; + String password = ""; + if (creds instanceof UsernamePasswordCredentials) { + UsernamePasswordCredentials c = (UsernamePasswordCredentials) creds; + username = c.getUserName(); + password = c.getPassword(); + } if ( StringUtils.isNotBlank( username ) && StringUtils.isNotBlank( password ) ) { - log.debug( "Using username {} to connect to remote repository {}", username, remoteRepository.getUrl() ); + log.debug( "Using username {} to connect to remote repository {}", username, remoteRepository.getLocation() ); authInfo = new AuthenticationInfo(); authInfo.setUserName( username ); authInfo.setPassword( password ); } - // Convert seconds to milliseconds - int timeoutInMilliseconds = remoteRepository.getTimeout() * 1000; + int timeoutInMilliseconds = ((int)remoteRepository.getTimeout().getSeconds())*1000; // FIXME olamy having 2 config values // Set timeout wagon.setReadTimeout( timeoutInMilliseconds ); @@ -393,7 +402,7 @@ public class RepositoryModelResolver try { org.apache.maven.wagon.repository.Repository wagonRepository = - new org.apache.maven.wagon.repository.Repository( remoteRepository.getId(), remoteRepository.getUrl() ); + new org.apache.maven.wagon.repository.Repository( remoteRepository.getId(), remoteRepository.getLocation().toString() ); if ( networkProxy != null ) { wagon.connect( wagonRepository, authInfo, networkProxy );
