You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by oc...@apache.org on 2010/05/06 11:23:34 UTC

svn commit: r941625 [22/24] - in /continuum/branches/continuum-flat-multi-module: ./ continuum-api/ continuum-api/src/main/java/org/apache/continuum/builder/distributed/ continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/ cont...

Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildDefinitionTemplateAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildDefinitionTemplateAction.java?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildDefinitionTemplateAction.java (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildDefinitionTemplateAction.java Thu May  6 09:23:13 2010
@@ -24,13 +24,16 @@ import com.opensymphony.xwork2.Preparabl
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.continuum.web.util.AuditLog;
 import org.apache.continuum.web.util.AuditLogConstants;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.builddefinition.BuildDefinitionServiceException;
+import org.apache.maven.continuum.builddefinition.BuildDefinitionUpdatePolicyConstants;
 import org.apache.maven.continuum.execution.ContinuumBuildExecutorConstants;
 import org.apache.maven.continuum.model.project.BuildDefinition;
 import org.apache.maven.continuum.model.project.BuildDefinitionTemplate;
@@ -72,10 +75,13 @@ public class BuildDefinitionTemplateActi
 
     private List<BuildDefinition> buildDefinitions;
 
+    private Map<Integer, String> buildDefinitionUpdatePolicies;
+
     // -------------------------------------------------------
     //  Webwork Methods
     // ------------------------------------------------------- 
 
+    @Override
     public void prepare()
         throws Exception
     {
@@ -88,6 +94,14 @@ public class BuildDefinitionTemplateActi
         this.setSchedules( getContinuum().getSchedules() );
         this.setProfiles( getContinuum().getProfileService().getAllProfiles() );
         this.setBuildDefinitions( getContinuum().getBuildDefinitionService().getAllTemplates() );
+        buildDefinitionUpdatePolicies = new HashMap<Integer, String>();
+        String text = getText( "buildDefinition.updatePolicy.always" );
+        buildDefinitionUpdatePolicies.put( BuildDefinitionUpdatePolicyConstants.UPDATE_DESCRIPTION_ALWAYS, text );
+        text = getText( "buildDefinition.updatePolicy.never" );
+        buildDefinitionUpdatePolicies.put( BuildDefinitionUpdatePolicyConstants.UPDATE_DESCRIPTION_NEVER, text );
+        text = getText( "buildDefinition.updatePolicy.newPom" );
+        buildDefinitionUpdatePolicies.put( BuildDefinitionUpdatePolicyConstants.UPDATE_DESCRIPTION_ONLY_FOR_NEW_POM,
+                                           text );
     }
 
     public String input()
@@ -136,6 +150,8 @@ public class BuildDefinitionTemplateActi
     {
         List<BuildDefinition> selectedBuildDefinitions = getBuildDefinitionsFromSelectedBuildDefinitions();
         
+        BuildDefinitionTemplate result;
+        
         AuditLog event = new AuditLog( buildDefinitionTemplate.getName(), AuditLogConstants.ADD_TEMPLATE );
         event.setCategory( AuditLogConstants.TEMPLATE );
         event.setCurrentUser( getPrincipal() );
@@ -143,15 +159,24 @@ public class BuildDefinitionTemplateActi
         if ( this.buildDefinitionTemplate.getId() > 0 )
         {
             buildDefinitionTemplate.setBuildDefinitions( selectedBuildDefinitions );
-            this.getContinuum().getBuildDefinitionService().updateBuildDefinitionTemplate( buildDefinitionTemplate );
+            result = this.getContinuum().getBuildDefinitionService().updateBuildDefinitionTemplate( buildDefinitionTemplate );
             event.setAction( AuditLogConstants.MODIFY_TEMPLATE );
-            event.log();
         }
         else
         {
             buildDefinitionTemplate.setBuildDefinitions( selectedBuildDefinitions );
             this.buildDefinitionTemplate =
                 this.getContinuum().getBuildDefinitionService().addBuildDefinitionTemplate( buildDefinitionTemplate );
+            result = this.buildDefinitionTemplate;
+        }
+        
+        if ( result ==  null )
+        {
+            addActionError( getText( "buildDefintionTemplate.name.exists" ) );
+            return INPUT;
+        }
+        else
+        {
             event.log();
         }
 
@@ -217,6 +242,7 @@ public class BuildDefinitionTemplateActi
     public String saveBuildDefinition()
         throws Exception
     {
+        Schedule schedule = null;
         if ( buildDefinition.getProfile() != null )
         {
             Profile profile = getContinuum().getProfileService().getProfile( buildDefinition.getProfile().getId() );
@@ -233,7 +259,8 @@ public class BuildDefinitionTemplateActi
         {
             if ( buildDefinition.getSchedule().getId() > 0 )
             {
-                buildDefinition.setSchedule( getContinuum().getSchedule( buildDefinition.getSchedule().getId() ) );
+                schedule = getContinuum().getSchedule( buildDefinition.getSchedule().getId() );
+                buildDefinition.setSchedule( schedule );
             }
         }
 
@@ -246,6 +273,11 @@ public class BuildDefinitionTemplateActi
             this.buildDefinition =
                 this.getContinuum().getBuildDefinitionService().addBuildDefinition( buildDefinition );
         }
+        
+        if ( schedule != null )
+        {
+            getContinuum().activeBuildDefinitionSchedule( schedule );
+        }
 
         return SUCCESS;
     }
@@ -383,4 +415,9 @@ public class BuildDefinitionTemplateActi
         this.selectedBuildDefinitionIds = selectedBuildDefinitionIds;
     }
 
+    public Map<Integer, String> getBuildDefinitionUpdatePolicies()
+    {
+        return buildDefinitionUpdatePolicies;
+    }
+
 }

Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildQueueAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildQueueAction.java?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildQueueAction.java (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildQueueAction.java Thu May  6 09:23:13 2010
@@ -22,6 +22,8 @@ package org.apache.maven.continuum.web.a
 import java.util.List;
 
 import org.apache.continuum.buildmanager.BuildManagerException;
+import org.apache.continuum.web.util.AuditLog;
+import org.apache.continuum.web.util.AuditLogConstants;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.model.project.BuildQueue;
 import org.apache.maven.continuum.security.ContinuumRoleConstants;
@@ -98,6 +100,11 @@ public class BuildQueueAction
                     BuildQueue addedBuildQueue = getContinuum().addBuildQueue( buildQueue );
     
                     getContinuum().getBuildsManager().addOverallBuildQueue( addedBuildQueue );
+
+                    AuditLog event = new AuditLog( "Build Queue id=" + addedBuildQueue.getId(), AuditLogConstants.ADD_BUILD_QUEUE );
+                    event.setCategory( AuditLogConstants.BUILD_QUEUE );
+                    event.setCurrentUser( getPrincipal() );
+                    event.log();
                 }
                 else
                 {
@@ -145,6 +152,11 @@ public class BuildQueueAction
             getContinuum().removeBuildQueue( buildQueueToBeDeleted );
 
             this.buildQueueList = getContinuum().getAllBuildQueues();
+
+            AuditLog event = new AuditLog( "Build Queue id=" + buildQueue.getId(), AuditLogConstants.REMOVE_BUILD_QUEUE );
+            event.setCategory( AuditLogConstants.BUILD_QUEUE );
+            event.setCurrentUser( getPrincipal() );
+            event.log();
         }
         else
         {

Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/ProfileAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/ProfileAction.java?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/ProfileAction.java (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/ProfileAction.java Thu May  6 09:23:13 2010
@@ -77,8 +77,6 @@ public class ProfileAction
 
     private List<BuildAgentGroupConfiguration> buildAgentGroups;
 
-    private String message;
-
     public void prepare()
         throws Exception
     {
@@ -106,13 +104,6 @@ public class ProfileAction
     public String list()
         throws Exception
     {
-        String errorMessage = ServletActionContext.getRequest().getParameter( "errorMessage" );
-
-        if ( errorMessage != null )
-        {
-            addActionError( getText( errorMessage ) );
-        }
-
         this.profiles = profileService.getAllProfiles();
         return SUCCESS;
     }
@@ -188,13 +179,13 @@ public class ProfileAction
         {
             profileService.deleteProfile( profile.getId() );
             this.profiles = profileService.getAllProfiles();
-            return SUCCESS;
         }
         catch ( ProfileException e )
         {
-            message = "profile.remove.error";
-            return ERROR;
+            // display action error in default/success page -- CONTINUUM-2250
+            addActionError( getText( "profile.remove.error" ) );
         }
+        return SUCCESS;
     }
 
     public String confirmDelete()
@@ -326,16 +317,6 @@ public class ProfileAction
         this.installationId = installationId;
     }
 
-    public String getMessage()
-    {
-        return message;
-    }
-
-    public void setMessage( String message )
-    {
-        this.message = message;
-    }
-
     public List<BuildAgentGroupConfiguration> getBuildAgentGroups()
     {
         return buildAgentGroups;

Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java Thu May  6 09:23:13 2010
@@ -20,7 +20,6 @@ package org.apache.maven.continuum.web.a
  */
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -33,17 +32,19 @@ import org.apache.continuum.model.projec
 import org.apache.continuum.taskqueue.BuildProjectTask;
 import org.apache.continuum.taskqueue.CheckOutTask;
 import org.apache.continuum.taskqueue.PrepareBuildProjectsTask;
-import org.apache.continuum.taskqueue.manager.TaskQueueManagerException;
+import org.apache.continuum.utils.build.BuildTrigger;
 import org.apache.maven.continuum.model.project.Project;
 import org.apache.maven.continuum.model.project.ProjectGroup;
-import org.apache.maven.continuum.project.ContinuumProjectState;
 import org.apache.maven.continuum.security.ContinuumRoleConstants;
 import org.apache.maven.continuum.web.action.ContinuumActionSupport;
+import org.apache.maven.continuum.web.bean.BuildProjectQueue;
+import org.apache.maven.continuum.web.bean.CheckoutQueue;
 import org.apache.maven.continuum.web.exception.AuthenticationRequiredException;
 import org.apache.maven.continuum.web.exception.AuthorizationRequiredException;
 import org.apache.maven.continuum.web.model.DistributedBuildSummary;
+import org.apache.maven.continuum.web.model.PrepareBuildSummary;
 import org.codehaus.plexus.redback.rbac.Resource;
-import org.codehaus.plexus.taskqueue.TaskQueueException;
+import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.redback.integration.interceptor.SecureAction;
 import org.codehaus.redback.integration.interceptor.SecureActionBundle;
 import org.codehaus.redback.integration.interceptor.SecureActionException;
@@ -64,6 +65,8 @@ public class QueuesAction
 
     private static final String DISTRIBUTED_BUILD_SUCCESS = "distributed-build-success";
 
+    private List<String> selectedPrepareBuildTaskHashCodes;
+
     private List<String> selectedBuildTaskHashCodes;
 
     private List<String> selectedCheckOutTaskHashCodes;
@@ -76,30 +79,31 @@ public class QueuesAction
 
     private String projectName;
 
-    private Map<String, BuildProjectTask> currentBuildProjectTasks = new HashMap<String, BuildProjectTask>();
+    private List<BuildProjectQueue> currentBuildProjectTasks = new ArrayList<BuildProjectQueue>();
+
+    private List<CheckoutQueue> currentCheckoutTasks = new ArrayList<CheckoutQueue>();
+
+    private List<BuildProjectQueue> buildsInQueue = new ArrayList<BuildProjectQueue>();
 
-    private Map<String, CheckOutTask> currentCheckoutTasks = new HashMap<String, CheckOutTask>();
+    private List<CheckoutQueue> checkoutsInQueue = new ArrayList<CheckoutQueue>();
 
-    private Map<String, List<BuildProjectTask>> buildsInQueue = new HashMap<String, List<BuildProjectTask>>();
+    private List<PrepareBuildSummary> currentPrepareBuilds = new ArrayList<PrepareBuildSummary>();
 
-    private Map<String, List<CheckOutTask>> checkoutsInQueue = new HashMap<String, List<CheckOutTask>>();
+    private List<PrepareBuildSummary> prepareBuildQueues = new ArrayList<PrepareBuildSummary>();
 
-    /**
-     * @plexus.requirement
-     */
-    DistributedBuildManager distributedBuildManager;
+    private List<PrepareBuildSummary> currentDistributedPrepareBuilds = new ArrayList<PrepareBuildSummary>();
 
-    private List<DistributedBuildSummary> distributedBuildSummary;
+    private List<PrepareBuildSummary> distributedPrepareBuildQueues = new ArrayList<PrepareBuildSummary>();
 
-    private List<PrepareBuildProjectsTask> distributedBuildQueues;
+    private List<DistributedBuildSummary> currentDistributedBuilds = new ArrayList<DistributedBuildSummary>();
+
+    private List<DistributedBuildSummary> distributedBuildQueues = new ArrayList<DistributedBuildSummary>();
 
     private String buildAgentUrl;
 
     private int projectGroupId;
 
-    private String scmRootAddress;
-
-    private List<String> selectedDistributedBuildTaskHashCodes;
+    private int scmRootId;
 
     // -----------------------------------------------------
     //  webwork
@@ -202,38 +206,89 @@ public class QueuesAction
     {
         if ( getContinuum().getConfiguration().isDistributedBuildEnabled() )
         {
-            distributedBuildSummary = new ArrayList<DistributedBuildSummary>();
+	        // current prepare build task
+            Map<String, PrepareBuildProjectsTask> currentPrepareBuildMap = getContinuum().getDistributedBuildManager().getProjectsCurrentlyPreparingBuild();
 
-            Map<String, PrepareBuildProjectsTask> map = distributedBuildManager.getDistributedBuildProjects();
-
-            for ( String url : map.keySet() )
+            for ( String url : currentPrepareBuildMap.keySet() )
             {
-                PrepareBuildProjectsTask task = map.get( url );
+                PrepareBuildProjectsTask task = currentPrepareBuildMap.get( url );
 
                 ProjectGroup projectGroup = getContinuum().getProjectGroup( task.getProjectGroupId() );
 
-                DistributedBuildSummary summary = new DistributedBuildSummary();
-                summary.setUrl( url );
+                PrepareBuildSummary summary = new PrepareBuildSummary();
+                summary.setBuildAgentUrl( url );
                 summary.setProjectGroupId( task.getProjectGroupId() );
                 summary.setProjectGroupName( projectGroup.getName() );
                 summary.setScmRootAddress( task.getScmRootAddress() );
+                summary.setScmRootId( task.getProjectScmRootId() );
+
+                currentDistributedPrepareBuilds.add( summary );
+            }
+
+            // current builds
+            Map<String, BuildProjectTask> currentBuildMap = getContinuum().getDistributedBuildManager().getProjectsCurrentlyBuilding();
 
-                ProjectScmRoot scmRoot =
-                    getContinuum().getProjectScmRootByProjectGroupAndScmRootAddress( task.getProjectGroupId(),
-                                                                                     task.getScmRootAddress() );
-                if ( scmRoot.getState() == ContinuumProjectState.UPDATING )
+            for ( String url : currentBuildMap.keySet() )
+            {
+                BuildProjectTask task = currentBuildMap.get( url );
+
+                Project project = getContinuum().getProject( task.getProjectId() );
+
+                DistributedBuildSummary summary = new DistributedBuildSummary();
+                summary.setProjectId( project.getId() );
+                summary.setProjectName( project.getName() );
+                summary.setProjectGroupName( project.getProjectGroup().getName() );
+                summary.setBuildDefinitionId( task.getBuildDefinitionId() );
+                summary.setBuildDefinitionLabel( task.getBuildDefinitionLabel() );
+                summary.setHashCode( task.getHashCode() );
+                summary.setBuildAgentUrl( url );
+
+                currentDistributedBuilds.add( summary );
+            }
+            
+            // prepare build queues
+            Map<String, List<PrepareBuildProjectsTask>> prepareBuildMap = getContinuum().getDistributedBuildManager().getProjectsInPrepareBuildQueue();
+
+            for ( String url : prepareBuildMap.keySet() )
+            {
+                for ( PrepareBuildProjectsTask task : prepareBuildMap.get( url ) )
                 {
-                    summary.setCancelEnabled( false );
+                    ProjectGroup projectGroup = getContinuum().getProjectGroup( task.getProjectGroupId() );
+
+                    PrepareBuildSummary summary = new PrepareBuildSummary();
+                    summary.setBuildAgentUrl( url );
+                    summary.setProjectGroupId( task.getProjectGroupId() );
+                    summary.setProjectGroupName( projectGroup.getName() );
+                    summary.setScmRootAddress( task.getScmRootAddress() );
+                    summary.setScmRootId( task.getProjectScmRootId() );
+                    summary.setHashCode( task.getHashCode() );
+
+                    distributedPrepareBuildQueues.add( summary );
                 }
-                else
+            }
+
+            // build queues
+            Map<String, List<BuildProjectTask>> buildMap = getContinuum().getDistributedBuildManager().getProjectsInBuildQueue();
+
+            for ( String url : buildMap.keySet() )
+            {
+                for ( BuildProjectTask task : buildMap.get( url ) )
                 {
-                    summary.setCancelEnabled( true );
-                }
+                    DistributedBuildSummary summary = new DistributedBuildSummary();
 
-                distributedBuildSummary.add( summary );
-            }
+                    Project project = getContinuum().getProject( task.getProjectId() );
+
+                    summary.setProjectId( project.getId() );
+                    summary.setProjectName( project.getName() );
+                    summary.setProjectGroupName( project.getProjectGroup().getName() );
+                    summary.setBuildDefinitionId( task.getBuildDefinitionId() );
+                    summary.setBuildDefinitionLabel( task.getBuildDefinitionLabel() );
+                    summary.setHashCode( task.getHashCode() );
+                    summary.setBuildAgentUrl( url );
 
-            distributedBuildQueues = aggregateQueues();
+                    distributedBuildQueues.add( summary );
+                }
+            }
 
             return DISTRIBUTED_BUILD_SUCCESS;
         }
@@ -241,13 +296,61 @@ public class QueuesAction
         {
             try
             {
+                // current prepare builds
+                PrepareBuildProjectsTask currentPrepareBuildTask = getContinuum().getBuildsManager().getCurrentProjectInPrepareBuild();
+
+                if ( currentPrepareBuildTask != null )
+                {
+                    PrepareBuildSummary s = new PrepareBuildSummary();
+                    
+                    s.setProjectGroupId( currentPrepareBuildTask.getProjectGroupId() );
+                    s.setProjectGroupName( currentPrepareBuildTask.getProjectGroupName() );
+                    s.setScmRootId( currentPrepareBuildTask.getProjectScmRootId() );
+                    s.setScmRootAddress( currentPrepareBuildTask.getScmRootAddress() );
+                    currentPrepareBuilds.add( s );
+                }
+            }
+            catch ( BuildManagerException e )
+            {
+                addActionError( e.getMessage() );
+                return ERROR;
+            }
+
+            try
+            {
                 // current builds
                 Map<String, BuildProjectTask> currentBuilds = getContinuum().getBuildsManager().getCurrentBuilds();
                 Set<String> keySet = currentBuilds.keySet();
                 for ( String key : keySet )
                 {
                     BuildProjectTask buildTask = currentBuilds.get( key );
-                    currentBuildProjectTasks.put( key, buildTask );
+                    BuildProjectQueue queue = new BuildProjectQueue();
+                    queue.setName( key );
+                    queue.setTask( buildTask );
+                    currentBuildProjectTasks.add( queue );
+                }
+            }
+            catch ( BuildManagerException e )
+            {
+                addActionError( e.getMessage() );
+                return ERROR;
+            }
+
+            try
+            {
+                // queued prepare builds
+                List<PrepareBuildProjectsTask> prepareBuilds = 
+                    getContinuum().getBuildsManager().getProjectsInPrepareBuildQueue();
+                for ( PrepareBuildProjectsTask task : prepareBuilds )
+                {
+                    PrepareBuildSummary summary = new PrepareBuildSummary();
+                    summary.setProjectGroupId( task.getProjectGroupId() );
+                    summary.setProjectGroupName( task.getProjectGroupName() );
+                    summary.setScmRootId( task.getProjectScmRootId() );
+                    summary.setScmRootAddress( task.getScmRootAddress() );
+                    summary.setHashCode( task.getHashCode() );
+
+                    prepareBuildQueues.add( summary );
                 }
             }
             catch ( BuildManagerException e )
@@ -264,12 +367,13 @@ public class QueuesAction
                 Set<String> keySet = builds.keySet();
                 for ( String key : keySet )
                 {
-                    List<BuildProjectTask> buildTasks = new ArrayList<BuildProjectTask>();
                     for ( BuildProjectTask task : builds.get( key ) )
                     {
-                        buildTasks.add( task );
+                        BuildProjectQueue queue = new BuildProjectQueue();
+                        queue.setName( key );
+                        queue.setTask( task );
+                        buildsInQueue.add( queue );
                     }
-                    buildsInQueue.put( key, buildTasks );
                 }
             }
             catch ( BuildManagerException e )
@@ -286,7 +390,10 @@ public class QueuesAction
                 for ( String key : keySet )
                 {
                     CheckOutTask checkoutTask = currentCheckouts.get( key );
-                    currentCheckoutTasks.put( key, checkoutTask );
+                    CheckoutQueue queue = new CheckoutQueue();
+                    queue.setName( key );
+                    queue.setTask( checkoutTask );
+                    currentCheckoutTasks.add( queue );
                 }
             }
             catch ( BuildManagerException e )
