浏览代码

Adapting base modules to the new repository api

Using the repository api and RepositoryRegistry for repo access
pull/46/head
Martin Stockhammer 6 年前
父节点
当前提交
9469c1b67f
共有 30 个文件被更改,包括 537 次插入187 次删除
  1. 4
    4
      archiva-modules/archiva-base/archiva-converter/src/main/java/org/apache/archiva/converter/legacy/DefaultLegacyRepositoryConverter.java
  2. 2
    2
      archiva-modules/archiva-base/archiva-converter/src/main/java/org/apache/archiva/converter/legacy/LegacyConverterArtifactConsumer.java
  3. 5
    0
      archiva-modules/archiva-base/archiva-indexer/pom.xml
  4. 6
    0
      archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/MavenRepositorySearch.java
  5. 17
    0
      archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/AbstractMavenRepositorySearch.java
  6. 3
    1
      archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchOSGITest.java
  7. 61
    32
      archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchTest.java
  8. 5
    0
      archiva-modules/archiva-base/archiva-indexer/src/test/resources/spring-context.xml
  9. 1
    1
      archiva-modules/archiva-base/archiva-proxy-api/src/main/java/org/apache/archiva/proxy/model/ProxyConnector.java
  10. 106
    77
      archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/archiva/proxy/DefaultRepositoryProxyConnectors.java
  11. 25
    18
      archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java
  12. 1
    0
      archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/CacheFailuresTransferTest.java
  13. 8
    6
      archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/HttpProxyTransferTest.java
  14. 13
    0
      archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/MockConfiguration.java
  15. 231
    0
      archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
  16. 4
    1
      archiva-modules/archiva-base/archiva-proxy/src/test/resources/spring-context.xml
  17. 1
    1
      archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/DefaultRepositoryScanner.java
  18. 6
    3
      archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryContentConsumers.java
  19. 1
    1
      archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScanStatistics.java
  20. 1
    1
      archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScanner.java
  21. 4
    2
      archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScannerInstance.java
  22. 1
    1
      archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/TriggerBeginScanClosure.java
  23. 1
    1
      archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/TriggerScanCompletedClosure.java
  24. 1
    1
      archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/InvalidScanConsumer.java
  25. 1
    3
      archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/KnownScanConsumer.java
  26. 11
    11
      archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryContentConsumersTest.java
  27. 14
    13
      archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryScannerTest.java
  28. 1
    1
      archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/SampleKnownConsumer.java
  29. 1
    6
      archiva-modules/archiva-base/archiva-test-utils/pom.xml
  30. 1
    0
      archiva-modules/archiva-base/pom.xml

+ 4
- 4
archiva-modules/archiva-base/archiva-converter/src/main/java/org/apache/archiva/converter/legacy/DefaultLegacyRepositoryConverter.java 查看文件

import org.apache.archiva.consumers.InvalidRepositoryContentConsumer; import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
import org.apache.archiva.consumers.KnownRepositoryContentConsumer; import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
import org.apache.archiva.converter.RepositoryConversionException; import org.apache.archiva.converter.RepositoryConversionException;
import org.apache.archiva.repository.BasicManagedRepository;
import org.apache.archiva.repository.scanner.RepositoryScanner; import org.apache.archiva.repository.scanner.RepositoryScanner;
import org.apache.archiva.repository.scanner.RepositoryScannerException; import org.apache.archiva.repository.scanner.RepositoryScannerException;
import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.ArtifactRepository;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale;


/** /**
* DefaultLegacyRepositoryConverter * DefaultLegacyRepositoryConverter
{ {
String defaultRepositoryUrl = PathUtil.toUrl( repositoryDirectory ); String defaultRepositoryUrl = PathUtil.toUrl( repositoryDirectory );


ManagedRepository legacyRepository = new ManagedRepository();
legacyRepository.setId( "legacy" );
legacyRepository.setName( "Legacy Repository" );
legacyRepository.setLocation( legacyRepositoryDirectory.toAbsolutePath().toString() );
BasicManagedRepository legacyRepository = new BasicManagedRepository( "legacy", "Legacy Repository");
legacyRepository.setLocation( legacyRepositoryDirectory.toAbsolutePath().toUri() );
legacyRepository.setLayout( "legacy" ); legacyRepository.setLayout( "legacy" );


ArtifactRepository repository = ArtifactRepository repository =

+ 2
- 2
archiva-modules/archiva-base/archiva-converter/src/main/java/org/apache/archiva/converter/legacy/LegacyConverterArtifactConsumer.java 查看文件

* under the License. * under the License.
*/ */


import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.common.plexusbridge.PlexusSisuBridge; import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException; import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
import org.apache.archiva.consumers.AbstractMonitoredConsumer; import org.apache.archiva.consumers.AbstractMonitoredConsumer;
import org.apache.archiva.converter.artifact.ArtifactConversionException; import org.apache.archiva.converter.artifact.ArtifactConversionException;
import org.apache.archiva.converter.artifact.ArtifactConverter; import org.apache.archiva.converter.artifact.ArtifactConverter;
import org.apache.archiva.model.ArtifactReference; import org.apache.archiva.model.ArtifactReference;
import org.apache.archiva.repository.ManagedRepository;
import org.apache.archiva.repository.ManagedRepositoryContent; import org.apache.archiva.repository.ManagedRepositoryContent;
import org.apache.archiva.repository.content.maven2.ManagedDefaultRepositoryContent; import org.apache.archiva.repository.content.maven2.ManagedDefaultRepositoryContent;
import org.apache.archiva.repository.layout.LayoutException; import org.apache.archiva.repository.layout.LayoutException;
} }


