Switching pathparser to new API

This commit is contained in:
Martin Stockhammer 2020-06-11 16:50:11 +02:00
parent e38eebeadd
commit bf95aca967
7 changed files with 1 additions and 164 deletions

View File

@ -28,16 +28,6 @@ import org.apache.archiva.repository.LayoutException;
public interface PathParser
{
/**
* Take a path and get the ArtifactReference associated with it.
*
* @param path the relative path to parse.
* @return the ArtifactReference for the provided path. (never null)
* @throws LayoutException if there was a problem parsing the path.
*/
ArtifactReference toArtifactReference( String path )
throws LayoutException;
/**
* Return a item selector for the given path.

View File

@ -24,7 +24,6 @@ import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
import org.apache.archiva.repository.maven.metadata.storage.ArtifactMappingProvider;
import org.apache.archiva.repository.maven.metadata.storage.DefaultArtifactMappingProvider;
import org.apache.archiva.repository.maven.metadata.storage.Maven2RepositoryPathTranslator;
import org.apache.archiva.model.ArtifactReference;
import org.apache.archiva.repository.LayoutException;
import org.apache.archiva.repository.content.ItemSelector;
import org.apache.archiva.repository.content.PathParser;
@ -51,45 +50,6 @@ public class DefaultPathParser
private RepositoryPathTranslator pathTranslator = new Maven2RepositoryPathTranslator(
Collections.<ArtifactMappingProvider>singletonList( new DefaultArtifactMappingProvider() ) );
/**
* {@inheritDoc}
*
* @see org.apache.archiva.repository.content.PathParser#toArtifactReference(String)
*/
@Override
public ArtifactReference toArtifactReference( String path )
throws LayoutException
{
if ( StringUtils.isBlank( path ) )
{
throw new LayoutException( "Unable to convert blank path." );
}
ArtifactMetadata metadata;
try
{
metadata = pathTranslator.getArtifactForPath( null, path );
}
catch ( IllegalArgumentException e )
{
throw new LayoutException( e.getMessage(), e );
}
ArtifactReference artifact = new ArtifactReference();
artifact.setGroupId( metadata.getNamespace() );
artifact.setArtifactId( metadata.getProject() );
artifact.setVersion( metadata.getVersion() );
artifact.setProjectVersion( metadata.getProjectVersion( ) );
MavenArtifactFacet facet = (MavenArtifactFacet) metadata.getFacet( MavenArtifactFacet.FACET_ID );
if ( facet != null )
{
artifact.setClassifier( facet.getClassifier() );
artifact.setType( facet.getType() );
}
return artifact;
}
@Override
public ItemSelector toItemSelector( String path ) throws LayoutException
{

View File

@ -30,7 +30,6 @@ import org.apache.archiva.metadata.model.ProjectVersionMetadata;
import org.apache.archiva.metadata.model.facets.RepositoryProblemFacet;
import org.apache.archiva.metadata.repository.storage.*;
import org.apache.archiva.model.ArchivaRepositoryMetadata;
import org.apache.archiva.model.ArtifactReference;
import org.apache.archiva.model.SnapshotVersion;
import org.apache.archiva.policies.ProxyDownloadException;
import org.apache.archiva.proxy.ProxyRegistry;
@ -564,87 +563,6 @@ public class Maven2RepositoryStorage
return metadata;
}
@Override
public void applyServerSideRelocation(ManagedRepository managedRepository, ArtifactReference artifact)
throws ProxyDownloadException {
if ("pom".equals(artifact.getType())) {
return;
}
// Build the artifact POM reference
ArtifactReference pomReference = new ArtifactReference();
pomReference.setGroupId(artifact.getGroupId());
pomReference.setArtifactId(artifact.getArtifactId());
pomReference.setVersion(artifact.getVersion());
pomReference.setProjectVersion( artifact.getProjectVersion() );
pomReference.setType("pom");
BaseRepositoryContentLayout layout;
try
{
layout = managedRepository.getContent( ).getLayout( BaseRepositoryContentLayout.class );
}
catch ( LayoutException e )
{
throw new ProxyDownloadException( "Could not set layout " + e.getMessage( ), new HashMap<>( ) );
}
RepositoryType repositoryType = managedRepository.getType();
if (!proxyRegistry.hasHandler(repositoryType)) {
throw new ProxyDownloadException("No proxy handler found for repository type " + repositoryType, new HashMap<>());
}
ItemSelector selector = ArchivaItemSelector.builder( )
.withNamespace( artifact.getGroupId( ) )
.withProjectId( artifact.getArtifactId( ) )
.withArtifactId( artifact.getArtifactId( ) )
.withVersion( artifact.getVersion( ) )
.withArtifactVersion( artifact.getVersion( ) )
.withType( "pom" ).build( );
Artifact pom = layout.getArtifact( selector );
RepositoryProxyHandler proxyHandler = proxyRegistry.getHandler(repositoryType).get(0);
// Get the artifact POM from proxied repositories if needed
proxyHandler.fetchFromProxies(managedRepository, pomReference);
// Open and read the POM from the managed repo
if (!pom.exists()) {
return;
}
try {
// MavenXpp3Reader leaves the file open, so we need to close it ourselves.
Model model;
try (Reader reader = Channels.newReader(pom.getAsset().getReadChannel(), Charset.defaultCharset().name())) {
model = MAVEN_XPP_3_READER.read(reader);
}
DistributionManagement dist = model.getDistributionManagement();
if (dist != null) {
Relocation relocation = dist.getRelocation();
if (relocation != null) {
// artifact is relocated : update the repositoryPath
if (relocation.getGroupId() != null) {
artifact.setGroupId(relocation.getGroupId());
}
if (relocation.getArtifactId() != null) {
artifact.setArtifactId(relocation.getArtifactId());
}
if (relocation.getVersion() != null) {
artifact.setVersion(relocation.getVersion());
}
}
}
} catch (IOException e) {
// Unable to read POM : ignore.
} catch (XmlPullParserException e) {
// Invalid POM : ignore
}
}
@Override
public ItemSelector applyServerSideRelocation(ManagedRepository managedRepository, ItemSelector artifactSelector)
throws ProxyDownloadException {

View File

@ -25,7 +25,6 @@ import org.apache.archiva.metadata.repository.MetadataRepository;
import org.apache.archiva.metadata.repository.RepositorySession;
import org.apache.archiva.filter.Filter;
import org.apache.archiva.metadata.repository.storage.*;
import org.apache.archiva.model.ArtifactReference;
import org.apache.archiva.policies.ProxyDownloadException;
import org.apache.archiva.components.taskqueue.TaskQueueException;
import org.apache.archiva.repository.ManagedRepositoryContent;
@ -102,13 +101,6 @@ public class MockBeanServices
return null;
}
@Override
public void applyServerSideRelocation( ManagedRepository managedRepository, ArtifactReference artifact )
throws ProxyDownloadException
{
}
@Override
public ItemSelector applyServerSideRelocation( ManagedRepository managedRepository, ItemSelector selector ) throws ProxyDownloadException
{

View File

@ -42,7 +42,6 @@ public interface RepositoryPathTranslator
StorageAsset toFile( StorageAsset basedir, String namespace, String projectId, String projectVersion );
ArtifactMetadata getArtifactForPath( String repoId, String relativePath );
ArtifactMetadata getArtifactFromId( String repoId, String namespace, String projectId, String projectVersion,

View File

@ -60,20 +60,6 @@ public interface RepositoryStorage
// FIXME: reconsider this API, do we want to expose storage format in the form of a path?
ArtifactMetadata readArtifactMetadataFromPath( String repoId, String path )
throws RepositoryStorageRuntimeException;
/**
* A relocation capable client will request the POM prior to the artifact, and will then read meta-data and do
* client side relocation. A simplier client (like maven 1) will only request the artifact and not use the
* metadatas.
* <p>
* For such clients, archiva does server-side relocation by reading itself the &lt;relocation&gt; element in
* metadatas and serving the expected artifact.
* @param managedRepository the used managed repository
* @param artifact the artifact reference
* @throws org.apache.archiva.policies.ProxyDownloadException
*/
void applyServerSideRelocation( ManagedRepository managedRepository, ArtifactReference artifact )
throws ProxyDownloadException;
/**
* A relocation capable client will request the POM prior to the artifact, and will then read meta-data and do
@ -83,7 +69,7 @@ public interface RepositoryStorage
* For such clients, archiva does server-side relocation by reading itself the &lt;relocation&gt; element in
* metadatas and serving the expected artifact.
* @param managedRepository the used managed repository
* @param artifact the artifact reference
* @param selector the artifact reference
* @throws org.apache.archiva.policies.ProxyDownloadException
*/
ItemSelector applyServerSideRelocation( ManagedRepository managedRepository, ItemSelector selector )

View File

@ -32,7 +32,6 @@ import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataE
import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataInvalidException;
import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataNotFoundException;
import org.apache.archiva.metadata.repository.storage.RepositoryStorageRuntimeException;
import org.apache.archiva.model.ArtifactReference;
import org.apache.archiva.policies.ProxyDownloadException;
import org.apache.archiva.repository.ManagedRepositoryContent;
import org.apache.archiva.repository.ManagedRepository;
@ -106,13 +105,6 @@ public class MockRepositoryStorage
return null;
}
@Override
public void applyServerSideRelocation( ManagedRepository managedRepository, ArtifactReference artifact )
throws ProxyDownloadException
{
}
@Override
public ItemSelector applyServerSideRelocation( ManagedRepository managedRepository, ItemSelector selector ) throws ProxyDownloadException
{