Browse Source

Moving first client calls to new content repo API

pull/60/head
Martin Stockhammer 4 years ago
parent
commit
b55ac5e29f

+ 14
- 14
archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java View File

import org.apache.archiva.repository.RepositoryException; import org.apache.archiva.repository.RepositoryException;
import org.apache.archiva.repository.RepositoryRegistry; import org.apache.archiva.repository.RepositoryRegistry;
import org.apache.archiva.metadata.audit.RepositoryListener; import org.apache.archiva.metadata.audit.RepositoryListener;
import org.apache.archiva.repository.content.ItemSelector;
import org.apache.archiva.repository.content.Project;
import org.apache.archiva.repository.content.Version;
import org.apache.archiva.repository.content.base.ArchivaItemSelector;
import org.apache.archiva.repository.metadata.base.MetadataTools; import org.apache.archiva.repository.metadata.base.MetadataTools;
import org.apache.archiva.repository.metadata.RepositoryMetadataException; import org.apache.archiva.repository.metadata.RepositoryMetadataException;


return; return;
} }


ProjectReference reference = new ProjectReference( );
reference.setGroupId( artifactRef.getGroupId( ) );
reference.setArtifactId( artifactRef.getArtifactId( ) );
ItemSelector selector = ArchivaItemSelector.builder( )
.withNamespace( artifactRef.getGroupId( ) )
.withProjectId( artifactRef.getArtifactId( ) )
.build();



// Gether the released versions // Gether the released versions
List<String> releasedVersions = new ArrayList<>( ); List<String> releasedVersions = new ArrayList<>( );


if ( repo.getActiveReleaseSchemes().contains( ReleaseScheme.RELEASE )) if ( repo.getActiveReleaseSchemes().contains( ReleaseScheme.RELEASE ))
{ {
try
ManagedRepositoryContent repoContent = repo.getContent();
Project proj = repoContent.getProject( selector );
for ( Version version : repoContent.getVersions( proj ) )
{ {
ManagedRepositoryContent repoContent = repo.getContent();
for ( String version : repoContent.getVersions( reference ) )
if ( !VersionUtil.isSnapshot( version.getVersion() ) )
{ {
if ( !VersionUtil.isSnapshot( version ) )
{
releasedVersions.add( version );
}
releasedVersions.add( version.getVersion() );
} }
} }
catch ( RepositoryException e )
{
// swallow
}
} }
} }



+ 0
- 21
archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java View File

*/ */
ManagedRepository getRepository(); ManagedRepository getRepository();


/**
* Given a specific {@link ProjectReference}, return the list of available versions for
* that project reference.
*
* @param reference the project reference to work off of.
* @return the list of versions found for that project reference.
* @throws ContentNotFoundException if the project reference does nto exist within the repository.
* @throws LayoutException
*/
Set<String> getVersions( ProjectReference reference )
throws ContentNotFoundException, LayoutException, ContentAccessException;




/** /**
* <p> * <p>
*/ */
boolean hasContent( ArtifactReference reference ) throws ContentAccessException; boolean hasContent( ArtifactReference reference ) throws ContentAccessException;


/**
* Determines if the project referenced exists in the repository.
*
* @param reference the project reference to check for.
* @return true it the project referenced exists.
*/
boolean hasContent( ProjectReference reference ) throws ContentAccessException;