@Override @Override
public void beginScan( ManagedRepository repository, Date whenGathered )
public void beginScan( org.apache.archiva.repository.ManagedRepository repository, Date whenGathered )
throws ConsumerException throws ConsumerException
{ {
this.managedRepository = new ManagedDefaultRepositoryContent(); this.managedRepository = new ManagedDefaultRepositoryContent();

+ 5
- 0
archiva-modules/archiva-base/archiva-indexer/pom.xml 查看文件

<groupId>org.apache.archiva</groupId> <groupId>org.apache.archiva</groupId>
<artifactId>archiva-common</artifactId> <artifactId>archiva-common</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-repository-layer</artifactId>
</dependency>



<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>

+ 6
- 0
archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/MavenRepositorySearch.java 查看文件

{ {
throw new RepositorySearchException( "No search fields set." ); throw new RepositorySearchException( "No search fields set." );
} }
System.err.println("CLAUSES "+q.getClauses());
if (q.getClauses()!=null) {
for (BooleanClause cl : q.getClauses()) {
System.err.println("Clause "+cl);
}
}


return search( limits, q, indexingContextIds, Collections.<ArtifactInfoFilter>emptyList(), return search( limits, q, indexingContextIds, Collections.<ArtifactInfoFilter>emptyList(),
searchFields.getRepositories(), searchFields.isIncludePomArtifacts() ); searchFields.getRepositories(), searchFields.isIncludePomArtifacts() );

+ 17
- 0
archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/AbstractMavenRepositorySearch.java 查看文件

import org.apache.archiva.common.utils.FileUtils; import org.apache.archiva.common.utils.FileUtils;
import org.apache.archiva.configuration.ArchivaConfiguration; import org.apache.archiva.configuration.ArchivaConfiguration;
import org.apache.archiva.configuration.Configuration; import org.apache.archiva.configuration.Configuration;
import org.apache.archiva.configuration.ConfigurationListener;
import org.apache.archiva.configuration.ManagedRepositoryConfiguration; import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
import org.apache.archiva.repository.RepositoryRegistry;
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
import org.apache.commons.lang.SystemUtils; import org.apache.commons.lang.SystemUtils;
import org.apache.maven.index.ArtifactContext; import org.apache.maven.index.ArtifactContext;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.List; import java.util.List;
import java.util.Locale;


/** /**
* @author Olivier Lamy * @author Olivier Lamy
@Inject @Inject
ArtifactContextProducer artifactContextProducer; ArtifactContextProducer artifactContextProducer;


@Inject
RepositoryRegistry repositoryRegistry;

IMocksControl archivaConfigControl; IMocksControl archivaConfigControl;


Configuration config; Configuration config;


DefaultProxyConnectorAdmin defaultProxyConnectorAdmin = new DefaultProxyConnectorAdmin(); DefaultProxyConnectorAdmin defaultProxyConnectorAdmin = new DefaultProxyConnectorAdmin();
defaultProxyConnectorAdmin.setArchivaConfiguration( archivaConfig ); defaultProxyConnectorAdmin.setArchivaConfiguration( archivaConfig );
repositoryRegistry.setArchivaConfiguration( archivaConfig );


search = new MavenRepositorySearch( nexusIndexer, defaultManagedRepositoryAdmin, defaultProxyConnectorAdmin, search = new MavenRepositorySearch( nexusIndexer, defaultManagedRepositoryAdmin, defaultProxyConnectorAdmin,
queryCreator ); queryCreator );


defaultManagedRepositoryAdmin.setIndexer( nexusIndexer ); defaultManagedRepositoryAdmin.setIndexer( nexusIndexer );
defaultManagedRepositoryAdmin.setIndexCreators( indexCreators ); defaultManagedRepositoryAdmin.setIndexCreators( indexCreators );
assertNotNull( repositoryRegistry );
defaultManagedRepositoryAdmin.setRepositoryRegistry( repositoryRegistry );


config = new Configuration(); config = new Configuration();
config.addManagedRepository( createRepositoryConfig( TEST_REPO_1 ) ); config.addManagedRepository( createRepositoryConfig( TEST_REPO_1 ) );
config.addManagedRepository( createRepositoryConfig( TEST_REPO_2 ) ); config.addManagedRepository( createRepositoryConfig( TEST_REPO_2 ) );
config.addManagedRepository( createRepositoryConfig( REPO_RELEASE ) ); config.addManagedRepository( createRepositoryConfig( REPO_RELEASE ) );


archivaConfig.addListener( EasyMock.anyObject( ConfigurationListener.class ) );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn(config).anyTimes();
archivaConfigControl.replay();
repositoryRegistry.reload();
archivaConfigControl.reset();
} }


@After @After

+ 3
- 1
archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchOSGITest.java 查看文件

import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale;


/** /**
* @author Olivier Lamy * @author Olivier Lamy
List<String> selectedRepos = Arrays.asList( TEST_REPO_1 ); List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );


// search artifactId // search artifactId
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();



+ 61
- 32
archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchTest.java 查看文件

* under the License. * under the License.
*/ */


import org.apache.archiva.configuration.ConfigurationEvent;
import org.apache.archiva.configuration.ConfigurationListener;
import org.apache.archiva.indexer.util.SearchUtil; import org.apache.archiva.indexer.util.SearchUtil;
import org.apache.archiva.repository.RepositoryRegistry;
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
import org.apache.maven.index_shaded.lucene.index.IndexUpgrader; import org.apache.maven.index_shaded.lucene.index.IndexUpgrader;
import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.FileUtils;
import org.easymock.EasyMock; import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;


import javax.inject.Inject;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale;




@RunWith( ArchivaSpringJUnit4ClassRunner.class ) @RunWith( ArchivaSpringJUnit4ClassRunner.class )
List<String> selectedRepos = Arrays.asList( TEST_REPO_1 ); List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );


// search artifactId // search artifactId
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();




archivaConfigControl.reset(); archivaConfigControl.reset();


// search groupId
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


// search groupId
archivaConfigControl.replay(); archivaConfigControl.replay();


results = search.search( "user", selectedRepos, "org.apache.archiva", null, null ); results = search.search( "user", selectedRepos, "org.apache.archiva", null, null );
List<String> selectedRepos = Arrays.asList( TEST_REPO_1 ); List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );


// search artifactId // search artifactId
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();


archivaConfigControl.reset(); archivaConfigControl.reset();


// search groupId // search groupId
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();


selectedRepos.add( TEST_REPO_1 ); selectedRepos.add( TEST_REPO_1 );


// search artifactId // search artifactId
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();


selectedRepos.add( TEST_REPO_1 ); selectedRepos.add( TEST_REPO_1 );


// search artifactId // search artifactId
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();


List<String> selectedRepos = new ArrayList<>(); List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 ); selectedRepos.add( TEST_REPO_1 );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
archivaConfigControl.replay(); archivaConfigControl.replay();


SearchResults results = search.search( "user", selectedRepos, "archiva search", null, null ); SearchResults results = search.search( "user", selectedRepos, "archiva search", null, null );
SearchResultLimits limits = new SearchResultLimits( 0 ); SearchResultLimits limits = new SearchResultLimits( 0 );
limits.setPageSize( 1 ); limits.setPageSize( 1 );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();


limits = new SearchResultLimits( 1 ); limits = new SearchResultLimits( 1 );
limits.setPageSize( 1 ); limits.setPageSize( 1 );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();




config.addManagedRepository( createRepositoryConfig( TEST_REPO_2 ) ); config.addManagedRepository( createRepositoryConfig( TEST_REPO_2 ) );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 5 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();


List<String> selectedRepos = new ArrayList<>(); List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 ); selectedRepos.add( TEST_REPO_1 );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();


List<String> selectedRepos = new ArrayList<>(); List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 ); selectedRepos.add( TEST_REPO_1 );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();


List<String> selectedRepos = new ArrayList<>(); List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( "non-existing-repo" ); selectedRepos.add( "non-existing-repo" );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );

archivaConfigControl.replay(); archivaConfigControl.replay();


SearchResults results = search.search( "user", selectedRepos, "org.apache.archiva", null, null ); SearchResults results = search.search( "user", selectedRepos, "org.apache.archiva", null, null );
List<String> previousSearchTerms = new ArrayList<>(); List<String> previousSearchTerms = new ArrayList<>();
previousSearchTerms.add( "archiva-test" ); previousSearchTerms.add( "archiva-test" );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();


searchFields.setVersion( "1.0" ); searchFields.setVersion( "1.0" );
searchFields.setRepositories( selectedRepos ); searchFields.setRepositories( selectedRepos );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();


SearchResultLimits limits = new SearchResultLimits( 0 ); SearchResultLimits limits = new SearchResultLimits( 0 );
limits.setPageSize( 1 ); limits.setPageSize( 1 );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();


limits = new SearchResultLimits( 1 ); limits = new SearchResultLimits( 1 );
limits.setPageSize( 1 ); limits.setPageSize( 1 );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();


searchFields.setArtifactId( "artifactid-numeric" ); searchFields.setArtifactId( "artifactid-numeric" );
searchFields.setRepositories( selectedRepos ); searchFields.setRepositories( selectedRepos );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();




