[MRM-494] leaving repository ID blank on the add repository page goes to the edit page where ID cannot be edited

Spliting webwork definition of INPUT into ADD/EDIT, and correcting validations.

git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@579016 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Joakim Erdfelt 2007-09-24 23:16:50 +00:00
parent 4ded2e98a7
commit 503001adf3
2 changed files with 62 additions and 30 deletions

View File

@ -20,6 +20,7 @@ package org.apache.maven.archiva.web.action.admin.repositories;
*/ */
import com.opensymphony.xwork.Preparable; import com.opensymphony.xwork.Preparable;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.configuration.Configuration; import org.apache.maven.archiva.configuration.Configuration;
@ -32,9 +33,11 @@ import org.codehaus.plexus.scheduler.CronExpressionValidator;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/** /**
* Configures the application repositories. * Configures the managed repositories.
* *
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="configureRepositoryAction" * @plexus.component role="com.opensymphony.xwork.Action" role-hint="configureRepositoryAction"
*/ */
@ -52,6 +55,15 @@ public class ConfigureRepositoryAction
*/ */
protected RoleManager roleManager; protected RoleManager roleManager;
private static final List<String> VALID_MODES;
static
{
VALID_MODES = new ArrayList<String>();
VALID_MODES.add( "add" );
VALID_MODES.add( "edit" );
}
public String add() public String add()
{ {
this.mode = "add"; this.mode = "add";
@ -59,7 +71,7 @@ public class ConfigureRepositoryAction
this.repository.setReleases( true ); this.repository.setReleases( true );
this.repository.setScanned( true ); this.repository.setScanned( true );
return INPUT; return this.mode;
} }
public String delete() public String delete()
@ -92,22 +104,22 @@ public class ConfigureRepositoryAction
catch ( IOException e ) catch ( IOException e )
{ {
addActionError( "Unable to delete repository: " + e.getMessage() ); addActionError( "Unable to delete repository: " + e.getMessage() );
result = INPUT; result = ERROR;
} }
catch ( RoleManagerException e ) catch ( RoleManagerException e )
{ {
addActionError( "Unable to delete repository: " + e.getMessage() ); addActionError( "Unable to delete repository: " + e.getMessage() );
result = INPUT; result = ERROR;
} }
catch ( InvalidConfigurationException e ) catch ( InvalidConfigurationException e )
{ {
addActionError( "Unable to delete repository: " + e.getMessage() ); addActionError( "Unable to delete repository: " + e.getMessage() );
result = INPUT; result = ERROR;
} }
catch ( RegistryException e ) catch ( RegistryException e )
{ {
addActionError( "Unable to delete repository: " + e.getMessage() ); addActionError( "Unable to delete repository: " + e.getMessage() );
result = INPUT; result = ERROR;
} }
} }
@ -136,25 +148,35 @@ public class ConfigureRepositoryAction
public String save() public String save()
{ {
String repoId = repository.getId(); // Ensure a proper mode is set.
if ( StringUtils.isBlank( this.mode ) )
Configuration configuration = archivaConfiguration.getConfiguration();
boolean containsError = validateFields( configuration );
if ( containsError && StringUtils.equalsIgnoreCase( "add", mode ) )
{
return INPUT;
}
else if ( containsError && StringUtils.equalsIgnoreCase( "edit", this.mode ) )
{ {
addActionError( "Unable to process save request. edit mode undefined. " );
return ERROR; return ERROR;
} }
if ( StringUtils.equalsIgnoreCase( "edit", this.mode ) ) if ( !VALID_MODES.contains( this.mode.toLowerCase() ) )
{ {
removeRepository( repoId, configuration ); addActionError( "Unable to process save request. edit mode is invalid." );
return ERROR;
} }
// Ensure that the fields are valid.
Configuration configuration = archivaConfiguration.getConfiguration();
boolean containsError = validateFields( configuration );
if ( containsError )
{
return this.mode.toLowerCase();
}
// If we are in edit mode, then remove the old repository configuration.
if ( StringUtils.equalsIgnoreCase( "edit", this.mode ) )
{
removeRepository( repository.getId(), configuration );
}
// Save the repository configuration.
String result; String result;
try try
{ {
@ -164,22 +186,22 @@ public class ConfigureRepositoryAction
catch ( IOException e ) catch ( IOException e )
{ {
addActionError( "I/O Exception: " + e.getMessage() ); addActionError( "I/O Exception: " + e.getMessage() );
result = INPUT; result = ERROR;
} }
catch ( RoleManagerException e ) catch ( RoleManagerException e )
{ {
addActionError( "Role Manager Exception: " + e.getMessage() ); addActionError( "Role Manager Exception: " + e.getMessage() );
result = INPUT; result = ERROR;
} }
catch ( InvalidConfigurationException e ) catch ( InvalidConfigurationException e )
{ {
addActionError( "Invalid Configuration Exception: " + e.getMessage() ); addActionError( "Invalid Configuration Exception: " + e.getMessage() );
result = INPUT; result = ERROR;
} }
catch ( RegistryException e ) catch ( RegistryException e )
{ {
addActionError( "Configuration Registry Exception: " + e.getMessage() ); addActionError( "Configuration Registry Exception: " + e.getMessage() );
result = INPUT; result = ERROR;
} }
return result; return result;
@ -196,14 +218,22 @@ public class ConfigureRepositoryAction
addFieldError( "repository.id", "You must enter a repository identifier." ); addFieldError( "repository.id", "You must enter a repository identifier." );
containsError = true; containsError = true;
} }
//if edit mode, do not validate existence of repoId // Validate the existance of the repository id, but not in edit mode.
else if ( ( config.getManagedRepositoriesAsMap().containsKey( repoId ) || else if ( !StringUtils.equalsIgnoreCase( mode, "edit" ) )
config.getRemoteRepositoriesAsMap().containsKey( repoId ) ) &&
!StringUtils.equalsIgnoreCase( mode, "edit" ) )
{ {
addFieldError( "repository.id", if ( config.getManagedRepositoriesAsMap().containsKey( repoId ) )
"Unable to add new repository with id [" + repoId + "], that id already exists." ); {
containsError = true; addFieldError( "repository.id", "Unable to add new repository with id [" + repoId
+ "], that id already exists as a managed repository." );
containsError = true;
}
if ( config.getRemoteRepositoriesAsMap().containsKey( repoId ) )
{
addFieldError( "repository.id", "Unable to add new repository with id [" + repoId
+ "], that id already exists as a remote repository." );
containsError = true;
}
} }
if ( StringUtils.isBlank( repository.getLocation() ) ) if ( StringUtils.isBlank( repository.getLocation() ) )

View File

@ -243,8 +243,10 @@
<action name="saveRepository" class="configureRepositoryAction" method="save"> <action name="saveRepository" class="configureRepositoryAction" method="save">
<result name="success" type="redirect-action">repositories</result> <result name="success" type="redirect-action">repositories</result>
<result name="add">/WEB-INF/jsp/admin/addRepository.jsp</result>
<result name="edit">/WEB-INF/jsp/admin/editRepository.jsp</result>
<result name="input">/WEB-INF/jsp/admin/editRepository.jsp</result> <result name="input">/WEB-INF/jsp/admin/editRepository.jsp</result>
<result name="error">/WEB-INF/jsp/admin/editRepository.jsp</result> <result name="success" type="redirect-action">repositories</result>
<interceptor-ref name="configuredPrepareParamsStack"/> <interceptor-ref name="configuredPrepareParamsStack"/>
</action> </action>