/** /**
* Determines if the version reference exists in the repository. * Determines if the version reference exists in the repository.
* *

+ 13
- 2
archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/metadata/base/MetadataTools.java View File

import org.apache.archiva.repository.RemoteRepositoryContent; import org.apache.archiva.repository.RemoteRepositoryContent;
import org.apache.archiva.repository.RepositoryRegistry; import org.apache.archiva.repository.RepositoryRegistry;
import org.apache.archiva.repository.RepositoryType; import org.apache.archiva.repository.RepositoryType;
import org.apache.archiva.repository.content.ItemSelector;
import org.apache.archiva.repository.content.Project;
import org.apache.archiva.repository.content.base.ArchivaItemSelector;
import org.apache.archiva.repository.metadata.MetadataReader; import org.apache.archiva.repository.metadata.MetadataReader;
import org.apache.archiva.repository.metadata.RepositoryMetadataException; import org.apache.archiva.repository.metadata.RepositoryMetadataException;
import org.apache.archiva.repository.storage.StorageAsset; import org.apache.archiva.repository.storage.StorageAsset;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;


/** /**
metadata.setArtifactId( reference.getArtifactId() ); metadata.setArtifactId( reference.getArtifactId() );


// Gather up all versions found in the managed repository. // Gather up all versions found in the managed repository.
ItemSelector selector = ArchivaItemSelector.builder( )
.withNamespace( reference.getGroupId( ) )
.withProjectId( reference.getArtifactId( ) )
.build();
Set<String> allVersions = null; Set<String> allVersions = null;
try try
{ {
allVersions = managedRepository.getVersions( reference );
Project project = managedRepository.getProject( selector );
allVersions = managedRepository.getVersions( project ).stream()
.map( v -> v.getVersion() ).collect( Collectors.toSet());
} }
catch ( org.apache.archiva.repository.ContentAccessException e ) catch ( org.apache.archiva.repository.ContentAccessException e )
{ {
e.printStackTrace( );
log.error( "Error while accessing repository: {}", e.getMessage( ), e );
throw new RepositoryMetadataException( "Error while accessing repository " + e.getMessage( ), e );
} }


// Gather up all plugins found in the managed repository. // Gather up all plugins found in the managed repository.

+ 0
- 12
archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java View File

return repository; return repository;
} }


@Override
public Set<String> getVersions( ProjectReference reference ) throws ContentNotFoundException, LayoutException, ContentAccessException
{
return null;
}

@Override @Override
public Set<String> getVersions( VersionedReference reference ) throws ContentNotFoundException, ContentAccessException, LayoutException public Set<String> getVersions( VersionedReference reference ) throws ContentNotFoundException, ContentAccessException, LayoutException
{ {
return false; return false;
} }


@Override
public boolean hasContent( ProjectReference reference ) throws ContentAccessException
{
return false;
}

@Override @Override
public boolean hasContent( VersionedReference reference ) throws ContentAccessException public boolean hasContent( VersionedReference reference ) throws ContentAccessException
{ {

+ 0
- 12
archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/mock/ManagedRepositoryContentMock.java View File

return repository; return repository;
} }


@Override
public Set<String> getVersions( ProjectReference reference ) throws ContentNotFoundException, LayoutException, ContentAccessException
{
return null;
}

@Override @Override
public Set<String> getVersions( VersionedReference reference ) throws ContentNotFoundException, ContentAccessException, LayoutException public Set<String> getVersions( VersionedReference reference ) throws ContentNotFoundException, ContentAccessException, LayoutException
{ {
return false; return false;
} }


@Override
public boolean hasContent( ProjectReference reference ) throws ContentAccessException
{
return false;
}

@Override @Override
public boolean hasContent( VersionedReference reference ) throws ContentAccessException public boolean hasContent( VersionedReference reference ) throws ContentAccessException
{ {

+ 0
- 12
archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java View File

return repository; return repository;
} }


@Override
public Set<String> getVersions( ProjectReference reference ) throws ContentNotFoundException, LayoutException, ContentAccessException
{
return null;
}

@Override @Override
public Set<String> getVersions( VersionedReference reference ) throws ContentNotFoundException, ContentAccessException, LayoutException public Set<String> getVersions( VersionedReference reference ) throws ContentNotFoundException, ContentAccessException, LayoutException
{ {
return false; return false;
} }


@Override
public boolean hasContent( ProjectReference reference ) throws ContentAccessException
{
return false;
}

@Override @Override
public boolean hasContent( VersionedReference reference ) throws ContentAccessException public boolean hasContent( VersionedReference reference ) throws ContentAccessException
{ {

+ 1
- 68
archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContent.java View File

} }




/// ************* End of new generation interface ******************
/// ************* Start of new generation interface ******************


/** /**
* Removes the item from the filesystem. For namespaces, projects and versions it deletes * Removes the item from the filesystem. For namespaces, projects and versions it deletes
return repository; return repository;
} }


/**
* Gather the Available Versions (on disk) for a specific Project Reference, based on filesystem
* information.
*
* @return the Set of available versions, based on the project reference.
* @throws LayoutException
*/
@Override
public Set<String> getVersions( ProjectReference reference )
throws ContentNotFoundException, LayoutException, ContentAccessException
{
final String path = toPath( reference );
final Path projDir = getRepoDir().resolve(toPath(reference));
if ( !Files.exists(projDir) )
{
throw new ContentNotFoundException(
"Unable to get Versions on a non-existant directory for repository "+getId()+": " + path );
}

if ( !Files.isDirectory(projDir) )
{
throw new ContentNotFoundException(
"Unable to get Versions on a non-directory for repository "+getId()+": " + path );
}

final String groupId = reference.getGroupId();
final String artifactId = reference.getArtifactId();
try(Stream<Path> stream = Files.list(projDir)) {
return stream.filter(Files::isDirectory).map(
p -> toVersion(groupId, artifactId, p.getFileName().toString())
).filter(this::hasArtifact).map(ref -> ref.getVersion())
.collect(Collectors.toSet());
} catch (IOException e) {
log.error("Could not read directory {}: {}", projDir, e.getMessage(), e);
throw new ContentAccessException( "Could not read path for repository "+getId()+": "+ path, e );
} catch (RuntimeException e) {
Throwable cause = e.getCause( );
if (cause!=null)
{
if ( cause instanceof LayoutException )
{
throw (LayoutException) cause;
} else {
log.error("Could not read directory {}: {}", projDir, cause.getMessage(), cause);
throw new ContentAccessException( "Could not read path for repository "+getId()+": "+ path, cause );
}
} else {
log.error("Could not read directory {}: {}", projDir, e.getMessage(), e);
throw new ContentAccessException( "Could not read path for repository "+getId()+": "+ path, cause );
}
}
}