try try
{ {
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();




try try
{ {
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );


EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
archivaConfigControl.replay(); archivaConfigControl.replay();


search.search( "user", searchFields, null ); search.search( "user", searchFields, null );


archivaConfigControl.verify(); archivaConfigControl.verify();


fail( "A RepositorySearchExcecption should have been thrown." );
fail( "A RepositorySearchException should have been thrown." );
} }
catch ( RepositorySearchException e ) catch ( RepositorySearchException e )
{ {
searchFields.setClassName( "org.apache.archiva.test.App" ); searchFields.setClassName( "org.apache.archiva.test.App" );
searchFields.setRepositories( selectedRepos ); searchFields.setRepositories( selectedRepos );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();


searchFields.setPackaging( "jar" ); searchFields.setPackaging( "jar" );
searchFields.setRepositories( selectedRepos ); searchFields.setRepositories( selectedRepos );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();


searchFields.setPackaging( "war" ); searchFields.setPackaging( "war" );
searchFields.setRepositories( selectedRepos ); searchFields.setRepositories( selectedRepos );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();

archivaConfigControl.replay(); archivaConfigControl.replay();


SearchResults results = search.search( "user", searchFields, null ); SearchResults results = search.search( "user", searchFields, null );
searchFields.setClassName( "com.classname.search.App" ); searchFields.setClassName( "com.classname.search.App" );
searchFields.setRepositories( selectedRepos ); searchFields.setRepositories( selectedRepos );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();


searchFields.setGroupId( "org.apache.archiva" ); searchFields.setGroupId( "org.apache.archiva" );
searchFields.setRepositories( selectedRepos ); searchFields.setRepositories( selectedRepos );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();


searchFields.setClassName( "SomeClass" ); searchFields.setClassName( "SomeClass" );
searchFields.setRepositories( selectedRepos ); searchFields.setRepositories( selectedRepos );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();


searchFields.setClassName( "SomeClass" ); searchFields.setClassName( "SomeClass" );
searchFields.setRepositories( selectedRepos ); searchFields.setRepositories( selectedRepos );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );

archivaConfigControl.replay(); archivaConfigControl.replay();


SearchResults results = search.search( "user", searchFields, null ); SearchResults results = search.search( "user", searchFields, null );
SearchResultLimits limits = new SearchResultLimits( SearchResultLimits.ALL_PAGES ); SearchResultLimits limits = new SearchResultLimits( SearchResultLimits.ALL_PAGES );
limits.setPageSize( 300 ); limits.setPageSize( 300 );


EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 5 );
EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();


archivaConfigControl.replay(); archivaConfigControl.replay();



+ 5
- 0
archiva-modules/archiva-base/archiva-indexer/src/test/resources/spring-context.xml 查看文件

default-lazy-init="false"> default-lazy-init="false">


<context:annotation-config/> <context:annotation-config/>
<context:component-scan base-package="org.apache.archiva.repository.content.maven2" />

<alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
<alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />



<bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler"> <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
<property name="properties"> <property name="properties">

+ 1
- 1
archiva-modules/archiva-base/archiva-proxy-api/src/main/java/org/apache/archiva/proxy/model/ProxyConnector.java 查看文件



sb.append( "ProxyConnector[\n" ); sb.append( "ProxyConnector[\n" );
sb.append( " source: [managed] " ).append( this.sourceRepository.getRepoRoot() ).append( "\n" ); sb.append( " source: [managed] " ).append( this.sourceRepository.getRepoRoot() ).append( "\n" );
sb.append( " target: [remote] " ).append( this.targetRepository.getRepository().getUrl() ).append( "\n" );
sb.append( " target: [remote] " ).append( this.targetRepository.getRepository().getLocation() ).append( "\n" );
sb.append( " proxyId:" ).append( this.proxyId ).append( "\n" ); sb.append( " proxyId:" ).append( this.proxyId ).append( "\n" );


Iterator<String> keys = this.policies.keySet().iterator(); Iterator<String> keys = this.policies.keySet().iterator();

+ 106
- 77
archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/archiva/proxy/DefaultRepositoryProxyConnectors.java 查看文件

import org.apache.archiva.admin.model.RepositoryAdminException; import org.apache.archiva.admin.model.RepositoryAdminException;
import org.apache.archiva.admin.model.beans.NetworkProxy; import org.apache.archiva.admin.model.beans.NetworkProxy;
import org.apache.archiva.admin.model.beans.ProxyConnectorRuleType; import org.apache.archiva.admin.model.beans.ProxyConnectorRuleType;
import org.apache.archiva.admin.model.beans.RemoteRepository;
import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin; import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin;
import org.apache.archiva.common.filelock.FileLockException; import org.apache.archiva.common.filelock.FileLockException;
import org.apache.archiva.common.filelock.FileLockManager; import org.apache.archiva.common.filelock.FileLockManager;
import org.apache.archiva.common.filelock.FileLockTimeoutException; import org.apache.archiva.common.filelock.FileLockTimeoutException;
import org.apache.archiva.common.filelock.Lock; import org.apache.archiva.common.filelock.Lock;
import org.apache.archiva.configuration.*;
import org.apache.archiva.configuration.ArchivaConfiguration;
import org.apache.archiva.configuration.Configuration;
import org.apache.archiva.configuration.ConfigurationNames;
import org.apache.archiva.configuration.NetworkProxyConfiguration;
import org.apache.archiva.configuration.ProxyConnectorConfiguration;
import org.apache.archiva.configuration.ProxyConnectorRuleConfiguration;
import org.apache.archiva.model.ArtifactReference; import org.apache.archiva.model.ArtifactReference;
import org.apache.archiva.model.Keys; import org.apache.archiva.model.Keys;
import org.apache.archiva.model.RepositoryURL; import org.apache.archiva.model.RepositoryURL;
import org.apache.archiva.policies.*;
import org.apache.archiva.policies.DownloadErrorPolicy;
import org.apache.archiva.policies.DownloadPolicy;
import org.apache.archiva.policies.PolicyConfigurationException;
import org.apache.archiva.policies.PolicyViolationException;
import org.apache.archiva.policies.PostDownloadPolicy;
import org.apache.archiva.policies.PreDownloadPolicy;
import org.apache.archiva.policies.ProxyDownloadException;
import org.apache.archiva.policies.urlcache.UrlFailureCache; import org.apache.archiva.policies.urlcache.UrlFailureCache;
import org.apache.archiva.proxy.common.WagonFactory; import org.apache.archiva.proxy.common.WagonFactory;
import org.apache.archiva.proxy.common.WagonFactoryException; import org.apache.archiva.proxy.common.WagonFactoryException;
import org.apache.archiva.redback.components.registry.Registry; import org.apache.archiva.redback.components.registry.Registry;
import org.apache.archiva.redback.components.registry.RegistryListener; import org.apache.archiva.redback.components.registry.RegistryListener;
import org.apache.archiva.redback.components.taskqueue.TaskQueueException; import org.apache.archiva.redback.components.taskqueue.TaskQueueException;
import org.apache.archiva.repository.*;
import org.apache.archiva.repository.ManagedRepository;
import org.apache.archiva.repository.RemoteRepository;
import org.apache.archiva.repository.ManagedRepositoryContent;
import org.apache.archiva.repository.PasswordCredentials;
import org.apache.archiva.repository.RemoteRepositoryContent;
import org.apache.archiva.repository.RepositoryContentFactory;
import org.apache.archiva.repository.RepositoryCredentials;
import org.apache.archiva.repository.RepositoryException;
import org.apache.archiva.repository.RepositoryNotFoundException;
import org.apache.archiva.repository.RepositoryRegistry;
import org.apache.archiva.repository.metadata.MetadataTools; import org.apache.archiva.repository.metadata.MetadataTools;
import org.apache.archiva.repository.metadata.RepositoryMetadataException; import org.apache.archiva.repository.metadata.RepositoryMetadataException;
import org.apache.archiva.scheduler.ArchivaTaskScheduler; import org.apache.archiva.scheduler.ArchivaTaskScheduler;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.TimeUnit;


/** /**
* DefaultRepositoryProxyConnectors * DefaultRepositoryProxyConnectors
@Named(value = "archivaTaskScheduler#repository") @Named(value = "archivaTaskScheduler#repository")
private ArchivaTaskScheduler scheduler; private ArchivaTaskScheduler scheduler;


@Inject
private RepositoryRegistry repositoryRegistry;

@Inject @Inject
private NetworkProxyAdmin networkProxyAdmin; private NetworkProxyAdmin networkProxyAdmin;


{ {
String key = proxyConfig.getSourceRepoId(); String key = proxyConfig.getSourceRepoId();


try
// Create connector object.
ProxyConnector connector = new ProxyConnector();

ManagedRepository repo = repositoryRegistry.getManagedRepository( proxyConfig.getSourceRepoId( ) );
if (repo==null) {
log.error("Cannot find source repository after config change "+proxyConfig.getSourceRepoId());
continue;
}
connector.setSourceRepository(repo.getContent());
RemoteRepository rRepo = repositoryRegistry.getRemoteRepository( proxyConfig.getTargetRepoId() );
if (rRepo==null) {
log.error("Cannot find target repository after config change "+proxyConfig.getSourceRepoId());
continue;
}
connector.setTargetRepository(rRepo.getContent());

connector.setProxyId( proxyConfig.getProxyId() );
connector.setPolicies( proxyConfig.getPolicies() );
connector.setOrder( proxyConfig.getOrder() );
connector.setDisabled( proxyConfig.isDisabled() );

// Copy any blacklist patterns.
List<String> blacklist = new ArrayList<>( 0 );
if ( CollectionUtils.isNotEmpty( proxyConfig.getBlackListPatterns() ) )
{ {
// Create connector object.
ProxyConnector connector = new ProxyConnector();

connector.setSourceRepository(
repositoryFactory.getManagedRepositoryContent( proxyConfig.getSourceRepoId() ) );
connector.setTargetRepository(
repositoryFactory.getRemoteRepositoryContent( proxyConfig.getTargetRepoId() ) );

connector.setProxyId( proxyConfig.getProxyId() );
connector.setPolicies( proxyConfig.getPolicies() );
connector.setOrder( proxyConfig.getOrder() );
connector.setDisabled( proxyConfig.isDisabled() );

// Copy any blacklist patterns.
List<String> blacklist = new ArrayList<>( 0 );
if ( CollectionUtils.isNotEmpty( proxyConfig.getBlackListPatterns() ) )
{
blacklist.addAll( proxyConfig.getBlackListPatterns() );
}
connector.setBlacklist( blacklist );
blacklist.addAll( proxyConfig.getBlackListPatterns() );
}
connector.setBlacklist( blacklist );


// Copy any whitelist patterns.
List<String> whitelist = new ArrayList<>( 0 );
if ( CollectionUtils.isNotEmpty( proxyConfig.getWhiteListPatterns() ) )
{
whitelist.addAll( proxyConfig.getWhiteListPatterns() );
}
connector.setWhitelist( whitelist );
// Copy any whitelist patterns.
List<String> whitelist = new ArrayList<>( 0 );
if ( CollectionUtils.isNotEmpty( proxyConfig.getWhiteListPatterns() ) )
{
whitelist.addAll( proxyConfig.getWhiteListPatterns() );
}
connector.setWhitelist( whitelist );


List<ProxyConnectorRuleConfiguration> proxyConnectorRuleConfigurations =
findProxyConnectorRules( connector.getSourceRepository().getId(),
connector.getTargetRepository().getId(),
allProxyConnectorRuleConfigurations );
List<ProxyConnectorRuleConfiguration> proxyConnectorRuleConfigurations =
findProxyConnectorRules( connector.getSourceRepository().getId(),
connector.getTargetRepository().getId(),
allProxyConnectorRuleConfigurations );


if ( !proxyConnectorRuleConfigurations.isEmpty() )
if ( !proxyConnectorRuleConfigurations.isEmpty() )
{
for ( ProxyConnectorRuleConfiguration proxyConnectorRuleConfiguration : proxyConnectorRuleConfigurations )
{ {
for ( ProxyConnectorRuleConfiguration proxyConnectorRuleConfiguration : proxyConnectorRuleConfigurations )
if ( StringUtils.equals( proxyConnectorRuleConfiguration.getRuleType(),
ProxyConnectorRuleType.BLACK_LIST.getRuleType() ) )
{ {
if ( StringUtils.equals( proxyConnectorRuleConfiguration.getRuleType(),
ProxyConnectorRuleType.BLACK_LIST.getRuleType() ) )
{
connector.getBlacklist().add( proxyConnectorRuleConfiguration.getPattern() );
}

if ( StringUtils.equals( proxyConnectorRuleConfiguration.getRuleType(),
ProxyConnectorRuleType.WHITE_LIST.getRuleType() ) )
{
connector.getWhitelist().add( proxyConnectorRuleConfiguration.getPattern() );
}
connector.getBlacklist().add( proxyConnectorRuleConfiguration.getPattern() );
} }
}


// Get other connectors
List<ProxyConnector> connectors = this.proxyConnectorMap.get( key );
if ( connectors == null )
{
// Create if we are the first.
connectors = new ArrayList<>( 1 );
if ( StringUtils.equals( proxyConnectorRuleConfiguration.getRuleType(),
ProxyConnectorRuleType.WHITE_LIST.getRuleType() ) )
{
connector.getWhitelist().add( proxyConnectorRuleConfiguration.getPattern() );
}
} }

// Add the connector.
connectors.add( connector );

// Ensure the list is sorted.
Collections.sort( connectors, proxyOrderSorter );

// Set the key to the list of connectors.
this.proxyConnectorMap.put( key, connectors );
} }
catch ( RepositoryNotFoundException e )
{
log.warn( "Unable to use proxy connector: {}", e.getMessage(), e );
}
catch ( RepositoryException e )

// Get other connectors
List<ProxyConnector> connectors = this.proxyConnectorMap.get( key );
if ( connectors == null )
{ {
log.warn( "Unable to use proxy connector: {}", e.getMessage(), e );
// Create if we are the first.
connectors = new ArrayList<>( 1 );
} }


// Add the connector.
connectors.add( connector );

// Ensure the list is sorted.
Collections.sort( connectors, proxyOrderSorter );

// Set the key to the list of connectors.
this.proxyConnectorMap.put( key, connectors );



} }


} }


AuthenticationInfo authInfo = null; AuthenticationInfo authInfo = null;
String username = remoteRepository.getRepository().getUserName();
String password = remoteRepository.getRepository().getPassword();
String username = "";
String password = "";
RepositoryCredentials repCred = remoteRepository.getRepository().getLoginCredentials();
if (repCred!=null && repCred instanceof PasswordCredentials) {
PasswordCredentials pwdCred = (PasswordCredentials) repCred;
username = pwdCred.getUsername();
password = pwdCred.getPassword()==null ? "" : new String(pwdCred.getPassword());
}


if ( StringUtils.isNotBlank( username ) && StringUtils.isNotBlank( password ) ) if ( StringUtils.isNotBlank( username ) && StringUtils.isNotBlank( password ) )
{ {
} }


// Convert seconds to milliseconds // Convert seconds to milliseconds
long timeoutInMilliseconds = TimeUnit.MILLISECONDS.convert( remoteRepository.getRepository().getTimeout(), //
TimeUnit.SECONDS );
long timeoutInMilliseconds = remoteRepository.getRepository().getTimeout().toMillis();


// Set timeout read and connect // Set timeout read and connect
// FIXME olamy having 2 config values // FIXME olamy having 2 config values

+ 25
- 18
archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java 查看文件

import org.apache.archiva.policies.SnapshotsPolicy; import org.apache.archiva.policies.SnapshotsPolicy;
import org.apache.archiva.proxy.model.RepositoryProxyConnectors; import org.apache.archiva.proxy.model.RepositoryProxyConnectors;
import org.apache.archiva.repository.ManagedRepositoryContent; import org.apache.archiva.repository.ManagedRepositoryContent;
import org.apache.archiva.repository.RepositoryRegistry;
import org.apache.archiva.repository.maven2.MavenManagedRepository;
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.maven.index.NexusIndexer; import org.apache.maven.index.NexusIndexer;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.net.URI;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;


WagonDelegate delegate; WagonDelegate delegate;


@Inject
protected ManagedRepositoryAdmin managedRepositoryAdmin;
protected RepositoryRegistry repositoryRegistry;


@Inject @Inject
protected NexusIndexer nexusIndexer; protected NexusIndexer nexusIndexer;


managedDefaultDir = Paths.get( managedDefaultRepository.getRepoRoot() ); managedDefaultDir = Paths.get( managedDefaultRepository.getRepoRoot() );


ManagedRepository repoConfig = managedDefaultRepository.getRepository();
org.apache.archiva.repository.ManagedRepository repoConfig = managedDefaultRepository.getRepository();


( (DefaultManagedRepositoryAdmin) applicationContext.getBean( ( (DefaultManagedRepositoryAdmin) applicationContext.getBean(
ManagedRepositoryAdmin.class ) ).setArchivaConfiguration( config ); ManagedRepositoryAdmin.class ) ).setArchivaConfiguration( config );


applicationContext.getBean( ManagedRepositoryAdmin.class ).addManagedRepository( repoConfig, false, null );
applicationContext.getBean( RepositoryRegistry.class ).putRepository( repoConfig );


// to prevent windauze file leaking // to prevent windauze file leaking
removeMavenIndexes(); removeMavenIndexes();


ManagedRepositoryAdmin managedRepositoryAdmin = applicationContext.getBean( ManagedRepositoryAdmin.class );

if ( managedRepositoryAdmin.getManagedRepository( repoConfig.getId() ) != null )
{
managedRepositoryAdmin.deleteManagedRepository( repoConfig.getId(), null, true );
}

managedRepositoryAdmin.addManagedRepository( repoConfig, false, null );
repositoryRegistry = applicationContext.getBean( RepositoryRegistry.class );
repositoryRegistry.setArchivaConfiguration( config );


// Setup target (proxied to) repository. // Setup target (proxied to) repository.
saveRemoteRepositoryConfig( ID_PROXIED1, "Proxied Repository 1", saveRemoteRepositoryConfig( ID_PROXIED1, "Proxied Repository 1",
Paths.get( REPOPATH_PROXIED1 ).toUri().toURL().toExternalForm(), "default" );
Paths.get( REPOPATH_PROXIED1 ).toUri().toURL().toExternalForm(), "default" );


// Setup target (proxied to) repository. // Setup target (proxied to) repository.
saveRemoteRepositoryConfig( ID_PROXIED2, "Proxied Repository 2", saveRemoteRepositoryConfig( ID_PROXIED2, "Proxied Repository 2",
Paths.get( REPOPATH_PROXIED2 ).toUri().toURL().toExternalForm(), "default" );
Paths.get( REPOPATH_PROXIED2 ).toUri().toURL().toExternalForm(), "default" );

repositoryRegistry.reload();

if ( repositoryRegistry.getManagedRepository( repoConfig.getId() ) != null )
{
org.apache.archiva.repository.ManagedRepository managedRepository = repositoryRegistry.getManagedRepository( repoConfig.getId() );
repositoryRegistry.removeRepository( managedRepository );
}

repositoryRegistry.putRepository( repoConfig );



// Setup the proxy handler. // Setup the proxy handler.
//proxyHandler = applicationContext.getBean (RepositoryProxyConnectors) lookup( RepositoryProxyConnectors.class.getName() ); //proxyHandler = applicationContext.getBean (RepositoryProxyConnectors) lookup( RepositoryProxyConnectors.class.getName() );


proxyHandler = applicationContext.getBean( "repositoryProxyConnectors#test", RepositoryProxyConnectors.class ); proxyHandler = applicationContext.getBean( "repositoryProxyConnectors#test", RepositoryProxyConnectors.class );



// Setup the wagon mock. // Setup the wagon mock.
wagonMockControl = EasyMock.createNiceControl(); wagonMockControl = EasyMock.createNiceControl();
wagonMock = wagonMockControl.createMock( Wagon.class ); wagonMock = wagonMockControl.createMock( Wagon.class );
protected ManagedRepositoryContent createRepository( String id, String name, String path, String layout ) protected ManagedRepositoryContent createRepository( String id, String name, String path, String layout )
throws Exception throws Exception
{ {
ManagedRepository repo = new ManagedRepository();
repo.setId( id );
repo.setName( name );
repo.setLocation( path );
MavenManagedRepository repo = new MavenManagedRepository(id, name);
repo.setLocation( new URI(path) );
repo.setLayout( layout ); repo.setLayout( layout );


ManagedRepositoryContent repoContent = ManagedRepositoryContent repoContent =
config.triggerChange( prefix + ".name", repoConfig.getName() ); config.triggerChange( prefix + ".name", repoConfig.getName() );
config.triggerChange( prefix + ".url", repoConfig.getUrl() ); config.triggerChange( prefix + ".url", repoConfig.getUrl() );
config.triggerChange( prefix + ".layout", repoConfig.getLayout() ); config.triggerChange( prefix + ".layout", repoConfig.getLayout() );
repositoryRegistry.reload();
} }


protected Path saveTargetedRepositoryConfig( String id, String originalPath, String targetPath, String layout ) protected Path saveTargetedRepositoryConfig( String id, String originalPath, String targetPath, String layout )

+ 1
- 0
archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/CacheFailuresTransferTest.java 查看文件

saveRemoteRepositoryConfig( "badproxied1", "Bad Proxied 1", "test://bad.machine.com/repo/", "default" ); saveRemoteRepositoryConfig( "badproxied1", "Bad Proxied 1", "test://bad.machine.com/repo/", "default" );
saveRemoteRepositoryConfig( "badproxied2", "Bad Proxied 2", "test://bad.machine.com/anotherrepo/", "default" ); saveRemoteRepositoryConfig( "badproxied2", "Bad Proxied 2", "test://bad.machine.com/anotherrepo/", "default" );



// Configure Connector (usually done within archiva.xml configuration) // Configure Connector (usually done within archiva.xml configuration)
saveConnector( ID_DEFAULT_MANAGED, "badproxied1", ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS, saveConnector( ID_DEFAULT_MANAGED, "badproxied1", ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false ); SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );

+ 8
- 6
archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/HttpProxyTransferTest.java 查看文件

import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin; import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin; import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
import org.apache.archiva.proxy.model.RepositoryProxyConnectors; import org.apache.archiva.proxy.model.RepositoryProxyConnectors;
import org.apache.archiva.repository.RepositoryRegistry;
import org.apache.archiva.repository.maven2.MavenManagedRepository;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.archiva.configuration.ArchivaConfiguration; import org.apache.archiva.configuration.ArchivaConfiguration;
import org.apache.archiva.configuration.NetworkProxyConfiguration; import org.apache.archiva.configuration.NetworkProxyConfiguration;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.net.URI;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Locale;


import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;


// Make the destination dir. // Make the destination dir.
Files.createDirectories(destRepoDir); Files.createDirectories(destRepoDir);


ManagedRepository repo = new ManagedRepository();
repo.setId( MANAGED_ID );
repo.setName( "Default Managed Repository" );
repo.setLocation( repoPath );
MavenManagedRepository repo = new MavenManagedRepository( MANAGED_ID, "Default Managed Repository" );
repo.setLocation( new URI(repoPath) );
repo.setLayout( "default" ); repo.setLayout( "default" );


ManagedRepositoryContent repoContent = ManagedRepositoryContent repoContent =
( (DefaultManagedRepositoryAdmin) applicationContext.getBean( ( (DefaultManagedRepositoryAdmin) applicationContext.getBean(
ManagedRepositoryAdmin.class ) ).setArchivaConfiguration( config ); ManagedRepositoryAdmin.class ) ).setArchivaConfiguration( config );


ManagedRepositoryAdmin managedRepositoryAdmin = applicationContext.getBean( ManagedRepositoryAdmin.class );
RepositoryRegistry managedRepositoryAdmin = applicationContext.getBean( RepositoryRegistry.class );
if ( managedRepositoryAdmin.getManagedRepository( repo.getId() ) == null ) if ( managedRepositoryAdmin.getManagedRepository( repo.getId() ) == null )
{ {
managedRepositoryAdmin.addManagedRepository( repo, false, null );
managedRepositoryAdmin.putRepository( repo );
} }


//config.getConfiguration().addManagedRepository( repo ); //config.getConfiguration().addManagedRepository( repo );

+ 13
- 0
archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/MockConfiguration.java 查看文件

import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Set; import java.util.Set;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;


{ {
// no op // no op
} }

@Override
public Locale getDefaultLocale( )
{
return Locale.getDefault();
}

@Override
public List<Locale.LanguageRange> getLanguagePriorities( )
{
return Locale.LanguageRange.parse( "en,fr,de" );
}
} }

+ 231
- 0
archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java 查看文件

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.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.features.ArtifactCleanupFeature;
import org.apache.archiva.repository.features.IndexCreationFeature;
import org.apache.archiva.repository.features.RemoteIndexFeature;
import org.apache.archiva.repository.features.StagingRepositoryFeature;
import org.springframework.stereotype.Service;

import java.net.URI;
import java.time.Duration;
import java.time.Period;
import java.util.HashSet;
import java.util.Set;

/**
* Just a simple mock class for the repository provider
*/
@Service("mockRepositoryProvider")
public class RepositoryProviderMock implements RepositoryProvider
{

private static final Set<RepositoryType> TYPES = new HashSet<>( );

static
{
TYPES.add( RepositoryType.MAVEN );
TYPES.add( RepositoryType.NPM );
}

@Override
public Set<RepositoryType> provides( )
{
return TYPES;
}

@Override
public EditableManagedRepository createManagedInstance( String id, String name )
{
return new BasicManagedRepository( id, name );
}

@Override
public EditableRemoteRepository createRemoteInstance( String id, String name )
{
return new BasicRemoteRepository( id, name );
}

@Override
public ManagedRepository createManagedInstance( ManagedRepositoryConfiguration configuration ) throws RepositoryException
{
BasicManagedRepository managedRepository = new BasicManagedRepository( configuration.getId( ), configuration.getName( ) );
updateManagedInstance( managedRepository, configuration );
return managedRepository;
}


@Override
public void updateManagedInstance( EditableManagedRepository managedRepository, ManagedRepositoryConfiguration configuration ) throws RepositoryException
{
try
{
managedRepository.setName( managedRepository.getPrimaryLocale(), configuration.getName( ) );
managedRepository.setLocation( new URI( configuration.getLocation( )==null ?"" : configuration.getLocation() ) );
managedRepository.setBaseUri( new URI( "" ) );
managedRepository.setBlocksRedeployment( configuration.isBlockRedeployments( ) );
managedRepository.setDescription( managedRepository.getPrimaryLocale(), configuration.getDescription( ) );
managedRepository.setLayout( configuration.getLayout( ) );
managedRepository.setScanned( configuration.isScanned( ) );
managedRepository.setSchedulingDefinition( configuration.getRefreshCronExpression( ) );
if (configuration.isReleases()) {
managedRepository.addActiveReleaseScheme( ReleaseScheme.RELEASE );
}
if (configuration.isSnapshots()) {
managedRepository.addActiveReleaseScheme( ReleaseScheme.SNAPSHOT );
}
ArtifactCleanupFeature acf = managedRepository.getFeature( ArtifactCleanupFeature.class ).get( );
acf.setRetentionPeriod( Period.ofDays( configuration.getRetentionPeriod( ) ) );
acf.setDeleteReleasedSnapshots( configuration.isDeleteReleasedSnapshots( ) );
acf.setRetentionCount( configuration.getRetentionCount( ) );
IndexCreationFeature icf = managedRepository.getFeature( IndexCreationFeature.class ).get( );
icf.setIndexPath( new URI( configuration.getIndexDir( ) ) );
icf.setSkipPackedIndexCreation( configuration.isSkipPackedIndexCreation( ) );
StagingRepositoryFeature srf = managedRepository.getFeature( StagingRepositoryFeature.class ).get( );
srf.setStageRepoNeeded( configuration.isStageRepoNeeded( ) );
}
catch ( Exception e )
{
throw new RepositoryException( "Error", e );
}

}


@Override
public ManagedRepository createStagingInstance( ManagedRepositoryConfiguration configuration ) throws RepositoryException
{
String id = configuration.getId( ) + StagingRepositoryFeature.STAGING_REPO_POSTFIX;
BasicManagedRepository managedRepository = new BasicManagedRepository( id, configuration.getName( ) );
updateManagedInstance( managedRepository, configuration );
return managedRepository;
}

@Override
public RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration configuration ) throws RepositoryException
{
BasicRemoteRepository remoteRepository = new BasicRemoteRepository( configuration.getId( ), configuration.getName( ) );
updateRemoteInstance( remoteRepository, configuration );
return remoteRepository;
}

@Override
public void updateRemoteInstance( EditableRemoteRepository remoteRepository, RemoteRepositoryConfiguration configuration ) throws RepositoryException
{
try
{
remoteRepository.setName( remoteRepository.getPrimaryLocale(), configuration.getName( ) );
remoteRepository.setBaseUri( new URI( "" ) );
remoteRepository.setDescription( remoteRepository.getPrimaryLocale(), configuration.getDescription( ) );
remoteRepository.setLayout( configuration.getLayout( ) );
remoteRepository.setSchedulingDefinition( configuration.getRefreshCronExpression( ) );
remoteRepository.setCheckPath( configuration.getCheckPath( ) );
remoteRepository.setExtraHeaders( configuration.getExtraHeaders( ) );
remoteRepository.setExtraParameters( configuration.getExtraParameters( ) );
remoteRepository.setTimeout( Duration.ofSeconds( configuration.getTimeout( ) ) );
char[] pwd = configuration.getPassword()==null ? "".toCharArray() : configuration.getPassword().toCharArray();
remoteRepository.setCredentials( new PasswordCredentials( configuration.getUsername( ), pwd ) );
remoteRepository.setLocation( new URI( configuration.getUrl( )==null ? "" : configuration.getUrl() ) );
RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get( );
rif.setDownloadRemoteIndexOnStartup( configuration.isDownloadRemoteIndexOnStartup( ) );
rif.setDownloadRemoteIndex( configuration.isDownloadRemoteIndex( ) );
rif.setIndexUri( new URI( configuration.getIndexDir( ) ) );
rif.setDownloadTimeout( Duration.ofSeconds( configuration.getRemoteDownloadTimeout( ) ) );
rif.setProxyId( configuration.getRemoteDownloadNetworkProxyId( ) );
}
catch ( Exception e )
{
throw new RepositoryException( "Error", e );
}

}

@Override
public ManagedRepositoryConfiguration getManagedConfiguration( ManagedRepository managedRepository ) throws RepositoryException
{
ManagedRepositoryConfiguration configuration = new ManagedRepositoryConfiguration( );
configuration.setId( managedRepository.getId( ) );
configuration.setName(managedRepository.getName());
configuration.setLocation( managedRepository.getLocation( ) == null ? "" : managedRepository.getLocation().toString( ) );
configuration.setBlockRedeployments( managedRepository.blocksRedeployments( ) );
configuration.setDescription( managedRepository.getDescription( ) );
configuration.setLayout( managedRepository.getLayout( ) );
configuration.setScanned( managedRepository.isScanned( ) );
configuration.setRefreshCronExpression( managedRepository.getSchedulingDefinition( ) );
configuration.setReleases( managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.RELEASE) );
configuration.setSnapshots( managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.SNAPSHOT) );
ArtifactCleanupFeature acf = managedRepository.getFeature( ArtifactCleanupFeature.class ).get( );
configuration.setRetentionPeriod( acf.getRetentionPeriod( ).getDays( ) );
configuration.setDeleteReleasedSnapshots( acf.isDeleteReleasedSnapshots( ) );
configuration.setRetentionCount( acf.getRetentionCount( ) );
IndexCreationFeature icf = managedRepository.getFeature( IndexCreationFeature.class ).get( );
configuration.setSkipPackedIndexCreation( icf.isSkipPackedIndexCreation( ) );
configuration.setIndexDir( icf.getIndexPath( ) == null ? "" : icf.getIndexPath().toString( ) );
StagingRepositoryFeature srf = managedRepository.getFeature( StagingRepositoryFeature.class ).get( );
configuration.setStageRepoNeeded( srf.isStageRepoNeeded( ) );
return configuration;
}