@@ -303,12 +410,13 @@ public class QueuesAction
                 Set<String> keySet = checkouts.keySet();
                 for ( String key : keySet )
                 {
-                    List<CheckOutTask> checkoutTasks = new ArrayList<CheckOutTask>();
                     for ( CheckOutTask task : checkouts.get( key ) )
                     {
-                        checkoutTasks.add( task );
+                        CheckoutQueue queue = new CheckoutQueue();
+                        queue.setName( key );
+                        queue.setTask( task );
+                        checkoutsInQueue.add( queue );
                     }
-                    checkoutsInQueue.put( key, checkoutTasks );
                 }
             }
             catch ( BuildManagerException e )
@@ -339,8 +447,8 @@ public class QueuesAction
             return REQUIRES_AUTHENTICATION;
         }
 
-        getContinuum().getBuildsManager().removeProjectFromBuildQueue( projectId, buildDefinitionId, trigger,
-                                                                       projectName );
+        getContinuum().getBuildsManager().removeProjectFromBuildQueue( projectId, buildDefinitionId,
+        		                                     new BuildTrigger( trigger, "" ), projectName, projectGroupId );
         Project project = getContinuum().getProject( projectId );
         project.setState( project.getOldState() );
         getContinuum().updateProject( project );
@@ -394,6 +502,51 @@ public class QueuesAction
         return SUCCESS;
     }
 
