aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/pom.xml6
-rw-r--r--archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java1147
2 files changed, 647 insertions, 506 deletions
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/pom.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/pom.xml
index 1f9a9f714..2e86b3287 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/pom.xml
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/pom.xml
@@ -86,6 +86,12 @@
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>metadata-store-file</artifactId>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
<build>
<resources>
diff --git a/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java b/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
index cca21bcd4..2da1a5b6f 100644
--- a/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
+++ b/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
@@ -36,6 +36,7 @@ import org.apache.archiva.metadata.model.ProjectVersionReference;
import org.apache.archiva.metadata.model.Scm;
import org.apache.archiva.metadata.repository.MetadataRepository;
import org.apache.archiva.metadata.repository.MetadataRepositoryException;
+import org.apache.archiva.metadata.repository.MetadataResolutionException;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -62,8 +63,6 @@ import java.util.Properties;
import java.util.Set;
import java.util.StringTokenizer;
-//import org.apache.commons.io.IOUtils;
-
public class FileMetadataRepository
implements MetadataRepository
{
@@ -89,13 +88,21 @@ public class FileMetadataRepository
}
private File getBaseDirectory( String repoId )
+ throws IOException
{
// TODO: should be configurable, like the index
- String basedir = configuration.getConfiguration().getManagedRepositoriesAsMap().get( repoId ).getLocation();
+ ManagedRepositoryConfiguration managedRepositoryConfiguration =
+ configuration.getConfiguration().getManagedRepositoriesAsMap().get( repoId );
+ if ( managedRepositoryConfiguration == null )
+ {
+ return Files.createTempDirectory( repoId ).toFile();
+ }
+ String basedir = managedRepositoryConfiguration.getLocation();
return new File( basedir, ".archiva" );
}
private File getDirectory( String repoId )
+ throws IOException
{
return new File( getBaseDirectory( repoId ), "content" );
}
@@ -130,98 +137,100 @@ public class FileMetadataRepository
public void updateProjectVersion( String repoId, String namespace, String projectId,
ProjectVersionMetadata versionMetadata )
{
- updateProject( repoId, namespace, projectId );
-
- File directory =
- new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + versionMetadata.getId() );
- Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
- // remove properties that are not references or artifacts
- for ( Object key : new ArrayList( properties.keySet() ) )
+ try
{
- String name = (String) key;
- if ( !name.contains( ":" ) && !name.equals( "facetIds" ) )
- {
- properties.remove( name );
- }
+ updateProject( repoId, namespace, projectId );
- // clear the facet contents so old properties are no longer written
- clearMetadataFacetProperties( versionMetadata.getFacetList(), properties, "" );
- }
- properties.setProperty( "id", versionMetadata.getId() );
- setProperty( properties, "name", versionMetadata.getName() );
- setProperty( properties, "description", versionMetadata.getDescription() );
- setProperty( properties, "url", versionMetadata.getUrl() );
- setProperty( properties, "incomplete", String.valueOf( versionMetadata.isIncomplete() ) );
- if ( versionMetadata.getScm() != null )
- {
- setProperty( properties, "scm.connection", versionMetadata.getScm().getConnection() );
- setProperty( properties, "scm.developerConnection", versionMetadata.getScm().getDeveloperConnection() );
- setProperty( properties, "scm.url", versionMetadata.getScm().getUrl() );
- }
- if ( versionMetadata.getCiManagement() != null )
- {
- setProperty( properties, "ci.system", versionMetadata.getCiManagement().getSystem() );
- setProperty( properties, "ci.url", versionMetadata.getCiManagement().getUrl() );
- }
- if ( versionMetadata.getIssueManagement() != null )
- {
- setProperty( properties, "issue.system", versionMetadata.getIssueManagement().getSystem() );
- setProperty( properties, "issue.url", versionMetadata.getIssueManagement().getUrl() );
- }
- if ( versionMetadata.getOrganization() != null )
- {
- setProperty( properties, "org.name", versionMetadata.getOrganization().getName() );
- setProperty( properties, "org.url", versionMetadata.getOrganization().getUrl() );
- }
- int i = 0;
- for ( License license : versionMetadata.getLicenses() )
- {
- setProperty( properties, "license." + i + ".name", license.getName() );
- setProperty( properties, "license." + i + ".url", license.getUrl() );
- i++;
- }
- i = 0;
- for ( MailingList mailingList : versionMetadata.getMailingLists() )
- {
- setProperty( properties, "mailingList." + i + ".archive", mailingList.getMainArchiveUrl() );
- setProperty( properties, "mailingList." + i + ".name", mailingList.getName() );
- setProperty( properties, "mailingList." + i + ".post", mailingList.getPostAddress() );
- setProperty( properties, "mailingList." + i + ".unsubscribe", mailingList.getUnsubscribeAddress() );
- setProperty( properties, "mailingList." + i + ".subscribe", mailingList.getSubscribeAddress() );
- setProperty( properties, "mailingList." + i + ".otherArchives", join( mailingList.getOtherArchives() ) );
- i++;
- }
- i = 0;
- ProjectVersionReference reference = new ProjectVersionReference();
- reference.setNamespace( namespace );
- reference.setProjectId( projectId );
- reference.setProjectVersion( versionMetadata.getId() );
- reference.setReferenceType( ProjectVersionReference.ReferenceType.DEPENDENCY );
- for ( Dependency dependency : versionMetadata.getDependencies() )
- {
- setProperty( properties, "dependency." + i + ".classifier", dependency.getClassifier() );
- setProperty( properties, "dependency." + i + ".scope", dependency.getScope() );
- setProperty( properties, "dependency." + i + ".systemPath", dependency.getSystemPath() );
- setProperty( properties, "dependency." + i + ".artifactId", dependency.getArtifactId() );
- setProperty( properties, "dependency." + i + ".groupId", dependency.getGroupId() );
- setProperty( properties, "dependency." + i + ".version", dependency.getVersion() );
- setProperty( properties, "dependency." + i + ".type", dependency.getType() );
- setProperty( properties, "dependency." + i + ".optional", String.valueOf( dependency.isOptional() ) );
+ File directory =
+ new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + versionMetadata.getId() );
- updateProjectReference( repoId, dependency.getGroupId(), dependency.getArtifactId(),
- dependency.getVersion(), reference );
+ Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
+ // remove properties that are not references or artifacts
+ for ( Object key : new ArrayList( properties.keySet() ) )
+ {
+ String name = (String) key;
+ if ( !name.contains( ":" ) && !name.equals( "facetIds" ) )
+ {
+ properties.remove( name );
+ }
- i++;
- }
- Set<String> facetIds = new LinkedHashSet<String>( versionMetadata.getFacetIds() );
- facetIds.addAll( Arrays.asList( properties.getProperty( "facetIds", "" ).split( "," ) ) );
- properties.setProperty( "facetIds", join( facetIds ) );
+ // clear the facet contents so old properties are no longer written
+ clearMetadataFacetProperties( versionMetadata.getFacetList(), properties, "" );
+ }
+ properties.setProperty( "id", versionMetadata.getId() );
+ setProperty( properties, "name", versionMetadata.getName() );
+ setProperty( properties, "description", versionMetadata.getDescription() );
+ setProperty( properties, "url", versionMetadata.getUrl() );
+ setProperty( properties, "incomplete", String.valueOf( versionMetadata.isIncomplete() ) );
+ if ( versionMetadata.getScm() != null )
+ {
+ setProperty( properties, "scm.connection", versionMetadata.getScm().getConnection() );
+ setProperty( properties, "scm.developerConnection", versionMetadata.getScm().getDeveloperConnection() );
+ setProperty( properties, "scm.url", versionMetadata.getScm().getUrl() );
+ }
+ if ( versionMetadata.getCiManagement() != null )
+ {
+ setProperty( properties, "ci.system", versionMetadata.getCiManagement().getSystem() );
+ setProperty( properties, "ci.url", versionMetadata.getCiManagement().getUrl() );
+ }
+ if ( versionMetadata.getIssueManagement() != null )
+ {
+ setProperty( properties, "issue.system", versionMetadata.getIssueManagement().getSystem() );
+ setProperty( properties, "issue.url", versionMetadata.getIssueManagement().getUrl() );
+ }
+ if ( versionMetadata.getOrganization() != null )
+ {
+ setProperty( properties, "org.name", versionMetadata.getOrganization().getName() );
+ setProperty( properties, "org.url", versionMetadata.getOrganization().getUrl() );
+ }
+ int i = 0;
+ for ( License license : versionMetadata.getLicenses() )
+ {
+ setProperty( properties, "license." + i + ".name", license.getName() );
+ setProperty( properties, "license." + i + ".url", license.getUrl() );
+ i++;
+ }
+ i = 0;
+ for ( MailingList mailingList : versionMetadata.getMailingLists() )
+ {
+ setProperty( properties, "mailingList." + i + ".archive", mailingList.getMainArchiveUrl() );
+ setProperty( properties, "mailingList." + i + ".name", mailingList.getName() );
+ setProperty( properties, "mailingList." + i + ".post", mailingList.getPostAddress() );
+ setProperty( properties, "mailingList." + i + ".unsubscribe", mailingList.getUnsubscribeAddress() );
+ setProperty( properties, "mailingList." + i + ".subscribe", mailingList.getSubscribeAddress() );
+ setProperty( properties, "mailingList." + i + ".otherArchives",
+ join( mailingList.getOtherArchives() ) );
+ i++;
+ }
+ i = 0;
+ ProjectVersionReference reference = new ProjectVersionReference();
+ reference.setNamespace( namespace );
+ reference.setProjectId( projectId );
+ reference.setProjectVersion( versionMetadata.getId() );
+ reference.setReferenceType( ProjectVersionReference.ReferenceType.DEPENDENCY );
+ for ( Dependency dependency : versionMetadata.getDependencies() )
+ {
+ setProperty( properties, "dependency." + i + ".classifier", dependency.getClassifier() );
+ setProperty( properties, "dependency." + i + ".scope", dependency.getScope() );
+ setProperty( properties, "dependency." + i + ".systemPath", dependency.getSystemPath() );
+ setProperty( properties, "dependency." + i + ".artifactId", dependency.getArtifactId() );
+ setProperty( properties, "dependency." + i + ".groupId", dependency.getGroupId() );
+ setProperty( properties, "dependency." + i + ".version", dependency.getVersion() );
+ setProperty( properties, "dependency." + i + ".type", dependency.getType() );
+ setProperty( properties, "dependency." + i + ".optional", String.valueOf( dependency.isOptional() ) );
+
+ updateProjectReference( repoId, dependency.getGroupId(), dependency.getArtifactId(),
+ dependency.getVersion(), reference );
- updateProjectVersionFacets( versionMetadata, properties );
+ i++;
+ }
+ Set<String> facetIds = new LinkedHashSet<String>( versionMetadata.getFacetIds() );
+ facetIds.addAll( Arrays.asList( properties.getProperty( "facetIds", "" ).split( "," ) ) );
+ properties.setProperty( "facetIds", join( facetIds ) );
+
+ updateProjectVersionFacets( versionMetadata, properties );
- try
- {
writeProperties( properties, directory, PROJECT_VERSION_METADATA_KEY );
}
catch ( IOException e )
@@ -267,18 +276,18 @@ public class FileMetadataRepository
private void updateProjectReference( String repoId, String namespace, String projectId, String projectVersion,
ProjectVersionReference reference )
{
- File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
-
- Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
- int i = Integer.parseInt( properties.getProperty( "ref:lastReferenceNum", "-1" ) ) + 1;
- setProperty( properties, "ref:lastReferenceNum", Integer.toString( i ) );
- setProperty( properties, "ref:reference." + i + ".namespace", reference.getNamespace() );
- setProperty( properties, "ref:reference." + i + ".projectId", reference.getProjectId() );
- setProperty( properties, "ref:reference." + i + ".projectVersion", reference.getProjectVersion() );
- setProperty( properties, "ref:reference." + i + ".referenceType", reference.getReferenceType().toString() );
-
try
{
+ File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
+
+ Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
+ int i = Integer.parseInt( properties.getProperty( "ref:lastReferenceNum", "-1" ) ) + 1;
+ setProperty( properties, "ref:lastReferenceNum", Integer.toString( i ) );
+ setProperty( properties, "ref:reference." + i + ".namespace", reference.getNamespace() );
+ setProperty( properties, "ref:reference." + i + ".projectId", reference.getProjectId() );
+ setProperty( properties, "ref:reference." + i + ".projectVersion", reference.getProjectVersion() );
+ setProperty( properties, "ref:reference." + i + ".referenceType", reference.getReferenceType().toString() );
+
writeProperties( properties, directory, PROJECT_VERSION_METADATA_KEY );
}
catch ( IOException e )
@@ -308,11 +317,19 @@ public class FileMetadataRepository
@Override
public List<String> getMetadataFacets( String repoId, String facetId )
+ throws MetadataRepositoryException
{
- File directory = getMetadataDirectory( repoId, facetId );
- List<String> facets = new ArrayList<>();
- recurse( facets, "", directory );
- return facets;
+ try
+ {
+ File directory = getMetadataDirectory( repoId, facetId );
+ List<String> facets = new ArrayList<>();
+ recurse( facets, "", directory );
+ return facets;
+ }
+ catch ( IOException e )
+ {
+ throw new MetadataRepositoryException( e.getMessage(), e );
+ }
}
@Override
@@ -398,26 +415,43 @@ public class FileMetadataRepository
@Override
public void removeMetadataFacets( String repositoryId, String facetId )
+ throws MetadataRepositoryException
{
- File dir = getMetadataDirectory( repositoryId, facetId );
- if ( !FileUtils.deleteQuietly( dir ) )
+ try
{
- log.error( "Cannot delete the metadata repository {}", dir );
+ File dir = getMetadataDirectory( repositoryId, facetId );
+ if ( !Files.deleteIfExists( dir.toPath() ) )
+ {
+ log.error( "Cannot delete the metadata repository {}", dir );
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new MetadataRepositoryException( e.getMessage(), e );
}
}
@Override
public void removeMetadataFacet( String repoId, String facetId, String name )
+ throws MetadataRepositoryException
{
- File dir = new File( getMetadataDirectory( repoId, facetId ), name );
- if ( !FileUtils.deleteQuietly( dir ) )
+ try
{
- log.error( "Cannot delete the metadata repository {}", dir );
+ File dir = new File( getMetadataDirectory( repoId, facetId ), name );
+ if ( !Files.deleteIfExists( dir.toPath() ) )
+ {
+ log.error( "Cannot delete the metadata repository {}", dir );
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new MetadataRepositoryException( e.getMessage(), e );
}
}
@Override
public List<ArtifactMetadata> getArtifactsByDateRange( String repoId, Date startTime, Date endTime )
+ throws MetadataRepositoryException
{
// TODO: this is quite slow - if we are to persist with this repository implementation we should build an index
// of this information (eg. in Lucene, as before)
@@ -433,124 +467,140 @@ public class FileMetadataRepository
private void getArtifactsByDateRange( List<ArtifactMetadata> artifacts, String repoId, String ns, Date startTime,
Date endTime )
+ throws MetadataRepositoryException
{
- for ( String namespace : getNamespaces( repoId, ns ) )
+ try
{
- getArtifactsByDateRange( artifacts, repoId, ns + "." + namespace, startTime, endTime );
- }
+ for ( String namespace : getNamespaces( repoId, ns ) )
+ {
+ getArtifactsByDateRange( artifacts, repoId, ns + "." + namespace, startTime, endTime );
+ }
- for ( String project : getProjects( repoId, ns ) )
- {
- for ( String version : getProjectVersions( repoId, ns, project ) )
+ for ( String project : getProjects( repoId, ns ) )
{
- for ( ArtifactMetadata artifact : getArtifacts( repoId, ns, project, version ) )
+ for ( String version : getProjectVersions( repoId, ns, project ) )
{
- if ( startTime == null || startTime.before( artifact.getWhenGathered() ) )
+ for ( ArtifactMetadata artifact : getArtifacts( repoId, ns, project, version ) )
{
- if ( endTime == null || endTime.after( artifact.getWhenGathered() ) )
+ if ( startTime == null || startTime.before( artifact.getWhenGathered() ) )
{
- artifacts.add( artifact );
+ if ( endTime == null || endTime.after( artifact.getWhenGathered() ) )
+ {
+ artifacts.add( artifact );
+ }
}
}
}
}
}
+ catch ( MetadataResolutionException e )
+ {
+ throw new MetadataRepositoryException( e.getMessage(), e );
+ }
}
@Override
public Collection<ArtifactMetadata> getArtifacts( String repoId, String namespace, String projectId,
String projectVersion )
+ throws MetadataResolutionException
{
- Map<String, ArtifactMetadata> artifacts = new HashMap<>();
+ try
+ {
+ Map<String, ArtifactMetadata> artifacts = new HashMap<>();
- File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
+ File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
- Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
+ Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
- for ( Map.Entry entry : properties.entrySet() )
- {
- String name = (String) entry.getKey();
- StringTokenizer tok = new StringTokenizer( name, ":" );
- if ( tok.hasMoreTokens() && "artifact".equals( tok.nextToken() ) )
+ for ( Map.Entry entry : properties.entrySet() )
{
- String field = tok.nextToken();
- String id = tok.nextToken();
-
- ArtifactMetadata artifact = artifacts.get( id );
- if ( artifact == null )
+ String name = (String) entry.getKey();
+ StringTokenizer tok = new StringTokenizer( name, ":" );
+ if ( tok.hasMoreTokens() && "artifact".equals( tok.nextToken() ) )
{
- artifact = new ArtifactMetadata();
- artifact.setRepositoryId( repoId );
- artifact.setNamespace( namespace );
- artifact.setProject( projectId );
- artifact.setProjectVersion( projectVersion );
- artifact.setVersion( projectVersion );
- artifact.setId( id );
- artifacts.put( id, artifact );
- }
+ String field = tok.nextToken();
+ String id = tok.nextToken();
- String value = (String) entry.getValue();
- if ( "updated".equals( field ) )
- {
- artifact.setFileLastModified( Long.parseLong( value ) );
- }
- else if ( "size".equals( field ) )
- {
- artifact.setSize( Long.valueOf( value ) );
- }
- else if ( "whenGathered".equals( field ) )
- {
- artifact.setWhenGathered( new Date( Long.parseLong( value ) ) );
- }
- else if ( "version".equals( field ) )
- {
- artifact.setVersion( value );
- }
- else if ( "md5".equals( field ) )
- {
- artifact.setMd5( value );
- }
- else if ( "sha1".equals( field ) )
- {
- artifact.setSha1( value );
- }
- else if ( "facetIds".equals( field ) )
- {
- if ( value.length() > 0 )
+ ArtifactMetadata artifact = artifacts.get( id );
+ if ( artifact == null )
+ {
+ artifact = new ArtifactMetadata();
+ artifact.setRepositoryId( repoId );
+ artifact.setNamespace( namespace );
+ artifact.setProject( projectId );
+ artifact.setProjectVersion( projectVersion );
+ artifact.setVersion( projectVersion );
+ artifact.setId( id );
+ artifacts.put( id, artifact );
+ }
+
+ String value = (String) entry.getValue();
+ if ( "updated".equals( field ) )
+ {
+ artifact.setFileLastModified( Long.parseLong( value ) );
+ }
+ else if ( "size".equals( field ) )
+ {
+ artifact.setSize( Long.valueOf( value ) );
+ }
+ else if ( "whenGathered".equals( field ) )
+ {
+ artifact.setWhenGathered( new Date( Long.parseLong( value ) ) );
+ }
+ else if ( "version".equals( field ) )
+ {
+ artifact.setVersion( value );
+ }
+ else if ( "md5".equals( field ) )
+ {
+ artifact.setMd5( value );
+ }
+ else if ( "sha1".equals( field ) )
+ {
+ artifact.setSha1( value );
+ }
+ else if ( "facetIds".equals( field ) )
{
- String propertyPrefix = "artifact:facet:" + id + ":";
- for ( String facetId : value.split( "," ) )
+ if ( value.length() > 0 )
{
- MetadataFacetFactory factory = metadataFacetFactories.get( facetId );
- if ( factory == null )
+ String propertyPrefix = "artifact:facet:" + id + ":";
+ for ( String facetId : value.split( "," ) )
{
- log.error( "Attempted to load unknown artifact metadata facet: " + facetId );
- }
- else
- {
- MetadataFacet facet = factory.createMetadataFacet();
- String prefix = propertyPrefix + facet.getFacetId();
- Map<String, String> map = new HashMap<>();
- for ( Object key : new ArrayList( properties.keySet() ) )
+ MetadataFacetFactory factory = metadataFacetFactories.get( facetId );
+ if ( factory == null )
{
- String property = (String) key;
- if ( property.startsWith( prefix ) )
+ log.error( "Attempted to load unknown artifact metadata facet: " + facetId );
+ }
+ else
+ {
+ MetadataFacet facet = factory.createMetadataFacet();
+ String prefix = propertyPrefix + facet.getFacetId();
+ Map<String, String> map = new HashMap<>();
+ for ( Object key : new ArrayList( properties.keySet() ) )
{
- map.put( property.substring( prefix.length() + 1 ),
- properties.getProperty( property ) );
+ String property = (String) key;
+ if ( property.startsWith( prefix ) )
+ {
+ map.put( property.substring( prefix.length() + 1 ),
+ properties.getProperty( property ) );
+ }
}
+ facet.fromProperties( map );
+ artifact.addFacet( facet );
}
- facet.fromProperties( map );
- artifact.addFacet( facet );
}
}
- }
- updateArtifactFacets( artifact, properties );
+ updateArtifactFacets( artifact, properties );
+ }
}
}
+ return artifacts.values();
+ }
+ catch ( IOException e )
+ {
+ throw new MetadataResolutionException( e.getMessage(), e );
}
- return artifacts.values();
}
@Override
@@ -610,18 +660,26 @@ public class FileMetadataRepository
@Override
public List<ArtifactMetadata> getArtifactsByChecksum( String repositoryId, String checksum )
+ throws MetadataRepositoryException
{
- // TODO: this is quite slow - if we are to persist with this repository implementation we should build an index
- // of this information (eg. in Lucene, as before)
- // alternatively, we could build a referential tree in the content repository, however it would need some levels
- // of depth to avoid being too broad to be useful (eg. /repository/checksums/a/ab/abcdef1234567)
+ try
+ {
+ // TODO: this is quite slow - if we are to persist with this repository implementation we should build an index
+ // of this information (eg. in Lucene, as before)
+ // alternatively, we could build a referential tree in the content repository, however it would need some levels
+ // of depth to avoid being too broad to be useful (eg. /repository/checksums/a/ab/abcdef1234567)
- List<ArtifactMetadata> artifacts = new ArrayList<>();
- for ( String ns : getRootNamespaces( repositoryId ) )
+ List<ArtifactMetadata> artifacts = new ArrayList<>();
+ for ( String ns : getRootNamespaces( repositoryId ) )
+ {
+ getArtifactsByChecksum( artifacts, repositoryId, ns, checksum );
+ }
+ return artifacts;
+ }
+ catch ( MetadataResolutionException e )
{
- getArtifactsByChecksum( artifacts, repositoryId, ns, checksum );
+ throw new MetadataRepositoryException( e.getMessage(), e );
}
- return artifacts;
}
@Override
@@ -648,82 +706,77 @@ public class FileMetadataRepository
throws MetadataRepositoryException
{
- File directory = new File( getDirectory( artifactMetadata.getRepositoryId() ),
- artifactMetadata.getNamespace() + "/" + artifactMetadata.getProject() + "/"
- + baseVersion
- );
+ try
+ {
+ File directory = new File( getDirectory( artifactMetadata.getRepositoryId() ),
+ artifactMetadata.getNamespace() + "/" + artifactMetadata.getProject() + "/"
+ + baseVersion );
- Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
+ Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
- String id = artifactMetadata.getId();
+ String id = artifactMetadata.getId();
- properties.remove( "artifact:updated:" + id );
- properties.remove( "artifact:whenGathered:" + id );
- properties.remove( "artifact:size:" + id );
- properties.remove( "artifact:md5:" + id );
- properties.remove( "artifact:sha1:" + id );
- properties.remove( "artifact:version:" + id );
- properties.remove( "artifact:facetIds:" + id );
+ properties.remove( "artifact:updated:" + id );
+ properties.remove( "artifact:whenGathered:" + id );
+ properties.remove( "artifact:size:" + id );
+ properties.remove( "artifact:md5:" + id );
+ properties.remove( "artifact:sha1:" + id );
+ properties.remove( "artifact:version:" + id );
+ properties.remove( "artifact:facetIds:" + id );
- String prefix = "artifact:facet:" + id + ":";
- for ( Object key : new ArrayList( properties.keySet() ) )
- {
- String property = (String) key;
- if ( property.startsWith( prefix ) )
+ String prefix = "artifact:facet:" + id + ":";
+ for ( Object key : new ArrayList( properties.keySet() ) )
{
- properties.remove( property );
+ String property = (String) key;
+ if ( property.startsWith( prefix ) )
+ {
+ properties.remove( property );
+ }
}
- }
- try
- {
writeProperties( properties, directory, PROJECT_VERSION_METADATA_KEY );
}
catch ( IOException e )
{
- // TODO
- log.error( e.getMessage(), e );
+ throw new MetadataRepositoryException( e.getMessage(), e );
}
}
@Override
public void removeArtifact( String repoId, String namespace, String project, String version, String id )
+ throws MetadataRepositoryException
{
+ try
+ {
+ File directory = new File( getDirectory( repoId ), namespace + "/" + project + "/" + version );
- File directory = new File( getDirectory( repoId ), namespace + "/" + project + "/" + version );
-
- Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
+ Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
- properties.remove( "artifact:updated:" + id );
- properties.remove( "artifact:whenGathered:" + id );
- properties.remove( "artifact:size:" + id );
- properties.remove( "artifact:md5:" + id );
- properties.remove( "artifact:sha1:" + id );
- properties.remove( "artifact:version:" + id );
- properties.remove( "artifact:facetIds:" + id );
+ properties.remove( "artifact:updated:" + id );
+ properties.remove( "artifact:whenGathered:" + id );
+ properties.remove( "artifact:size:" + id );
+ properties.remove( "artifact:md5:" + id );
+ properties.remove( "artifact:sha1:" + id );
+ properties.remove( "artifact:version:" + id );
+ properties.remove( "artifact:facetIds:" + id );
- String prefix = "artifact:facet:" + id + ":";
- for ( Object key : new ArrayList( properties.keySet() ) )
- {
- String property = (String) key;
- if ( property.startsWith( prefix ) )
+ String prefix = "artifact:facet:" + id + ":";
+ for ( Object key : new ArrayList( properties.keySet() ) )
{
- properties.remove( property );
+ String property = (String) key;
+ if ( property.startsWith( prefix ) )
+ {
+ properties.remove( property );
+ }
}
- }
-
- try
- {
-
- FileUtils.deleteDirectory( directory );
+ Files.deleteIfExists( directory.toPath() );
//writeProperties( properties, directory, PROJECT_VERSION_METADATA_KEY );
}
catch ( IOException e )
{
- // TODO
- log.error( e.getMessage(), e );
+ throw new MetadataRepositoryException( e.getMessage(), e );
}
}
@@ -747,35 +800,51 @@ public class FileMetadataRepository
@Override
public void removeRepository( String repoId )
+ throws MetadataRepositoryException
{
- File dir = getDirectory( repoId );
- if ( !FileUtils.deleteQuietly( dir ) )
+ try
{
- log.error( "Cannot delete repository {}", dir );
+ File dir = getDirectory( repoId );
+ if ( !Files.deleteIfExists( dir.toPath() ) )
+ {
+ log.error( "Cannot delete repository {}", dir );
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new MetadataRepositoryException( e.getMessage(), e );
}
}
private void getArtifactsByChecksum( List<ArtifactMetadata> artifacts, String repositoryId, String ns,
String checksum )
+ throws MetadataRepositoryException
{
- for ( String namespace : getNamespaces( repositoryId, ns ) )
+ try
{
- getArtifactsByChecksum( artifacts, repositoryId, ns + "." + namespace, checksum );
- }
+ for ( String namespace : getNamespaces( repositoryId, ns ) )
+ {
+ getArtifactsByChecksum( artifacts, repositoryId, ns + "." + namespace, checksum );
+ }
- for ( String project : getProjects( repositoryId, ns ) )
- {
- for ( String version : getProjectVersions( repositoryId, ns, project ) )
+ for ( String project : getProjects( repositoryId, ns ) )
{
- for ( ArtifactMetadata artifact : getArtifacts( repositoryId, ns, project, version ) )
+ for ( String version : getProjectVersions( repositoryId, ns, project ) )
{
- if ( checksum.equals( artifact.getMd5() ) || checksum.equals( artifact.getSha1() ) )
+ for ( ArtifactMetadata artifact : getArtifacts( repositoryId, ns, project, version ) )
{
- artifacts.add( artifact );
+ if ( checksum.equals( artifact.getMd5() ) || checksum.equals( artifact.getSha1() ) )
+ {
+ artifacts.add( artifact );
+ }
}
}
}
}
+ catch ( MetadataResolutionException e )
+ {
+ throw new MetadataRepositoryException( e.getMessage(), e );
+ }
}
@Override
@@ -800,6 +869,7 @@ public class FileMetadataRepository
}
private File getMetadataDirectory( String repoId, String facetId )
+ throws IOException
{
return new File( getBaseDirectory( repoId ), "facets/" + facetId );
}
@@ -831,39 +901,42 @@ public class FileMetadataRepository
public void updateArtifact( String repoId, String namespace, String projectId, String projectVersion,
ArtifactMetadata artifact )
{
- ProjectVersionMetadata metadata = new ProjectVersionMetadata();
- metadata.setId( projectVersion );
- updateProjectVersion( repoId, namespace, projectId, metadata );
+ try
+ {
+ ProjectVersionMetadata metadata = new ProjectVersionMetadata();
+ metadata.setId( projectVersion );
+ updateProjectVersion( repoId, namespace, projectId, metadata );
- File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
+ File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
- Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
+ Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
- clearMetadataFacetProperties( artifact.getFacetList(), properties, "artifact:facet:" + artifact.getId() + ":" );
+ clearMetadataFacetProperties( artifact.getFacetList(), properties,
+ "artifact:facet:" + artifact.getId() + ":" );
- String id = artifact.getId();
- properties.setProperty( "artifact:updated:" + id, Long.toString( artifact.getFileLastModified().getTime() ) );
- properties.setProperty( "artifact:whenGathered:" + id, Long.toString( artifact.getWhenGathered().getTime() ) );
- properties.setProperty( "artifact:size:" + id, Long.toString( artifact.getSize() ) );
- if ( artifact.getMd5() != null )
- {
- properties.setProperty( "artifact:md5:" + id, artifact.getMd5() );
- }
- if ( artifact.getSha1() != null )
- {
- properties.setProperty( "artifact:sha1:" + id, artifact.getSha1() );
- }
- properties.setProperty( "artifact:version:" + id, artifact.getVersion() );
+ String id = artifact.getId();
+ properties.setProperty( "artifact:updated:" + id,
+ Long.toString( artifact.getFileLastModified().getTime() ) );
+ properties.setProperty( "artifact:whenGathered:" + id,
+ Long.toString( artifact.getWhenGathered().getTime() ) );
+ properties.setProperty( "artifact:size:" + id, Long.toString( artifact.getSize() ) );
+ if ( artifact.getMd5() != null )
+ {
+ properties.setProperty( "artifact:md5:" + id, artifact.getMd5() );
+ }
+ if ( artifact.getSha1() != null )
+ {
+ properties.setProperty( "artifact:sha1:" + id, artifact.getSha1() );
+ }
+ properties.setProperty( "artifact:version:" + id, artifact.getVersion() );
- Set<String> facetIds = new LinkedHashSet<String>( artifact.getFacetIds() );
- String property = "artifact:facetIds:" + id;
- facetIds.addAll( Arrays.asList( properties.getProperty( property, "" ).split( "," ) ) );
- properties.setProperty( property, join( facetIds ) );
+ Set<String> facetIds = new LinkedHashSet<String>( artifact.getFacetIds() );
+ String property = "artifact:facetIds:" + id;
+ facetIds.addAll( Arrays.asList( properties.getProperty( property, "" ).split( "," ) ) );
+ properties.setProperty( property, join( facetIds ) );
- updateArtifactFacets( artifact, properties );
+ updateArtifactFacets( artifact, properties );
- try
- {
writeProperties( properties, directory, PROJECT_VERSION_METADATA_KEY );
}
catch ( IOException e )
@@ -905,332 +978,387 @@ public class FileMetadataRepository
@Override
public ProjectMetadata getProject( String repoId, String namespace, String projectId )
+ throws MetadataResolutionException
{
- File directory = new File( getDirectory( repoId ), namespace + "/" + projectId );
+ try
+ {
+ File directory = new File( getDirectory( repoId ), namespace + "/" + projectId );
+
+ Properties properties = readOrCreateProperties( directory, PROJECT_METADATA_KEY );
- Properties properties = readOrCreateProperties( directory, PROJECT_METADATA_KEY );
+ ProjectMetadata project = null;
- ProjectMetadata project = null;
+ String id = properties.getProperty( "id" );
+ if ( id != null )
+ {
+ project = new ProjectMetadata();
+ project.setNamespace( properties.getProperty( "namespace" ) );
+ project.setId( id );
+ }
- String id = properties.getProperty( "id" );
- if ( id != null )
+ return project;
+ }
+ catch ( IOException e )
{
- project = new ProjectMetadata();
- project.setNamespace( properties.getProperty( "namespace" ) );
- project.setId( id );
+ throw new MetadataResolutionException( e.getMessage(), e );
}
-
- return project;
}
@Override
public ProjectVersionMetadata getProjectVersion( String repoId, String namespace, String projectId,
String projectVersion )
+ throws MetadataResolutionException
{
- File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
-
- Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
- String id = properties.getProperty( "id" );
- ProjectVersionMetadata versionMetadata = null;
- if ( id != null )
- {
- versionMetadata = new ProjectVersionMetadata();
- versionMetadata.setId( id );
- versionMetadata.setName( properties.getProperty( "name" ) );
- versionMetadata.setDescription( properties.getProperty( "description" ) );
- versionMetadata.setUrl( properties.getProperty( "url" ) );
- versionMetadata.setIncomplete( Boolean.valueOf( properties.getProperty( "incomplete", "false" ) ) );
-
- String scmConnection = properties.getProperty( "scm.connection" );
- String scmDeveloperConnection = properties.getProperty( "scm.developerConnection" );
- String scmUrl = properties.getProperty( "scm.url" );
- if ( scmConnection != null || scmDeveloperConnection != null || scmUrl != null )
- {
- Scm scm = new Scm();
- scm.setConnection( scmConnection );
- scm.setDeveloperConnection( scmDeveloperConnection );
- scm.setUrl( scmUrl );
- versionMetadata.setScm( scm );
- }
-
- String ciSystem = properties.getProperty( "ci.system" );
- String ciUrl = properties.getProperty( "ci.url" );
- if ( ciSystem != null || ciUrl != null )
- {
- CiManagement ci = new CiManagement();
- ci.setSystem( ciSystem );
- ci.setUrl( ciUrl );
- versionMetadata.setCiManagement( ci );
- }
+ try
+ {
+ File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
- String issueSystem = properties.getProperty( "issue.system" );
- String issueUrl = properties.getProperty( "issue.url" );
- if ( issueSystem != null || issueUrl != null )
+ Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
+ String id = properties.getProperty( "id" );
+ ProjectVersionMetadata versionMetadata = null;
+ if ( id != null )
{
- IssueManagement issueManagement = new IssueManagement();
- issueManagement.setSystem( issueSystem );
- issueManagement.setUrl( issueUrl );
- versionMetadata.setIssueManagement( issueManagement );
- }
+ versionMetadata = new ProjectVersionMetadata();
+ versionMetadata.setId( id );
+ versionMetadata.setName( properties.getProperty( "name" ) );
+ versionMetadata.setDescription( properties.getProperty( "description" ) );
+ versionMetadata.setUrl( properties.getProperty( "url" ) );
+ versionMetadata.setIncomplete( Boolean.valueOf( properties.getProperty( "incomplete", "false" ) ) );
+
+ String scmConnection = properties.getProperty( "scm.connection" );
+ String scmDeveloperConnection = properties.getProperty( "scm.developerConnection" );
+ String scmUrl = properties.getProperty( "scm.url" );
+ if ( scmConnection != null || scmDeveloperConnection != null || scmUrl != null )
+ {
+ Scm scm = new Scm();
+ scm.setConnection( scmConnection );
+ scm.setDeveloperConnection( scmDeveloperConnection );
+ scm.setUrl( scmUrl );
+ versionMetadata.setScm( scm );
+ }
- String orgName = properties.getProperty( "org.name" );
- String orgUrl = properties.getProperty( "org.url" );
- if ( orgName != null || orgUrl != null )
- {
- Organization org = new Organization();
- org.setName( orgName );
- org.setUrl( orgUrl );
- versionMetadata.setOrganization( org );
- }
+ String ciSystem = properties.getProperty( "ci.system" );
+ String ciUrl = properties.getProperty( "ci.url" );
+ if ( ciSystem != null || ciUrl != null )
+ {
+ CiManagement ci = new CiManagement();
+ ci.setSystem( ciSystem );
+ ci.setUrl( ciUrl );
+ versionMetadata.setCiManagement( ci );
+ }
- boolean done = false;
- int i = 0;
- while ( !done )
- {
- String licenseName = properties.getProperty( "license." + i + ".name" );
- String licenseUrl = properties.getProperty( "license." + i + ".url" );
- if ( licenseName != null || licenseUrl != null )
+ String issueSystem = properties.getProperty( "issue.system" );
+ String issueUrl = properties.getProperty( "issue.url" );
+ if ( issueSystem != null || issueUrl != null )
{
- License license = new License();
- license.setName( licenseName );
- license.setUrl( licenseUrl );
- versionMetadata.addLicense( license );
+ IssueManagement issueManagement = new IssueManagement();
+ issueManagement.setSystem( issueSystem );
+ issueManagement.setUrl( issueUrl );
+ versionMetadata.setIssueManagement( issueManagement );
}
- else
+
+ String orgName = properties.getProperty( "org.name" );
+ String orgUrl = properties.getProperty( "org.url" );
+ if ( orgName != null || orgUrl != null )
{
- done = true;
+ Organization org = new Organization();
+ org.setName( orgName );
+ org.setUrl( orgUrl );
+ versionMetadata.setOrganization( org );
}
- i++;
- }
- done = false;
- i = 0;
- while ( !done )
- {
- String mailingListName = properties.getProperty( "mailingList." + i + ".name" );
- if ( mailingListName != null )
+ boolean done = false;
+ int i = 0;
+ while ( !done )
{
- MailingList mailingList = new MailingList();
- mailingList.setName( mailingListName );
- mailingList.setMainArchiveUrl( properties.getProperty( "mailingList." + i + ".archive" ) );
- String p = properties.getProperty( "mailingList." + i + ".otherArchives" );
- if ( p != null && p.length() > 0 )
+ String licenseName = properties.getProperty( "license." + i + ".name" );
+ String licenseUrl = properties.getProperty( "license." + i + ".url" );
+ if ( licenseName != null || licenseUrl != null )
{
- mailingList.setOtherArchives( Arrays.asList( p.split( "," ) ) );
+ License license = new License();
+ license.setName( licenseName );
+ license.setUrl( licenseUrl );
+ versionMetadata.addLicense( license );
}
else
{
- mailingList.setOtherArchives( Collections.<String>emptyList() );
+ done = true;
}
- mailingList.setPostAddress( properties.getProperty( "mailingList." + i + ".post" ) );
- mailingList.setSubscribeAddress( properties.getProperty( "mailingList." + i + ".subscribe" ) );
- mailingList.setUnsubscribeAddress( properties.getProperty( "mailingList." + i + ".unsubscribe" ) );
- versionMetadata.addMailingList( mailingList );
- }
- else
- {
- done = true;
+ i++;
}
- i++;
- }
- done = false;
- i = 0;
- while ( !done )
- {
- String dependencyArtifactId = properties.getProperty( "dependency." + i + ".artifactId" );
- if ( dependencyArtifactId != null )
+ done = false;
+ i = 0;
+ while ( !done )
{
- Dependency dependency = new Dependency();
- dependency.setArtifactId( dependencyArtifactId );
- dependency.setGroupId( properties.getProperty( "dependency." + i + ".groupId" ) );
- dependency.setClassifier( properties.getProperty( "dependency." + i + ".classifier" ) );
- dependency.setOptional(
- Boolean.valueOf( properties.getProperty( "dependency." + i + ".optional" ) ) );
- dependency.setScope( properties.getProperty( "dependency." + i + ".scope" ) );
- dependency.setSystemPath( properties.getProperty( "dependency." + i + ".systemPath" ) );
- dependency.setType( properties.getProperty( "dependency." + i + ".type" ) );
- dependency.setVersion( properties.getProperty( "dependency." + i + ".version" ) );
- dependency.setOptional(
- Boolean.valueOf( properties.getProperty( "dependency." + i + ".optional" ) ) );
- versionMetadata.addDependency( dependency );
- }
- else
- {
- done = true;
+ String mailingListName = properties.getProperty( "mailingList." + i + ".name" );
+ if ( mailingListName != null )
+ {
+ MailingList mailingList = new MailingList();
+ mailingList.setName( mailingListName );
+ mailingList.setMainArchiveUrl( properties.getProperty( "mailingList." + i + ".archive" ) );
+ String p = properties.getProperty( "mailingList." + i + ".otherArchives" );
+ if ( p != null && p.length() > 0 )
+ {
+ mailingList.setOtherArchives( Arrays.asList( p.split( "," ) ) );
+ }
+ else
+ {
+ mailingList.setOtherArchives( Collections.<String>emptyList() );
+ }
+ mailingList.setPostAddress( properties.getProperty( "mailingList." + i + ".post" ) );
+ mailingList.setSubscribeAddress( properties.getProperty( "mailingList." + i + ".subscribe" ) );
+ mailingList.setUnsubscribeAddress(
+ properties.getProperty( "mailingList." + i + ".unsubscribe" ) );
+ versionMetadata.addMailingList( mailingList );
+ }
+ else
+ {
+ done = true;
+ }
+ i++;
}
- i++;
- }
- String facetIds = properties.getProperty( "facetIds", "" );
- if ( facetIds.length() > 0 )
- {
- for ( String facetId : facetIds.split( "," ) )
+ done = false;
+ i = 0;
+ while ( !done )
{
- MetadataFacetFactory factory = metadataFacetFactories.get( facetId );
- if ( factory == null )
+ String dependencyArtifactId = properties.getProperty( "dependency." + i + ".artifactId" );
+ if ( dependencyArtifactId != null )
{
- log.error( "Attempted to load unknown project version metadata facet: {}", facetId );
+ Dependency dependency = new Dependency();
+ dependency.setArtifactId( dependencyArtifactId );
+ dependency.setGroupId( properties.getProperty( "dependency." + i + ".groupId" ) );
+ dependency.setClassifier( properties.getProperty( "dependency." + i + ".classifier" ) );
+ dependency.setOptional(
+ Boolean.valueOf( properties.getProperty( "dependency." + i + ".optional" ) ) );
+ dependency.setScope( properties.getProperty( "dependency." + i + ".scope" ) );
+ dependency.setSystemPath( properties.getProperty( "dependency." + i + ".systemPath" ) );
+ dependency.setType( properties.getProperty( "dependency." + i + ".type" ) );
+ dependency.setVersion( properties.getProperty( "dependency." + i + ".version" ) );
+ dependency.setOptional(
+ Boolean.valueOf( properties.getProperty( "dependency." + i + ".optional" ) ) );
+ versionMetadata.addDependency( dependency );
}
else
{
- MetadataFacet facet = factory.createMetadataFacet();
- Map<String, String> map = new HashMap<>();
- for ( Object key : new ArrayList( properties.keySet() ) )
+ done = true;
+ }
+ i++;
+ }
+
+ String facetIds = properties.getProperty( "facetIds", "" );
+ if ( facetIds.length() > 0 )
+ {
+ for ( String facetId : facetIds.split( "," ) )
+ {
+ MetadataFacetFactory factory = metadataFacetFactories.get( facetId );
+ if ( factory == null )
{
- String property = (String) key;
- if ( property.startsWith( facet.getFacetId() ) )
+ log.error( "Attempted to load unknown project version metadata facet: {}", facetId );
+ }
+ else
+ {
+ MetadataFacet facet = factory.createMetadataFacet();
+ Map<String, String> map = new HashMap<>();
+ for ( Object key : new ArrayList( properties.keySet() ) )
{
- map.put( property.substring( facet.getFacetId().length() + 1 ),
- properties.getProperty( property ) );
+ String property = (String) key;
+ if ( property.startsWith( facet.getFacetId() ) )
+ {
+ map.put( property.substring( facet.getFacetId().length() + 1 ),
+ properties.getProperty( property ) );
+ }
}
+ facet.fromProperties( map );
+ versionMetadata.addFacet( facet );
}
- facet.fromProperties( map );
- versionMetadata.addFacet( facet );
}
}
- }
- updateProjectVersionFacets( versionMetadata, properties );
+ updateProjectVersionFacets( versionMetadata, properties );
+ }
+ return versionMetadata;
+ }
+ catch ( IOException e )
+ {
+ throw new MetadataResolutionException( e.getMessage(), e );
}
- return versionMetadata;
}
@Override
public Collection<String> getArtifactVersions( String repoId, String namespace, String projectId,
String projectVersion )
+ throws MetadataResolutionException
{
- File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
+ try
+ {
+ File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
- Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
+ Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
- Set<String> versions = new HashSet<String>();
- for ( Map.Entry entry : properties.entrySet() )
- {
- String name = (String) entry.getKey();
- if ( name.startsWith( "artifact:version:" ) )
+ Set<String> versions = new HashSet<String>();
+ for ( Map.Entry entry : properties.entrySet() )
{
- versions.add( (String) entry.getValue() );
+ String name = (String) entry.getKey();
+ if ( name.startsWith( "artifact:version:" ) )
+ {
+ versions.add( (String) entry.getValue() );
+ }
}
+ return versions;
+ }
+ catch ( IOException e )
+ {
+ throw new MetadataResolutionException( e.getMessage(), e );
}
- return versions;
}
@Override
public Collection<ProjectVersionReference> getProjectReferences( String repoId, String namespace, String projectId,
String projectVersion )
+ throws MetadataResolutionException
{
- File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
+ try
+ {
+ File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
- Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
- int numberOfRefs = Integer.parseInt( properties.getProperty( "ref:lastReferenceNum", "-1" ) ) + 1;
+ Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
+ int numberOfRefs = Integer.parseInt( properties.getProperty( "ref:lastReferenceNum", "-1" ) ) + 1;
- List<ProjectVersionReference> references = new ArrayList<>();
- for ( int i = 0; i < numberOfRefs; i++ )
+ List<ProjectVersionReference> references = new ArrayList<>();
+ for ( int i = 0; i < numberOfRefs; i++ )
+ {
+ ProjectVersionReference reference = new ProjectVersionReference();
+ reference.setProjectId( properties.getProperty( "ref:reference." + i + ".projectId" ) );
+ reference.setNamespace( properties.getProperty( "ref:reference." + i + ".namespace" ) );
+ reference.setProjectVersion( properties.getProperty( "ref:reference." + i + ".projectVersion" ) );
+ reference.setReferenceType( ProjectVersionReference.ReferenceType.valueOf(
+ properties.getProperty( "ref:reference." + i + ".referenceType" ) ) );
+ references.add( reference );
+ }
+ return references;
+ }
+ catch ( IOException e )
{
- ProjectVersionReference reference = new ProjectVersionReference();
- reference.setProjectId( properties.getProperty( "ref:reference." + i + ".projectId" ) );
- reference.setNamespace( properties.getProperty( "ref:reference." + i + ".namespace" ) );
- reference.setProjectVersion( properties.getProperty( "ref:reference." + i + ".projectVersion" ) );
- reference.setReferenceType( ProjectVersionReference.ReferenceType.valueOf(
- properties.getProperty( "ref:reference." + i + ".referenceType" ) ) );
- references.add( reference );
- }
- return references;
+ throw new MetadataResolutionException( e.getMessage(), e );
+ }
}
@Override
public Collection<String> getRootNamespaces( String repoId )
+ throws MetadataResolutionException
{
return getNamespaces( repoId, null );
}
@Override
public Collection<String> getNamespaces( String repoId, String baseNamespace )
+ throws MetadataResolutionException
{
- List<String> allNamespaces = new ArrayList<>();
- File directory = getDirectory( repoId );
- File[] files = directory.listFiles();
- if ( files != null )
+ try
{
- for ( File namespace : files )
+ List<String> allNamespaces = new ArrayList<>();
+ File directory = getDirectory( repoId );
+ File[] files = directory.listFiles();
+ if ( files != null )
{
- if ( new File( namespace, NAMESPACE_METADATA_KEY + ".properties" ).exists() )
+ for ( File namespace : files )
{
- allNamespaces.add( namespace.getName() );
+ if ( new File( namespace, NAMESPACE_METADATA_KEY + ".properties" ).exists() )
+ {
+ allNamespaces.add( namespace.getName() );
+ }
}
}
- }
- Set<String> namespaces = new LinkedHashSet<>();
- int fromIndex = baseNamespace != null ? baseNamespace.length() + 1 : 0;
- for ( String namespace : allNamespaces )
- {
- if ( baseNamespace == null || namespace.startsWith( baseNamespace + "." ) )
+ Set<String> namespaces = new LinkedHashSet<>();
+ int fromIndex = baseNamespace != null ? baseNamespace.length() + 1 : 0;
+ for ( String namespace : allNamespaces )
{
- int i = namespace.indexOf( '.', fromIndex );
- if ( i >= 0 )
- {
- namespaces.add( namespace.substring( fromIndex, i ) );
- }
- else
+ if ( baseNamespace == null || namespace.startsWith( baseNamespace + "." ) )
{
- namespaces.add( namespace.substring( fromIndex ) );
+ int i = namespace.indexOf( '.', fromIndex );
+ if ( i >= 0 )
+ {
+ namespaces.add( namespace.substring( fromIndex, i ) );
+ }
+ else
+ {
+ namespaces.add( namespace.substring( fromIndex ) );
+ }
}
}
+ return new ArrayList<>( namespaces );
+ }
+ catch ( IOException e )
+ {
+ throw new MetadataResolutionException( e.getMessage(), e );
}
- return new ArrayList<>( namespaces );
}
@Override
public Collection<String> getProjects( String repoId, String namespace )
+ throws MetadataResolutionException
{
- List<String> projects = new ArrayList<>();
- File directory = new File( getDirectory( repoId ), namespace );
- File[] files = directory.listFiles();
- if ( files != null )
+ try
{
- for ( File project : files )
+ List<String> projects = new ArrayList<>();
+ File directory = new File( getDirectory( repoId ), namespace );
+ File[] files = directory.listFiles();
+ if ( files != null )
{
- if ( new File( project, PROJECT_METADATA_KEY + ".properties" ).exists() )
+ for ( File project : files )
{
- projects.add( project.getName() );
+ if ( new File( project, PROJECT_METADATA_KEY + ".properties" ).exists() )
+ {
+ projects.add( project.getName() );
+ }
}
}
+ return projects;
+ }
+ catch ( IOException e )
+ {
+ throw new MetadataResolutionException( e.getMessage(), e );
}
- return projects;
}
@Override
public Collection<String> getProjectVersions( String repoId, String namespace, String projectId )
+ throws MetadataResolutionException
{
- List<String> projectVersions = new ArrayList<>();
- File directory = new File( getDirectory( repoId ), namespace + "/" + projectId );
- File[] files = directory.listFiles();
- if ( files != null )
+ try
{
- for ( File projectVersion : files )
+ List<String> projectVersions = new ArrayList<>();
+ File directory = new File( getDirectory( repoId ), namespace + "/" + projectId );
+ File[] files = directory.listFiles();
+ if ( files != null )
{
- if ( new File( projectVersion, PROJECT_VERSION_METADATA_KEY + ".properties" ).exists() )
+ for ( File projectVersion : files )
{
- projectVersions.add( projectVersion.getName() );
+ if ( new File( projectVersion, PROJECT_VERSION_METADATA_KEY + ".properties" ).exists() )
+ {
+ projectVersions.add( projectVersion.getName() );
+ }
}
}
+ return projectVersions;
+ }
+ catch ( IOException e )
+ {
+ throw new MetadataResolutionException( e.getMessage(), e );
}
- return projectVersions;
}
@Override
public void removeProject( String repositoryId, String namespace, String projectId )
throws MetadataRepositoryException
{
- File directory = new File( getDirectory( repositoryId ), namespace + "/" + projectId );
try
{
- if ( directory.exists() )
- {
- FileUtils.deleteDirectory( directory );
- }
+ File directory = new File( getDirectory( repositoryId ), namespace + "/" + projectId );
+ Files.deleteIfExists( directory.toPath() );
}
catch ( IOException e )
{
@@ -1242,18 +1370,16 @@ public class FileMetadataRepository
public void removeProjectVersion( String repoId, String namespace, String projectId, String projectVersion )
throws MetadataRepositoryException
{
- File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
- if ( directory.exists() )
+ try
{
- try
- {
- FileUtils.deleteDirectory( directory );
- }
- catch ( IOException e )
- {
- throw new MetadataRepositoryException( e.getMessage(), e );
- }
+ File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
+ Files.deleteIfExists( directory.toPath() );
}
+ catch ( IOException e )
+ {
+ throw new MetadataRepositoryException( e.getMessage(), e );
+ }
+
}
private void writeProperties( Properties properties, File directory, String propertiesKey )
@@ -1290,16 +1416,25 @@ public class FileMetadataRepository
@Override
public List<ArtifactMetadata> getArtifacts( String repoId )
+ throws MetadataRepositoryException
{
- List<ArtifactMetadata> artifacts = new ArrayList<>();
- for ( String ns : getRootNamespaces( repoId ) )
+ try
+ {
+ List<ArtifactMetadata> artifacts = new ArrayList<>();
+ for ( String ns : getRootNamespaces( repoId ) )
+ {
+ getArtifacts( artifacts, repoId, ns );
+ }
+ return artifacts;
+ }
+ catch ( MetadataResolutionException e )
{
- getArtifacts( artifacts, repoId, ns );
+ throw new MetadataRepositoryException( e.getMessage(), e );
}
- return artifacts;
}
private void getArtifacts( List<ArtifactMetadata> artifacts, String repoId, String ns )
+ throws MetadataResolutionException
{
for ( String namespace : getNamespaces( repoId, ns ) )
{