@Override
public RemoteRepositoryConfiguration getRemoteConfiguration( RemoteRepository remoteRepository ) throws RepositoryException
{
RemoteRepositoryConfiguration configuration = new RemoteRepositoryConfiguration( );
configuration.setId( remoteRepository.getId( ) );
configuration.setName( remoteRepository.getName( ) );
configuration.setDescription( remoteRepository.getDescription( ) );
configuration.setLayout( remoteRepository.getLayout( ) );
configuration.setRefreshCronExpression( remoteRepository.getSchedulingDefinition( ) );
configuration.setCheckPath( remoteRepository.getCheckPath( ) );
configuration.setExtraHeaders( remoteRepository.getExtraHeaders( ) );
configuration.setExtraParameters( remoteRepository.getExtraParameters( ) );
configuration.setTimeout( (int) remoteRepository.getTimeout( ).getSeconds( ) );
RepositoryCredentials creds = remoteRepository.getLoginCredentials( );
if (creds!=null)
{
PasswordCredentials pwdCreds = (PasswordCredentials) creds;
configuration.setUsername( pwdCreds.getUsername( ) );
configuration.setPassword( new String( pwdCreds.getPassword( ) ) );
}
configuration.setUrl( remoteRepository.getLocation( ) == null ? "" : remoteRepository.getLocation().toString( ) );
RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get( );
configuration.setDownloadRemoteIndex( rif.isDownloadRemoteIndex( ) );
configuration.setDownloadRemoteIndexOnStartup( rif.isDownloadRemoteIndexOnStartup( ) );
configuration.setIndexDir( rif.getIndexUri( )==null ? "" : rif.getIndexUri().toString( ) );
configuration.setRemoteDownloadNetworkProxyId( rif.getProxyId( ) );
return configuration;
}

}

