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.
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;
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
{
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;
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 {
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;
return null;
}
- @Override
- public void applyServerSideRelocation( ManagedRepository managedRepository, ArtifactReference artifact )
- throws ProxyDownloadException
- {
-
- }
-
@Override
public ItemSelector applyServerSideRelocation( ManagedRepository managedRepository, ItemSelector selector ) throws ProxyDownloadException
{
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,
// 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 <relocation> 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
* For such clients, archiva does server-side relocation by reading itself the <relocation> 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 )
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;
return null;
}
- @Override
- public void applyServerSideRelocation( ManagedRepository managedRepository, ArtifactReference artifact )
- throws ProxyDownloadException
- {
-
- }
-
@Override
public ItemSelector applyServerSideRelocation( ManagedRepository managedRepository, ItemSelector selector ) throws ProxyDownloadException
{