/**
* Base class for all repository purge tasks.
- *
*/
public abstract class AbstractRepositoryPurge
implements RepositoryPurge
protected Logger log = LoggerFactory.getLogger( AbstractRepositoryPurge.class );
protected final ManagedRepositoryContent repository;
-
- protected final List<RepositoryListener> listeners;
-
+
+ protected final List<RepositoryListener> listeners;
+
private Logger logger = LoggerFactory.getLogger( "org.apache.archiva.AuditLog" );
-
+
private static final char DELIM = ' ';
public AbstractRepositoryPurge( ManagedRepositoryContent repository, List<RepositoryListener> listeners )
/**
* Purge the repo. Update db and index of removed artifacts.
- *
+ *
* @param references
*/
protected void purge( Set<ArtifactReference> references )
- {
- if( references != null && !references.isEmpty() )
+ {
+ if ( references != null && !references.isEmpty() )
{
for ( ArtifactReference reference : references )
- {
+ {
File artifactFile = repository.toFile( reference );
- // TODO: looks incomplete, might not delete related metadata?
+ // FIXME: looks incomplete, might not delete related metadata?
for ( RepositoryListener listener : listeners )
{
listener.deleteArtifact( repository.getId(), reference.getGroupId(), reference.getArtifactId(),
reference.getVersion(), artifactFile.getName() );
}
-
+
// TODO: this needs to be logged
artifactFile.delete();
- triggerAuditEvent( repository.getRepository().getId(), ArtifactReference.toKey( reference ), AuditEvent.PURGE_ARTIFACT );
+ triggerAuditEvent( repository.getRepository().getId(), ArtifactReference.toKey( reference ),
+ AuditEvent.PURGE_ARTIFACT );
purgeSupportFiles( artifactFile );
}
}
* <p>
* Support Files are things like ".sha1", ".md5", ".asc", etc.
* </p>
- *
+ *
* @param artifactFile the file to base off of.
*/
private void purgeSupportFiles( File artifactFile )
}
}
}
-
+
private void triggerAuditEvent( String repoId, String resource, String action )
{
- String msg = repoId + DELIM + "<system-purge>" + DELIM + "<system>" + DELIM + '\"' + resource + '\"' +
- DELIM + '\"' + action + '\"';
-
+ String msg =
+ repoId + DELIM + "<system-purge>" + DELIM + "<system>" + DELIM + '\"' + resource + '\"' + DELIM + '\"' +
+ action + '\"';
+
logger.info( msg );
}
}
* This will look in a single managed repository, and purge any snapshots that are present
* that have a corresponding released version on the same repository.
* </p>
- *
+ *
* <p>
* So, if you have the following (presented in the m2/default layout form) ...
* <pre>
extends AbstractRepositoryPurge
{
private MetadataTools metadataTools;
-
+
private ArchivaConfiguration archivaConfig;
-
+
private RepositoryContentFactory repoContentFactory;
public CleanupReleasedSnapshotsRepositoryPurge( ManagedRepositoryContent repository, MetadataTools metadataTools,
ProjectReference reference = new ProjectReference();
reference.setGroupId( artifactRef.getGroupId() );
reference.setArtifactId( artifactRef.getArtifactId() );
-
+
// Gather up all of the versions.
List<String> allVersions = new ArrayList<String>( repository.getVersions( reference ) );
List<ManagedRepositoryConfiguration> repos = archivaConfig.getConfiguration().getManagedRepositories();
- for( ManagedRepositoryConfiguration repo : repos )
- {
- if( repo.isReleases() && !repo.getId().equals( repository.getId() ) )
- {
+ for ( ManagedRepositoryConfiguration repo : repos )
+ {
+ if ( repo.isReleases() && !repo.getId().equals( repository.getId() ) )
+ {
try
- {
- ManagedRepositoryContent repoContent = repoContentFactory.getManagedRepositoryContent( repo.getId() );
+ {
+ ManagedRepositoryContent repoContent = repoContentFactory.getManagedRepositoryContent(
+ repo.getId() );
allVersions.addAll( repoContent.getVersions( reference ) );
}
- catch( RepositoryNotFoundException e )
+ catch ( RepositoryNotFoundException e )
{
// swallow
}
- catch( RepositoryException e )
+ catch ( RepositoryException e )
{
// swallow
}
List<String> snapshotVersions = new ArrayList<String>();
for ( String version : allVersions )
- {
+ {
if ( VersionUtil.isSnapshot( version ) )
{
snapshotVersions.add( version );
Collections.sort( allVersions, VersionComparator.getInstance() );
Collections.sort( releasedVersions, VersionComparator.getInstance() );
Collections.sort( snapshotVersions, VersionComparator.getInstance() );
-
+
// Now clean out any version that is earlier than the highest released version.
boolean needsMetadataUpdate = false;
VersionedReference versionRef = new VersionedReference();
versionRef.setGroupId( artifactRef.getGroupId() );
versionRef.setArtifactId( artifactRef.getArtifactId() );
-
- ArchivaArtifact artifact =
- new ArchivaArtifact( artifactRef.getGroupId(), artifactRef.getArtifactId(), artifactRef.getVersion(),
- artifactRef.getClassifier(), artifactRef.getType(), repository.getId() );
-
+
+ ArchivaArtifact artifact = new ArchivaArtifact( artifactRef.getGroupId(), artifactRef.getArtifactId(),
+ artifactRef.getVersion(), artifactRef.getClassifier(),
+ artifactRef.getType(), repository.getId() );
+
for ( String version : snapshotVersions )
- {
- if( releasedVersions.contains( VersionUtil.getReleaseVersion( version ) ) )
- {
+ {
+ if ( releasedVersions.contains( VersionUtil.getReleaseVersion( version ) ) )
+ {
versionRef.setVersion( version );
repository.deleteVersion( versionRef );
-
- // TODO: looks incomplete, might not delete related metadata?
+
+ // FIXME: looks incomplete, might not delete related metadata?
for ( RepositoryListener listener : listeners )
{
listener.deleteArtifact( repository.getId(), artifact.getGroupId(), artifact.getArtifactId(),
artifact.getVersion(), artifactFile.getName() );
}
-
+
needsMetadataUpdate = true;
}
- }
-
+ }
+
if ( needsMetadataUpdate )
{
updateMetadata( artifactRef );
private MetadataRepository metadataRepository;
/**
- * FIXME: this needs to be configurable based on storage type
+ * FIXME: this needs to be configurable based on storage type - and could also be instantiated per repo. Change to a
+ * factory.
*
* @plexus.requirement role-hint="maven2"
*/
project.setId( artifact.getProject() );
String projectVersion = VersionUtil.getBaseVersion( artifact.getVersion() );
- // TODO: maybe not too efficient since it may have already been read and stored for this artifact
+ // FIXME: maybe not too efficient since it may have already been read and stored for this artifact
ProjectVersionMetadata versionMetadata = null;
try
{
try
{
- // TODO: transaction
+ // FIXME: transaction
// read the metadata and update it if it is newer or doesn't exist
artifact.setWhenGathered( whenGathered );
metadataRepository.updateArtifact( repoId, project.getNamespace(), project.getId(), projectVersion,
/**
* Default implementation of a scheduling component for archiva.
*
- * @todo FIXME - consider just folding in, not really scheduled
- *
+ * @todo TODO - consider just folding in, not really scheduled
* @plexus.component role="org.apache.archiva.scheduler.ArchivaTaskScheduler" role-hint="indexing"
*/
public class IndexingArchivaTaskScheduler
implements ArchivaTaskScheduler<ArtifactIndexingTask>
{
private Logger log = LoggerFactory.getLogger( IndexingArchivaTaskScheduler.class );
-
+
/**
* @plexus.requirement role-hint="indexing"
*/
RepositoryStatistics newStats = repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID );
assertEquals( 0, newStats.getNewFileCount() );
assertEquals( 31, newStats.getTotalFileCount() );
- // TODO: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation
+ // FIXME: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation
// assertEquals( 8, newStats.getTotalArtifactCount() );
// assertEquals( 3, newStats.getTotalGroupCount() );
// assertEquals( 5, newStats.getTotalProjectCount() );
RepositoryStatistics updatedStats = repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID );
assertEquals( 2, updatedStats.getNewFileCount() );
assertEquals( 33, updatedStats.getTotalFileCount() );
- // TODO: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation
+ // FIXME: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation
// assertEquals( 8, newStats.getTotalArtifactCount() );
// assertEquals( 3, newStats.getTotalGroupCount() );
// assertEquals( 5, newStats.getTotalProjectCount() );
RepositoryStatistics newStats = repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID );
assertEquals( 2, newStats.getNewFileCount() );
assertEquals( 33, newStats.getTotalFileCount() );
- // TODO: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation
+ // FIXME: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation
// assertEquals( 8, newStats.getTotalArtifactCount() );
// assertEquals( 3, newStats.getTotalGroupCount() );
// assertEquals( 5, newStats.getTotalProjectCount() );
RepositoryStatistics newStats = repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID );
assertEquals( 2, newStats.getNewFileCount() );
assertEquals( 33, newStats.getTotalFileCount() );
- // TODO: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation
+ // FIXME: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation
// assertEquals( 8, newStats.getTotalArtifactCount() );
// assertEquals( 3, newStats.getTotalGroupCount() );
// assertEquals( 5, newStats.getTotalProjectCount() );
import java.util.List;
/**
- * UserRepositories stub used for testing.
+ * UserRepositories stub used for testing.
*
* @version $Id$
*/
public void createMissingRepositoryRoles( String repoId )
throws ArchivaSecurityException
{
- // TODO Auto-generated method stub
-
}
public List<String> getObservableRepositoryIds( String principal )
- throws PrincipalNotFoundException, AccessDeniedException, ArchivaSecurityException
+ throws ArchivaSecurityException
{
return repoIds;
}
public void setObservableRepositoryIds( List<String> repoIds )
{
- this.repoIds = repoIds;
+ this.repoIds = repoIds;
}
public boolean isAuthorizedToUploadArtifacts( String principal, String repoId )
- throws PrincipalNotFoundException, ArchivaSecurityException
+ throws ArchivaSecurityException
{
- // TODO Auto-generated method stub
return false;
}
-
+
public boolean isAuthorizedToDeleteArtifacts( String principal, String repoId )
{
return false;
}
public List<String> getManagableRepositoryIds( String principal )
- throws PrincipalNotFoundException, AccessDeniedException, ArchivaSecurityException
+ throws ArchivaSecurityException
{
- // TODO Auto-generated method stub
return null;
}
* under the License.
*/
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
import org.codehaus.plexus.redback.authentication.AuthenticationDataSource;
import org.codehaus.plexus.redback.authentication.AuthenticationException;
import org.codehaus.plexus.redback.authentication.AuthenticationResult;
import org.codehaus.plexus.redback.users.UserNotFoundException;
import org.codehaus.plexus.redback.users.jdo.JdoUser;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
/**
- * SecuritySystem stub used for testing.
+ * SecuritySystem stub used for testing.
*
* @version $Id$
*/
public AuthorizationResult authorize( SecuritySession arg0, Object arg1, Object arg2 )
throws AuthorizationException
{
- AuthorizationResult result = new AuthorizationResult( true, arg1, null);
-
+ AuthorizationResult result = new AuthorizationResult( true, arg1, null );
+
return result;
}
public String getAuthenticatorId()
{
- // TODO Auto-generated method stub
return null;
}
public String getAuthorizerId()
{
- // TODO Auto-generated method stub
return null;
}
public KeyManager getKeyManager()
{
- // TODO Auto-generated method stub
return null;
}
public UserSecurityPolicy getPolicy()
{
- // TODO Auto-generated method stub
return null;
}
public String getUserManagementId()
{
- // TODO Auto-generated method stub
return null;
}
public UserManager getUserManager()
{
- // TODO Auto-generated method stub
return null;
}
public boolean isAuthenticated( AuthenticationDataSource arg0 )
throws AuthenticationException, UserNotFoundException, AccountLockedException
{
- // TODO Auto-generated method stub
return false;
}
public boolean isAuthorized( SecuritySession arg0, Object arg1 )
throws AuthorizationException
{
- // TODO Auto-generated method stub
return false;
}
private MetadataRepository metadataRepository;
/**
- * FIXME: this needs to be configurable based on storage type, and availability of proxy module
+ * FIXME: this needs to be configurable based on storage type - and could also be instantiated per repo. Change to a
+ * factory.
+ *
+ * TODO: Also need to accommodate availability of proxy module
* ... could be a different type since we need methods to modify the storage metadata, which would also allow more
* appropriate methods to pass in the already determined repository configuration, for example, instead of the ID
*
import java.util.Collection;
+// FIXME: we should drop the repoId parameters and attach this to an instance of a repository storage
public interface RepositoryStorage
{
ProjectMetadata readProjectMetadata( String repoId, String namespace, String projectId )
Collection<ArtifactMetadata> readArtifactsMetadata( String repoId, String namespace, String projectId,
String projectVersion, Filter<String> filter );
- // TODO: reconsider this API, do we want to expose storage format in the form of a path?
+ // FIXME: reconsider this API, do we want to expose storage format in the form of a path?
ArtifactMetadata readArtifactMetadataFromPath( String repoId, String path );
}
* under the License.
*/
-import java.io.File;
-
import org.apache.commons.lang.math.NumberUtils;
import org.apache.maven.archiva.xml.XMLException;
import org.apache.maven.archiva.xml.XMLReader;
import org.dom4j.Element;
+import java.io.File;
+
/**
* RepositoryMetadataReader - read maven-metadata.xml files.
*
- * TODO: we should improve on this, ideally using the Maven standard libraries (which are unfortunately baked into
- * maven-core now)
+ * TODO: we should improve on this, ideally using the Maven standard library
*/
public final class MavenRepositoryMetadataReader
{
* @param metadataFile the maven-metadata.xml file to read.
* @return the archiva repository metadata object that represents the provided file contents.
* @throws org.apache.maven.archiva.xml.XMLException
+ *
*/
public static MavenRepositoryMetadata read( File metadataFile )
throws XMLException
~ under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>plugins</artifactId>
<groupId>org.apache.archiva</groupId>
<version>1.4-SNAPSHOT</version>
</parent>
- <!-- TODO: Rename to metadata-store-file -->
+ <!-- FIXME: Rename to metadata-store-file -->
<artifactId>metadata-repository-file</artifactId>
<name>File System Backed Metadata Repository</name>
<dependencies>
<artifactId>plexus-spring</artifactId>
<scope>test</scope>
</dependency>
- <!-- TODO: dependency management -->
+ <!-- FIXME: dependency management -->
<dependency>
<groupId>javax.jcr</groupId>
<artifactId>jcr</artifactId>
public void login()
{
- // TODO: need to close this at the end - do we need to add it in the API?
+ // FIXME: need to close this at the end - do we need to add it in the API?
try
{
- // TODO: shouldn't do this in constructor since it's a singleton
+ // FIXME: shouldn't do this in constructor since it's a singleton
session = repository.login( new SimpleCredentials( "username", "password".toCharArray() ) );
Workspace workspace = session.getWorkspace();
}
catch ( LoginException e )
{
- // TODO
+ // FIXME
throw new RuntimeException( e );
}
catch ( RepositoryException e )
{
- // TODO
+ // FIXME
throw new RuntimeException( e );
}
}
n.setProperty( entry.getKey(), entry.getValue() );
}
}
- // TODO: need some context around this so it can be done only when needed
+ // FIXME: need some context around this so it can be done only when needed
session.save();
}
catch ( RepositoryException e )
versionNode.setProperty( "url", versionMetadata.getUrl() );
versionNode.setProperty( "incomplete", versionMetadata.isIncomplete() );
- // TODO: decide how to treat these in the content repo
+ // FIXME: decide how to treat these in the content repo
if ( versionMetadata.getScm() != null )
{
versionNode.setProperty( "scm.connection", versionMetadata.getScm().getConnection() );
versionMetadata.setIncomplete( node.hasProperty( "incomplete" ) && node.getProperty(
"incomplete" ).getBoolean() );
- // TODO: decide how to treat these in the content repo
+ // FIXME: decide how to treat these in the content repo
String scmConnection = getPropertyString( node, "scm.connection" );
String scmDeveloperConnection = getPropertyString( node, "scm.developerConnection" );
String scmUrl = getPropertyString( node, "scm.url" );
{
try
{
- // TODO: this shouldn't be here! Repository may need a context
+ // FIXME: this shouldn't be here! Repository may need a context
session.save();
}
catch ( RepositoryException e )
{
- // TODO
+ // FIXME
throw new RuntimeException( e );
}
session.logout();
{
this.metadataFacetFactories = metadataFacetFactories;
- // TODO: check if actually called by normal injection
-
// TODO: consider using namespaces for facets instead of the current approach:
+ // (if used, check if actually called by normal injection)
// for ( String facetId : metadataFacetFactories.keySet() )
// {
// session.getWorkspace().getNamespaceRegistry().registerNamespace( facetId, facetId );
problem.setProject( originalArtifact.getProject() );
problem.setVersion( originalArtifact.getVersion() );
problem.setId( id );
- // TODO: need to get the right storage resolver for the repository the dupe artifact is in, it might be
+ // FIXME: need to get the right storage resolver for the repository the dupe artifact is in, it might be
// a different type
- // TODO: we need the project version here, not the artifact version
+ // FIXME: we need the project version here, not the artifact version
problem.setMessage( "Duplicate Artifact Detected: " + path + " <--> " + pathTranslator.toPath(
dupArtifact.getNamespace(), dupArtifact.getProject(), dupArtifact.getVersion(),
dupArtifact.getId() ) );