+    public String removePrepareBuildEntry()
+        throws Exception
+    {
+        try
+        {
+            checkManageQueuesAuthorization();
+        }
+        catch ( AuthorizationRequiredException authzE )
+        {
+            addActionError( authzE.getMessage() );
+            return REQUIRES_AUTHORIZATION;
+        }
+        catch ( AuthenticationRequiredException e )
+        {
+            addActionError( e.getMessage() );
+            return REQUIRES_AUTHENTICATION;
+        }
+
+        getContinuum().getBuildsManager().removeProjectFromPrepareBuildQueue( projectGroupId, scmRootId );
+        return SUCCESS;
+    }
+
+    public String removePrepareBuildEntries()
+        throws Exception
+    {
+        try
+        {
+            checkManageQueuesAuthorization();
+        }
+        catch ( AuthorizationRequiredException authzE )
+        {
+            addActionError( authzE.getMessage() );
+            return REQUIRES_AUTHORIZATION;
+        }
+        catch ( AuthenticationRequiredException e )
+        {
+            addActionError( e.getMessage() );
+            return REQUIRES_AUTHENTICATION;
+        }
+
+        getContinuum().getBuildsManager().removeProjectsFromPrepareBuildQueueWithHashCodes( 
+            listToIntArray( this.selectedPrepareBuildTaskHashCodes ) );
+        return SUCCESS;
+    }
+
     public String cancelDistributedBuild()
         throws Exception
     {
@@ -412,7 +565,53 @@ public class QueuesAction
             return REQUIRES_AUTHENTICATION;
         }
 
-        distributedBuildManager.cancelDistributedBuild( buildAgentUrl, projectGroupId, scmRootAddress );
+        getContinuum().getDistributedBuildManager().cancelDistributedBuild( buildAgentUrl );
+
+        return SUCCESS;
+    }
+
+    public String removeDistributedPrepareBuildEntry()
+        throws Exception
+    {
+        try
+        {
+            checkManageQueuesAuthorization();
+        }
+        catch ( AuthorizationRequiredException authzE )
+        {
+            addActionError( authzE.getMessage() );
+            return REQUIRES_AUTHORIZATION;
+        }
+        catch ( AuthenticationRequiredException e )
+        {
+            addActionError( e.getMessage() );
+            return REQUIRES_AUTHENTICATION;
+        }
+
+        getContinuum().getDistributedBuildManager().removeFromPrepareBuildQueue( buildAgentUrl, projectGroupId, scmRootId );
+
+        return SUCCESS;
+    }
+
+    public String removeDistributedPrepareBuildEntries()
+        throws Exception
+    {
+        try
+        {
+            checkManageQueuesAuthorization();
+        }
+        catch ( AuthorizationRequiredException authzE )
+        {
+            addActionError( authzE.getMessage() );
+            return REQUIRES_AUTHORIZATION;
+        }
+        catch ( AuthenticationRequiredException e )
+        {
+            addActionError( e.getMessage() );
+            return REQUIRES_AUTHENTICATION;
+        }
+
+        getContinuum().getDistributedBuildManager().removeFromPrepareBuildQueue(  this.getSelectedPrepareBuildTaskHashCodes() );
 
         return SUCCESS;
     }
@@ -435,7 +634,7 @@ public class QueuesAction
             return REQUIRES_AUTHENTICATION;
         }
 
-        getContinuum().getTaskQueueManager().removeFromDistributedBuildQueue( projectGroupId, scmRootAddress );
+        getContinuum().getDistributedBuildManager().removeFromBuildQueue( buildAgentUrl, projectId, buildDefinitionId );
 
         return SUCCESS;
     }
@@ -458,8 +657,7 @@ public class QueuesAction
             return REQUIRES_AUTHENTICATION;
         }
 
-        getContinuum().getTaskQueueManager().removeTasksFromDistributedBuildQueueWithHashCodes(
-            listToIntArray( this.getSelectedDistributedBuildTaskHashCodes() ) );
+        getContinuum().getDistributedBuildManager().removeFromBuildQueue( this.getSelectedBuildTaskHashCodes() );
 
         return SUCCESS;
     }
@@ -586,125 +784,103 @@ public class QueuesAction
         this.selectedCheckOutTaskHashCodes = selectedCheckOutTaskHashCodes;
     }
 
-    public Map<String, BuildProjectTask> getCurrentBuildProjectTasks()
+    public List<BuildProjectQueue> getCurrentBuildProjectTasks()
     {
         return currentBuildProjectTasks;
     }
 
-    public void setCurrentBuildProjectTasks( Map<String, BuildProjectTask> currentBuildProjectTasks )
+    public void setCurrentBuildProjectTasks( List<BuildProjectQueue> currentBuildProjectTasks )
     {
         this.currentBuildProjectTasks = currentBuildProjectTasks;
     }
 
-    public Map<String, CheckOutTask> getCurrentCheckoutTasks()
+    public List<CheckoutQueue> getCurrentCheckoutTasks()
     {
         return currentCheckoutTasks;
     }
 
-    public void setCurrentCheckoutTasks( Map<String, CheckOutTask> currentCheckoutTasks )
+    public void setCurrentCheckoutTasks( List<CheckoutQueue> currentCheckoutTasks )
     {
         this.currentCheckoutTasks = currentCheckoutTasks;
     }
 
-    public Map<String, List<BuildProjectTask>> getBuildsInQueue()
+    public List<BuildProjectQueue> getBuildsInQueue()
     {
         return buildsInQueue;
     }
 
-    public void setBuildsInQueue( Map<String, List<BuildProjectTask>> buildsInQueue )
+    public void setBuildsInQueue( List<BuildProjectQueue> buildsInQueue )
     {
         this.buildsInQueue = buildsInQueue;
     }
 
-    public Map<String, List<CheckOutTask>> getCheckoutsInQueue()
+    public List<CheckoutQueue> getCheckoutsInQueue()
     {
         return checkoutsInQueue;
     }
 
-    public void setCheckoutsInQueue( Map<String, List<CheckOutTask>> checkoutsInQueue )
+    public void setCheckoutsInQueue( List<CheckoutQueue> checkoutsInQueue )
     {
         this.checkoutsInQueue = checkoutsInQueue;
     }
 
-    public List<DistributedBuildSummary> getDistributedBuildSummary()
+    public List<PrepareBuildSummary> getCurrentDistributedPrepareBuilds()
     {
-        return distributedBuildSummary;
+        return currentDistributedPrepareBuilds;
     }
 
-    public void setDistributedBuildSummary( List<DistributedBuildSummary> distributedBuildSummary )
+    public List<DistributedBuildSummary> getCurrentDistributedBuilds()
     {
-        this.distributedBuildSummary = distributedBuildSummary;
+        return currentDistributedBuilds;
     }
 
-    public String getBuildAgentUrl()
+    public List<PrepareBuildSummary> getDistributedPrepareBuildQueues()
     {
-        return buildAgentUrl;
+        return distributedPrepareBuildQueues;
     }
 
-    public void setBuildAgentUrl( String buildAgentUrl )
+    public List<DistributedBuildSummary> getDistributedBuildQueues()
     {
-        this.buildAgentUrl = buildAgentUrl;
+        return distributedBuildQueues;
     }
 
-    public List<PrepareBuildProjectsTask> getDistributedBuildQueues()
+    public List<PrepareBuildSummary> getCurrentPrepareBuilds()
     {
-        return distributedBuildQueues;
+        return currentPrepareBuilds;
     }
 
-    public void setDistributedBuildQueues( List<PrepareBuildProjectsTask> distributedBuildQueues )
+    public List<PrepareBuildSummary> getPrepareBuildQueues()
     {
-        this.distributedBuildQueues = distributedBuildQueues;
+        return prepareBuildQueues;
     }
 
