You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by br...@apache.org on 2007/09/12 11:33:55 UTC
svn commit: r574859 [4/5] - in /maven/archiva/trunk: ./
archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/
archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/functors/
archiva-b...
Modified: maven/archiva/trunk/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java?rev=574859&r1=574858&r2=574859&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java (original)
+++ maven/archiva/trunk/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java Wed Sep 12 02:33:41 2007
@@ -22,7 +22,7 @@
import org.apache.commons.collections.CollectionUtils;
import org.apache.maven.archiva.common.ArchivaException;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
-import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
import org.apache.maven.archiva.scheduled.tasks.ArchivaTask;
import org.apache.maven.archiva.scheduled.tasks.DatabaseTask;
import org.apache.maven.archiva.scheduled.tasks.RepositoryTask;
@@ -48,7 +48,7 @@
import java.util.List;
/**
- * Default implementation of a scheduling component for archiva..
+ * Default implementation of a scheduling component for archiva.
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
* @author <a href="mailto:jmcconnell@apache.org">Jesse McConnell</a>
@@ -97,13 +97,13 @@
{
try
{
- List repositories = archivaConfiguration.getConfiguration().getRepositories();
+ List repositories = archivaConfiguration.getConfiguration().getManagedRepositories();
for ( Iterator i = repositories.iterator(); i.hasNext(); )
{
- RepositoryConfiguration repoConfig = (RepositoryConfiguration) i.next();
+ ManagedRepositoryConfiguration repoConfig = (ManagedRepositoryConfiguration) i.next();
- if ( repoConfig.isManaged() && repoConfig.isIndexed() )
+ if ( repoConfig.isIndexed() )
{
scheduleRepositoryJobs( repoConfig );
}
@@ -117,7 +117,7 @@
}
}
- private void scheduleRepositoryJobs( RepositoryConfiguration repoConfig )
+ private void scheduleRepositoryJobs( ManagedRepositoryConfiguration repoConfig )
throws SchedulerException
{
if ( repoConfig.getRefreshCronExpression() == null )
@@ -132,15 +132,14 @@
CronExpressionValidator cronValidator = new CronExpressionValidator();
if ( !cronValidator.validate( cronString ) )
{
- getLogger().warn(
- "Cron expression [" + cronString + "] for repository [" + repoConfig.getId()
- + "] is invalid. Defaulting to hourly." );
+ getLogger().warn( "Cron expression [" + cronString + "] for repository [" + repoConfig.getId() +
+ "] is invalid. Defaulting to hourly." );
cronString = CRON_HOURLY;
}
// setup the unprocessed artifact job
- JobDetail repositoryJob = new JobDetail( REPOSITORY_JOB + ":" + repoConfig.getId(), REPOSITORY_SCAN_GROUP,
- RepositoryTaskJob.class );
+ JobDetail repositoryJob =
+ new JobDetail( REPOSITORY_JOB + ":" + repoConfig.getId(), REPOSITORY_SCAN_GROUP, RepositoryTaskJob.class );
JobDataMap dataMap = new JobDataMap();
dataMap.put( RepositoryTaskJob.TASK_QUEUE, repositoryScanningQueue );
@@ -150,16 +149,16 @@
try
{
- CronTrigger trigger = new CronTrigger( REPOSITORY_JOB_TRIGGER + ":" + repoConfig.getId(),
- REPOSITORY_SCAN_GROUP, cronString );
+ CronTrigger trigger =
+ new CronTrigger( REPOSITORY_JOB_TRIGGER + ":" + repoConfig.getId(), REPOSITORY_SCAN_GROUP, cronString );
scheduler.scheduleJob( repositoryJob, trigger );
}
catch ( ParseException e )
{
getLogger().error(
- "ParseException in repository scanning cron expression, disabling repository scanning for '"
- + repoConfig.getId() + "': " + e.getMessage() );
+ "ParseException in repository scanning cron expression, disabling repository scanning for '" +
+ repoConfig.getId() + "': " + e.getMessage() );
}
}
@@ -180,8 +179,7 @@
if ( !cronValidator.validate( cronString ) )
{
getLogger().warn(
- "Cron expression [" + cronString
- + "] for database update is invalid. Defaulting to hourly." );
+ "Cron expression [" + cronString + "] for database update is invalid. Defaulting to hourly." );
cronString = CRON_HOURLY;
}
@@ -194,8 +192,7 @@
catch ( ParseException e )
{
getLogger().error(
- "ParseException in database scanning cron expression, disabling database scanning: "
- + e.getMessage() );
+ "ParseException in database scanning cron expression, disabling database scanning: " + e.getMessage() );
}
}
@@ -219,7 +216,7 @@
}
/**
- *
+ *
*/
public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
{
@@ -245,11 +242,11 @@
// currently we have to reschedule all repo jobs because we don't know where the changed one came from
if ( "refreshCronExpression".equals( propertyName ) )
{
- List repositories = archivaConfiguration.getConfiguration().getRepositories();
+ List repositories = archivaConfiguration.getConfiguration().getManagedRepositories();
for ( Iterator i = repositories.iterator(); i.hasNext(); )
{
- RepositoryConfiguration repoConfig = (RepositoryConfiguration) i.next();
+ ManagedRepositoryConfiguration repoConfig = (ManagedRepositoryConfiguration) i.next();
if ( repoConfig.getRefreshCronExpression() != null )
{
@@ -268,27 +265,6 @@
}
}
- public void scheduleAllRepositoryTasks()
- throws TaskExecutionException
- {
- try
- {
- List repositories = archivaConfiguration.getConfiguration().getRepositories();
-
- for ( Iterator i = repositories.iterator(); i.hasNext(); )
- {
- RepositoryConfiguration repoConfig = (RepositoryConfiguration) i.next();
-
- scheduleRepositoryJobs( repoConfig );
- }
-
- }
- catch ( SchedulerException e )
- {
- throw new TaskExecutionException( "Unable to schedule repository jobs: " + e.getMessage(), e );
- }
- }
-
public void scheduleDatabaseTasks()
throws TaskExecutionException
{
@@ -300,22 +276,6 @@
{
throw new TaskExecutionException( "Unable to schedule repository jobs: " + e.getMessage(), e );
- }
- }
-
- public void scheduleRepositoryTask( String repositoryId )
- throws TaskExecutionException
- {
- try
- {
- RepositoryConfiguration repoConfig = archivaConfiguration.getConfiguration()
- .findRepositoryById( repositoryId );
-
- scheduleRepositoryJobs( repoConfig );
- }
- catch ( SchedulerException e )
- {
- throw new TaskExecutionException( "Unable to schedule repository jobs: " + e.getMessage(), e );
}
}
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/pom.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/pom.xml?rev=574859&r1=574858&r2=574859&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/pom.xml (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/pom.xml Wed Sep 12 02:33:41 2007
@@ -218,6 +218,30 @@
<version>1.6.2</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.redback</groupId>
+ <artifactId>redback-keys-memory</artifactId>
+ <version>${redback.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.redback</groupId>
+ <artifactId>redback-rbac-memory</artifactId>
+ <version>${redback.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus.redback</groupId>
+ <artifactId>redback-users-memory</artifactId>
+ <version>${redback.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <!-- Test Deps -->
+ <dependency>
+ <groupId>easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
<plugins>
@@ -374,18 +398,6 @@
<instantiation-strategy>per-lookup</instantiation-strategy>
</roleDefault>
</roleDefaults>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>cobertura-maven-plugin</artifactId>
- <!-- TODO! add unit tests -->
- <configuration>
- <instrumentation>
- <excludes>
- <exclude>**/**</exclude>
- </excludes>
- </instrumentation>
</configuration>
</plugin>
<plugin>
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ConfigureProxyConnectorAction.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ConfigureProxyConnectorAction.java?rev=574859&r1=574858&r2=574859&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ConfigureProxyConnectorAction.java (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ConfigureProxyConnectorAction.java Wed Sep 12 02:33:41 2007
@@ -20,19 +20,14 @@
*/
import com.opensymphony.xwork.Preparable;
-import org.apache.commons.collections.Closure;
import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.functors.IfClosure;
import org.apache.commons.collections.functors.NotPredicate;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.Configuration;
import org.apache.maven.archiva.configuration.IndeterminateConfigurationException;
-import org.apache.maven.archiva.configuration.NetworkProxyConfiguration;
import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
import org.apache.maven.archiva.configuration.functors.ProxyConnectorSelectionPredicate;
-import org.apache.maven.archiva.configuration.functors.RemoteRepositoryPredicate;
-import org.apache.maven.archiva.configuration.functors.RepositoryIdListClosure;
import org.apache.maven.archiva.policies.DownloadPolicy;
import org.apache.maven.archiva.security.ArchivaRoleConstants;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
@@ -106,7 +101,7 @@
/**
* The list of local repository ids.
*/
- private List localRepoIdList = new ArrayList();
+ private List managedRepoIdList = new ArrayList();
/**
* The list of remote repository ids.
@@ -301,9 +296,9 @@
return connector;
}
- public List getLocalRepoIdList()
+ public List getManagedRepoIdList()
{
- return localRepoIdList;
+ return managedRepoIdList;
}
public String getMode()
@@ -396,35 +391,13 @@
Configuration config = archivaConfiguration.getConfiguration();
// Gather Network Proxy Ids.
-
this.proxyIdOptions = new ArrayList();
this.proxyIdOptions.add( DIRECT_CONNECTION );
-
- Closure addProxyIds = new Closure()
- {
- public void execute( Object input )
- {
- if ( input instanceof NetworkProxyConfiguration )
- {
- NetworkProxyConfiguration netproxy = (NetworkProxyConfiguration) input;
- proxyIdOptions.add( netproxy.getId() );
- }
- }
- };
-
- CollectionUtils.forAllDo( config.getNetworkProxies(), addProxyIds );
+ this.proxyIdOptions.addAll( config.getNetworkProxiesAsMap().keySet() );
// Gather Local & Remote Repo Ids.
-
- RepositoryIdListClosure remoteRepoIdList = new RepositoryIdListClosure( new ArrayList() );
- RepositoryIdListClosure localRepoIdList = new RepositoryIdListClosure( new ArrayList() );
- Closure repoIfClosure =
- IfClosure.getInstance( RemoteRepositoryPredicate.getInstance(), remoteRepoIdList, localRepoIdList );
-
- CollectionUtils.forAllDo( config.getRepositories(), repoIfClosure );
-
- this.remoteRepoIdList = remoteRepoIdList.getList();
- this.localRepoIdList = localRepoIdList.getList();
+ this.remoteRepoIdList = new ArrayList( config.getRemoteRepositoriesAsMap().keySet() );
+ this.managedRepoIdList = new ArrayList( config.getManagedRepositoriesAsMap().keySet() );
}
public String save()
@@ -472,9 +445,9 @@
this.connector = connector;
}
- public void setLocalRepoIdList( List localRepoIdList )
+ public void setManagedRepoIdList( List managedRepoIdList )
{
- this.localRepoIdList = localRepoIdList;
+ this.managedRepoIdList = managedRepoIdList;
}
public void setMode( String mode )
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ProxyConnectorsAction.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ProxyConnectorsAction.java?rev=574859&r1=574858&r2=574859&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ProxyConnectorsAction.java (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ProxyConnectorsAction.java Wed Sep 12 02:33:41 2007
@@ -20,16 +20,12 @@
*/
import com.opensymphony.xwork.Preparable;
-
import org.apache.commons.collections.Closure;
import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.Transformer;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.Configuration;
import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
-import org.apache.maven.archiva.configuration.RepositoryConfiguration;
import org.apache.maven.archiva.security.ArchivaRoleConstants;
-import org.apache.maven.archiva.web.action.admin.repositories.AdminRepositoryConfiguration;
import org.codehaus.plexus.redback.rbac.Resource;
import org.codehaus.plexus.redback.xwork.interceptor.SecureAction;
import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
@@ -42,11 +38,10 @@
import java.util.Map;
/**
- * ProxyConnectorsAction
+ * ProxyConnectorsAction
*
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
* @version $Id$
- *
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="proxyConnectorsAction"
*/
public class ProxyConnectorsAction
@@ -54,43 +49,24 @@
implements SecureAction, Preparable
{
/**
- * @plexus.requirement role-hint="adminrepoconfig"
- */
- private Transformer repoConfigToAdmin;
-
- /**
* @plexus.requirement
*/
private ArchivaConfiguration archivaConfiguration;
- private Map /*<String,AdminRepositoryConfiguration>*/repoMap;
+ private Map repoMap;
/**
* Map of Proxy Connectors.
*/
- private Map /*<String,AdminProxyConnector>*/proxyConnectorMap;
+ private Map proxyConnectorMap;
public void prepare()
- throws Exception
{
Configuration config = archivaConfiguration.getConfiguration();
repoMap = new HashMap();
-
- Closure addToRepoMap = new Closure()
- {
- public void execute( Object input )
- {
- if ( input instanceof RepositoryConfiguration )
- {
- AdminRepositoryConfiguration arepo = (AdminRepositoryConfiguration) repoConfigToAdmin
- .transform( input );
- repoMap.put( arepo.getId(), arepo );
- }
- }
- };
-
- CollectionUtils.forAllDo( config.getRepositories(), addToRepoMap );
+ repoMap.putAll( config.getRemoteRepositoriesAsMap() );
+ repoMap.putAll( config.getManagedRepositoriesAsMap() );
proxyConnectorMap = new HashMap();
@@ -109,7 +85,7 @@
connectors = new ArrayList();
proxyConnectorMap.put( key, connectors );
}
-
+
connectors.add( proxyConfig );
}
}
@@ -134,18 +110,8 @@
return repoMap;
}
- public void setRepoMap( Map repoMap )
- {
- this.repoMap = repoMap;
- }
-
public Map getProxyConnectorMap()
{
return proxyConnectorMap;
- }
-
- public void setProxyConnectorMap( Map proxyConnectorMap )
- {
- this.proxyConnectorMap = proxyConnectorMap;
}
}
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/ConfigureRepositoryAction.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/ConfigureRepositoryAction.java?rev=574859&r1=574858&r2=574859&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/ConfigureRepositoryAction.java (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/ConfigureRepositoryAction.java Wed Sep 12 02:33:41 2007
@@ -19,30 +19,16 @@
* under the License.
*/
-import com.opensymphony.xwork.ActionContext;
import com.opensymphony.xwork.Preparable;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
-import org.apache.maven.archiva.common.utils.PathUtil;
-import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.Configuration;
-import org.apache.maven.archiva.configuration.IndeterminateConfigurationException;
import org.apache.maven.archiva.configuration.InvalidConfigurationException;
-import org.apache.maven.archiva.configuration.RepositoryConfiguration;
-import org.apache.maven.archiva.security.ArchivaRoleConstants;
-import org.codehaus.plexus.redback.authorization.AuthorizationException;
-import org.codehaus.plexus.redback.authorization.AuthorizationResult;
-import org.codehaus.plexus.redback.rbac.Resource;
+import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
import org.codehaus.plexus.redback.role.RoleManager;
import org.codehaus.plexus.redback.role.RoleManagerException;
-import org.codehaus.plexus.redback.system.SecuritySession;
-import org.codehaus.plexus.redback.system.SecuritySystem;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureAction;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
-import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
import org.codehaus.plexus.registry.RegistryException;
import org.codehaus.plexus.scheduler.CronExpressionValidator;
-import org.codehaus.plexus.xwork.action.PlexusActionSupport;
import java.io.File;
import java.io.IOException;
@@ -53,36 +39,21 @@
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="configureRepositoryAction"
*/
public class ConfigureRepositoryAction
- extends PlexusActionSupport
- implements Preparable, SecureAction
+ extends AbstractConfigureRepositoryAction
+ implements Preparable
{
/**
- * @plexus.requirement role-hint="default"
- */
- private RoleManager roleManager;
-
- /**
- * @plexus.requirement
- */
- private SecuritySystem securitySystem;
-
- /**
- * @plexus.requirement
+ * The model for this action.
*/
- private ArchivaConfiguration archivaConfiguration;
-
- private String repoid;
-
- private String mode;
+ private ManagedRepositoryConfiguration repository;
/**
- * The model for this action.
+ * @plexus.requirement role-hint="default"
*/
- private AdminRepositoryConfiguration repository;
+ protected RoleManager roleManager;
public String add()
{
- getLogger().info( ".add()" );
this.mode = "add";
this.repository.setReleases( true );
@@ -91,35 +62,12 @@
return INPUT;
}
- public String confirm()
- {
- getLogger().info( ".confirm()" );
-
- if ( operationAllowed( ArchivaRoleConstants.OPERATION_DELETE_REPOSITORY, getRepoid() ) )
- {
- addActionError(
- "You do not have the appropriate permissions to delete the " + getRepoid() + " repository." );
- return ERROR;
- }
-
- return INPUT;
- }
-
public String delete()
{
- getLogger().info( ".delete()" );
-
- if ( operationAllowed( ArchivaRoleConstants.OPERATION_DELETE_REPOSITORY, getRepoid() ) )
- {
- addActionError(
- "You do not have the appropriate permissions to delete the " + getRepoid() + " repository." );
- return ERROR;
- }
-
String result = SUCCESS;
if ( StringUtils.equals( mode, "delete-entry" ) || StringUtils.equals( mode, "delete-contents" ) )
{
- AdminRepositoryConfiguration existingRepository = getRepository();
+ ManagedRepositoryConfiguration existingRepository = repository;
if ( existingRepository == null )
{
addActionError( "A repository with that id does not exist" );
@@ -130,8 +78,9 @@
try
{
- removeRepository( getRepoid() );
- result = saveConfiguration();
+ Configuration configuration = archivaConfiguration.getConfiguration();
+ removeRepository( repoid, configuration );
+ result = saveConfiguration( configuration );
if ( result.equals( SUCCESS ) )
{
@@ -167,93 +116,52 @@
return result;
}
- public String edit()
- {
- getLogger().info( ".edit()" );
- this.mode = "edit";
-
- if ( operationAllowed( ArchivaRoleConstants.OPERATION_EDIT_REPOSITORY, getRepoid() ) )
- {
- addActionError( "You do not have the appropriate permissions to edit the " + getRepoid() + " repository." );
- return ERROR;
- }
-
- return INPUT;
- }
-
- public String getMode()
- {
- return this.mode;
- }
-
- public String getRepoid()
- {
- return repoid;
- }
-
- public AdminRepositoryConfiguration getRepository()
+ public ManagedRepositoryConfiguration getRepository()
{
return repository;
}
- public SecureActionBundle getSecureActionBundle()
- throws SecureActionException
- {
- SecureActionBundle bundle = new SecureActionBundle();
-
- bundle.setRequiresAuthentication( true );
- bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
-
- return bundle;
- }
-
public void prepare()
- throws Exception
{
- String id = getRepoid();
+ String id = repoid;
if ( id == null )
{
- this.repository = new AdminRepositoryConfiguration();
+ this.repository = new ManagedRepositoryConfiguration();
this.repository.setReleases( false );
this.repository.setIndexed( false );
}
-
- RepositoryConfiguration repoconfig = archivaConfiguration.getConfiguration().findRepositoryById( id );
- if ( repoconfig != null )
+ else
{
- this.repository = new AdminRepositoryConfiguration( repoconfig );
+ repository = archivaConfiguration.getConfiguration().findManagedRepositoryById( id );
}
}
public String save()
{
- String mode = getMode();
- String repoId = getRepository().getId();
- boolean containsError = false;
-
- getLogger().info( ".save(" + mode + ":" + repoId + ")" );
+ String repoId = repository.getId();
- containsError = validateFields( mode );
+ Configuration configuration = archivaConfiguration.getConfiguration();
+ boolean containsError = validateFields( configuration );
if ( containsError && StringUtils.equalsIgnoreCase( "add", mode ) )
{
return INPUT;
}
- else if ( containsError && StringUtils.equalsIgnoreCase( "edit", mode ) )
+ else if ( containsError && StringUtils.equalsIgnoreCase( "edit", this.mode ) )
{
return ERROR;
}
- if ( StringUtils.equalsIgnoreCase( "edit", mode ) )
+ if ( StringUtils.equalsIgnoreCase( "edit", this.mode ) )
{
- removeRepository( repoId );
+ removeRepository( repoId, configuration );
}
String result;
try
{
- addRepository( getRepository() );
- result = saveConfiguration();
+ addRepository( repository, configuration );
+ result = saveConfiguration( configuration );
}
catch ( IOException e )
{
@@ -279,12 +187,11 @@
return result;
}
- private boolean validateFields( String mode )
+ private boolean validateFields( Configuration config )
{
boolean containsError = false;
CronExpressionValidator validator = new CronExpressionValidator();
- Configuration config = archivaConfiguration.getConfiguration();
- String repoId = getRepository().getId();
+ String repoId = repository.getId();
if ( StringUtils.isBlank( repoId ) )
{
@@ -292,17 +199,18 @@
containsError = true;
}
//if edit mode, do not validate existence of repoId
- else if ( config.findRepositoryById( repoId ) != null && !StringUtils.equalsIgnoreCase( mode, "edit" ) )
+ else if ( ( config.getManagedRepositoriesAsMap().containsKey( repoId ) ||
+ config.getRemoteRepositoriesAsMap().containsKey( repoId ) ) &&
+ !StringUtils.equalsIgnoreCase( mode, "edit" ) )
{
addFieldError( "repository.id",
"Unable to add new repository with id [" + repoId + "], that id already exists." );
containsError = true;
}
- if ( StringUtils.isBlank( repository.getUrl() ) )
+ if ( StringUtils.isBlank( repository.getLocation() ) )
{
-
- addFieldError( "repository.url", "You must enter a directory or url." );
+ addFieldError( "repository.location", "You must enter a directory." );
containsError = true;
}
if ( StringUtils.isBlank( repository.getName() ) )
@@ -319,120 +227,53 @@
return containsError;
}
- public void setMode( String mode )
- {
- this.mode = mode;
- }
-
- public void setRepoid( String repoid )
- {
- this.repoid = repoid;
- }
-
- public void setRepository( AdminRepositoryConfiguration repository )
- {
- this.repository = repository;
- }
-
- private void addRepository( AdminRepositoryConfiguration repository )
+ private void addRepository( ManagedRepositoryConfiguration repository, Configuration configuration )
throws IOException, RoleManagerException
{
- getLogger().info( ".addRepository(" + repository + ")" );
-
- // Fix the URL entry (could possibly be a filesystem path)
- String rawUrlEntry = repository.getUrl();
- if ( !rawUrlEntry.startsWith( "http://" ) )
+ // Normalize the path
+ File file = new File( repository.getLocation() );
+ repository.setLocation( file.getCanonicalPath() );
+ if ( !file.exists() )
{
- repository.setUrl( PathUtil.toUrl( rawUrlEntry ) );
+ file.mkdirs();
+ // TODO: error handling when this fails, or is not a directory!
}
- if ( repository.isManaged() )
- {
- // Normalize the path
- File file = new File( repository.getDirectory() );
- repository.setDirectory( file.getCanonicalPath() );
- if ( !file.exists() )
- {
- file.mkdirs();
- // TODO: error handling when this fails, or is not a directory!
- }
- }
-
- archivaConfiguration.getConfiguration().addRepository( repository );
+ configuration.addManagedRepository( repository );
// TODO: double check these are configured on start up
+ // TODO: belongs in the business logic
roleManager.createTemplatedRole( "archiva-repository-manager", repository.getId() );
roleManager.createTemplatedRole( "archiva-repository-observer", repository.getId() );
-
}
- private boolean operationAllowed( String permission, String repoid )
- {
- ActionContext context = ActionContext.getContext();
- SecuritySession securitySession = (SecuritySession) context.get( SecuritySession.ROLE );
-
- AuthorizationResult authzResult;
- try
- {
- authzResult = securitySystem.authorize( securitySession, permission, repoid );
-
- return authzResult.isAuthorized();
- }
- catch ( AuthorizationException e )
- {
- getLogger().info( "Unable to authorize permission: " + permission + " against repo: " + repoid +
- " due to: " + e.getMessage() );
- return false;
- }
- }
-
- private void removeContents( AdminRepositoryConfiguration existingRepository )
+ private void removeContents( ManagedRepositoryConfiguration existingRepository )
throws IOException
{
- if ( existingRepository.isManaged() )
- {
- getLogger().info( "Removing " + existingRepository.getDirectory() );
- FileUtils.deleteDirectory( new File( existingRepository.getDirectory() ) );
- }
+ FileUtils.deleteDirectory( new File( existingRepository.getLocation() ) );
}
- private void removeRepository( String repoId )
+ private void removeRepository( String repoId, Configuration configuration )
{
- getLogger().info( ".removeRepository()" );
-
- RepositoryConfiguration toremove = archivaConfiguration.getConfiguration().findRepositoryById( repoId );
+ ManagedRepositoryConfiguration toremove = configuration.findManagedRepositoryById( repoId );
if ( toremove != null )
{
- archivaConfiguration.getConfiguration().removeRepository( toremove );
+ configuration.removeManagedRepository( toremove );
}
}
- private void removeRepositoryRoles( RepositoryConfiguration existingRepository )
+ private void removeRepositoryRoles( ManagedRepositoryConfiguration existingRepository )
throws RoleManagerException
{
roleManager.removeTemplatedRole( "archiva-repository-manager", existingRepository.getId() );
roleManager.removeTemplatedRole( "archiva-repository-observer", existingRepository.getId() );
- getLogger().info( "removed user roles associated with repository " + existingRepository.getId() );
+ getLogger().debug( "removed user roles associated with repository " + existingRepository.getId() );
}
- private String saveConfiguration()
- throws IOException, InvalidConfigurationException, RegistryException
+ public void setRoleManager( RoleManager roleManager )
{
- getLogger().info( ".saveConfiguration()" );
-
- try
- {
- archivaConfiguration.save( archivaConfiguration.getConfiguration() );
- addActionMessage( "Successfully saved configuration" );
- }
- catch ( IndeterminateConfigurationException e )
- {
- addActionError( e.getMessage() );
- return INPUT;
- }
-
- return SUCCESS;
+ this.roleManager = roleManager;
}
}
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesAction.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesAction.java?rev=574859&r1=574858&r2=574859&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesAction.java (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesAction.java Wed Sep 12 02:33:41 2007
@@ -21,15 +21,14 @@
import com.opensymphony.webwork.interceptor.ServletRequestAware;
import com.opensymphony.xwork.Preparable;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.Transformer;
-import org.apache.commons.collections.list.TransformedList;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.Configuration;
-import org.apache.maven.archiva.configuration.functors.LocalRepositoryPredicate;
-import org.apache.maven.archiva.configuration.functors.RemoteRepositoryPredicate;
+import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
import org.apache.maven.archiva.configuration.functors.RepositoryConfigurationComparator;
+import org.apache.maven.archiva.database.ArchivaDAO;
+import org.apache.maven.archiva.database.constraints.MostRecentRepositoryScanStatistics;
+import org.apache.maven.archiva.model.RepositoryContentStatistics;
import org.apache.maven.archiva.security.ArchivaRoleConstants;
import org.apache.maven.archiva.web.util.ContextUtils;
import org.codehaus.plexus.redback.rbac.Resource;
@@ -38,18 +37,18 @@
import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
import org.codehaus.plexus.xwork.action.PlexusActionSupport;
+import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
/**
- * Shows the Repositories Tab for the administrator.
+ * Shows the Repositories Tab for the administrator.
*
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
* @version $Id$
- *
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="repositoriesAction"
*/
public class RepositoriesAction
@@ -57,23 +56,29 @@
implements SecureAction, ServletRequestAware, Preparable
{
/**
- * @plexus.requirement role-hint="adminrepoconfig"
- */
- private Transformer repoConfigToAdmin;
-
- /**
* @plexus.requirement
*/
private ArchivaConfiguration archivaConfiguration;
- private List managedRepositories;
+ private List<ManagedRepositoryConfiguration> managedRepositories;
+
+ private List<RemoteRepositoryConfiguration> remoteRepositories;
+
+ private Map<String, RepositoryContentStatistics> repositoryStatistics;
- private List remoteRepositories;
+ /**
+ * @plexus.requirement role-hint="jdo"
+ */
+ private ArchivaDAO dao;
+ /**
+ * Used to construct the repository WebDAV URL in the repository action.
+ */
private String baseUrl;
public void setServletRequest( HttpServletRequest request )
{
+ // TODO: is there a better way to do this?
this.baseUrl = ContextUtils.getBaseURL( request, "repository" );
}
@@ -89,28 +94,40 @@
}
public void prepare()
- throws Exception
{
Configuration config = archivaConfiguration.getConfiguration();
- remoteRepositories = TransformedList.decorate( new ArrayList(), repoConfigToAdmin );
- managedRepositories = TransformedList.decorate( new ArrayList(), repoConfigToAdmin );
-
- remoteRepositories.addAll( CollectionUtils.select( config.getRepositories(), RemoteRepositoryPredicate.getInstance() ) );
- managedRepositories.addAll( CollectionUtils.select( config.getRepositories(), LocalRepositoryPredicate.getInstance() ) );
+ remoteRepositories = new ArrayList<RemoteRepositoryConfiguration>( config.getRemoteRepositories() );
+ managedRepositories = new ArrayList<ManagedRepositoryConfiguration>( config.getManagedRepositories() );
Collections.sort( managedRepositories, new RepositoryConfigurationComparator() );
Collections.sort( remoteRepositories, new RepositoryConfigurationComparator() );
+
+ repositoryStatistics = new HashMap<String, RepositoryContentStatistics>();
+ for ( ManagedRepositoryConfiguration repo : managedRepositories )
+ {
+ List<RepositoryContentStatistics> results =
+ dao.query( new MostRecentRepositoryScanStatistics( repo.getId() ) );
+ if ( !results.isEmpty() )
+ {
+ repositoryStatistics.put( repo.getId(), results.get( 0 ) );
+ }
+ }
}
- public List getManagedRepositories()
+ public List<ManagedRepositoryConfiguration> getManagedRepositories()
{
return managedRepositories;
}
- public List getRemoteRepositories()
+ public List<RemoteRepositoryConfiguration> getRemoteRepositories()
{
return remoteRepositories;
+ }
+
+ public Map<String, RepositoryContentStatistics> getRepositoryStatistics()
+ {
+ return repositoryStatistics;
}
public String getBaseUrl()
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/check/RoleExistanceEnvironmentCheck.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/check/RoleExistanceEnvironmentCheck.java?rev=574859&r1=574858&r2=574859&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/check/RoleExistanceEnvironmentCheck.java (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/check/RoleExistanceEnvironmentCheck.java Wed Sep 12 02:33:41 2007
@@ -19,17 +19,15 @@
* under the License.
*/
-import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
import org.apache.maven.archiva.database.ArchivaDAO;
-import org.apache.maven.archiva.database.ArchivaDatabaseException;
-import org.apache.maven.archiva.database.ObjectNotFoundException;
-import org.apache.maven.archiva.model.ArchivaRepository;
import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.redback.role.RoleManager;
import org.codehaus.plexus.redback.role.RoleManagerException;
import org.codehaus.plexus.redback.system.check.EnvironmentCheck;
-import java.util.Iterator;
import java.util.List;
/**
@@ -58,6 +56,11 @@
*/
private RoleManager roleManager;
+ /**
+ * @plexus.requirement
+ */
+ private ArchivaConfiguration configuration;
+
private boolean checked;
public void validateEnvironment( List list )
@@ -66,24 +69,17 @@
{
try
{
- List repos = dao.getRepositoryDAO().getRepositories();
-
- if ( hasManagedRepository( repos ) )
+ Configuration config = configuration.getConfiguration();
+ for ( ManagedRepositoryConfiguration repository : config.getManagedRepositoriesAsMap().values() )
{
- Iterator it = repos.iterator();
- while ( it.hasNext() )
+ if ( !roleManager.templatedRoleExists( "archiva-repository-manager", repository.getId() ) )
{
- ArchivaRepository repository = (ArchivaRepository) it.next();
+ roleManager.createTemplatedRole( "archiva-repository-manager", repository.getId() );
+ }
- if ( !roleManager.templatedRoleExists( "archiva-repository-manager", repository.getId() ) )
- {
- roleManager.createTemplatedRole( "archiva-repository-manager", repository.getId() );
- }
-
- if ( !roleManager.templatedRoleExists( "archiva-repository-observer", repository.getId() ) )
- {
- roleManager.createTemplatedRole( "archiva-repository-observer", repository.getId() );
- }
+ if ( !roleManager.templatedRoleExists( "archiva-repository-observer", repository.getId() ) )
+ {
+ roleManager.createTemplatedRole( "archiva-repository-observer", repository.getId() );
}
}
}
@@ -92,33 +88,9 @@
list.add( this.getClass().getName() + "error initializing roles: " + rpe.getMessage() );
getLogger().info( "error initializing roles", rpe );
}
- catch ( ObjectNotFoundException e )
- {
- list.add( this.getClass().getName() + "error initializing roles (repository not found): " + e.getMessage() );
- getLogger().info( "error initializing roles", e );
- }
- catch ( ArchivaDatabaseException e )
- {
- list.add( this.getClass().getName() + "error initializing roles (database error): " + e.getMessage() );
- getLogger().info( "error initializing roles", e );
- }
checked = true;
}
}
- public boolean hasManagedRepository( List repos )
- {
- Iterator it = repos.iterator();
- while ( it.hasNext() )
- {
- ArchivaRepository repo = (ArchivaRepository) it.next();
- if ( repo.isManaged() )
- {
- return true;
- }
- }
-
- return false;
- }
}
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/interceptor/ConfigurationInterceptor.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/interceptor/ConfigurationInterceptor.java?rev=574859&r1=574858&r2=574859&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/interceptor/ConfigurationInterceptor.java (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/interceptor/ConfigurationInterceptor.java Wed Sep 12 02:33:41 2007
@@ -22,16 +22,10 @@
import com.opensymphony.webwork.ServletActionContext;
import com.opensymphony.xwork.ActionInvocation;
import com.opensymphony.xwork.interceptor.Interceptor;
-
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
-import org.apache.maven.archiva.database.ArchivaDAO;
-import org.apache.maven.archiva.model.ArchivaRepository;
import org.codehaus.plexus.logging.AbstractLogEnabled;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.servlet.http.HttpSession;
+import javax.servlet.ServletContext;
/**
* An interceptor that makes the configuration bits available, both to the application and the webapp
@@ -45,41 +39,18 @@
implements Interceptor
{
/**
- * @plexus.requirement role-hint="jdo"
- */
- private ArchivaDAO dao;
-
- /**
* @plexus.requirement role-hint="default"
*/
private ArchivaConfiguration configuration;
-
- /**
- * @param actionInvocation
- * @return
- * @throws Exception
- */
+
public String intercept( ActionInvocation actionInvocation )
throws Exception
{
// populate webapp configuration bits into the session
- HttpSession session = ServletActionContext.getRequest().getSession();
- if ( session != null )
- {
- session.setAttribute( "uiOptions", configuration.getConfiguration().getWebapp().getUi() );
- }
-
- List repos = dao.getRepositoryDAO().getRepositories();
-
- if ( !hasManagedRepository( repos ) )
- {
- getLogger().info( "No repositories exist - forwarding to repository configuration page" );
- return "config-repository-needed";
- }
- else
- {
- return actionInvocation.invoke();
- }
+ ServletContext applicationScope = ServletActionContext.getServletContext();
+ applicationScope.setAttribute( "uiOptions", configuration.getConfiguration().getWebapp().getUi() );
+
+ return actionInvocation.invoke();
}
public void destroy()
@@ -92,28 +63,4 @@
// This space left intentionally blank
}
- public boolean hasManagedRepository( List repos )
- {
- if ( repos == null )
- {
- return false;
- }
-
- if ( repos.isEmpty() )
- {
- return false;
- }
-
- Iterator it = repos.iterator();
- while ( it.hasNext() )
- {
- ArchivaRepository repo = (ArchivaRepository) it.next();
- if ( repo.isManaged() )
- {
- return true;
- }
- }
-
- return false;
- }
}
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java?rev=574859&r1=574858&r2=574859&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java Wed Sep 12 02:33:41 2007
@@ -21,7 +21,7 @@
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.Configuration;
-import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
import org.apache.maven.archiva.model.ArchivaRepository;
import org.apache.maven.archiva.model.ArtifactReference;
import org.apache.maven.archiva.model.ProjectReference;
@@ -85,7 +85,7 @@
private BidirectionalRepositoryLayout layout;
- private RepositoryConfiguration repositoryConfiguration;
+ private ManagedRepositoryConfiguration repositoryConfiguration;
private ArchivaRepository managedRepository;
@@ -116,7 +116,7 @@
Configuration config = archivaConfiguration.getConfiguration();
- repositoryConfiguration = config.findRepositoryById( getPrefix() );
+ repositoryConfiguration = config.findManagedRepositoryById( getPrefix() );
managedRepository = ArchivaConfigurationAdaptor.toArchivaRepository( repositoryConfiguration );
@@ -200,7 +200,6 @@
{
connectors.fetchFromProxies( managedRepository, project );
request.getRequest().setPathInfo( metadataTools.toPath( project ) );
- return;
}
}
catch ( RepositoryMetadataException e )
@@ -247,7 +246,7 @@
}
}
- public RepositoryConfiguration getRepositoryConfiguration()
+ public ManagedRepositoryConfiguration getRepositoryConfiguration()
{
return repositoryConfiguration;
}
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/RepositoryServlet.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/RepositoryServlet.java?rev=574859&r1=574858&r2=574859&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/RepositoryServlet.java (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/RepositoryServlet.java Wed Sep 12 02:33:41 2007
@@ -19,15 +19,9 @@
* under the License.
*/
-import org.apache.commons.collections.Closure;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.functors.IfClosure;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.ConfigurationNames;
-import org.apache.maven.archiva.configuration.RepositoryConfiguration;
-import org.apache.maven.archiva.configuration.functors.LocalRepositoryPredicate;
-import org.apache.maven.archiva.configuration.functors.RepositoryConfigurationToMapClosure;
-import org.apache.maven.archiva.model.RepositoryURL;
+import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
import org.apache.maven.archiva.security.ArchivaRoleConstants;
import org.codehaus.plexus.redback.authentication.AuthenticationException;
import org.codehaus.plexus.redback.authentication.AuthenticationResult;
@@ -46,17 +40,13 @@
import org.codehaus.plexus.webdav.servlet.multiplexed.MultiplexedWebDavServlet;
import org.codehaus.plexus.webdav.util.WebdavMethodUtil;
-import java.io.File;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
/**
* RepositoryServlet
@@ -68,29 +58,17 @@
extends MultiplexedWebDavServlet
implements RegistryListener
{
- /**
- * @plexus.requirement
- */
private SecuritySystem securitySystem;
- /**
- * @plexus.requirement role-hint="basic"
- */
private HttpAuthenticator httpAuth;
- /**
- * @plexus.requirement
- */
private AuditLog audit;
- /**
- * @plexus.requirement
- */
private ArchivaConfiguration configuration;
- private Map repositoryMap = new HashMap();
+ private Map<String, ManagedRepositoryConfiguration> repositoryMap;
- public void initComponents()
+ public synchronized void initComponents()
throws ServletException
{
super.initComponents();
@@ -102,32 +80,22 @@
configuration = (ArchivaConfiguration) lookup( ArchivaConfiguration.class.getName() );
configuration.addChangeListener( this );
- updateRepositoryMap();
+ repositoryMap = configuration.getConfiguration().getManagedRepositoriesAsMap();
}
- public void initServers( ServletConfig servletConfig )
+ public synchronized void initServers( ServletConfig servletConfig )
throws DavServerException
{
- List repositories = configuration.getConfiguration().getRepositories();
- Iterator itrepos = repositories.iterator();
- while ( itrepos.hasNext() )
+ for ( ManagedRepositoryConfiguration repo : repositoryMap.values() )
{
- RepositoryConfiguration repo = (RepositoryConfiguration) itrepos.next();
- if ( !repo.isManaged() )
- {
- // Skip non-managed.
- continue;
- }
-
- RepositoryURL url = new RepositoryURL( repo.getUrl() );
- File repoDir = new File( url.getPath() );
+ File repoDir = new File( repo.getLocation() );
if ( !repoDir.exists() )
{
if ( !repoDir.mkdirs() )
{
// Skip invalid directories.
- log( "Unable to create missing directory for " + url.getPath() );
+ log( "Unable to create missing directory for " + repo.getLocation() );
continue;
}
}
@@ -138,17 +106,18 @@
}
}
- public RepositoryConfiguration getRepository( DavServerRequest request )
+ public synchronized ManagedRepositoryConfiguration getRepository( String prefix )
{
- synchronized ( this.repositoryMap )
+ if ( repositoryMap == null )
{
- return (RepositoryConfiguration) repositoryMap.get( request.getPrefix() );
+ repositoryMap = configuration.getConfiguration().getManagedRepositoriesAsMap();
}
+ return repositoryMap.get( prefix );
}
- public String getRepositoryName( DavServerRequest request )
+ private String getRepositoryName( DavServerRequest request )
{
- RepositoryConfiguration repoConfig = getRepository( request );
+ ManagedRepositoryConfiguration repoConfig = getRepository( request.getPrefix() );
if ( repoConfig == null )
{
return "Unknown";
@@ -157,19 +126,6 @@
return repoConfig.getName();
}
- private void updateRepositoryMap()
- {
- RepositoryConfigurationToMapClosure repoMapClosure = new RepositoryConfigurationToMapClosure();
- Closure localRepoMap = IfClosure.getInstance( LocalRepositoryPredicate.getInstance(), repoMapClosure );
- CollectionUtils.forAllDo( configuration.getConfiguration().getRepositories(), localRepoMap );
-
- synchronized ( this.repositoryMap )
- {
- this.repositoryMap.clear();
- this.repositoryMap.putAll( repoMapClosure.getMap() );
- }
- }
-
public boolean isAuthenticated( DavServerRequest davRequest, HttpServletResponse response )
throws ServletException, IOException
{
@@ -180,7 +136,7 @@
{
AuthenticationResult result = httpAuth.getAuthenticationResult( request, response );
- if ( ( result != null ) && !result.isAuthenticated() )
+ if ( result != null && !result.isAuthenticated() )
{
// Must Authenticate.
httpAuth.challenge( request, response, "Repository " + getRepositoryName( davRequest ),
@@ -225,16 +181,16 @@
permission = ArchivaRoleConstants.OPERATION_REPOSITORY_UPLOAD;
}
- AuthorizationResult authzResult = securitySystem.authorize( securitySession, permission, davRequest
- .getPrefix() );
+ AuthorizationResult authzResult =
+ securitySystem.authorize( securitySession, permission, davRequest.getPrefix() );
if ( !authzResult.isAuthorized() )
{
if ( authzResult.getException() != null )
{
- log( "Authorization Denied [ip=" + request.getRemoteAddr() + ",isWriteRequest=" + isWriteRequest
- + ",permission=" + permission + ",repo=" + davRequest.getPrefix() + "] : "
- + authzResult.getException().getMessage() );
+ log( "Authorization Denied [ip=" + request.getRemoteAddr() + ",isWriteRequest=" + isWriteRequest +
+ ",permission=" + permission + ",repo=" + davRequest.getPrefix() + "] : " +
+ authzResult.getException().getMessage() );
}
// Issue HTTP Challenge.
@@ -256,29 +212,13 @@
// nothing to do
}
- public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
+ public synchronized void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
{
- if ( ConfigurationNames.isRepositories( propertyName ) )
+ if ( ConfigurationNames.isManagedRepositories( propertyName ) )
{
- // Attempt to reduce the number of times we refresh the repository map.
- if ( propertyName.endsWith( ".id" ) || propertyName.endsWith( ".url" ) )
+ if ( propertyName.endsWith( ".id" ) || propertyName.endsWith( ".location" ) )
{
- synchronized ( this.repositoryMap )
- {
- updateRepositoryMap();
-
- getDavManager().removeAllServers();
-
- try
- {
- initServers( getServletConfig() );
- }
- catch ( DavServerException e )
- {
- log( "Error restarting WebDAV server after configuration change - service disabled: "
- + e.getMessage(), e );
- }
- }
+ repositoryMap = null;
}
}
}
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/ConfigurationSynchronization.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/ConfigurationSynchronization.java?rev=574859&r1=574858&r2=574859&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/ConfigurationSynchronization.java (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/ConfigurationSynchronization.java Wed Sep 12 02:33:41 2007
@@ -19,9 +19,10 @@
* under the License.
*/
+import org.apache.maven.archiva.common.utils.PathUtil;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.ConfigurationNames;
-import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
import org.apache.maven.archiva.database.ArchivaDAO;
import org.apache.maven.archiva.database.ArchivaDatabaseException;
import org.apache.maven.archiva.database.ObjectNotFoundException;
@@ -39,14 +40,13 @@
import java.util.List;
/**
- * ConfigurationSynchronization
+ * ConfigurationSynchronization
*
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
* @version $Id$
- *
- * @plexus.component
- * role="org.apache.maven.archiva.web.startup.ConfigurationSynchronization"
- * role-hint="default"
+ * @plexus.component role="org.apache.maven.archiva.web.startup.ConfigurationSynchronization"
+ * role-hint="default"
+ * @todo consider whether we really need these in the database or not
*/
public class ConfigurationSynchronization
extends AbstractLogEnabled
@@ -69,9 +69,9 @@
public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
{
- if ( ConfigurationNames.isRepositories( propertyName ) )
+ if ( ConfigurationNames.isManagedRepositories( propertyName ) )
{
- synchConfiguration();
+ synchConfiguration( archivaConfiguration.getConfiguration().getManagedRepositories() );
}
}
@@ -80,13 +80,12 @@
/* do nothing */
}
- private void synchConfiguration()
+ private void synchConfiguration( List repos )
{
- List repos = archivaConfiguration.getConfiguration().getRepositories();
Iterator it = repos.iterator();
while ( it.hasNext() )
{
- RepositoryConfiguration repoConfig = (RepositoryConfiguration) it.next();
+ ManagedRepositoryConfiguration repoConfig = (ManagedRepositoryConfiguration) it.next();
try
{
try
@@ -95,7 +94,7 @@
// Found repository. Update it.
repository.getModel().setName( repoConfig.getName() );
- repository.getModel().setUrl( repoConfig.getUrl() );
+ repository.getModel().setUrl( PathUtil.toUrl( repoConfig.getLocation() ) );
repository.getModel().setLayoutName( repoConfig.getLayout() );
repository.getModel().setCreationSource( "configuration" );
repository.getModel().setReleasePolicy( repoConfig.isReleases() );
@@ -143,7 +142,7 @@
public void initialize()
throws InitializationException
{
- synchConfiguration();
+ synchConfiguration( archivaConfiguration.getConfiguration().getManagedRepositories() );
archivaConfiguration.addChangeListener( this );
}
}
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/CopyPasteSnippet.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/CopyPasteSnippet.java?rev=574859&r1=574858&r2=574859&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/CopyPasteSnippet.java (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/CopyPasteSnippet.java Wed Sep 12 02:33:41 2007
@@ -1,22 +1,39 @@
package org.apache.maven.archiva.web.tags;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
import org.apache.maven.archiva.web.util.ContextUtils;
import org.codehaus.plexus.logging.AbstractLogEnabled;
-import java.io.IOException;
-
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
+import java.io.IOException;
/**
- * CopyPasteSnippet
+ * CopyPasteSnippet
*
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
* @version $Id$
- *
* @plexus.component role="org.apache.maven.archiva.web.tags.CopyPasteSnippet"
*/
public class CopyPasteSnippet
@@ -32,9 +49,9 @@
buf.append( "Error generating snippet." );
getLogger().error( "Unable to generate snippet for null object." );
}
- else if ( o instanceof RepositoryConfiguration )
+ else if ( o instanceof ManagedRepositoryConfiguration )
{
- createSnippet( buf, (RepositoryConfiguration) o, pageContext );
+ createSnippet( buf, (ManagedRepositoryConfiguration) o, pageContext );
}
else
{
@@ -53,7 +70,7 @@
}
}
- private void createSnippet( StringBuffer snippet, RepositoryConfiguration repo, PageContext pageContext )
+ private void createSnippet( StringBuffer snippet, ManagedRepositoryConfiguration repo, PageContext pageContext )
{
snippet.append( "<project>\n" );
snippet.append( " ...\n" );
@@ -83,15 +100,8 @@
snippet.append( " <name>" ).append( repo.getName() ).append( "</name>\n" );
snippet.append( " <url>" );
- if ( repo.isManaged() )
- {
- snippet.append( ContextUtils.getBaseURL( pageContext, "repository" ) );
- snippet.append( "/" ).append( repo.getId() ).append( "/" );
- }
- else
- {
- snippet.append( repo.getUrl() );
- }
+ snippet.append( ContextUtils.getBaseURL( pageContext, "repository" ) );
+ snippet.append( "/" ).append( repo.getId() ).append( "/" );
snippet.append( "</url>\n" );
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DownloadArtifact.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DownloadArtifact.java?rev=574859&r1=574858&r2=574859&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DownloadArtifact.java (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/DownloadArtifact.java Wed Sep 12 02:33:41 2007
@@ -22,7 +22,6 @@
import com.opensymphony.webwork.WebWorkException;
import com.opensymphony.webwork.components.Component;
import com.opensymphony.xwork.util.OgnlValueStack;
-
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.database.ArchivaDAO;
@@ -37,24 +36,22 @@
import org.apache.maven.archiva.repository.layout.LayoutException;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.PageContext;
import java.io.IOException;
import java.io.Writer;
import java.text.DecimalFormat;
import java.util.Iterator;
import java.util.List;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.PageContext;
-
/**
- * DownloadArtifact
+ * DownloadArtifact
*
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
* @version $Id$
- *
- * @plexus.component role="com.opensymphony.webwork.components.Component" role-hint="download-artifact"
- * instantiation-strategy="per-lookup"
+ * @plexus.component role="com.opensymphony.webwork.components.Component" role-hint="download-artifact"
+ * instantiation-strategy="per-lookup"
*/
public class DownloadArtifact
extends Component
@@ -207,21 +204,21 @@
while ( it.hasNext() )
{
ArchivaArtifact artifact = (ArchivaArtifact) it.next();
- sb.append("\n<tr>");
-
+ sb.append( "\n<tr>" );
+
sb.append( "<td class=\"icon\">" );
appendImageLink( sb, prefix, layout, artifact );
sb.append( "</td>" );
-
+
sb.append( "<td class=\"type\">" );
appendLink( sb, prefix, layout, artifact );
sb.append( "</td>" );
-
+
sb.append( "<td class=\"size\">" );
appendFilesize( sb, artifact );
sb.append( "</td>" );
-
- sb.append("</tr>");
+
+ sb.append( "</tr>" );
}
sb.append( "</table>" );
sb.append( "</p>" );
@@ -232,34 +229,20 @@
sb.append( "<div class=\"ft\"><div class=\"c\"></div></div>" );
sb.append( "</div>" ); // close "download"
}
-
- private void appendImageLink( StringBuffer sb, String prefix, BidirectionalRepositoryLayout layout, ArchivaArtifact artifact )
+
+ private void appendImageLink( StringBuffer sb, String prefix, BidirectionalRepositoryLayout layout,
+ ArchivaArtifact artifact )
{
- StringBuffer url = new StringBuffer();
- String path = layout.toPath( artifact );
String type = artifact.getType();
-
- url.append( prefix );
- url.append( "/" ).append( path );
-
- String filename = path.substring( path.lastIndexOf( "/" ) + 1 );
-
- sb.append( "<a href=\"" ).append( StringEscapeUtils.escapeXml( url.toString() ) ).append( "\"" );
- sb.append( " title=\"" ).append( "Download " ).append( StringEscapeUtils.escapeXml( filename ) ).append( "\"" );
- sb.append( ">" );
-
- sb.append( "<img src=\"" ).append( req.getContextPath() );
- sb.append( "/images/download-type-" ).append( type ).append( ".png\" />" );
-
- sb.append( "</a>" );
+ String linkText = "<img src=\"" + req.getContextPath() + "/images/download-type-" + type + ".png\" />";
+ appendLink( sb, prefix, layout, artifact, linkText );
}
- private void appendLink( StringBuffer sb, String prefix, BidirectionalRepositoryLayout layout,
- ArchivaArtifact artifact )
+ private static void appendLink( StringBuffer sb, String prefix, BidirectionalRepositoryLayout layout,
+ ArchivaArtifact artifact, String linkText )
{
StringBuffer url = new StringBuffer();
String path = layout.toPath( artifact );
- String type = artifact.getType();
url.append( prefix );
url.append( "/" ).append( path );
@@ -270,10 +253,20 @@
sb.append( " title=\"" ).append( "Download " ).append( StringEscapeUtils.escapeXml( filename ) ).append( "\"" );
sb.append( ">" );
- sb.append( StringUtils.capitalize( type ) );
+ sb.append( linkText );
+
sb.append( "</a>" );
}
-
+
+ private void appendLink( StringBuffer sb, String prefix, BidirectionalRepositoryLayout layout,
+ ArchivaArtifact artifact )
+ {
+ String type = artifact.getType();
+ String linkText = StringUtils.capitalize( type );
+
+ appendLink( sb, prefix, layout, artifact, linkText );
+ }
+
private void appendFilesize( StringBuffer sb, ArchivaArtifact artifact )
{
sb.append( decimalFormat.format( artifact.getModel().getSize() ) );
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/META-INF/plexus/application.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/META-INF/plexus/application.xml?rev=574859&r1=574858&r2=574859&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/META-INF/plexus/application.xml (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/META-INF/plexus/application.xml Wed Sep 12 02:33:41 2007
@@ -82,8 +82,6 @@
<xml fileName="${appserver.home}/conf/shared.xml" config-optional="true"
config-at="org.apache.maven.shared.app"/>
<xml fileName="${appserver.home}/conf/common.xml" config-optional="true"/>
- <xml fileName="org/apache/maven/archiva/configuration/default-archiva.xml"
- config-at="org.apache.maven.archiva"/>
<properties fileName="${appserver.home}/conf/security.properties" config-optional="true"
config-at="org.codehaus.plexus.redback"/>
<properties fileName="org/apache/maven/archiva/security.properties" config-at="org.codehaus.plexus.redback"/>
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml?rev=574859&r1=574858&r2=574859&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml Wed Sep 12 02:33:41 2007
@@ -30,7 +30,6 @@
<package name="base" extends="webwork-default">
<interceptors>
- <interceptor name="strange" class="webwork-is-doing-strange-things"/>
<interceptor name="configuration" class="configurationInterceptor"/>
<interceptor name="redbackForceAdminUser" class="redbackForceAdminUserInterceptor"/>
<interceptor name="redbackSecureActions" class="redbackSecureActionInterceptor"/>
@@ -84,20 +83,6 @@
<default-interceptor-ref name="configuredArchivaStack"/>
<global-results>
- <!-- TODO: want an extra message on the configure page when this first happens! -->
- <!-- TODO: can we send them back to the original location afterwards? -->
- <result name="config-needed" type="redirect-action">
- <param name="namespace">/admin</param>
- <param name="actionName">repositories</param>
- </result>
-
- <!-- This redirect is triggered by the configuration interceptor -->
- <result name="config-repository-needed" type="redirect-action">
- <param name="namespace">/admin</param>
- <param name="actionName">addRepository</param>
- <param name="method">input</param>
- </result>
-
<!-- The following security-* result names arrive from the plexus-security package -->
<result name="security-login-success" type="redirect-action">index</result>
<result name="security-login-cancel" type="redirect-action">index</result>
@@ -265,6 +250,32 @@
<action name="deleteRepository" class="configureRepositoryAction" method="confirm">
<result name="input">/WEB-INF/jsp/admin/deleteRepository.jsp</result>
+ <result name="success" type="redirect-action">repositories</result>
+ <interceptor-ref name="configuredPrepareParamsStack"/>
+ </action>
+
+ <action name="addRemoteRepository" class="configureRemoteRepositoryAction" method="add">
+ <result name="input">/WEB-INF/jsp/admin/addRemoteRepository.jsp</result>
+ <result name="success" type="redirect-action">repositories</result>
+ <interceptor-ref name="configuredPrepareParamsStack"/>
+ </action>
+
+ <action name="editRemoteRepository" class="configureRemoteRepositoryAction" method="edit">
+ <result name="input">/WEB-INF/jsp/admin/editRemoteRepository.jsp</result>
+ <result name="error" type="redirect-action">repositories</result>
+ <result name="success" type="redirect-action">repositories</result>
+ <interceptor-ref name="configuredPrepareParamsStack"/>
+ </action>
+
+ <action name="saveRemoteRepository" class="configureRemoteRepositoryAction" method="save">
+ <result name="success" type="redirect-action">repositories</result>
+ <result name="input">/WEB-INF/jsp/admin/editRemoteRepository.jsp</result>
+ <result name="error">/WEB-INF/jsp/admin/editRemoteRepository.jsp</result>
+ <interceptor-ref name="configuredPrepareParamsStack"/>
+ </action>
+
+ <action name="deleteRemoteRepository" class="configureRemoteRepositoryAction" method="confirm">
+ <result name="input">/WEB-INF/jsp/admin/deleteRemoteRepository.jsp</result>
<result name="success" type="redirect-action">repositories</result>
<interceptor-ref name="configuredPrepareParamsStack"/>
</action>
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/repositoryForm.jspf
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/repositoryForm.jspf?rev=574859&r1=574858&r2=574859&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/repositoryForm.jspf (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/repositoryForm.jspf Wed Sep 12 02:33:41 2007
@@ -20,16 +20,16 @@
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<ww:textfield name="repository.name" label="Name" size="50" required="true"/>
-<ww:textfield name="repository.url" label="Directory or URL" size="50" required="true"/>
+<ww:textfield name="repository.location" label="Directory" size="50" required="true"/>
<ww:select list="#@java.util.LinkedHashMap@{'default' : 'Maven 2.x Repository', 'legacy' : 'Maven 1.x Repository'}"
name="repository.layout" label="Type"/>
-<ww:textfield name="repository.refreshCronExpression" label="Cron" size="40" required="true" />
+<ww:textfield name="repository.refreshCronExpression" label="Cron" size="40" required="true"/>
<ww:textfield name="repository.daysOlder" label="Repository Purge By Days Older Than" size="5"/>
<ww:textfield name="repository.retentionCount" label="Repository Purge By Retention Count" size="5"/>
<ww:checkbox name="repository.releases" value="repository.releases" label="Releases Included"/>
<ww:checkbox name="repository.snapshots" value="repository.snapshots" label="Snapshots Included"/>
<ww:checkbox name="repository.indexed" value="repository.indexed" label="Scannable"/>
<ww:checkbox name="repository.deleteReleasedSnapshots" value="repository.deleteReleasedSnapshots"
- label="Delete Released Snapshots"/>
+ label="Delete Released Snapshots"/>