You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ct...@apache.org on 2008/10/29 05:16:22 UTC

svn commit: r708765 [4/7] - in /continuum/branches/continuum-transient-state: ./ continuum-api/ continuum-api/src/main/java/org/apache/continuum/configuration/ continuum-api/src/main/java/org/apache/continuum/dao/ continuum-api/src/main/java/org/apache...

Modified: continuum/branches/continuum-transient-state/continuum-store/src/test/java/org/apache/maven/continuum/store/AbstractContinuumStoreTestCase.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-store/src/test/java/org/apache/maven/continuum/store/AbstractContinuumStoreTestCase.java?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-store/src/test/java/org/apache/maven/continuum/store/AbstractContinuumStoreTestCase.java (original)
+++ continuum/branches/continuum-transient-state/continuum-store/src/test/java/org/apache/maven/continuum/store/AbstractContinuumStoreTestCase.java Tue Oct 28 21:16:12 2008
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.continuum.dao.ContinuumReleaseResultDao;
 import org.apache.continuum.dao.DaoUtils;
 import org.apache.continuum.dao.DirectoryPurgeConfigurationDao;
 import org.apache.continuum.dao.InstallationDao;
@@ -31,6 +32,7 @@
 import org.apache.continuum.dao.ScheduleDao;
 import org.apache.continuum.dao.SystemConfigurationDao;
 import org.apache.continuum.model.project.ProjectScmRoot;
+import org.apache.continuum.model.release.ContinuumReleaseResult;
 import org.apache.continuum.model.repository.DirectoryPurgeConfiguration;
 import org.apache.continuum.model.repository.LocalRepository;
 import org.apache.continuum.model.repository.RepositoryPurgeConfiguration;
@@ -86,7 +88,9 @@
     protected SystemConfigurationDao systemConfigurationDao;
 
     protected ProjectScmRootDao projectScmRootDao;
-    
+
+    protected ContinuumReleaseResultDao releaseResultDao;
+
     protected ProjectGroup defaultProjectGroup;
 
     protected ProjectGroup testProjectGroup2;
@@ -136,7 +140,7 @@
     protected DirectoryPurgeConfiguration testDirectoryPurgeConfig;
 
     protected ProjectScmRoot testProjectScmRoot;
-    
+
     private SystemConfiguration systemConfiguration;
 
     @Override
@@ -166,8 +170,10 @@
         scheduleDao = (ScheduleDao) lookup( ScheduleDao.class.getName() );
 
         systemConfigurationDao = (SystemConfigurationDao) lookup( SystemConfigurationDao.class.getName() );
-        
+
         projectScmRootDao = (ProjectScmRootDao) lookup( ProjectScmRootDao.class.getName() );
+
+        releaseResultDao = (ContinuumReleaseResultDao) lookup( ContinuumReleaseResultDao.class.getName() );
     }
 
     protected void createBuildDatabase()
@@ -1390,7 +1396,7 @@
         
         return projectScmRoot;
     }
-    
+
     protected static void assertProjectScmRootEquals( ProjectScmRoot expectedConfig, ProjectScmRoot actualConfig )
     {
         assertEquals( "compare project scm root - id", expectedConfig.getId(), actualConfig.getId() );
@@ -1401,6 +1407,35 @@
         assertEquals( "compare project scm root - error", expectedConfig.getError(), actualConfig.getError() );
     }
 
+    protected static ContinuumReleaseResult createTestContinuumReleaseResult( ProjectGroup group, Project project, 
+                                                                              String releaseGoal, int resultCode,
+                                                                              long startTime, long endTime )
+    {
+        ContinuumReleaseResult releaseResult = new ContinuumReleaseResult();
+        releaseResult.setProjectGroup( group );
+        releaseResult.setProject( project );
+        releaseResult.setReleaseGoal( releaseGoal );
+        releaseResult.setResultCode( resultCode );
+        releaseResult.setStartTime( startTime );
+        releaseResult.setEndTime( endTime );
+        
+        return releaseResult;
+    }
+    
+    protected static void assertReleaseResultEquals( ContinuumReleaseResult expectedConfig, 
+                                                     ContinuumReleaseResult actualConfig )
+    {
+        assertEquals( "compare continuum release result - id", expectedConfig.getId(), actualConfig.getId() );
+        assertEquals( "compare continuum release result - releaseGoal", expectedConfig.getReleaseGoal(),
+                      actualConfig.getReleaseGoal() );
+        assertEquals( "compare continuum release result - resultCode", expectedConfig.getResultCode(), 
+                      actualConfig.getResultCode() );
+        assertEquals( "compare continuum release result - startTime", expectedConfig.getStartTime(), 
+                      actualConfig.getStartTime() );
+        assertEquals( "compare continuum release result - endTime", expectedConfig.getEndTime(),
+                      actualConfig.getEndTime() );
+    }
+    
     /**
      * Setup JDO Factory
      *

Modified: continuum/branches/continuum-transient-state/continuum-store/src/test/java/org/apache/maven/continuum/store/ContinuumStoreTest.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-store/src/test/java/org/apache/maven/continuum/store/ContinuumStoreTest.java?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-store/src/test/java/org/apache/maven/continuum/store/ContinuumStoreTest.java (original)
+++ continuum/branches/continuum-transient-state/continuum-store/src/test/java/org/apache/maven/continuum/store/ContinuumStoreTest.java Tue Oct 28 21:16:12 2008
@@ -23,6 +23,7 @@
 import org.apache.continuum.dao.BuildDefinitionTemplateDao;
 import org.apache.continuum.dao.BuildResultDao;
 import org.apache.continuum.model.project.ProjectScmRoot;
+import org.apache.continuum.model.release.ContinuumReleaseResult;
 import org.apache.continuum.model.repository.DirectoryPurgeConfiguration;
 import org.apache.continuum.model.repository.LocalRepository;
 import org.apache.continuum.model.repository.RepositoryPurgeConfiguration;
@@ -1249,7 +1250,7 @@
         assertRepositoryPurgeConfigurationEquals( testRepoPurgeConfiguration3, repoPurgeList.get( 1 ) );
         assertDirectoryPurgeConfigurationEquals( testDirectoryPurgeConfig, dirPurgeList.get( 0 ) );
     }
-    
+
     public void testAddProjectScmRoot()
         throws Exception
     {
@@ -1269,7 +1270,7 @@
         assertProjectScmRootEquals( projectScmRoot, retrievedProjectScmRoot );
         assertProjectGroupEquals( projectScmRoot.getProjectGroup(), retrievedProjectScmRoot.getProjectGroup() );
     }
-    
+
     public void testRemoveProjectScmRoot()
         throws Exception
     {
@@ -1289,6 +1290,30 @@
         assertEquals( "check # of project scm root", 0, projectScmRoots.size() );
     }
 
+	public void testRemoveProjectWithReleaseResult()
+        throws Exception
+    {
+        Project project = projectDao.getProject( testProject1.getId() );
+        ProjectGroup group = project.getProjectGroup();
+        
+        ContinuumReleaseResult releaseResult = createTestContinuumReleaseResult( group, project, "releaseGoal", 0, 0, 0 );
+        releaseResult = releaseResultDao.addContinuumReleaseResult( releaseResult );
+        
+        List<ContinuumReleaseResult> releaseResults = releaseResultDao.getAllContinuumReleaseResults();
+        assertEquals( "check size of continuum release results", 1, releaseResults.size() );
+        
+        ContinuumReleaseResult retrievedResult = releaseResults.get( 0 );
+        assertReleaseResultEquals( releaseResult, retrievedResult );
+        assertProjectGroupEquals( group, retrievedResult.getProjectGroup() );
+        assertProjectEquals( project, retrievedResult.getProject() );
+        
+        releaseResultDao.removeContinuumReleaseResult( releaseResult );
+        projectDao.removeProject( project );
+        assertFalse( projectDao.getProjectsInGroup( group.getId() ).contains( project ) );
+        
+        releaseResults = releaseResultDao.getAllContinuumReleaseResults();
+        assertEquals( "check size of continuum release results", 0, releaseResults.size() );
+    }
     // ----------------------------------------------------------------------
     //  HELPER METHODS
     // ----------------------------------------------------------------------

Modified: continuum/branches/continuum-transient-state/continuum-test/pom.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-test/pom.xml?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-test/pom.xml (original)
+++ continuum/branches/continuum-transient-state/continuum-test/pom.xml Tue Oct 28 21:16:12 2008
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>continuum</artifactId>
     <groupId>org.apache.continuum</groupId>
-    <version>1.2-SNAPSHOT</version>
+    <version>1.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>continuum-test</artifactId>

Modified: continuum/branches/continuum-transient-state/continuum-test/src/main/java/org/apache/maven/continuum/AbstractContinuumTest.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-test/src/main/java/org/apache/maven/continuum/AbstractContinuumTest.java?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-test/src/main/java/org/apache/maven/continuum/AbstractContinuumTest.java (original)
+++ continuum/branches/continuum-transient-state/continuum-test/src/main/java/org/apache/maven/continuum/AbstractContinuumTest.java Tue Oct 28 21:16:12 2008
@@ -132,6 +132,8 @@
 
         configurationService.setWorkingDirectory( getTestFile( "target/working-directory" ) );
 
+        configurationService.setReleaseOutputDirectory( getTestFile( "target/release-outpur" ) );
+
         configurationService.store();
     }
 

Modified: continuum/branches/continuum-transient-state/continuum-test/src/main/java/org/apache/maven/continuum/configuration/ConfigurationServiceMock.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-test/src/main/java/org/apache/maven/continuum/configuration/ConfigurationServiceMock.java?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-test/src/main/java/org/apache/maven/continuum/configuration/ConfigurationServiceMock.java (original)
+++ continuum/branches/continuum-transient-state/continuum-test/src/main/java/org/apache/maven/continuum/configuration/ConfigurationServiceMock.java Tue Oct 28 21:16:12 2008
@@ -207,4 +207,37 @@
 
     }
 
+    public File getReleaseOutputDirectory()
+    {
+        return new File( basedir, "src/test/resources" + "/" + "release-output-directory" );
+    }
+
+    public File getReleaseOutputDirectory( int projectGroupId )
+    {
+        return new File( getReleaseOutputDirectory(), Integer.toString( projectGroupId ) );
+    }
+
+    public File getReleaseOutputFile( int projectGroupId, String releaseName )
+        throws ConfigurationException
+    {
+        File dir = getReleaseOutputDirectory( projectGroupId );
+
+        if ( !dir.exists() && !dir.mkdirs() )
+        {
+            throw new ConfigurationException(
+                "Could not make the release output directory: " + "'" + dir.getAbsolutePath() + "'." );
+        }
+    
+        return new File( dir, releaseName + ".log.txt" );
+    }
+
+    public void setReleaseOutputDirectory( File releaseOutputDirectory )
+    {
+    }
+
+    public String getReleaseOutput( int projectGroupId, String name )
+    {
+        return null;
+    }
+
 }

Modified: continuum/branches/continuum-transient-state/continuum-webapp-test/pom.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp-test/pom.xml?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp-test/pom.xml (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp-test/pom.xml Tue Oct 28 21:16:12 2008
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.continuum</groupId>
     <artifactId>continuum</artifactId>
-    <version>1.2-SNAPSHOT</version>
+    <version>1.3-SNAPSHOT</version>
   </parent>
   <artifactId>continuum-webapp-test</artifactId>
   <name>Continuum Webapp Test</name>

Modified: continuum/branches/continuum-transient-state/continuum-webapp/pom.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/pom.xml?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/pom.xml (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/pom.xml Tue Oct 28 21:16:12 2008
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>continuum</artifactId>
     <groupId>org.apache.continuum</groupId>
-    <version>1.2-SNAPSHOT</version>
+    <version>1.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>continuum-webapp</artifactId>
@@ -516,6 +516,10 @@
       <artifactId>spring-web</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-context-support</artifactId>
+    </dependency>    
+    <dependency>
       <groupId>jmock</groupId>
       <artifactId>jmock</artifactId>
       <scope>test</scope>
@@ -600,6 +604,26 @@
           </plugin>
         </plugins>
       </build>
+    </profile>
+    <profile>
+      <!-- local dev settings use a file which is ignore in svn -->
+      <id>local-jetty-env</id>
+      <activation>
+        <file>
+          <exists>src/local-jettyenv.xml</exists>
+        </file>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.mortbay.jetty</groupId>
+            <artifactId>maven-jetty-plugin</artifactId>
+            <configuration>
+              <jettyEnvXml>src/local-jettyenv.xml</jettyEnvXml>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>      
     </profile>  
   </profiles>
 </project>

Propchange: continuum/branches/continuum-transient-state/continuum-webapp/src/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Tue Oct 28 21:16:12 2008
@@ -0,0 +1 @@
+local-jettyenv.xml

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AbstractBuildDefinitionAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AbstractBuildDefinitionAction.java?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AbstractBuildDefinitionAction.java (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AbstractBuildDefinitionAction.java Tue Oct 28 21:16:12 2008
@@ -19,16 +19,16 @@
  * under the License.
  */
 