-    public List<String> getSelectedDistributedBuildTaskHashCodes()
+    public String getBuildAgentUrl()
     {
-        return selectedDistributedBuildTaskHashCodes;
+        return buildAgentUrl;
     }
 
-    public void setSelectedDistributedBuildTaskHashCodes( List<String> selectedDistributedBuildTaskHashCodes )
+    public void setBuildAgentUrl( String buildAgentUrl )
     {
-        this.selectedDistributedBuildTaskHashCodes = selectedDistributedBuildTaskHashCodes;
+        this.buildAgentUrl = buildAgentUrl;
     }
 
-    public String getScmRootAddress()
+    public void setProjectGroupId( int projectGroupId )
     {
-        return scmRootAddress;
+        this.projectGroupId = projectGroupId;
     }
 
-    public void setScmRootAddress( String scmRootAddress )
+    public void setScmRootId( int scmRootId )
     {
-        this.scmRootAddress = scmRootAddress;
+        this.scmRootId = scmRootId;
     }
 
-    private List<PrepareBuildProjectsTask> aggregateQueues()
-        throws TaskQueueManagerException
+    public void setSelectedPrepareBuildTaskHashCodes( List<String> selectedPrepareBuildTaskHashCodes )
     {
-        List<PrepareBuildProjectsTask> aggregatedQueues = new ArrayList<PrepareBuildProjectsTask>();
-
-        List<PrepareBuildProjectsTask> overallQueues =
-            getContinuum().getTaskQueueManager().getDistributedBuildProjectsInQueue();
-
-        Map<String, DistributedBuildTaskQueueExecutor> agentTaskQueueExecutors =
-            distributedBuildManager.getTaskQueueExecutors();
-
-        for ( String url : agentTaskQueueExecutors.keySet() )
-        {
-            try
-            {
-                logger.debug( "size of each queue snapshot " + url + " : " +
-                    agentTaskQueueExecutors.get( url ).getQueue().getQueueSnapshot().size() );
-                aggregatedQueues.addAll( agentTaskQueueExecutors.get( url ).getQueue().getQueueSnapshot() );
-            }
-            catch ( TaskQueueException e )
-            {
-                //silently ignore error
-                logger.error( "Error encountered retrieving queue snapshot from queue :" + url, e );
-            }
-        }
-
-        logger.debug( "size of agg. queue " + aggregatedQueues.size() );
-        aggregatedQueues.addAll( overallQueues );
+        this.selectedPrepareBuildTaskHashCodes = selectedPrepareBuildTaskHashCodes;
+    }
 
-        return aggregatedQueues;
+    public List<String> getSelectedPrepareBuildTaskHashCodes()
+    {
+        return selectedPrepareBuildTaskHashCodes;
     }
 }

Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/component/BuildDefinitionSummaryAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/component/BuildDefinitionSummaryAction.java?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/component/BuildDefinitionSummaryAction.java (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/component/BuildDefinitionSummaryAction.java Thu May  6 09:23:13 2010
@@ -140,13 +140,15 @@ public class BuildDefinitionSummaryActio
             }
         }
 
-        if ( containsDefaultBDForProject )
+        for ( BuildDefinitionSummary bds : groupBuildDefinitionSummaries )
         {
-            for ( BuildDefinitionSummary bds : groupBuildDefinitionSummaries )
+            if ( bds.isIsDefault() )
+            {
+                defaultGroupDefinitionId = bds.getId();
+            }
+        
+            if ( containsDefaultBDForProject )
             {
-                if (bds.isIsDefault()){
-                    defaultGroupDefinitionId = bds.getId();
-                }
                 bds.setIsDefault( false );
             }
         }

Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/notifier/MailGroupNotifierEditAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/notifier/MailGroupNotifierEditAction.java?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/notifier/MailGroupNotifierEditAction.java (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/notifier/MailGroupNotifierEditAction.java Thu May  6 09:23:13 2010
@@ -43,6 +43,8 @@ public class MailGroupNotifierEditAction
 
     private boolean committers;
 
+    private boolean developers;
+
     protected void initConfiguration( Map<String, String> configuration )
     {
         if ( StringUtils.isNotEmpty( configuration.get( AbstractContinuumNotifier.ADDRESS_FIELD ) ) )
@@ -54,6 +56,11 @@ public class MailGroupNotifierEditAction
         {
             committers = Boolean.parseBoolean( configuration.get( AbstractContinuumNotifier.COMMITTER_FIELD ) );
         }
+
+        if (StringUtils.isNotEmpty(configuration.get(AbstractContinuumNotifier.DEVELOPER_FIELD)))
+        {
+            developers = Boolean.parseBoolean(configuration.get(AbstractContinuumNotifier.DEVELOPER_FIELD));
+        }
     }
 
     protected void setNotifierConfiguration( ProjectNotifier notifier )
@@ -67,6 +74,8 @@ public class MailGroupNotifierEditAction
 
         configuration.put( AbstractContinuumNotifier.COMMITTER_FIELD, String.valueOf( committers ) );
 
+        configuration.put(AbstractContinuumNotifier.DEVELOPER_FIELD, String.valueOf(developers));
+
         notifier.setConfiguration( configuration );
     }
 
@@ -89,4 +98,14 @@ public class MailGroupNotifierEditAction
     {
         this.committers = committers;
     }
+
+    public boolean isDevelopers()
+    {
+        return developers;
+    }
+
+    public void setDevelopers(boolean developers)
+    {
+        this.developers = developers;
+    }
 }

Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/notifier/MailProjectNotifierEditAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/notifier/MailProjectNotifierEditAction.java?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/notifier/MailProjectNotifierEditAction.java (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/notifier/MailProjectNotifierEditAction.java Thu May  6 09:23:13 2010
@@ -43,6 +43,8 @@ public class MailProjectNotifierEditActi
 
     private boolean committers;
 
+    private boolean developers;
+
     protected void initConfiguration( Map<String, String> configuration )
     {
         if ( StringUtils.isNotEmpty( configuration.get( AbstractContinuumNotifier.ADDRESS_FIELD ) ) )
@@ -54,6 +56,11 @@ public class MailProjectNotifierEditActi
         {
             committers = Boolean.parseBoolean( configuration.get( AbstractContinuumNotifier.COMMITTER_FIELD ) );
         }
+
+        if (StringUtils.isNotEmpty(configuration.get(AbstractContinuumNotifier.DEVELOPER_FIELD)))
+        {
+            developers = Boolean.parseBoolean(configuration.get(AbstractContinuumNotifier.DEVELOPER_FIELD));
+        }
     }
 
     protected void setNotifierConfiguration( ProjectNotifier notifier )
@@ -67,6 +74,8 @@ public class MailProjectNotifierEditActi
 
         configuration.put( AbstractContinuumNotifier.COMMITTER_FIELD, String.valueOf( committers ) );
 
+        configuration.put(AbstractContinuumNotifier.DEVELOPER_FIELD, String.valueOf(developers));
+
         notifier.setConfiguration( configuration );
     }
 
@@ -89,4 +98,14 @@ public class MailProjectNotifierEditActi
     {
         this.committers = committers;
     }