+ 4
- 1
archiva-modules/archiva-base/archiva-proxy/src/test/resources/spring-context.xml 查看文件

default-lazy-init="true"> default-lazy-init="true">


<context:annotation-config/> <context:annotation-config/>
<context:component-scan base-package="org.apache.archiva.metadata.repository"/>
<context:component-scan base-package="org.apache.archiva.metadata.repository,org.apache.archiva.repository.content.maven2,org.apache.archiva.proxy,org.apache.archiva.repository.mock"/>
<alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
<alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
<alias name="mockRepositoryProvider" alias="mavenRepositoryProvider" />


<alias name="archivaConfiguration#mock" alias="archivaConfiguration#default"/> <alias name="archivaConfiguration#mock" alias="archivaConfiguration#default"/>
<alias name="archivaConfiguration#mock" alias="archivaConfiguration"/> <alias name="archivaConfiguration#mock" alias="archivaConfiguration"/>

+ 1
- 1
archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/DefaultRepositoryScanner.java 查看文件

*/ */


import org.apache.archiva.admin.model.RepositoryAdminException; import org.apache.archiva.admin.model.RepositoryAdminException;
import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.configuration.FileTypes; import org.apache.archiva.configuration.FileTypes;
import org.apache.archiva.consumers.InvalidRepositoryContentConsumer; import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
import org.apache.archiva.consumers.KnownRepositoryContentConsumer; import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
import org.apache.archiva.consumers.RepositoryContentConsumer; import org.apache.archiva.consumers.RepositoryContentConsumer;
import org.apache.archiva.repository.ManagedRepository;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