-import java.util.LinkedList;
-import java.util.List;
-
 import org.apache.maven.continuum.model.project.BuildDefinition;
 import org.apache.maven.continuum.web.model.BuildDefinitionSummary;
 
+import java.util.LinkedList;
+import java.util.List;
+
 /**
  * @author <a href="mailto:olamy@apache.org">olamy</a>
- * @since 16 sept. 07
  * @version $Id$
+ * @since 16 sept. 07
  */
 public abstract class AbstractBuildDefinitionAction
     extends ContinuumActionSupport
@@ -53,7 +53,7 @@
         }
         bds.setDescription( buildDefinition.getDescription() );
         bds.setType( buildDefinition.getType() );
-        bds.setAlwaysBuild( buildDefinition.isAlwaysBuild() );
+        bds.setAlwaysBuild( buildDefinition.isBuildFresh() || buildDefinition.isAlwaysBuild() );
         return bds;
     }
 

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddMavenProjectAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddMavenProjectAction.java?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddMavenProjectAction.java (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddMavenProjectAction.java Tue Oct 28 21:16:12 2008
@@ -19,15 +19,8 @@
  * under the License.
  */
 
-import org.apache.maven.continuum.ContinuumException;
-import org.apache.maven.continuum.builddefinition.BuildDefinitionServiceException;
-import org.apache.maven.continuum.model.project.BuildDefinitionTemplate;
-import org.apache.maven.continuum.model.project.ProjectGroup;
-import org.apache.maven.continuum.project.builder.ContinuumProjectBuildingResult;
-import org.apache.maven.continuum.web.exception.AuthorizationRequiredException;
-import org.codehaus.plexus.util.StringUtils;
-
 import java.io.File;
+import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
@@ -35,6 +28,16 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.maven.continuum.ContinuumException;
+import org.apache.maven.continuum.builddefinition.BuildDefinitionServiceException;
+import org.apache.maven.continuum.model.project.BuildDefinitionTemplate;
+import org.apache.maven.continuum.model.project.ProjectGroup;
+import org.apache.maven.continuum.project.builder.ContinuumProjectBuildingResult;
+import org.apache.maven.continuum.web.exception.AuthorizationRequiredException;
+import org.codehaus.plexus.util.StringUtils;
+
 /**
  * Action to add a Maven project to Continuum, either Maven 1 or Maven 2.
  *
@@ -136,14 +139,23 @@
             {
                 try
                 {
-                    pom = pomFile.toURL().toString();
+                    //pom = pomFile.toURL().toString();
                     checkProtocol = false;
+                    // CONTINUUM-1897
+                    // File.c copyFile to tmp one
+                    File tmpPom = File.createTempFile( "continuum_tmp", "tmp" );
+                    FileUtils.copyFile( pomFile, tmpPom );
+                    pom = tmpPom.toURL().toString();
                 }
                 catch ( MalformedURLException e )
                 {
                     // if local file can't be converted to url it's an internal error
                     throw new RuntimeException( e );
                 }
+                catch ( IOException e )
+                {
+                    throw new RuntimeException( e );
+                }
             }
             else
             {
@@ -161,6 +173,13 @@
             {
                 String cause = result.getErrorsWithCause().get( key );
                 String msg = getText( key, new String[] { cause } );
+
+                // olamy : weird getText(key, String[]) must do that something like bla bla {0}
+                // here an ugly hack for CONTINUUM-1675
+                if ( key.equals( ContinuumProjectBuildingResult.ERROR_MISSING_SCM ) )
+                {
+                    msg = getResourceBundle().getString( key ) + " " + cause;
+                }
                 if ( !StringUtils.equals( msg, key ) )
                 {
                     errorMessages.add( msg );
@@ -169,7 +188,7 @@
                 {
                     addActionError( msg );
                 }
-                
+
             }
 
             return doDefault();

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ContinuumActionSupport.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ContinuumActionSupport.java?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ContinuumActionSupport.java (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ContinuumActionSupport.java Tue Oct 28 21:16:12 2008
@@ -478,6 +478,12 @@
         checkAuthorization( ContinuumRoleConstants.CONTINUUM_MANAGE_QUEUES );
     }
     
+    protected void checkManageLocalRepositoriesAuthorization()
+        throws AuthorizationRequiredException
+    {   
+        checkAuthorization( ContinuumRoleConstants.CONTINUUM_MANAGE_REPOSITORIES );
+    }
+    
     /**
      * Get the security session
      *

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectGroupAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectGroupAction.java?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectGroupAction.java (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectGroupAction.java Tue Oct 28 21:16:12 2008
@@ -119,14 +119,18 @@
 
     private int buildDefinitionId;
 
+    private boolean fromSummaryPage = false;
+
     private String preferredExecutor = "maven2";
-    
+
     private String url;
 
     private int repositoryId;
 
     private List<LocalRepository> repositories;
 
+    private boolean disabledRepositories = true;
+
     private List<ProjectScmRoot> projectScmRoots;
 
     public String summary()
@@ -168,35 +172,35 @@
         }
 
         if ( projectGroup != null )
-        {        	
+        {
             if ( projectGroup.getProjects() != null && projectGroup.getProjects().size() > 0 )
             {
                 int nbMaven2Projects = 0;
                 int nbMaven1Projects = 0;
                 int nbAntProjects = 0;
                 int nbShellProjects = 0;
-                
+
                 // get the projects according to build order (first project in the group is the root project)            
                 try
-                {                	
-                	Project rootProject =
-                            ( getContinuum().getProjectsInBuildOrder( getContinuum().getProjectsInGroupWithDependencies(
-                                projectGroupId ) ) ).get( 0 );
-                	if( "maven2".equals( rootProject.getExecutorId() ) || "maven-1".equals( rootProject.getExecutorId() ) )
-                	{
-                		url = rootProject.getUrl();
-                	}
+                {
+                    Project rootProject = ( getContinuum().getProjectsInBuildOrder(
+                        getContinuum().getProjectsInGroupWithDependencies( projectGroupId ) ) ).get( 0 );
+                    if ( "maven2".equals( rootProject.getExecutorId() ) ||
+                        "maven-1".equals( rootProject.getExecutorId() ) )
+                    {
+                        url = rootProject.getUrl();
+                    }
                 }
-                catch ( CycleDetectedException e ) 
+                catch ( CycleDetectedException e )
                 {
                     // ignore. url won't be displayed if null
                 }
-                
+
                 for ( Object o : projectGroup.getProjects() )
                 {
                     Project p = (Project) o;
                     if ( "maven2".equals( p.getExecutorId() ) )
-                    {   
+                    {
                         nbMaven2Projects += 1;
                     }
                     else if ( "maven-1".equals( p.getExecutorId() ) )
@@ -315,12 +319,22 @@
             return REQUIRES_AUTHORIZATION;
         }
 
+        try
+        {
+            checkManageLocalRepositoriesAuthorization();
+            disabledRepositories = false;
+        }
+        catch ( AuthorizationRequiredException authzE )
+        {
+            // do nothing
+        }
+
         projectGroup = getContinuum().getProjectGroupWithProjects( projectGroupId );
 
         name = projectGroup.getName();
 
         description = projectGroup.getDescription();
-        
+
         projectList = projectGroup.getProjects();
 
         if ( projectList != null )
@@ -342,10 +356,13 @@
         while ( proj_group.hasNext() )
         {
             ProjectGroup pg = (ProjectGroup) proj_group.next();
-            projectGroups.put( new Integer( pg.getId() ), pg.getName() );
+            if ( isAuthorized( projectGroup.getName() ) )
+            {
+                projectGroups.put( new Integer( pg.getId() ), pg.getName() );
+            }
         }
 
-        if ( projectGroup.getLocalRepository() != null)
+        if ( projectGroup.getLocalRepository() != null )
         {
             repositoryId = projectGroup.getLocalRepository().getId();
         }
@@ -353,9 +370,19 @@
         {
             repositoryId = -1;
         }
-        
+
         repositories = getContinuum().getRepositoryService().getAllLocalRepositories();
-        
+
+        Collection<Project> projList = getContinuum().getProjectsInGroupWithDependencies( projectGroup.getId() );
+        if ( projList != null && projList.size() > 0 )
+        {
+            Project rootProject = ( getContinuum().getProjectsInBuildOrder( projList ) ).get( 0 );
+
+            if (rootProject != null)
+            {
+                setUrl( rootProject.getUrl() );
+            }
+        }
         return SUCCESS;
     }
 
@@ -424,7 +451,7 @@
         }
 
         projectGroup.setDescription( description );
-        
+
         if ( repositoryId > 0 )
         {
             LocalRepository repository = getContinuum().getRepositoryService().getLocalRepository( repositoryId );
@@ -434,9 +461,19 @@
         {
             projectGroup.setLocalRepository( null );
         }
-        
+
         getContinuum().updateProjectGroup( projectGroup );
 
+        Collection<Project> projectList = getContinuum().getProjectsInGroupWithDependencies( projectGroupId );
+        if ( projectList != null && projectList.size() > 0 )
+        {
+            Project rootProject = ( getContinuum().getProjectsInBuildOrder( projectList ) ).get( 0 );
+
+            rootProject.setUrl( url );
+
+            getContinuum().updateProject( rootProject );
+        }
+
         Iterator keys = projects.keySet().iterator();
         while ( keys.hasNext() )
         {
@@ -460,7 +497,7 @@
             ProjectGroup newProjectGroup =
                 getContinuum().getProjectGroupWithProjects( new Integer( id[0] ).intValue() );
 
-            if ( newProjectGroup.getId() != projectGroup.getId() )
+            if ( newProjectGroup.getId() != projectGroup.getId() && isAuthorized( newProjectGroup.getName() ) )
             {
                 getLogger().info(
                     "Moving project " + project.getName() + " to project group " + newProjectGroup.getName() );
@@ -501,7 +538,15 @@
         {
             getContinuum().buildProjectGroupWithBuildDefinition( projectGroupId, buildDefinitionId );
         }
-        return SUCCESS;
+
+        if ( this.isFromSummaryPage() )
+        {
+            return "to_summary_page";
+        }
+        else
+        {
+            return SUCCESS;
+        }
     }
 
     public String release()
@@ -525,7 +570,7 @@
         boolean allBuildsOk = true;
 
         boolean allMavenTwo = true;
-        
+
         projectList = getContinuum().getProjectsInGroupWithDependencies( projectGroupId );
 
         if ( projectList != null )
@@ -555,7 +600,7 @@
                         return INPUT;
                     }
                 }
-                
+
                 if ( !"maven2".equals( p.getExecutorId() ) )
                 {
                     allMavenTwo = false;
@@ -907,6 +952,16 @@
         this.buildDefinitionId = buildDefinitionId;
     }
 
+    public boolean isFromSummaryPage()
+    {
+        return fromSummaryPage;
+    }
+
+    public void setFromSummaryPage( boolean fromSummaryPage )
+    {
+        this.fromSummaryPage = fromSummaryPage;
+    }
+
     public String getPreferredExecutor()
     {
         return preferredExecutor;
@@ -951,4 +1006,27 @@
 	{
 	    this.projectScmRoots = projectScmRoots;
 	}
+
+	public boolean isDisabledRepositories()
+    {
+        return disabledRepositories;
+    }
+
+    public void setDisabledRepositories( boolean disabledRepositories )
+    {
+        this.disabledRepositories = disabledRepositories;
+    }
+
+    private boolean isAuthorized( String projectGroupName )
+    {
+        try
+        {
+            checkAddProjectToGroupAuthorization( projectGroupName );
+            return true;
+        }
+        catch ( AuthorizationRequiredException authzE )
+        {
+            return false;
+        }
+    }
 }

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseInProgressAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseInProgressAction.java?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseInProgressAction.java (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseInProgressAction.java Tue Oct 28 21:16:12 2008
@@ -19,7 +19,16 @@
  * under the License.
  */
 
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import org.apache.continuum.model.release.ContinuumReleaseResult;
 import org.apache.maven.continuum.ContinuumException;
+import org.apache.maven.continuum.configuration.ConfigurationException;
+import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.model.project.ProjectGroup;
 import org.apache.maven.continuum.release.ContinuumReleaseManager;
 import org.apache.maven.continuum.release.ContinuumReleaseManagerListener;
 import org.apache.maven.continuum.web.exception.AuthorizationRequiredException;
@@ -82,6 +91,17 @@
             throw new Exception( "There is no on-going or finished release operation with id " + releaseId );
         }
 