+
+    public boolean isDevelopers()
+    {
+        return developers;
+    }
+
+    public void setDevelopers(boolean developers)
+    {
+        this.developers = developers;
+    }
 }

Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/appareance/DefaultAppareanceConfiguration.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/appareance/DefaultAppareanceConfiguration.java?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/appareance/DefaultAppareanceConfiguration.java (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/maven/continuum/web/appareance/DefaultAppareanceConfiguration.java Thu May  6 09:23:13 2010
@@ -111,7 +111,9 @@ public class DefaultAppareanceConfigurat
         {
             confFile.getParentFile().mkdirs();
         }
-        writer.write( new FileWriter( confFile ), continuumAppearance );
+        FileWriter fileWriter = new FileWriter( confFile );
+        writer.write( fileWriter, continuumAppearance );
+        fileWriter.close();
         this.footer = footerHtmlContent;
     }
 

Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/mdo/view-models.mdo
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/mdo/view-models.mdo?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/mdo/view-models.mdo (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/mdo/view-models.mdo Thu May  6 09:23:13 2010
@@ -262,7 +262,7 @@
           <required>true</required>
           <description>number of successful builds in the project group</description>
           <type>int</type>
-          <defaultValue>-1</defaultValue>
+          <defaultValue>0</defaultValue>
         </field>
         <field>
           <name>numFailures</name>
@@ -270,7 +270,7 @@
           <required>true</required>
           <description>number of failed builds in the project group</description>
           <type>int</type>
-          <defaultValue>-1</defaultValue>
+          <defaultValue>0</defaultValue>
         </field>
         <field>
           <name>numErrors</name>
@@ -278,7 +278,7 @@
           <required>true</required>
           <description>number of errored builds in the project group</description>
           <type>int</type>
-          <defaultValue>-1</defaultValue>
+          <defaultValue>0</defaultValue>
         </field>
         <field>
           <name>repositoryId</name>
@@ -495,13 +495,13 @@
       </fields>
     </class>    
     <class>
-      <name>DistributedBuildSummary</name>
+      <name>PrepareBuildSummary</name>
       <version>1.0.0+</version>
       <fields>
         <field>
-          <name>url</name>
+          <name>buildAgentUrl</name>
           <version>1.0.0</version>
-          <required>true</required>
+          <required>false</required>
           <description>URL of the build agent</description>
           <type>String</type>
         </field>
@@ -527,11 +527,17 @@
           <type>String</type>
         </field>
         <field>
-          <name>cancelEnabled</name>
+          <name>scmRootId</name>
           <version>1.0.0</version>
           <required>true</required>
-          <description>Determines if the cancel button is enabled</description>
-          <type>boolean</type>
+          <description>ID of the scm root</description>
+          <type>int</type>
+        </field>
+        <field>
+          <name>hashCode</name>
+          <version>1.0.0</version>
+          <required>false</required>
+          <type>int</type>
         </field>
       </fields>
     </class>
@@ -601,5 +607,53 @@
         </field>
       </fields>
     </class>
+    <class>
+      <name>DistributedBuildSummary</name>
+      <version>1.0.0+</version>
+      <fields>
+        <field>
+          <name>projectId</name>
+          <version>1.0.0</version>
+          <required>true</required>
+          <type>int</type>
+        </field>
+        <field>
+          <name>projectName</name>
+          <version>1.0.0</version>
+          <required>true</required>
+          <type>String</type>
+        </field>
+        <field>
+          <name>projectGroupName</name>
+          <version>1.0.0</version>
+          <required>true</required>
+          <type>String</type>
+        </field>
+        <field>
+          <name>buildDefinitionId</name>
+          <version>1.0.0</version>
+          <required>true</required>
+          <type>int</type>
+        </field>
+        <field>
+          <name>buildDefinitionLabel</name>
+          <version>1.0.0</version>
+          <required>true</required>
+          <type>String</type>
+        </field>
+        <field>
+          <name>buildAgentUrl</name>
+          <version>1.0.0</version>
+          <required>true</required>
+          <type>String</type>
+        </field>
+        <field>
+          <name>hashCode</name>
+          <version>1.0.0</version>
+          <required>true</required>
+          <type>int</type>
+        </field>
+      </fields>
+    </class>
   </classes>
 </model>

Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/META-INF/plexus/application.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/META-INF/plexus/application.xml?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/META-INF/plexus/application.xml (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/META-INF/plexus/application.xml Thu May  6 09:23:13 2010
@@ -94,11 +94,10 @@
               results in "[continuum] BUILD SUCCESSFUL: Hello World, Build Def - Nightly Test Build"
          -->
         <buildSubjectFormat>[continuum] BUILD ${state}: ${project.projectGroup.name} - ${project.name} - ${build.buildDefinition.description}</buildSubjectFormat>
-        <prepareBuildSubjectFormat>[continuum] PREPARE BUILD ${state}: ${project.projectGroup.name}</prepareBuildSubjectFormat>
-        <includeBuildResult>true</includeBuildResult>
+        <prepareBuildSubjectFormat>[continuum] PREPARE BUILD ${state}: ${projectScmRoot.projectGroup.name}</prepareBuildSubjectFormat>
         <includeBuildSummary>true</includeBuildSummary>
         <includeTestSummary>true</includeTestSummary>
-        <includeOutput>false</includeOutput>
+        <includeBuildOutput>false</includeBuildOutput>
         <alwaysSend>false</alwaysSend>
         <!--
         Setting this propery will make Continuum send all emails to

Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum.properties
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum.properties?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum.properties (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum.properties Thu May  6 09:23:13 2010
@@ -197,6 +197,9 @@ projectGroup.tab.releaseResults = Releas
 projectGroup.scmRoot.title = Project Group Scm Root
 projectGroup.scmRoot.label = Scm Root URL
 projectGroup.cancelGroupBuild = Cancel Group Build
+projectGroup.invalid.id = Invalid Project Group Id: {0}
+projectGroup.build.error.noBuildAgent = Unable to build projects because no build agent is configured
+projectGroup.build.error.noBuildAgentInGroup = Unable to build projects because no build agent is configured in the build agent group
 
 # ----------------------------------------------------------------------
 # Page: Project Group - Members
@@ -239,6 +242,11 @@ confirmGroupRemoval.section.title=Projec
 confirmGroupRemoval.confirmation.message=Are you sure you want to delete the project group "{0}"?
 
 # ----------------------------------------------------------------------
+# Page: Delete Project Group
+# ----------------------------------------------------------------------
+projectGroup.delete.error = Unable to remove project group
+
+# ----------------------------------------------------------------------
 # Page: Configuration
 # ----------------------------------------------------------------------
 configuration.page.title = Continuum - Configuration
@@ -293,6 +301,7 @@ add.project.artifact.not.found.error = M
 add.project.project.building.error = Unknown error trying to build POM.
 add.project.unknown.error = The specified resource cannot be accessed. Please try again later or contact your administrator.
 add.project.nogroup.error = No project group specified.
+add.project.duplicate.error = Trying to add duplicate projects in the same project group.
 
 # ----------------------------------------------------------------------
 # Page: AddMavenOneProject
@@ -330,7 +339,6 @@ add.m2.project.upload.modules.error = Ca
 add.m2.project.nonRecursiveProject = For multi-module project, load only root as recursive build
 add.m2.project.buildDefinitionTemplate = Build Definition Template
 add.m2.project.defaultBuildDefinition = Default
-add.m2.project.checkoutInSingleDirectory = Checkout multi-module project in single directory
 
 # ----------------------------------------------------------------------
 # Page: AddProject (ant or shell)
@@ -379,6 +387,7 @@ add.project.defaultBuildDefinition = Def
 deleteProject.page.title = Continuum - Delete Continuum Project
 deleteProject.section.title = Delete Continuum Project
 deleteProject.confirmation.message = Are you sure you want to delete the project "{0}"?
+deleteProject.error = Unable to delete project with id {0}
 
 # ----------------------------------------------------------------------
 # Page: ProjectView
@@ -458,6 +467,10 @@ buildDefinition.description.label = Desc
 buildDefinition.alwaysBuild.label = Always Build
 buildDefinition.noname.save.error.message = There was an error saving the schedule, no schedule name was supplied.
 buildDefinition.duplicatename.save.error.message = There was an error saving the schedule, a schedule with the same name already exists.
+buildDefinition.updatePolicy.label = Update Policy
+buildDefinition.updatePolicy.always = Always
+buildDefinition.updatePolicy.never = Never
+buildDefinition.updatePolicy.newPom = Only for new Pom
 
 # ----------------------------------------------------------------------
 # Page: BuildSummary
@@ -490,6 +503,7 @@ notifier.section.title = Add/Edit {0} No
 notifier.type.label = Type
 notifier.mail.recipient.address.label = Mail Recipient Address
 notifier.mail.recipient.committers.label = Send a mail to latest committers
+notifier.mail.recipient.developers.label = Send a mail to project developers
 notifier.irc.host.label = IRC Host
 notifier.irc.port.label = IRC port
 notifier.irc.channel.label = IRC channel
@@ -531,6 +545,7 @@ buildResults.startedSince = Started sinc
 buildResults.state = State
 buildResults.result = Result
 buildResults.buildDefinition.description = Build Definition Description
+buildResults.delete.error = Unable to delete Build Results
 
 # ----------------------------------------------------------------------
 # Page: BuildResults
@@ -544,6 +559,7 @@ buildResult.startedSince = Started since
 buildResult.trigger = Build Trigger
 buildResult.state = State
 buildResult.buildNumber = Build#
+buildResult.username = Triggered by
 buildResult.buildError = Build Error
 buildResult.buildOutput = Output
 buildResult.noOutput = No output.
@@ -626,7 +642,7 @@ schedule.name.message = Enter the name o
 schedule.description.label = Description
 schedule.description.message = Enter a description of the schedule
 schedule.cronExpression.label = Cron Expression
-schedule.cronExpression.message = Enter the cron expression. Format is described there : <a href="http://www.opensymphony.com/quartz/api/org/quartz/CronTrigger.html" target="_blank">Syntax<a>
+schedule.cronExpression.message = Enter the cron expression. Format is described there : <a href="http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html" target="_blank">Syntax<a>
 schedule.maxJobExecutionTime.label = Maximum job execution time (seconds)
 schedule.maxJobExecutionTime.message = Enter the maximum number of seconds a job may execute in this schedule before it''s terminated.
 schedule.quietPeriod.label = Quiet Period (seconds)
@@ -647,6 +663,7 @@ schedule.available.buildqueues = --- Ava
 schedule.available.buildqueues.used = --- Used Build Queues ---
 schedule.buildqueues.add.error = Error attaching the build queue(s) to schedule.
 schedule.name.already.exists = A Schedule with the same name already exists
+schedule.buildqueues.empty.error = Used Build Queues cannot be empty
 
 # ----------------------------------------------------------------------
 # Page: Delete Schedule
@@ -706,6 +723,7 @@ releaseViewResult.output=Release Executi
 releaseViewResult.noOutput=No Output
 releaseViewResult.projectName=Project Name
 releaseViewResult.releaseGoal=Release Goal
+releaseViewResult.username=Triggered by
 releasePrepare.scmUsername.label=SCM Username
 releasePrepare.scmPassword.label=SCM Password
 releasePrepare.scmTag.label=SCM Tag
@@ -722,7 +740,7 @@ releasePerformFromScm.scmUsername.label=
 releasePerformFromScm.scmPassword.label=SCM Password
 releasePerformFromScm.scmTag.label=SCM Tag
 releasePerformFromScm.scmTagBase.label=SCM Tag Base
-releasePerformFromScm.goals.label=Maven Arguments
+releasePerformFromScm.goals.label=Perform Goals
 releasePerformFromScm.useReleaseProfile.label=Use Release Profile
 releasePerformFromScm.buildEnvironment.label=Build Environment
 releasePerformFromScm.page.title=Continuum - Perform Project Release
@@ -866,7 +884,7 @@ deletebuildDefinition.template.confirmat
 # Page: Queues
 # ----------------------------------------------------------------------
 buildQueue.page.title = Continuum - Build Queue
-buildQueue.section.title = Continuum - Build Queue
+buildQueue.section.title = Build Queue
 buildQueue.empty = Build Queue is empty
 buildQueue.currentTask.section.title = Current Build
 buildQueue.currentTask.buildQueue = Build Queue
@@ -881,6 +899,13 @@ checkoutQueue.no.currentTaks = No curren
 checkoutQueue.section.title = Checkout Queue
 checkoutQueue.empty = Checkout Queue is empty
 checkoutQueue.removeEntries = Cancel Entries
+prepareBuildQueue.currentTask.section.title = Current Prepare Build
+prepareBuildQueue.section.title = Prepare Build Queue
+prepareBuildQueue.table.projectGroupName = Project Group
+prepareBuildQueue.table.scmRootAddress = SCM Root URL
+prepareBuildQueue.empty = Prepare Build Queue is empty
+prepareBuildQueue.no.currentTasks = No current prepare build
+prepareBuildQueue.removeEntries = Cancel Entries
 
 # ----------------------------------------------------------------------
 # Page: Build Queue
@@ -894,7 +919,8 @@ buildQueue.delete.error = Unable to dele
 buildResult.delete.confirmation.page.title = Continuum - Delete Build Results
 buildResult.delete.confirmation.section.title = Delete Build Results
 buildResult.delete.confirmation.message = Are you sure you want to delete {0} build results ? 
-buildResult.cannot.delete = Cannot delete a build result which is currently building.
+buildResult.cannot.delete = Cannot delete the build result of a currently building project.
+buildResult.delete.error = Unable to delete Build Result with id {0}
 
 # ----------------------------------------------------------------------
 # Legend
@@ -957,7 +983,7 @@ repository.error.location.cannot.be.spac
 repository.error.save.in.use = Unable to edit local repository because it is currently in use 
 repository.error.remove.in.use = Unable to remove local repository because it is currently in use
 repository.error.purge.in.use = Unable to purge local repository because it is currently in use
-repository.error.remove.default = Cannot remove default local repository.
+repository.error.remove.default = Cannot remove default local repository
 
 #-----------------------------------------------------------------------
 # Page: Delete Local Repository
@@ -997,7 +1023,7 @@ purgeConfig.deleteReleasedSnapshots.labe
 purgeConfig.defaultPurge.label = Is it Default?
 purgeConfig.schedule.label = Schedule
 purgeConfig.description.label = Description
-purgeConfig.enabled.label = Enabled
+purgeConfig.enabled.label = Enabled Purge Configuration
 purgeConfig.no.repositories = No repositories to purge
 
 #-----------------------------------------------------------------------
@@ -1058,7 +1084,7 @@ appearance.description = The logo in the
 appearance.noCompanyPom = You have not yet specified a company POM.
 appearance.selectCompanyPom = Select a Company POM
 appearance.detailsIntroduction = Your selected company POM is below.
-appearance.maybeChange = If you would like to change the organization name, url or logo, you can
+appearance.maybeChange = If you would like to change the organization name, URL or logo, you can
 appearance.editThePomLink = edit the POM
 appearance.companyPom.groupId = Group ID
 appearance.companyPom.artifactId = Artifact ID
@@ -1150,12 +1176,22 @@ deleteBuildAgent.confirmation.message = 
 # Page: View Distributed Build
 # ----------------------------------------------------------------------
 distributedBuilds.page.title = Continuum - View Distributed Builds
-distributedBuilds.section.title = View Distributed Builds
+distributedBuilds.currentPrepareBuild.section.title = Current Prepare Build
+distributedBuilds.currentBuild.section.title = Current Build
+distributedBuilds.prepareBuildQueue.section.title = Prepare Build Queue
 distributedBuilds.buildQueue.section.title = Build Queue
+distributedPrepareBuild.table.projectGroupName = Project Group Name
+distributedPrepareBuild.table.scmRootAddress = SCM Root URL
+distributedPrepareBuild.table.buildAgentUrl = Build Agent URL
+distributedPrepareBuilds.empty = Prepare Build Queue is empty
+distributedPrepareBuilds.no.currentTasks = No current prepare build
+distributedPrepareBuilds.removeEntries = Cancel Entries
+distributedBuild.table.projectName = Project Name
+distributedBuild.table.buildDefinitionLabel = Build Definition Label
 distributedBuild.table.projectGroupName = Project Group Name
-distributedBuild.table.scmRootAddress = Scm Root Address
-distributedBuild.table.agentUrl = Build Agent URL
-distributedBuilds.empty = No Distributed Builds
+distributedBuild.table.buildAgentUrl = Build Agent URL
+distributedBuilds.empty = Build Queue is empty
+distributedBuilds.no.currentTasks = No current build
 distributedBuilds.removeEntries = Cancel Entries
 
 # ----------------------------------------------------------------------

Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum_de.properties
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum_de.properties?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum_de.properties (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum_de.properties Thu May  6 09:23:13 2010
@@ -77,7 +77,7 @@ menu.administration.schedules = Zeitpl\u
 menu.administration.users = Benutzer
 menu.administration.userGroups = Benutzergruppen
 menu.administration.roles = Rollen
-menu.administration.buildDefinitionTemplates = Vorgangsschablonen
+menu.administration.buildDefinitionTemplates = Vorgangsvorlagen
 menu.account.options = Meine Daten
 user.edit.account = Benutzerinformationen bearbeiten
 menu.administration.queues = Warteschlangen
@@ -144,7 +144,7 @@ groups.table.name = Name
 groups.table.groupId = Bezeichner
 groups.table.totalProjects = Summe
 groups.table.summary = Zusammenfassung
-groups.page.list.empty = Die Liste der Projektgruppen ist leer.
+groups.page.list.empty = Leere Projektgruppen-Liste.
 groups.section.title = Projektgruppe:
 groups.manage.label = Gruppe verwalten
 groups.table.repositoryName = Lokales Repository
@@ -247,7 +247,7 @@ add.project.field.required.error = Es mu
 add.project.unknown.host.error = Zugriff auf den angegebenen Host nicht m\u00F6glich.
 add.project.connect.error = Es konnte keine Verbindung zum entfernten System hergestellt werden.
 add.project.malformed.url.error = Ung\u00FCltiger URL.
-add.project.xml.parse.error = XML des POM kann nicht verarbeitet werden.
+add.project.xml.parse.error = POM XML kann nicht verarbeitet werden.
 add.project.extend.error = Es kann kein POM mit einem ''extend'' Element verwendet werden.
 add.project.missing.pom.error = Die angegebene POM-Datei oder ein Modul daraus existiert nicht.
 add.project.missing.groupid.error = Kein ''groupId'' Element im POM.
@@ -281,7 +281,7 @@ add.m1.project.m1PomFile.label = POM-Dat
 add.m1.project.m1PomFile.message =  Bitte geben Sie den lokalen Dateinamen des zu \u00FCbertragenden Maven 1 POM an.
 add.m1.project.m1PomFile.error = Es mu\u00DF ein g\u00FCltiger URL angegeben werden.
 add.m1.project.projectGroup = Projektgruppe
-add.m1.project.buildDefinitionTemplate = Vorgangsschablone
+add.m1.project.buildDefinitionTemplate = Vorgangsvorlage
 add.m1.project.defaultBuildDefinition = Standard
 
 # ----------------------------------------------------------------------
@@ -301,7 +301,7 @@ add.m2.project.projectGroup = Projektgru
 # TODO: remove this part once uploading of an m2 project with modules is supported ( CONTINUUM-1098 )
 add.m2.project.upload.modules.error = Es kann kein Maven 2 Projekt mit Modulen \u00FCbertragen werden.
 add.m2.project.nonRecursiveProject = Bei Projekten mit mehreren Modulen nur das Eltern-Projekt laden.
-add.m2.project.buildDefinitionTemplate = Vorgangsschablone
+add.m2.project.buildDefinitionTemplate = Vorgangsvorlage
 add.m2.project.defaultBuildDefinition = Standard
 
 # ----------------------------------------------------------------------
@@ -339,7 +339,7 @@ projectVersion.error = Es mu\u00DF eine 
 projectVersion.message = Bitte geben Sie die Version des Projekts an.
 
 projectScmUseCache.label = Legitimationsdaten zwischenspeichern, falls m\u00F6glich.
-add.project.buildDefinitionTemplate = Vorgangsschablone
+add.project.buildDefinitionTemplate = Vorgangsvorlage
 add.project.defaultBuildDefinition = Standard
 
 # ----------------------------------------------------------------------
@@ -531,7 +531,7 @@ buildResult.dependencies.groupId = Grupp
 buildResult.dependencies.artifactId = Artefakt-Bezeichner
 buildResult.dependencies.version = Version
 buildResult.changesSinceLastSuccess = Weitere \u00C4nderungen seit letzer erfolgreicher Ausf\u00FChrung
-buildResult.generatedReports.title = Generierte Berichte
+buildResult.generatedReports.title = Berichte
 buildResult.generatedReports.surefire = Surefire-Bericht
 buildResult.buildOutput.text = Als Text herunterladen
 buildResult.buildDefinition = Vorgangsdefinition
@@ -549,7 +549,7 @@ buildResult.buildDefinition.description 
 
 # From ContinuumProjectState
 buildResult.trigger.0 = durch Warteschlange
-buildResult.trigger.1 = erzwungen
+buildResult.trigger.1 = durch Benutzer
 buildResult.state.1 = Neu
 buildResult.state.2 = Ok
 buildResult.state.3 = Fehlversuch
@@ -592,7 +592,7 @@ schedule.name.message = Bitte geben Sie 
 schedule.description.label = Beschreibung
 schedule.description.message = Bitte geben Sie eine Beschreibung des Zeitplans an.
 schedule.cronExpression.label = Cron-Ausdruck
-schedule.cronExpression.message = Bitte geben Sie den Cron-Ausdruck an. Eine Beschreibung des Formats finden Sie <a href="http://www.opensymphony.com/quartz/api/org/quartz/CronTrigger.html" target="_blank">hier<a>.
+schedule.cronExpression.message = Bitte geben Sie den Cron-Ausdruck an. Eine Beschreibung des Formats finden Sie <a href="http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html" target="_blank">hier<a>.
 schedule.maxJobExecutionTime.label = Maximale Ausf\u00FChrungszeit (Sekunden)
 schedule.maxJobExecutionTime.message = Bitte geben Sie die maximale Anzahl Sekunden an, die ein Vorgang dieses Zeitplans ausgef\u00FChrt werden kann, bevor er abgebrochen wird.
 schedule.quietPeriod.label = Ruhezeit (Sekunden)
@@ -666,7 +666,7 @@ releasePerformFromScm.scmUsername.label=
 releasePerformFromScm.scmPassword.label=SCM Passwort
 releasePerformFromScm.scmTag.label=SCM Markierung
 releasePerformFromScm.scmTagBase.label=SCM Markierungs-Basis
-releasePerformFromScm.goals.label=Maven Argumente
+releasePerformFromScm.goals.label=Perform Goals
 releasePerformFromScm.useReleaseProfile.label=Ver\u00F6ffentlichungs-Profil verwenden
 releasePerformFromScm.buildEnvironment.label=Umgebung
 
@@ -752,7 +752,7 @@ installationTypeChoice.envar.label = Umg
 # ----------------------------------------------------------------------
 # Page: Build Definitions Templates Summary
 # ----------------------------------------------------------------------
-buildDefinition.templates.page.title = Continuum - Vorgangsschablonen
+buildDefinition.templates.page.title = Continuum - Vorgangsvorlagen
 buildDefinition.templates.continuum.section.title = Continuum Standard Vorgangsdefinition
 buildDefinition.templates.goals = Goals
 buildDefinition.templates.arguments = Argumente
@@ -763,14 +763,14 @@ buildDefinition.templates.buildFresh = V
 buildDefinition.templates.alwaysBuild = Immer ausf\u00FChren
 buildDefinition.templates.description = Beschreibung
 buildDefinition.templates.type = Typ
-buildDefinition.templates.section.title = Verf\u00FCgbare Vorgangsschablonen
+buildDefinition.templates.section.title = Verf\u00FCgbare Vorgangsvorlagen
 buildDefinition.templates.buildDefinitions.section.title = Verf\u00FCgbare Vorgangsdefinitionen
 
 # ----------------------------------------------------------------------
 # Page: Edit Build Definition Template
 # ----------------------------------------------------------------------
-buildDefinition.template.page.title = Continuum - Vorgangsschablone hinzuf\u00FCgen/bearbeiten
-buildDefinition.template.section.title = Vorgangsschablone hinzuf\u00FCgen/bearbeiten
+buildDefinition.template.page.title = Continuum - Vorgangsvorlage hinzuf\u00FCgen/bearbeiten
+buildDefinition.template.section.title = Vorgangsvorlage hinzuf\u00FCgen/bearbeiten
 buildDefinition.template.name = Name
 buildDefinition.template.buildDefinition.goals = Goals
 buildDefinition.template.buildDefinition.arguments = Argumente
@@ -791,7 +791,7 @@ buildDefinitionTemplate.builddefinitions
 # ----------------------------------------------------------------------
 buildQueue.page.title = Continuum - Warteschlangen
 buildQueue.section.title = Ausstehende Vorg\u00E4nge
-buildQueue.empty = Die Warteschlange ist leer.
+buildQueue.empty = Die Vorgangs-Warteschlange ist leer.
 buildQueue.currentTask.section.title = Aktuelle Vorg\u00E4nge
 buildQueue.currentTask.projectName = Projektname
 buildQueue.currentTask.buildDefinition = Vorgangsdefinition
@@ -891,9 +891,9 @@ purgeConfigs.repo.section.title = Reposi
 purgeConfigs.dir.section.title = Verzeichnis Bereinigungskonfigurationen
 purgeConfigs.table.repository = Repository
 purgeConfigs.table.description = Beschreibung
-purgeConfigs.table.retentionCount = Aufbewahrungstage
+purgeConfigs.table.retentionCount=Aufzubewahrende Artefakte/Verzeichnisse
 purgeConfigs.table.schedule = Zeitplan
-purgeConfigs.table.daysOlder = \u00C4lter als (in Tagen)
+purgeConfigs.table.daysOlder = \u00C4lter als
 purgeConfigs.table.deleteAll = Alle l\u00F6schen
 purgeConfigs.table.directoryType = Verzeichnistyp
 purgeConfigs.table.default = Standard
@@ -907,7 +907,7 @@ purgeConfig.page.title = Continuum - Ber
 purgeConfig.section.title = Bereinigungskonfiguration hinzuf\u00FCgen/bearbeiten
 purgeConfig.repository.label = Repository
 purgeConfig.directoryType.label = Verzeichnistyp
-purgeConfig.retentionCount.label = Aufbewahrungstage
+purgeConfig.retentionCount.label=Aufzubewahrende Artefakte/Verzeichnisse
 purgeConfig.daysOlder.label = \u00C4lter als (in Tagen)
 purgeConfig.deleteAll.label = Alle l\u00F6schen
 purgeConfig.deleteReleasedSnapshots.label = Ver\u00F6ffentlichte Snapshots l\u00F6schen
@@ -955,7 +955,7 @@ scmResult.page.title = Continuum - SCM E
 scmResult.section.title = SCM Ergebnis
 scmResult.state = Status
 scmResult.projectGroupName = Projektgruppenname
-scmResult.scmRootAddress = SCM Wurzel-Verzeichnis-URL
+scmResult.scmRootAddress = SCM Hauptverzeichnis-URL
 scmResult.scmError = SCM Fehler
 
 # ----------------------------------------------------------------------
@@ -988,13 +988,13 @@ companyPom.page.title=Firmen-POM bearbei
 companyPom.section.title=Firmen-POM
 companyPom.autoIncrementVersion=Die Version wird beim Speichern automatisch inkrementiert.
 notifier.event.sendOnScmFailure=Bei SCM-Fehler senden
-projectGroup.scmRoot.label=SCM Wurzel-Verzeichnis-URL
-projectGroup.scmRoot.title=SCM Wurzel-Verzeichnisse
+projectGroup.scmRoot.label=SCM Hauptverzeichnis-URL
+projectGroup.scmRoot.title=SCM Hauptverzeichnisse
 releasePrepare.useEditMode.label=''Editmodus'' verwenden
 projectGroup.cancelGroupBuild=Gruppenvorg\u00E4nge abbrechen
 configuration.allowed.build.parallel=Maximal erlaubte Anzahl parallel ausgef\u00FChrter Vorg\u00E4nge
 configuration.disable.parallel.builds=Parallel ausf\u00FChrbare Vorg\u00E4nge deaktivieren
-configuration.allowed.build.paralle.message=Bitte geben Sie die maximal erlaubte Anzahl parallel ausgef\u00FChrter Vorg\u00E4nge an.
+configuration.allowed.build.paralle.message=Bitte geben Sie die maximal erlaubte Anzahl parallel ausf\u00FChrbarer Vorg\u00E4nge an.
 configuration.numberOfBuildsInParallel.invalid=Die erlaubte Anzahl parallel ausf\u00FChrbarer Vorg\u00E4nge mu\u00DF gr\u00F6\u00DFer als Null sein.
 configuration.distributedBuildEnabled.label=Vorgangsverteilung aktiv
 projectDescription.label=Beschreibung
@@ -1013,7 +1013,7 @@ buildQueue.currentTask.buildQueue=Wartes
 checkoutQueue.currentTask.buildQueue=Warteschlange
 buildQueue.cannot.delete=Die Warteschlange kann nicht gel\u00F6scht werden, da Vorg\u00E4nge ausgef\u00FChrt werden.
 buildQueue.delete.error=Die Warteschlange konnte nicht aus der Datenbank entfernt werden.
-deletePurgeConfiguration.page.title=Continnum - Bereinigungskonfiguration l\u00F6schen
+deletePurgeConfiguration.page.title=Continuum - Bereinigungskonfiguration l\u00F6schen
 deletePurgeConfiguration.section.title=Bereinigungskonfiguration l\u00F6schen
 deletePurgeConfiguration.confirmation.message=Soll die ''{0}'' Bereinigungskonfiguration wirklich gel\u00F6scht werden ?
 parallel.build.queues.page.title=Continuum - Warteschlangen
@@ -1040,12 +1040,9 @@ deleteBuildAgent.page.title=Continuum - 
 deleteBuildAgent.section.title=Vorgangsagent l\u00F6schen
 deleteBuildAgent.confirmation.message=Soll der ''{0}'' Vorgangsagent wirklich gel\u00F6scht werden ?
 distributedBuilds.page.title=Continuum - Warteschlangen
-distributedBuilds.section.title=Aktuelle Vorg\u00E4nge
 distributedBuilds.buildQueue.section.title=Ausstehende Vorg\u00E4nge
 distributedBuild.table.projectGroupName=Projektgruppenname
-distributedBuild.table.scmRootAddress=Scm Wurzel Adresse
-distributedBuild.table.agentUrl=Vorgangsagent URL
-distributedBuilds.empty=Aktuell werden keine Vorg\u00E4nge ausgef\u00FChrt.
+distributedBuilds.empty=Die Vorgangs-Warteschlange ist leer.
 distributedBuilds.removeEntries=Eintr\u00E4ge abbrechen
 buildDefinitionSummary.project.section.title=Projekt Vorgangsdefinitionen
 buildDefinitionSummary.project=Projekt
@@ -1075,9 +1072,9 @@ installation.varName.required=Es mu\u00D
 deleteInstallation.page.title=Continuum - Installation l\u00F6schen
 deleteInstallation.section.title=Installation l\u00F6schen
 deleteInstallation.confirmation.message=Soll die ''{0}'' Installation wirklich gel\u00F6scht werden ?
-deletebuildDefinition.template.page.title=Continuum - Vorgangsschablone l\u00F6schen
-deletebuildDefinition.template.section.title=Vorgangsschablone l\u00F6schen
-deletebuildDefinition.template.confirmation.message=Soll die ''{0}'' Vorgangsschablone wirklich gel\u00F6scht werden ?
+deletebuildDefinition.template.page.title=Continuum - Vorgangsvorlage l\u00F6schen
+deletebuildDefinition.template.section.title=Vorgangsvorlage l\u00F6schen
+deletebuildDefinition.template.confirmation.message=Soll die ''{0}'' Vorgangsvorlage wirklich gel\u00F6scht werden ?
 deleteBuildQueue.page.title=Continuum - Warteschlange l\u00F6schen
 deleteBuildQueue.section.title=Warteschlange l\u00F6schen
 deleteBuildQueue.confirmation.message=Soll die ''{0}'' Warteschlange wirklich gel\u00F6scht werden ?
@@ -1100,13 +1097,13 @@ buildAgentGroup.error.name.cannot.be.spa
 buildAgentGroup.available.buildAgents=--- Verf\u00FCgbare Vorgangsagenten ---
 buildAgentGroup.available.buildAgents.used=--- Verwendete Vorgangsagenten ---
 buildAgentGroup.buildAgents.define=Konfiguration der zu verwendenden Vorgangsagenten
-buildAgentGroup.error.remove.in.use=Die Vorgangsagenten-Gruppe kann nicht gel\u00F6scht werden - wird mit einer Umgebung verwendet.
+buildAgentGroup.error.remove.in.use=Die Vorgangsagenten-Gruppe kann nicht gel\u00F6scht werden - sie wird mit einer Umgebung verwendet.
 releases.page.title=Continuum - Ver\u00F6ffentlichungen
 releases.section.title=Ver\u00F6ffentlichungen
 releaseSummary.table.releaseId=Ver\u00F6ffentlichungs ID
 releaseSummary.table.releaseGoal=Ver\u00F6ffentlichungs-Goal
 releaseSummary.table.buildAgentUrl=URL des Vorgangsagenten
-distributedBuild.releasePrepare.input.error=Projektverarbeitung nicht m\u00F6glich. Der {0} Vorgangsagent wurde entweder entfernt bzw. deaktiviert, oder es wurde noch kein Vorgang ausgef\u00FChrt
+distributedBuild.releasePrepare.input.error=Projektverarbeitung nicht m\u00F6glich. Der {0} Vorgangsagent wurde entweder entfernt bzw. deaktiviert, oder es wurde noch kein Vorgang ausgef\u00FChrt.
 distributedBuild.releasePrepare.error=Ver\u00F6ffentlichungs-Vorbereitung nicht m\u00F6glich.
 distributedBuild.releasePrepare.release.error=Ver\u00F6ffentlichungs-Vorbereitung nicht m\u00F6glich. Der {0} Vorgangsagent wurde zwischenzeitlich entfernt oder deaktiviert.
 distributedBuild.releaseInProgress.error=Anzeige des Ver\u00F6ffentlichungs-Vorgangs nicht m\u00F6glich. Der {0} Vorgangsagent wurde zwischenzeitlich entfernt oder deaktiviert.
@@ -1125,9 +1122,37 @@ releasePerformFromScm.section.title=Proj
 releasePerformFromScm.parameters.section.title=Parameter
 authorizationError.page.title=Continuum - Autorisierungs-Fehler
 authorizationError.section.title=Autorisierungs-Fehler
-authorizationError.not.authorized=Autorisierung fehlgeschlagen. Bitte kontaktieren Sie Ihren Administrator, um entsprechende Berechtigungen zugewiesen zu bekommen.
+authorizationError.not.authorized=Autorisierung fehlgeschlagen. Bitte kontaktieren Sie Ihren Administrator, um entsprechende Berechtigungen erteilt zu bekommen.
 errorOccured.page.title=Continuum - Fehler
 errorOccured.section.title=Fehler
 menu.continuum=Continuum
 releaseError.page.title=Continuum - Ver\u00F6ffentlichung fehlgeschlagen
 releaseError.section.title=Ver\u00F6ffentlichung fehlgeschlagen
+add.project.duplicate.error=Ein identisches Projekt existiert in dieser Gruppe bereits.
+distributedPrepareBuild.table.scmRootAddress=SCM Hauptverzeichnis-URL
+distributedBuilds.currentBuild.section.title=Aktuelle Vorg\u00E4nge
+projectGroup.delete.error=Die Projektgruppe konnte nicht gel\u00F6scht werden.
+buildResult.delete.error=Das ''{0}'' Vorgangsergebnis konnte nicht gel\u00F6scht werden.
+prepareBuildQueue.table.projectGroupName=Projektgruppe
+distributedPrepareBuild.table.projectGroupName=Projektgruppen-Name
+prepareBuildQueue.table.scmRootAddress=SCM Hauptverzeichnis-URL
+deleteProject.error=Das ''{0}'' Projekt konnte nicht gel\u00F6scht werden.
+buildResults.delete.error=Die Vorgangsergebnisse konnten nicht gel\u00F6scht werden.
+distributedPrepareBuilds.no.currentTasks=Aktuell wird kein Vorgang vorbereitet.
+distributedBuilds.currentPrepareBuild.section.title=Aktuelle Vorbereitungen
+distributedBuilds.prepareBuildQueue.section.title=Ausstehende Vorbereitungen
+distributedPrepareBuild.table.buildAgentUrl=Vorgangsagent URL
+distributedBuild.table.buildAgentUrl=Vorgangsagent URL
+distributedBuild.table.projectName=Projektname
+prepareBuildQueue.currentTask.section.title=Aktuelle Vorbereitungen
+prepareBuildQueue.removeEntries=Auswahl abbrechen
+prepareBuildQueue.section.title=Ausstehende Vorbereitungen
+distributedBuild.table.buildDefinitionLabel=Vorgangsdefinition
+distributedBuilds.no.currentTasks=Aktuell wird kein Vorgang ausgef\u00FChrt.
+distributedPrepareBuilds.empty=Die Vorbereitungs-Warteschlange ist leer.
+prepareBuildQueue.empty=Die Vorbereitungs-Warteschlange ist leer.
+distributedPrepareBuilds.removeEntries=Auswahl abbrechen
+prepareBuildQueue.no.currentTasks=Aktuell wird kein Vorgang vorbereitet.
+releasePrepare.input.error=Die ''Release-Plugin'' Parameter konnten nicht ermittelt werden - Verarbeitung fehlgeschlagen - {0}
+projectGroup.invalid.id=Ung\u00FCltiger Gruppen-Bezeichner: {0}
+schedule.buildqueues.empty.error=Es m\u00FCssen zu verwendende Warteschlangen angegeben werden.

Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum_fr.properties
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum_fr.properties?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum_fr.properties (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum_fr.properties Thu May  6 09:23:13 2010
@@ -198,6 +198,7 @@ projectGroup.tab.releaseResults = R\u009
 projectGroup.scmRoot.title = Racine SCM du groupe de projet
 projectGroup.scmRoot.label = URL de la racine SCM
 projectGroup.cancelGroupBuild = Annuler la construction du groupe
+projectGroup.invalid.id = Id du groupe de projets invalide : {0}
 
 # ----------------------------------------------------------------------
 # Page: Project Group - Members
@@ -626,7 +627,7 @@ schedule.name.message = Entrer le nom de
 schedule.description.label = Description
 schedule.description.message = Entrer une description pour la planification
 schedule.cronExpression.label = Expression Cron
-schedule.cronExpression.message = Entrer l''expression Cron Le format est d\u00e9crit l\u00e0 : <a href="http://www.opensymphony.com/quartz/api/org/quartz/CronTrigger.html" target="_blank">Syntaxe<a>
+schedule.cronExpression.message = Entrer l''expression Cron Le format est d\u00e9crit l\u00e0 : <a href="http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html" target="_blank">Syntaxe<a>
 schedule.maxJobExecutionTime.label = Temp d''ex\u00e9cution du travail maximum
 schedule.maxJobExecutionTime.message = Entrer le nombre maximal de secondes que le travail peut prendre pour s''executer dans cette planification avant d''\u00eatre tu\u00e9.
 schedule.quietPeriod.label = P\u00e9riode d''attente (secondes)
@@ -722,7 +723,7 @@ releasePerformFromScm.scmUsername.label=
 releasePerformFromScm.scmPassword.label=Mot de passe SCM
 releasePerformFromScm.scmTag.label=SCM Tag
 releasePerformFromScm.scmTagBase.label=SCM Tag Base
-releasePerformFromScm.goals.label=Arguments Maven
+releasePerformFromScm.goals.label=Perform Goals
 releasePerformFromScm.useReleaseProfile.label=Utilisation du profile "release"
 releasePerformFromScm.buildEnvironment.label=Environment de construction
 releasePerformFromScm.page.title=Continuum - Effectuer la "release" du projet

Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum_pt_BR.properties
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum_pt_BR.properties?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum_pt_BR.properties (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum_pt_BR.properties Thu May  6 09:23:13 2010
@@ -556,7 +556,7 @@ releaseViewResult.summary       = Detalh
 save = Salvar
 
 schedule.cronExpression.label        = Express\u00E3o Cron
-schedule.cronExpression.message      = Informe a express\u00E3o cron. O formato est\u00E1 descrito aqui: <a href="http://www.opensymphony.com/quartz/api/org/quartz/CronTrigger.html" target="_blank">Sintaxe<a>
+schedule.cronExpression.message      = Informe a express\u00E3o cron. O formato est\u00E1 descrito aqui: <a href="http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html" target="_blank">Sintaxe<a>
 schedule.dayOfMonth.label            = Dia do M\u00EAs
 schedule.dayOfWeek.label             = Dia da Semana
 schedule.description.label           = Descri\u00E7\u00E3o

Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum_zh_CN.properties
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum_zh_CN.properties?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum_zh_CN.properties (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/resources/localization/Continuum_zh_CN.properties Thu May  6 09:23:13 2010
@@ -597,7 +597,7 @@ schedule.name.message = \u8f93\u5165\u8b
 schedule.description.label = \u63cf\u8ff0
 schedule.description.message = \u8f93\u5165\u8ba1\u5212\u7684\u63cf\u8ff0
 schedule.cronExpression.label = Cron\u8868\u8fbe\u5f0f
-schedule.cronExpression.message = \u8f93\u5165cron\u8868\u8fbe\u5f0f\u3002\u683c\u5f0f\u5982\u8fd9\u91cc\u63cf\u8ff0\uff1a<a href="http://www.opensymphony.com/quartz/api/org/quartz/CronTrigger.html" target="_blank">\u8bed\u6cd5<a>
+schedule.cronExpression.message = \u8f93\u5165cron\u8868\u8fbe\u5f0f\u3002\u683c\u5f0f\u5982\u8fd9\u91cc\u63cf\u8ff0\uff1a<a href="http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html" target="_blank">\u8bed\u6cd5<a>
 schedule.maxJobExecutionTime.label = \u6700\u5927\u4f5c\u4e1a\u6267\u884c\u65f6\u95f4\uff08\u79d2\uff09
 schedule.maxJobExecutionTime.message = \u4e00\u4e2a\u4f5c\u4e1a\u6267\u884c\u5b8c\u6210\u53ef\u80fd\u4f7f\u7528\u7684\u6700\u5927\u79d2\u6570\u3002
 schedule.quietPeriod.label = \u5e73\u9759\u671f\uff08\u79d2\uff09
@@ -672,7 +672,7 @@ releasePerformFromScm.scmUsername.label=
 releasePerformFromScm.scmPassword.label=SCM\u5bc6\u7801
 releasePerformFromScm.scmTag.label=SCM\u6807\u7b7e
 releasePerformFromScm.scmTagBase.label=SCM\u6807\u7b7eBase
-releasePerformFromScm.goals.label=Maven\u53c2\u6570
+releasePerformFromScm.goals.label=Perform Goals
 releasePerformFromScm.useReleaseProfile.label=\u4f7f\u7528\u53d1\u5e03\u914d\u7f6e\u9009\u9879
 releasePerformFromScm.buildEnvironment.label=\u6784\u5efa\u73af\u5883