@Override @Override
public Set<String> getVersions( VersionedReference reference ) public Set<String> getVersions( VersionedReference reference )
throws ContentNotFoundException, ContentAccessException, LayoutException throws ContentNotFoundException, ContentAccessException, LayoutException
return artifactFile.exists() && !artifactFile.isContainer(); return artifactFile.exists() && !artifactFile.isContainer();
} }


@Override
public boolean hasContent( ProjectReference reference ) throws ContentAccessException
{
try
{
Set<String> versions = getVersions( reference );
return !versions.isEmpty();
}
catch ( ContentNotFoundException | LayoutException e )
{
return false;
}
}

@Override @Override
public boolean hasContent( VersionedReference reference ) throws ContentAccessException public boolean hasContent( VersionedReference reference ) throws ContentAccessException
{ {

+ 0
- 68
archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven/content/ManagedDefaultRepositoryContentTest.java View File

//repoContent = (ManagedRepositoryContent) lookup( ManagedRepositoryContent.class, "default" ); //repoContent = (ManagedRepositoryContent) lookup( ManagedRepositoryContent.class, "default" );
} }


@Test
public void testGetVersionsBadArtifact()
throws Exception
{
assertGetVersions( "bad_artifact", Collections.emptyList() );
}

@Test
public void testGetVersionsMissingMultipleVersions()
throws Exception
{
assertGetVersions( "missing_metadata_b", Arrays.asList( "1.0", "1.0.1", "2.0", "2.0.1", "2.0-20070821-dev" ) );
}

@Test
public void testGetVersionsSimple()
throws Exception
{
assertVersions( "proxied_multi", "2.1", new String[]{ "2.1" } );
}

@Test
public void testGetVersionsSimpleYetIncomplete()
throws Exception
{
assertGetVersions( "incomplete_metadata_a", Collections.singletonList( "1.0" ) );
}

@Test
public void testGetVersionsSimpleYetMissing()
throws Exception
{
assertGetVersions( "missing_metadata_a", Collections.singletonList( "1.0" ) );
}

@Test @Test
public void testGetVersionsSnapshotA() public void testGetVersionsSnapshotA()
throws Exception throws Exception
assertVersions( "include_xml", "1.0", new String[]{ "1.0" } ); assertVersions( "include_xml", "1.0", new String[]{ "1.0" } );
} }


private void assertGetVersions( String artifactId, List<String> expectedVersions )
throws Exception
{
ProjectReference reference = new ProjectReference();
reference.setGroupId( "org.apache.archiva.metadata.tests" );
reference.setArtifactId( artifactId );

// Use the test metadata-repository, which is already setup for
// These kind of version tests.
Path repoDir = getRepositoryPath( "metadata-repository" );
(( EditableManagedRepository)repoContent.getRepository()).setLocation( repoDir.toAbsolutePath().toUri() );

// Request the versions.
Set<String> testedVersionSet = repoContent.getVersions( reference );

// Sort the list (for asserts)
VersionComparator comparator = new VersionComparator( );
List<String> testedVersions = new ArrayList<>();
testedVersions.addAll( testedVersionSet );
Collections.sort( testedVersions, comparator );

// Test the expected array of versions, to the actual tested versions
assertEquals( "available versions", expectedVersions, testedVersions );

ItemSelector selector = ArchivaItemSelector.builder( )
.withNamespace( "org.apache.archiva.metadata.tests" )
.withProjectId( artifactId )
.build( );
Project project = repoContent.getProject( selector );
assertNotNull( project );
List<String> versions = repoContent.getVersions( project ).stream().map(v -> v.getVersion()).sorted( comparator ).collect( Collectors.toList());
assertArrayEquals( expectedVersions.toArray(), versions.toArray( ) );
}


private void assertVersions( String artifactId, String version, String[] expectedVersions ) private void assertVersions( String artifactId, String version, String[] expectedVersions )
throws Exception throws Exception

+ 0
- 7
archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java View File



repository.deleteVersion( ref ); repository.deleteVersion( ref );


/*
ProjectReference projectReference = new ProjectReference();
projectReference.setGroupId( namespace );
projectReference.setArtifactId( projectId );

repository.getVersions( )
*/


ArtifactReference artifactReference = new ArtifactReference(); ArtifactReference artifactReference = new ArtifactReference();
artifactReference.setGroupId( namespace ); artifactReference.setGroupId( namespace );

Loading…
Cancel
Save