+        if ( status.equals( SUCCESS ) )
+        {
+            ReleaseResult result = (ReleaseResult) releaseManager.getReleaseResults().get( releaseId );
+
+            if ( result != null && getContinuum().getContinuumReleaseResult( projectId, releaseGoal, result.getStartTime(), result.getEndTime() ) == null )
+            {
+                ContinuumReleaseResult releaseResult = createContinuumReleaseResult( result );
+                getContinuum().addContinuumReleaseResult( releaseResult );
+            }
+        }
+
         return status;
     }
 
@@ -180,4 +200,41 @@
 
         return projectGroupName;
     }
+
+    private ContinuumReleaseResult createContinuumReleaseResult( ReleaseResult result )
+        throws ContinuumException
+    {
+        ContinuumReleaseResult releaseResult = new ContinuumReleaseResult();
+        releaseResult.setStartTime( result.getStartTime() );
+        releaseResult.setEndTime( result.getEndTime() );
+        releaseResult.setResultCode( result.getResultCode() );
+
+        Project project = getContinuum().getProject( projectId );
+        ProjectGroup projectGroup = project.getProjectGroup();
+        releaseResult.setProjectGroup( projectGroup );
+        releaseResult.setProject( project );
+        releaseResult.setReleaseGoal( releaseGoal );
+
+        String releaseName = "releases-" + result.getStartTime();
+
+        try
+        {
+            File logFile = getContinuum().getConfiguration().getReleaseOutputFile( projectGroup.getId(), releaseName );
+
+            PrintWriter writer = new PrintWriter( new FileWriter( logFile ) );
+            writer.write( result.getOutput() );
+            writer.close();
+        }
+        catch ( ConfigurationException e )
+        {
+            throw new ContinuumException( e.getMessage(), e );
+        }
+        catch ( IOException e )
+        {
+            throw new ContinuumException( "Unable to write output to file", e );
+        }
+
+        return releaseResult;
+    }
+
 }

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePerformAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePerformAction.java?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePerformAction.java (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePerformAction.java Tue Oct 28 21:16:12 2008
@@ -20,17 +20,19 @@
  */
 
 import org.apache.continuum.model.repository.LocalRepository;
+import org.apache.continuum.release.config.ContinuumReleaseDescriptor;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.model.system.Profile;
 import org.apache.maven.continuum.release.ContinuumReleaseManager;
 import org.apache.maven.continuum.release.ContinuumReleaseManagerListener;
 import org.apache.maven.continuum.release.DefaultReleaseManagerListener;
 import org.apache.maven.continuum.web.exception.AuthorizationRequiredException;
 import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
 import org.apache.maven.shared.release.ReleaseResult;
-import org.apache.maven.shared.release.config.ReleaseDescriptor;
 
 import java.io.File;
+import java.util.List;
 
 /**
  * @author Edwin Punzalan
@@ -63,6 +65,10 @@
 
     private String projectGroupName = "";
 
+    private List<Profile> profiles;
+
+    private int profileId;
+
     public String inputFromScm()
         throws Exception
     {
@@ -79,6 +85,8 @@
 
         releaseId = "";
 
+        profiles = this.getContinuum().getProfileService().getAllProfiles();
+
         return SUCCESS;
     }
 
@@ -132,12 +140,20 @@
     {
         ContinuumReleaseManager releaseManager = getContinuum().getReleaseManager();
 
-        ReleaseDescriptor descriptor = new ReleaseDescriptor();
+        ContinuumReleaseDescriptor descriptor = new ContinuumReleaseDescriptor();
         descriptor.setScmSourceUrl( scmUrl );
         descriptor.setScmUsername( scmUsername );
         descriptor.setScmPassword( scmPassword );
         descriptor.setScmReleaseLabel( scmTag );
         descriptor.setScmTagBase( scmTagBase );
+        
+        Profile profile = null;
+        
+        if ( profileId != -1 )
+        {
+            profile = getContinuum().getProfileService().getProfile( profileId );
+            descriptor.setEnvironments( releaseManager.getEnvironments( profile ) );
+        }
 
         do
         {
@@ -291,4 +307,25 @@
 
         return projectGroupName;
     }
+
+    public List<Profile> getProfiles()
+    {
+        return profiles;
+    }
+
+    public void setProfiles( List<Profile> profiles )
+    {
+        this.profiles = profiles;
+    }
+
+    public int getProfileId()
+    {
+        return profileId;
+    }
+
+    public void setProfileId( int profileId )
+    {
+        this.profileId = profileId;
+    }
+    
 }

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePrepareAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePrepareAction.java?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePrepareAction.java (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleasePrepareAction.java Tue Oct 28 21:16:12 2008
@@ -21,6 +21,7 @@
 
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.model.system.Profile;
 import org.apache.maven.continuum.release.ContinuumReleaseManager;
 import org.apache.maven.continuum.release.ContinuumReleaseManagerListener;
 import org.apache.maven.continuum.release.DefaultReleaseManagerListener;
@@ -85,6 +86,10 @@
 
     private String projectGroupName = "";
 
+    private List<Profile> profiles;
+
+    private int profileId;
+
     public String input()
         throws Exception
     {
@@ -138,6 +143,8 @@
 
         processProject( workingDirectory, "pom.xml" );
 
+        profiles = this.getContinuum().getProfileService().getAllProfiles();
+
         return SUCCESS;
     }
 
@@ -210,11 +217,18 @@
         {
             name = project.getArtifactId();
         }
+        
+        Profile profile = null;
+        
+        if ( profileId != -1 )
+        {
+            profile = getContinuum().getProfileService().getProfile( profileId );
+        }
 
         ContinuumReleaseManager releaseManager = getContinuum().getReleaseManager();
 
         releaseId =
-            releaseManager.prepare( project, getReleaseProperties(), getRelVersionMap(), getDevVersionMap(), listener );
+            releaseManager.prepare( project, getReleaseProperties(), getRelVersionMap(), getDevVersionMap(), listener, profile );
 
         return SUCCESS;
     }
@@ -526,4 +540,24 @@
 
         return projectGroupName;
     }
+
+    public List<Profile> getProfiles()
+    {
+        return profiles;
+    }
+
+    public void setProfiles( List<Profile> profiles )
+    {
+        this.profiles = profiles;
+    }
+
+    public int getProfileId()
+    {
+        return profileId;
+    }
+
+    public void setProfileId( int profileId )
+    {
+        this.profileId = profileId;
+    }
 }

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseProjectAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseProjectAction.java?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseProjectAction.java (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseProjectAction.java Tue Oct 28 21:16:12 2008
@@ -55,6 +55,8 @@
 
     private String projectGroupName = "";
 
+    protected static final String REQUIRES_CONFIGURATION = "releaseOutputDir-required";
+
     public String promptReleaseGoal()
         throws Exception
     {
@@ -67,6 +69,12 @@
             return REQUIRES_AUTHORIZATION;
         }
 
+        // check if releaseOutputDirectory is already set
+        if ( getContinuum().getConfiguration().getReleaseOutputDirectory() == null )
+        {
+            return REQUIRES_CONFIGURATION;
+        }
+        
         project = getContinuum().getProjectWithAllDetails( projectId );
 
         String releaseId = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseRollbackAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseRollbackAction.java?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseRollbackAction.java (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ReleaseRollbackAction.java Tue Oct 28 21:16:12 2008
@@ -46,6 +46,8 @@
 
     private String projectGroupName = "";
 
+    private String releaseGoal;
+
     public String execute()
         throws Exception
     {
@@ -129,4 +131,14 @@
 
         return projectGroupName;
     }
+
+    public String getReleaseGoal()
+    {
+        return releaseGoal;
+    }
+
+    public void setReleaseGoal( String releaseGoal )
+    {
+        this.releaseGoal = releaseGoal;
+    }
 }

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/ConfigurationAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/ConfigurationAction.java?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/ConfigurationAction.java (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/ConfigurationAction.java Tue Oct 28 21:16:12 2008
@@ -54,6 +54,10 @@
     private String deploymentRepositoryDirectory;
 
     private String baseUrl;
+    
+    private String releaseOutputDirectory;
+
+    private boolean requireReleaseOutput;
 
     public void prepare()
     {
@@ -86,10 +90,24 @@
                 request.getContextPath();
             getLogger().info( "baseUrl='" + baseUrl + "'" );
         }
+
+        File releaseOutputDirectoryFile = configuration.getReleaseOutputDirectory();
+        if ( releaseOutputDirectoryFile != null )
+        {
+            releaseOutputDirectory = releaseOutputDirectoryFile.getAbsolutePath();
+        }
+
+        String requireRelease = ServletActionContext.getRequest().getParameter( "requireReleaseOutput" );
+        setRequireReleaseOutput( new Boolean( requireRelease ) );
     }
 
     public String input()
     {
+        if ( isRequireReleaseOutput() )
+        {
+            addActionError( "configuration.releaseOutputDirectory.required" );
+        }
+
         return INPUT;
     }
 
@@ -115,6 +133,20 @@
 
         configuration.setInitialized( true );
 
+        if ( StringUtils.isNotEmpty( releaseOutputDirectory ) )
+        {
+            configuration.setReleaseOutputDirectory( new File( releaseOutputDirectory ) );
+        }
+        else if ( isRequireReleaseOutput() )
+        {
+            addActionError( "configuration.releaseOutputDirectory.required" );
+            return ERROR;
+        }
+        else
+        {
+            configuration.setReleaseOutputDirectory( null );
+        }
+
         configuration.store();
 
         return SUCCESS;
@@ -169,4 +201,24 @@
 
         return bundle;
     }
+
+    public String getReleaseOutputDirectory()
+    {
+        return releaseOutputDirectory;
+    }
+
+    public void setReleaseOutputDirectory( String releaseOutputDirectory )
+    {
+        this.releaseOutputDirectory = releaseOutputDirectory;
+    }
+
+    public boolean isRequireReleaseOutput()
+    {
+        return requireReleaseOutput;
+    }
+
+    public void setRequireReleaseOutput( boolean requireReleaseOutput )
+    {
+        this.requireReleaseOutput = requireReleaseOutput;
+    }
 }

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/ProfileAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/ProfileAction.java?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/ProfileAction.java (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/ProfileAction.java Tue Oct 28 21:16:12 2008
@@ -37,6 +37,7 @@
 import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
 import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
 
+import com.opensymphony.webwork.ServletActionContext;
 import com.opensymphony.xwork.Preparable;
 
 /**
@@ -70,6 +71,8 @@
 
     private List<Installation> profileInstallations;
 
+    private String message;
+
     // -------------------------------------------------------
     //  Webwork Methods
     // -------------------------------------------------------
@@ -84,6 +87,13 @@
     public String list()
         throws Exception
     {
+        String errorMessage = ServletActionContext.getRequest().getParameter( "errorMessage" );
+
+        if ( errorMessage != null )
+        {
+            addActionError( errorMessage );
+        }
+
         this.profiles = profileService.getAllProfiles();
         return SUCCESS;
     }
@@ -106,7 +116,7 @@
         {
             Profile stored = profileService.getProfile( profile.getId() );
 
-            if ( StringUtils.isEmpty( profile.getName() ) )
+            if ( StringUtils.isBlank( profile.getName() ) )
             {
                 if ( stored != null )
                 {
@@ -150,9 +160,17 @@
     public String delete()
         throws Exception
     {
-        profileService.deleteProfile( profile.getId() );
-        this.profiles = profileService.getAllProfiles();
-        return SUCCESS;
+        try
+        {
+            profileService.deleteProfile( profile.getId() );
+            this.profiles = profileService.getAllProfiles();
+            return SUCCESS;
+        }
+        catch ( ProfileException e )
+        {
+            message = "profile.remove.error";
+            return ERROR;
+        }
     }
 
     public String confirmDelete()
@@ -283,4 +301,14 @@
     {
         this.installationId = installationId;
     }
+
+    public String getMessage()
+    {
+        return message;
+    }
+
+    public void setMessage( String message )
+    {
+        this.message = message;
+    }
 }

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/META-INF/plexus/application.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/META-INF/plexus/application.xml?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/META-INF/plexus/application.xml (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/META-INF/plexus/application.xml Tue Oct 28 21:16:12 2008
@@ -57,7 +57,8 @@
           <role>org.apache.continuum.dao.BuildResultDao</role>
         </requirement>
         <requirement>
-          <role>org.codehaus.plexus.mailsender.MailSender</role>
+          <role>mailSender</role>
+          <role-hint>continuum</role-hint>
         </requirement>
         <requirement>
           <role>org.apache.maven.continuum.configuration.ConfigurationService</role>
@@ -98,22 +99,16 @@
         <includeTestSummary>true</includeTestSummary>
         <includeOutput>false</includeOutput>
         <alwaysSend>false</alwaysSend>
-      </configuration>
-    </component>
-
-    <component>
-      <role>org.codehaus.plexus.notification.RecipientSource</role>
-      <implementation>org.apache.maven.continuum.notification.ContinuumRecipientSource</implementation>
-      <configuration>
         <!--
         Setting this propery will make Continuum send all emails to
         this address instead the address specified in the project
         configuration
-        -->
-        <to-override></to-override>
+        -->        
+        <toOverride></toOverride>
       </configuration>
     </component>
-
+  
+    <!-- TODO remove when redback will not use anymore plexus-mail -->
     <component>
       <role>org.codehaus.plexus.mailsender.MailSender</role>
       <implementation>org.codehaus.plexus.mailsender.javamail.JndiJavamailMailSender</implementation>

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/localization/Continuum.properties
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/localization/Continuum.properties?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/localization/Continuum.properties (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/localization/Continuum.properties Tue Oct 28 21:16:12 2008
@@ -170,6 +170,7 @@
 projectGroup.release.error.projectNotInSuccess = Cannot release project group: one or more projects in the group were not built successfully.
 projectGroup.deleteGroup = Delete Group
 projectGroup.buildGroup = Build all projects
+projectGroup.buildGroupNow = Build Group Now
 projectGroup.deleteProjects = Delete Project(s)
 projectGroup.buildProjects = Build Project(s)
 projectGroup.cancelBuilds = Cancel Build(s)
@@ -179,7 +180,9 @@
 projectGroup.buildsStatut.success = Success
 projectGroup.buildDefinition.label = Default Build Definition
 projectGroup.addProject.label = Add New Project
+projectGroup.releaseNow = Release Group
 projectGroup.repository.label = Local Repository
+projectGroup.tab.releaseResults = Release Results
 projectGroup.scmRoot.title = Project Group Scm Root
 projectGroup.scmRoot.label = Scm Root URL
 
@@ -236,6 +239,9 @@
 configuration.companyName.message = Enter the company name
 configuration.companyLogo.message = Enter the company logo
 configuration.companyUrl.message = Enter the URL of the official company website
+configuration.releaseOutputDirectory.label = Release Output Directory
+configuration.releaseOutputDirectory.message = Enter the release output directory of the Continuum web application
+configuration.releaseOutputDirectory.required = You must define a release output directory
 
 # ----------------------------------------------------------------------
 # Page: Add Project
@@ -252,7 +258,7 @@
 add.project.missing.version.error = Missing ''version'' element in the POM.
 add.project.missing.name.error = Missing ''name'' element in the POM.
 add.project.missing.repository.error = Missing ''repository'' element in the POM.
-add.project.missing.scm.error = Missing ''scm'' element in the POM, projet {0}
+add.project.missing.scm.error = Missing ''scm'' element in the POM, project 
 add.project.missing.scm.connection.error = Missing ''connection'' sub-element in the ''scm'' element in the POM.
 add.project.missing.notifier.type.error = Missing ''type'' sub-element in the ''notifier'' element in the POM.
 add.project.missing.notifier.configuration.error = Missing ''configuration'' sub-element in the ''notifier'' element in the POM.
@@ -652,6 +658,22 @@
 releaseViewResult.error=ERROR
 releaseViewResult.output=Release Execution Output
 releaseViewResult.noOutput=No Output
+releaseViewResult.projectName=Project Name
+releaseViewResult.releaseGoal=Release Goal
+releasePrepare.scmUsername.label=SCM Username
+releasePrepare.scmPassword.label=SCM Password
+releasePrepare.scmTag.label=SCM Tag
+releasePrepare.scmTagBase.label=SCM Tag Base
+releasePrepare.prepareGoals.label=Preparation Goals
+releasePrepare.buildEnvironment.label=Build Environment
+releasePerformFromScm.scmUrl.label=SCM Connection URL
+releasePerformFromScm.scmUsername.label=SCM Username
+releasePerformFromScm.scmPassword.label=SCM Password
+releasePerformFromScm.scmTag.label=SCM Tag
+releasePerformFromScm.scmTagBase.label=SCM Tag Base
+releasePerformFromScm.goals.label=Maven Arguments
+releasePerformFromScm.useReleaseProfile.label=Use Release Profile
+releasePerformFromScm.buildEnvironment.label=Build Environment
 
 # ----------------------------------------------------------------------
 # Page: User
@@ -695,6 +717,7 @@
 profile.no.installations = No installations available
 profile.name.already.exists = A Build Environment with the same name already exists
 profile.name.required = You must define a name.
+profile.remove.error = The Build Environment can't be removed, it is probably used by a build definition.
 
 # ----------------------------------------------------------------------
 # Page: Installations List
@@ -896,6 +919,27 @@
 purgeConfig.enabled.label = Enabled
 purgeConfig.no.repositories = No repositories to purge
 
+
+# ----------------------------------------------------------------------
+# Page: Release Results
+# ----------------------------------------------------------------------
+projectGroup.releaseResults.section.title = Release Results of {0} group
+releaseResults.viewResult = View Result
+releaseResults.state = State
+releaseResults.startTime = Start Time
+releaseResults.endTime = End Time
+releaseResults.success = SUCCESSFUL
+releaseResults.error = ERROR
+releaseResults.project = Project Name
+releaseResults.releaseGoal = Release Goal
+
+# ----------------------------------------------------------------------
+# Page: Confirm Delete Release Results
+# ----------------------------------------------------------------------
+deleteReleaseResults.page.title = Continuum - Delete Release Results
+deleteReleaseResults.section.title = Delete Release Results
+deleteReleaseResults.confirmation.message = Are you sure you want to delete {0} release results ?
+
 # ----------------------------------------------------------------------
 # Page: ScmResult
 # ----------------------------------------------------------------------

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/localization/Continuum_fr.properties
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/localization/Continuum_fr.properties?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/localization/Continuum_fr.properties (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/localization/Continuum_fr.properties Tue Oct 28 21:16:12 2008
@@ -166,6 +166,7 @@
 projectGroup.release.error.projectNotInSuccess = Ne peut pas faire la "release" du groupe de projet : un ou plusieurs projets dans le groupe n''ont pas pu \u00eatre construit avec succ\u00e8s.
 projectGroup.deleteGroup = Supprimer groupe
 projectGroup.buildGroup = Construire tous les projets
+projectGroup.buildGroupNow = Construire le groupe maintenant
 projectGroup.deleteProjects = Supprimer projet(s)
 projectGroup.buildProjects = Construire projet(s)
 projectGroup.cancelBuilds = Annuler construction(s)
@@ -175,6 +176,7 @@
 projectGroup.buildsStatut.success = Succ\u00e8s
 projectGroup.buildDefinition.label = D\u00e9finitions de la construction par d\u00e9fault
 projectGroup.addProject.label = Ajouter un nouveau projet
+projectGroup.releaseNow = Release du groupe
 
 # ----------------------------------------------------------------------
 # Page: Project Group - Members
@@ -245,7 +247,7 @@
 add.project.missing.version.error = L''\u00e9l\u00e9ment "version" est manquant dans le fichier POM.
 add.project.missing.name.error = L''\u00e9l\u00e9ment "name" est manquant dans le fichier POM.
 add.project.missing.repository.error = L''\u00e9l\u00e9ment "repository" est manquant dans le fichier POM.
-add.project.missing.scm.error = L''\u00e9l\u00e9ment "scm" est manquant dans le fichier POM, projet {0}
+add.project.missing.scm.error = L''\u00e9l\u00e9ment "scm" est manquant dans le fichier POM, projet 
 add.project.missing.scm.connection.error = Le sous-\u00e9l\u00e9ment "connection est manquant dans le fichier POM.
 add.project.missing.notifier.type.error = Le sous-\u00e9l\u00e9ment "type" dans l''\u00e9l\u00e9ment "notifier" est manquant dans le fichier POM.
 add.project.missing.notifier.configuration.error = Le sous-\u00e9l\u00e9ment "configuration" dans l'\u00e9l\u00e9ment "notifier" est manquant dans le fichier POM.

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/localization/Continuum_pt_BR.properties
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/localization/Continuum_pt_BR.properties?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/localization/Continuum_pt_BR.properties (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/localization/Continuum_pt_BR.properties Tue Oct 28 21:16:12 2008
@@ -77,7 +77,7 @@
 add.project.missing.pom.error                    = Arquivo POM n\u00E3o existe. Talvez o POM que voc\u00EA especificou ou um de seus m\u00F3dulos n\u00E3o existam.
 add.project.missing.repository.error             = Falta elemento ''repository'' no POM.
 add.project.missing.scm.connection.error         = Falta sub-elemento ''connection'' no elemento ''scm'' no POM.
-add.project.missing.scm.error                    = Falta o elemento ''scm'' no POM, projet {0}
+add.project.missing.scm.error                    = Falta o elemento ''scm'' no POM, projet
 add.project.missing.version.error                = Falta o elemento ''version'' no POM.
 add.project.nogroup.error                        = Nenhum grupo de projeto foi fornecido.
 add.project.project.building.error               = Erro desconhecido ao realizar build do POM.

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/org/apache/maven/continuum/web/action/admin/ConfigurationAction.properties
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/org/apache/maven/continuum/web/action/admin/ConfigurationAction.properties?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/org/apache/maven/continuum/web/action/admin/ConfigurationAction.properties (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/org/apache/maven/continuum/web/action/admin/ConfigurationAction.properties Tue Oct 28 21:16:12 2008
@@ -20,4 +20,4 @@
 configuration.workingDirectory.required = You must define a working directory.
 configuration.buildOutputDirectory.required = You must define a build output directory.
 configuration.baseUrl.required = You must define a URL.
-configuration.baseUrl.invalid = You must define a valid URL.
+configuration.baseUrl.invalid = You must define a valid URL.
\ No newline at end of file

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/xwork.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/xwork.xml?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/xwork.xml (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/resources/xwork.xml Tue Oct 28 21:16:12 2008
@@ -178,7 +178,11 @@
     
     <action name="addMavenTwoProject" class="addMavenTwoProject">
       <interceptor-ref name="configuredContinuumStack"/>
-      <interceptor-ref name="execAndWait"/> 
+      <interceptor-ref name="fileUpload"/>
+      <interceptor-ref name="execAndWait">
+        <param name="delay">200</param>
+        <param name="delaySleepInterval">50</param>
+      </interceptor-ref> 
       <result name="wait">/WEB-INF/jsp/navigations/wait.jsp</result>     
       <result name="input">/WEB-INF/jsp/addMavenTwoProject.jsp</result>
       <result name="success" type="chain">groupSummary</result>
@@ -315,6 +319,7 @@
         <param name="actionName">projectGroupSummary</param>
         <param name="projectGroupId">${projectGroupId}</param>
       </result>
+      <result name="to_summary_page" type="chain">groupSummary</result>
     </action>
 
     <action name="removeProjectGroup" class="projectGroup" method="remove">
@@ -449,6 +454,12 @@
     -->
     <action name="releasePromptGoal" class="releaseProject" method="promptReleaseGoal">
       <result name="success">/WEB-INF/jsp/releaseProject.jsp</result>
+      <result name="releaseOutputDir-required" type="redirect-action">
+        <param name="actionName">configuration</param>
+        <param name="namespace">/admin</param>
+        <param name="method">input</param>
+        <param name="requireReleaseOutput">true</param>
+      </result>
     </action>
 
     <action name="releaseProject" class="releaseProject">
@@ -477,6 +488,7 @@
         <param name="actionName">releaseInProgress</param>
         <param name="releaseId">${releaseId}</param>
         <param name="projectId">${projectId}</param>
+        <param name="releaseGoal">prepare</param>
       </result>
     </action>
 
@@ -490,6 +502,7 @@
         <param name="actionName">releaseInProgress</param>
         <param name="releaseId">${releaseId}</param>
         <param name="projectId">${projectId}</param>
+        <param name="releaseGoal">perform</param>
       </result>
     </action>
 
@@ -503,6 +516,7 @@
         <param name="actionName">releaseInProgress</param>
         <param name="projectId">${projectId}</param>
         <param name="releaseId">${releaseId}</param>
+        <param name="releaseGoal">perform</param>
       </result>
     </action>
 
@@ -533,6 +547,21 @@
       <result name="success">/WEB-INF/jsp/releaseViewResult.jsp</result>
     </action>
 
+    <action name="viewReleaseResult" class="releaseResult" method="viewResult">
+      <result name="success">/WEB-INF/jsp/releaseViewResult.jsp</result>
+    </action>
+
+    <action name="projectGroupReleaseResults" class="releaseResult" method="list">
+      <result name="success">/WEB-INF/jsp/projectGroupReleaseResults.jsp</result>
+    </action>
+
+    <action name="removeReleaseResults" class="releaseResult" method="remove">
+      <result name="confirm">/WEB-INF/jsp/confirmReleaseResultsRemoval.jsp</result>
+      <result name="success" type="redirect-action">
+        <param name="actionName">projectGroupReleaseResults</param>
+        <param name="projectGroupId">${projectGroupId}</param>
+      </result>
+    </action>
   </package>
 
   <!--
@@ -549,6 +578,7 @@
       <interceptor-ref name="unconfiguredContinuumStack"/>
       <result name="input">/WEB-INF/jsp/admin/configurationEdit.jsp</result>
       <result name="success">/WEB-INF/jsp/admin/configuration.jsp</result>
+      <result name="error">/WEB-INF/jsp/admin/configurationEdit.jsp</result>
     </action>
 
     <action name="configureAppearance" class="configureAppearance" method="input">
@@ -607,6 +637,12 @@
         <param name="namespace">/admin</param>
         <param name="method">list</param>
       </result>
+      <result name="error" type="redirect-action">
+        <param name="actionName">buildEnvList</param>
+        <param name="namespace">/admin</param>
+        <param name="method">list</param>
+        <param name="errorMessage">${message}</param>
+      </result>
     </action>      
     
     <action name="confirmDeleteBuildEnv" class="profileAdministration" method="confirmDelete">

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/applicationContext.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/applicationContext.xml?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/applicationContext.xml (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/applicationContext.xml Tue Oct 28 21:16:12 2008
@@ -59,4 +59,14 @@
       <bean class="org.apache.continuum.scm.manager.spring.ScmProviderFactoryBean"/>
     </property>
   </bean>
+  
+  <bean id="mailSession" class="org.springframework.jndi.JndiObjectFactoryBean">
+    <property name="jndiName" value="java:comp/env/mail/Session">
+    </property>
+  </bean>  
+  
+  <bean name="mailSender#continuum" class="org.springframework.mail.javamail.JavaMailSenderImpl">
+    <property name="session" ref="mailSession"/>
+  </bean>   
+  
 </beans>

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/configuration.jsp
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/configuration.jsp?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/configuration.jsp (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/configuration.jsp Tue Oct 28 21:16:12 2008
@@ -36,6 +36,7 @@
       <table border="1" cellspacing="2" cellpadding="3" width="100%">
         <c1:data label="%{getText('configuration.workingDirectory.label')}" name="workingDirectory"/>
         <c1:data label="%{getText('configuration.buildOutputDirectory.label')}" name="buildOutputDirectory"/>
+        <c1:data label="%{getText('configuration.releaseOutputDirectory.label')}" name="releaseOutputDirectory"/>
         <c1:data label="%{getText('configuration.deploymentRepositoryDirectory.label')}"
                  name="deploymentRepositoryDirectory"/>
         <c1:data label="%{getText('configuration.baseUrl.label')}" name="baseUrl"/>

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/configurationEdit.jsp
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/configurationEdit.jsp?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/configurationEdit.jsp (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/configurationEdit.jsp Tue Oct 28 21:16:12 2008
@@ -19,6 +19,7 @@
 
 <%@ taglib uri="/webwork" prefix="ww" %>
 <%@ taglib uri="continuum" prefix="c1" %>
+<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
 <html>
 <ww:i18n name="localization.Continuum">
   <head>
@@ -35,12 +36,13 @@
 
     <ww:form action="configuration!save" method="post">
 
-      <ww:if test="hasActionErrors()">
-        <h3>Action Error</h3>
-      </ww:if>
-      <p>
-        <ww:actionerror/>
-      </p>
+      <c:if test="${!empty actionErrors}">
+        <div class="errormessage">
+          <c:forEach items="${actionErrors}" var="actionError">
+            <p><ww:text name="${actionError}"/></p>
+          </c:forEach>
+        </div>
+      </c:if>
 
       <div class="axial">
 
@@ -61,6 +63,13 @@
               </p></ww:param>
             </ww:textfield>
 
+            <ww:textfield label="%{getText('configuration.releaseOutputDirectory.label')}" name="releaseOutputDirectory"
+            			  required="${requireReleaseOutput}">
+              <ww:param name="desc"><p>
+                <ww:text name="configuration.releaseOutputDirectory.message"/>
+              </ww:param>
+            </ww:textfield>
+
             <ww:textfield label="%{getText('configuration.deploymentRepositoryDirectory.label')}"
                           name="deploymentRepositoryDirectory">
               <ww:param name="desc"><p>
@@ -74,6 +83,7 @@
               </p></ww:param>
             </ww:textfield>
 
+            <ww:hidden name="requireReleaseOutput"/>
           </tbody>
         </table>
         <div class="functnbar3">

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/profilesList.jsp
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/profilesList.jsp?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/profilesList.jsp (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/profilesList.jsp Tue Oct 28 21:16:12 2008
@@ -33,6 +33,14 @@
       <ww:text name="profilesList.section.title"/>
     </h3>
 
+    <c:if test="${!empty actionErrors}">
+      <div class="errormessage">
+        <c:forEach items="${actionErrors}" var="actionError">
+          <p><ww:text name="${actionError}"/></p>
+        </c:forEach>
+      </div>
+    </c:if>
+        
     <ww:if test="${not empty profiles}">
     <ec:table items="profiles"
               var="profile"

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/components/buildDefinitionGroupSummaryComponent.jsp
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/components/buildDefinitionGroupSummaryComponent.jsp?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/components/buildDefinitionGroupSummaryComponent.jsp (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/components/buildDefinitionGroupSummaryComponent.jsp Tue Oct 28 21:16:12 2008
@@ -92,14 +92,19 @@
       <ec:column property="deleteActions" title="&nbsp;" width="1%">
         <center>
         <redback:ifAuthorized permission="continuum-modify-group" resource="${projectGroupName}">
-          <ww:url id="removeUrl" action="removeGroupBuildDefinition" namespace="/">
-            <ww:param name="projectGroupId">${pageScope.buildDefinitionSummary.projectGroupId}</ww:param>
-            <ww:param name="buildDefinitionId">${pageScope.buildDefinitionSummary.id}</ww:param>
-            <ww:param name="confirmed" value="false"/>
-          </ww:url>
-          <ww:a href="%{removeUrl}">
-            <img src="<ww:url value='/images/delete.gif' includeParams="none"/>" alt="<ww:text name='delete'/>" title="<ww:text name='delete'/>" border="0">
-          </ww:a>
+          <ww:if test="${pageScope.buildDefinitionSummary.isDefault == true}">
+            <img src="<ww:url value='/images/delete_disabled.gif' includeParams="none"/>" alt="<ww:text name='delete'/>" title="<ww:text name='delete'/>" border="0">
+          </ww:if>
+          <ww:else> 
+            <ww:url id="removeUrl" action="removeGroupBuildDefinition" namespace="/">
+              <ww:param name="projectGroupId">${pageScope.buildDefinitionSummary.projectGroupId}</ww:param>
+              <ww:param name="buildDefinitionId">${pageScope.buildDefinitionSummary.id}</ww:param>
+              <ww:param name="confirmed" value="false"/>
+            </ww:url>
+            <ww:a href="%{removeUrl}">
+              <img src="<ww:url value='/images/delete.gif' includeParams="none"/>" alt="<ww:text name='delete'/>" title="<ww:text name='delete'/>" border="0">
+            </ww:a>
+          </ww:else>
         </redback:ifAuthorized>
         <redback:elseAuthorized>
           <img src="<ww:url value='/images/delete_disabled.gif' includeParams="none"/>" alt="<ww:text name='delete'/>" title="<ww:text name='delete'/>" border="0">

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/components/projectGroupTabComponent.jsp
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/components/projectGroupTabComponent.jsp?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/components/projectGroupTabComponent.jsp (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/components/projectGroupTabComponent.jsp Tue Oct 28 21:16:12 2008
@@ -39,6 +39,9 @@
         <ww:url id="projectGroupNotifierUrl" action="projectGroupNotifier" includeParams="none">
           <ww:param name="projectGroupId" value="projectGroupId"/>
         </ww:url>
+        <ww:url id="projectGroupReleaseResultsUrl" action="projectGroupReleaseResults" includeParams="none">
+          <ww:param name="projectGroupId" value="projectGroupId"/>
+        </ww:url>
 
         <ww:set name="tabName" value="tabName"/>
         <c:choose>
@@ -76,6 +79,15 @@
                 <b style="border: 1px solid #DFDEDE; padding-left: 1em; padding-right: 1em;"><ww:text name="projectGroup.tab.notifiers"/></b>
             </c:otherwise>
         </c:choose>
+        
+        <c:choose>
+            <c:when test="${tabName != 'ReleaseResults'}">
+                <a style="border: 1px solid #DFDEDE; padding-left: 1em; padding-right: 1em; text-decoration: none;" href="${projectGroupReleaseResultsUrl}"><ww:text name="projectGroup.tab.releaseResults"/></a>
+            </c:when>
+            <c:otherwise>
+                <b style="border: 1px solid #DFDEDE; padding-left: 1em; padding-right: 1em;"><ww:text name="projectGroup.tab.releaseResults"/></b>
+            </c:otherwise>
+        </c:choose>
       </p>
     </div>
   </div>

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/groupSummary.jsp
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/groupSummary.jsp?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/groupSummary.jsp (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/groupSummary.jsp Tue Oct 28 21:16:12 2008
@@ -68,6 +68,47 @@
             ${pageScope.group.repositoryName}
           </redback:elseAuthorized>
         </ec:column>
+        <ec:column property="buildGroupNowAction" title="&nbsp;" width="1%">
+          <redback:ifAuthorized permission="continuum-build-group" resource="${group.name}">
+            <ww:url id="buildProjectGroupUrl" action="buildProjectGroup" namespace="/" includeParams="none">
+              <ww:param name="projectGroupId" value="${group.id}"/>
+              <ww:param name="buildDefinitionId" value="-1"/>
+              <ww:param name="fromSummaryPage" value="true"/>
+            </ww:url>
+            <ww:a href="%{buildProjectGroupUrl}">
+              <img src="<ww:url value='/images/buildnow.gif'/>" alt="<ww:text name="projectGroup.buildGroup"/>" title="<ww:text name="projectGroup.buildGroup"/>" border="0">
+            </ww:a>
+          </redback:ifAuthorized>
+          <redback:elseAuthorized>
+            <img src="<ww:url value='/images/buildnow_disabled.gif'/>" alt="<ww:text name="projectGroup.buildGroup"/>" title="<ww:text name="projectGroup.buildGroup"/>" border="0">
+          </redback:elseAuthorized>
+        </ec:column>
+        <ec:column property="releaseProjectGroupAction" title="&nbsp;" width="1%">
+          <redback:ifAuthorized permission="continuum-build-group" resource="${group.name}">
+            <ww:url id="releaseProjectGroupUrl" action="releaseProjectGroup" namespace="/" includeParams="none">
+              <ww:param name="projectGroupId" value="${group.id}"/>
+            </ww:url>
+            <ww:a href="%{releaseProjectGroupUrl}">
+              <img src="<ww:url value='/images/releaseproject.gif'/>" alt="<ww:text name="projectGroup.releaseNow"/>" title="<ww:text name="projectGroup.releaseNow"/>" border="0">
+            </ww:a>
+          </redback:ifAuthorized>
+          <redback:elseAuthorized>
+            <img src="<ww:url value='/images/releaseproject_disabled.gif'/>" alt="<ww:text name="projectGroup.releaseNow"/>" title="<ww:text name="projectGroup.releaseNow"/>" border="0">
+          </redback:elseAuthorized>
+        </ec:column>
+        <ec:column property="removeProjectGroupAction" title="&nbsp;" width="1%">
+          <redback:ifAuthorized permission="continuum-remove-group" resource="${group.name}">
+            <ww:url id="removeProjectGroupUrl" action="removeProjectGroup" namespace="/" includeParams="none">
+              <ww:param name="projectGroupId" value="${group.id}"/>
+            </ww:url>
+            <ww:a href="%{removeProjectGroupUrl}">
+              <img src="<ww:url value='/images/delete.gif'/>" alt="<ww:text name="projectGroup.deleteGroup"/>" title="<ww:text name="projectGroup.deleteGroup"/>" border="0">
+            </ww:a>
+          </redback:ifAuthorized>
+          <redback:elseAuthorized>
+            <img src="<ww:url value='/images/delete_disabled.gif'/>" alt="<ww:text name="projectGroup.deleteGroup"/>" title="<ww:text name="projectGroup.deleteGroup"/>" border="0">
+          </redback:elseAuthorized>
+        </ec:column>
         <ec:column property="numSuccesses" title="&nbsp;" format="0" width="2%" style="text-align: right" headerClass="calcHeaderSucces" calc="total" calcTitle="groups.table.summary"/>
         <ec:column property="numFailures" title="&nbsp;" format="0" width="2%" style="text-align: right" headerClass="calcHeaderFailure" calc="total" />
         <ec:column property="numErrors" title="&nbsp;" format="0" width="2%" style="text-align: right" headerClass="calcHeaderError" calc="total"/>

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/projectGroupEdit.jsp
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/projectGroupEdit.jsp?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/projectGroupEdit.jsp (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/projectGroupEdit.jsp Tue Oct 28 21:16:12 2008
@@ -51,7 +51,8 @@
                 <c1:data label="%{getText('projectGroup.groupId.label')}" name="projectGroup.groupId"/>
                 <ww:textfield label="%{getText('projectGroup.description.label')}" name="description" disabled="%{projectInCOQueue}"/>
                 <ww:select label="%{getText('projectGroup.repository.label')}" name="repositoryId" list="repositories" 
-                           listKey="id" listValue="name"/> 
+                           listKey="id" listValue="name" disabled="%{disabledRepositories}"/> 
+                <ww:textfield label="%{getText('projectGroup.url.label')}" name="url" disabled="%{projectInCOQueue}"/>
               </tbody>
             </table>
             

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/projectGroupSummary.jsp
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/projectGroupSummary.jsp?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/projectGroupSummary.jsp (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/projectGroupSummary.jsp Tue Oct 28 21:16:12 2008
@@ -30,7 +30,7 @@
     <title>
       <ww:text name="projectGroup.page.title"/>
     </title>
-    <meta http-equiv="refresh" content="300"/>
+    <meta http-equiv="refresh" content="30"/>
     <script type="text/javascript">
 
       <c:url var="addM2ProjectUrl" value="/addMavenTwoProjectInput!input.action" />

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/releaseFinished.jsp
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/releaseFinished.jsp?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/releaseFinished.jsp (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/releaseFinished.jsp Tue Oct 28 21:16:12 2008
@@ -69,6 +69,7 @@
             <ww:form action="releaseRollbackWarning" method="post">
               <ww:hidden name="projectId"/>
               <ww:hidden name="releaseId"/>
+              <ww:hidden name="releaseGoal"/>
               <ww:submit value="Rollback Changes"/>
             </ww:form>
           </td>

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/releaseInProgress.jsp
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/releaseInProgress.jsp?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/releaseInProgress.jsp (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/releaseInProgress.jsp Tue Oct 28 21:16:12 2008
@@ -64,6 +64,7 @@
       <ww:form action="releaseInProgress" method="get">
         <ww:hidden name="projectId"/>
         <ww:hidden name="releaseId"/>
+        <ww:hidden name="releaseGoal"/>
         <ww:submit value="Refresh"/>
       </ww:form>
     </body>

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/releaseInitialized.jsp
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/releaseInitialized.jsp?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/releaseInitialized.jsp (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/releaseInitialized.jsp Tue Oct 28 21:16:12 2008
@@ -36,6 +36,7 @@
       <ww:form action="releaseInProgress" method="get">
         <ww:hidden name="projectId"/>
         <ww:hidden name="releaseId"/>
+        <ww:hidden name="releaseGoal"/>
         <ww:submit value="Refresh"/>
       </ww:form>
     </body>

Modified: continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/releasePerformFromScm.jsp
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/releasePerformFromScm.jsp?rev=708765&r1=708764&r2=708765&view=diff
==============================================================================
--- continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/releasePerformFromScm.jsp (original)
+++ continuum/branches/continuum-transient-state/continuum-webapp/src/main/webapp/WEB-INF/jsp/releasePerformFromScm.jsp Tue Oct 28 21:16:12 2008
@@ -31,15 +31,17 @@
         <ww:hidden name="projectId"/>
         <div class="axial">
           <table border="1" cellspacing="2" cellpadding="3" width="100%">
-            <ww:textfield label="SCM Connection URL" name="scmUrl"/>
-            <ww:textfield label="SCM Username" name="scmUsername"/>
-            <ww:password label="SCM Password" name="scmPassword"/>
-            <ww:textfield label="SCM Tag" name="scmTag"/>
+            <ww:textfield label="%{getText('releasePerformFromScm.scmUrl.label')}" name="scmUrl"/>
+            <ww:textfield label="%{getText('releasePerformFromScm.scmUsername.label')}" name="scmUsername"/>
+            <ww:password label="%{getText('releasePerformFromScm.scmPassword.label')}" name="scmPassword"/>
+            <ww:textfield label="%{getText('releasePerformFromScm.scmTag.label')}" name="scmTag"/>
             <c:if test="${!empty (scmTagBase)}">
-              <ww:textfield label="SCM Tag Base" name="scmTagBase"/>
+              <ww:textfield label="%{getText('releasePerformFromScm.scmTagBase.label')}" name="scmTagBase"/>
             </c:if>
-            <ww:textfield label="Maven Arguments" name="goals" value="clean deploy"/>
-            <ww:checkbox label="Use Release Profile" name="useReleaseProfile" value="true"/>
+            <ww:textfield label="%{getText('releasePerformFromScm.goals.label')}" name="goals" value="clean deploy"/>
+            <ww:checkbox label="%{getText('releasePerformFromScm.useReleaseProfile.label')}" name="useReleaseProfile" value="true"/>
+            <ww:select label="%{getText('releasePerformFromScm.buildEnvironment.label')}" name="profileId" list="profiles" listValue="name" 
+                       listKey="id" headerKey="-1" headerValue=""/>
           </table>
         </div>
         <ww:submit/>