+ 6
- 3
archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryContentConsumers.java 查看文件



import org.apache.archiva.admin.model.RepositoryAdminException; import org.apache.archiva.admin.model.RepositoryAdminException;
import org.apache.archiva.admin.model.admin.ArchivaAdministration; import org.apache.archiva.admin.model.admin.ArchivaAdministration;
import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.common.utils.BaseFile; import org.apache.archiva.common.utils.BaseFile;
import org.apache.archiva.common.utils.PathUtil;
import org.apache.archiva.configuration.ArchivaConfiguration; import org.apache.archiva.configuration.ArchivaConfiguration;
import org.apache.archiva.consumers.InvalidRepositoryContentConsumer; import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
import org.apache.archiva.consumers.KnownRepositoryContentConsumer; import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
import org.apache.archiva.consumers.functors.ConsumerWantsFilePredicate; import org.apache.archiva.consumers.functors.ConsumerWantsFilePredicate;
import org.apache.archiva.redback.components.registry.RegistryListener; import org.apache.archiva.redback.components.registry.RegistryListener;
import org.apache.archiva.repository.ManagedRepository;
import org.apache.archiva.repository.scanner.functors.ConsumerProcessFileClosure; import org.apache.archiva.repository.scanner.functors.ConsumerProcessFileClosure;
import org.apache.archiva.repository.scanner.functors.TriggerBeginScanClosure; import org.apache.archiva.repository.scanner.functors.TriggerBeginScanClosure;
import org.apache.archiva.repository.scanner.functors.TriggerScanCompletedClosure; import org.apache.archiva.repository.scanner.functors.TriggerScanCompletedClosure;


import javax.inject.Inject; import javax.inject.Inject;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*; import java.util.*;


/** /**
* @param localFile the local file to execute the consumers against. * @param localFile the local file to execute the consumers against.
* @param updateRelatedArtifacts TODO * @param updateRelatedArtifacts TODO
*/ */
public void executeConsumers(ManagedRepository repository, Path localFile, boolean updateRelatedArtifacts )
public void executeConsumers( ManagedRepository repository, Path localFile, boolean updateRelatedArtifacts )
throws RepositoryAdminException throws RepositoryAdminException
{ {
List<KnownRepositoryContentConsumer> selectedKnownConsumers = null; List<KnownRepositoryContentConsumer> selectedKnownConsumers = null;


// yuck. In case you can't read this, it says // yuck. In case you can't read this, it says
// "process the file if the consumer has it in the includes list, and not in the excludes list" // "process the file if the consumer has it in the includes list, and not in the excludes list"
BaseFile baseFile = new BaseFile( repository.getLocation(), localFile.toFile() );
Path repoPath = PathUtil.getPathFromUri( repository.getLocation() );
BaseFile baseFile = new BaseFile( repoPath.toString(), localFile.toFile() );
ConsumerWantsFilePredicate predicate = new ConsumerWantsFilePredicate( repository ); ConsumerWantsFilePredicate predicate = new ConsumerWantsFilePredicate( repository );
predicate.setBasefile( baseFile ); predicate.setBasefile( baseFile );
predicate.setCaseSensitive( false ); predicate.setCaseSensitive( false );

+ 1
- 1
archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScanStatistics.java 查看文件

* under the License. * under the License.
*/ */


import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.repository.ManagedRepository;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;


import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlRootElement;

+ 1
- 1
archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScanner.java 查看文件

* under the License. * under the License.
*/ */


import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.consumers.InvalidRepositoryContentConsumer; import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
import org.apache.archiva.consumers.KnownRepositoryContentConsumer; import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
import org.apache.archiva.repository.ManagedRepository;


import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;

+ 4
- 2
archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScannerInstance.java 查看文件

* under the License. * under the License.
*/ */


import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.common.utils.BaseFile; import org.apache.archiva.common.utils.BaseFile;
import org.apache.archiva.common.utils.PathUtil;
import org.apache.archiva.consumers.InvalidRepositoryContentConsumer; import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
import org.apache.archiva.consumers.KnownRepositoryContentConsumer; import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
import org.apache.archiva.consumers.functors.ConsumerWantsFilePredicate; import org.apache.archiva.consumers.functors.ConsumerWantsFilePredicate;
import org.apache.archiva.repository.ManagedRepository;
import org.apache.archiva.repository.scanner.functors.ConsumerProcessFileClosure; import org.apache.archiva.repository.scanner.functors.ConsumerProcessFileClosure;
import org.apache.archiva.repository.scanner.functors.TriggerBeginScanClosure; import org.apache.archiva.repository.scanner.functors.TriggerBeginScanClosure;
import org.apache.archiva.repository.scanner.functors.TriggerScanCompletedClosure; import org.apache.archiva.repository.scanner.functors.TriggerScanCompletedClosure;
stats.increaseFileCount(); stats.increaseFileCount();


// consume files regardless - the predicate will check the timestamp // consume files regardless - the predicate will check the timestamp
BaseFile basefile = new BaseFile( repository.getLocation(), file.toFile() );
Path repoPath = PathUtil.getPathFromUri( repository.getLocation() );
BaseFile basefile = new BaseFile( repoPath.toString(), file.toFile() );


// Timestamp finished points to the last successful scan, not this current one. // Timestamp finished points to the last successful scan, not this current one.
if ( Files.getLastModifiedTime(file).toMillis() >= changesSince ) if ( Files.getLastModifiedTime(file).toMillis() >= changesSince )

+ 1
- 1
archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/TriggerBeginScanClosure.java 查看文件

* under the License. * under the License.
*/ */


import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.repository.ManagedRepository;
import org.apache.commons.collections.Closure; import org.apache.commons.collections.Closure;
import org.apache.archiva.consumers.ConsumerException; import org.apache.archiva.consumers.ConsumerException;
import org.apache.archiva.consumers.RepositoryContentConsumer; import org.apache.archiva.consumers.RepositoryContentConsumer;

+ 1
- 1
archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/TriggerScanCompletedClosure.java 查看文件

* under the License. * under the License.
*/ */


import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.repository.ManagedRepository;
import org.apache.commons.collections.Closure; import org.apache.commons.collections.Closure;
import org.apache.archiva.consumers.RepositoryContentConsumer; import org.apache.archiva.consumers.RepositoryContentConsumer;
import org.slf4j.Logger; import org.slf4j.Logger;

+ 1
- 1
archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/InvalidScanConsumer.java 查看文件

* under the License. * under the License.
*/ */


import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.consumers.AbstractMonitoredConsumer; import org.apache.archiva.consumers.AbstractMonitoredConsumer;
import org.apache.archiva.consumers.ConsumerException; import org.apache.archiva.consumers.ConsumerException;
import org.apache.archiva.consumers.InvalidRepositoryContentConsumer; import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
import org.apache.archiva.repository.ManagedRepository;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.Scope;

+ 1
- 3
archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/KnownScanConsumer.java 查看文件

* under the License. * under the License.
*/ */


import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.consumers.AbstractMonitoredConsumer; import org.apache.archiva.consumers.AbstractMonitoredConsumer;
import org.apache.archiva.consumers.ConsumerException; import org.apache.archiva.consumers.ConsumerException;
import org.apache.archiva.consumers.KnownRepositoryContentConsumer; import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.apache.archiva.repository.ManagedRepository;


import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;

+ 11
- 11
archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryContentConsumersTest.java 查看文件

*/ */


import junit.framework.TestCase; import junit.framework.TestCase;
import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.admin.model.beans.RemoteRepository;
import org.apache.archiva.configuration.ArchivaConfiguration; import org.apache.archiva.configuration.ArchivaConfiguration;
import org.apache.archiva.consumers.InvalidRepositoryContentConsumer; import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
import org.apache.archiva.consumers.KnownRepositoryContentConsumer; import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
import org.apache.archiva.repository.BasicManagedRepository;
import org.apache.archiva.repository.BasicRemoteRepository;
import org.apache.archiva.repository.ManagedRepository;
import org.apache.archiva.repository.RemoteRepository;
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
import org.apache.commons.lang.SystemUtils; import org.apache.commons.lang.SystemUtils;
import org.easymock.IMocksControl; import org.easymock.IMocksControl;
import javax.inject.Inject; import javax.inject.Inject;
import java.io.IOException; import java.io.IOException;
import java.lang.annotation.Annotation; import java.lang.annotation.Annotation;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Arrays; import java.util.Arrays;


protected ManagedRepository createRepository( String id, String name, Path location ) protected ManagedRepository createRepository( String id, String name, Path location )
{ {
ManagedRepository repo = new ManagedRepository();
repo.setId( id );
repo.setName( name );
repo.setLocation( location.toAbsolutePath().toString() );
BasicManagedRepository repo = new BasicManagedRepository( id, name );
repo.setLocation( location.toAbsolutePath().toUri() );
return repo; return repo;
} }


protected RemoteRepository createRemoteRepository( String id, String name, String url )
protected RemoteRepository createRemoteRepository( String id, String name, String url ) throws URISyntaxException
{ {
RemoteRepository repo = new RemoteRepository();
repo.setId( id );
repo.setName( name );
repo.setUrl( url );
BasicRemoteRepository repo = new BasicRemoteRepository(id, name);
repo.setLocation( new URI( url ) );
return repo; return repo;
} }



+ 14
- 13
archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryScannerTest.java 查看文件

*/ */


import junit.framework.TestCase; import junit.framework.TestCase;
import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.admin.model.beans.RemoteRepository;
import org.apache.archiva.consumers.InvalidRepositoryContentConsumer; import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
import org.apache.archiva.consumers.KnownRepositoryContentConsumer; import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
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.test.utils.ArchivaSpringJUnit4ClassRunner; import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.junit.Test; import org.junit.Test;


import javax.inject.Inject; import javax.inject.Inject;
import java.io.IOException; import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
@Inject @Inject
ApplicationContext applicationContext; ApplicationContext applicationContext;


protected ManagedRepository createRepository( String id, String name, Path location )
protected EditableManagedRepository createRepository( String id, String name, Path location )
{ {
ManagedRepository repo = new ManagedRepository();
repo.setId( id );
repo.setName( name );
repo.setLocation( location.toAbsolutePath().toString());
BasicManagedRepository repo = new BasicManagedRepository(id, name);
repo.setLocation( location.toAbsolutePath().toUri());
return repo; return repo;
} }


protected RemoteRepository createRemoteRepository( String id, String name, String url )
protected EditableRemoteRepository createRemoteRepository( String id, String name, String url ) throws URISyntaxException
{ {
RemoteRepository repo = new RemoteRepository();
repo.setId( id );
repo.setName( name );
repo.setUrl( url );
BasicRemoteRepository repo = new BasicRemoteRepository(id, name);
repo.setLocation( new URI( url ) );
return repo; return repo;
} }




assertTrue( "Legacy Test Repository should exist.", Files.exists(repoDir) && Files.isDirectory(repoDir) ); assertTrue( "Legacy Test Repository should exist.", Files.exists(repoDir) && Files.isDirectory(repoDir) );


ManagedRepository repo = createRepository( "testLegacyRepo", "Test Legacy Repository", repoDir );
EditableManagedRepository repo = createRepository( "testLegacyRepo", "Test Legacy Repository", repoDir );
repo.setLayout( "legacy" ); repo.setLayout( "legacy" );


return repo; return repo;

+ 1
- 1
archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/SampleKnownConsumer.java 查看文件

* under the License. * under the License.
*/ */


import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.consumers.AbstractMonitoredConsumer; import org.apache.archiva.consumers.AbstractMonitoredConsumer;
import org.apache.archiva.consumers.ConsumerException; import org.apache.archiva.consumers.ConsumerException;
import org.apache.archiva.consumers.KnownRepositoryContentConsumer; import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
import org.apache.archiva.repository.ManagedRepository;


import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;

+ 1
- 6
archiva-modules/archiva-base/archiva-test-utils/pom.xml 查看文件

<artifactId>xmlunit</artifactId> <artifactId>xmlunit</artifactId>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>
</dependencies>
</project> </project>

+ 1
- 0
archiva-modules/archiva-base/pom.xml 查看文件

<module>archiva-policies</module> <module>archiva-policies</module>
<module>archiva-indexer</module> <module>archiva-indexer</module>
<module>archiva-consumers</module> <module>archiva-consumers</module>
<module>archiva-repository-api</module>
<module>archiva-repository-layer</module> <module>archiva-repository-layer</module>
<module>archiva-xml-tools</module> <module>archiva-xml-tools</module>
<module>archiva-proxy-api</module> <module>archiva-proxy-api</module>

正在加载...
取消
保存