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/12/07 14:54:42 UTC

svn commit: r724132 - in /continuum/branches/continuum-distributed-builds: ./ continuum-api/src/main/java/org/apache/continuum/builder/ continuum-api/src/main/java/org/apache/continuum/builder/distributed/ continuum-api/src/main/java/org/apache/continu...

Author: ctan
Date: Sun Dec  7 05:54:40 2008
New Revision: 724132

URL: http://svn.apache.org/viewvc?rev=724132&view=rev
Log:
- refactor classes

Added:
    continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/
    continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/ContinuumBuilder.java   (with props)
    continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/
    continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/BuildAgentListener.java   (with props)
    continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/
    continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/DistributedBuildManager.java   (with props)
    continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/scm/
    continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/scm/queue/
    continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/scm/queue/PrepareBuildProjectsTask.java   (contents, props changed)
      - copied, changed from r722808, continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTask.java
    continuum/branches/continuum-distributed-builds/continuum-builder/
    continuum/branches/continuum-distributed-builds/continuum-builder/pom.xml   (with props)
    continuum/branches/continuum-distributed-builds/continuum-builder/src/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/main/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/AbstractContinuumBuilder.java   (with props)
    continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/DefaultBuildAgentListener.java   (with props)
    continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/manager/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java   (with props)
    continuum/branches/continuum-distributed-builds/continuum-builder/src/main/resources/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/main/resources/META-INF/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/main/resources/META-INF/spring-context.xml   (with props)
    continuum/branches/continuum-distributed-builds/continuum-builder/src/test/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/apache/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/apache/continuum/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/apache/continuum/builder/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/apache/continuum/builder/distributed/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/apache/continuum/builder/distributed/manager/
    continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManagerTest.java   (with props)
    continuum/branches/continuum-distributed-builds/continuum-commons/src/main/java/org/apache/continuum/utils/ProjectSorter.java   (with props)
    continuum/branches/continuum-distributed-builds/continuum-commons/src/test/java/org/apache/continuum/utils/
    continuum/branches/continuum-distributed-builds/continuum-commons/src/test/java/org/apache/continuum/utils/ProjectSorterTest.java   (contents, props changed)
      - copied, changed from r724086, continuum/branches/continuum-distributed-builds/continuum-core/src/test/java/org/apache/maven/continuum/utils/ProjectSorterTest.java
Removed:
    continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/distributed/
    continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/distributed/
    continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTask.java
    continuum/branches/continuum-distributed-builds/continuum-core/src/test/java/org/apache/continuum/distributed/
    continuum/branches/continuum-distributed-builds/continuum-core/src/test/java/org/apache/maven/continuum/utils/ProjectSorterTest.java
Modified:
    continuum/branches/continuum-distributed-builds/continuum-core/pom.xml
    continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/DefaultTaskQueueManager.java
    continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java
    continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/core/action/UpdateWorkingDirectoryFromScmContinuumAction.java
    continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTaskExecutor.java
    continuum/branches/continuum-distributed-builds/continuum-core/src/main/resources/META-INF/spring-context.xml
    continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java
    continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/DistributedBuildAction.java
    continuum/branches/continuum-distributed-builds/pom.xml

Added: continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/ContinuumBuilder.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/ContinuumBuilder.java?rev=724132&view=auto
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/ContinuumBuilder.java (added)
+++ continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/ContinuumBuilder.java Sun Dec  7 05:54:40 2008
@@ -0,0 +1,32 @@
+package org.apache.continuum.builder;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Map;
+
+import org.apache.maven.continuum.ContinuumException;
+
+public interface ContinuumBuilder
+{
+    String ROLE = ContinuumBuilder.class.getName();
+
+    void buildProjects( Map<Integer, Integer> projectsAndBuildDefinitionsMap, int trigger )
+        throws ContinuumException;
+}

Propchange: continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/ContinuumBuilder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/ContinuumBuilder.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/BuildAgentListener.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/BuildAgentListener.java?rev=724132&view=auto
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/BuildAgentListener.java (added)
+++ continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/BuildAgentListener.java Sun Dec  7 05:54:40 2008
@@ -0,0 +1,45 @@
+package org.apache.continuum.builder.distributed;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.continuum.model.project.Project;
+
+public interface BuildAgentListener
+{
+    String getUrl();
+
+    void setUrl( String url );
+
+    boolean isBusy();
+
+    void setBusy( boolean busy );
+
+    boolean isEnabled();
+
+    void setEnabled( boolean enabled );
+
+    List<Project> getProjects();
+
+    void setProjects( List<Project> projects );
+
+    boolean hasProjects();
+}

Propchange: continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/BuildAgentListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/BuildAgentListener.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/DistributedBuildManager.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/DistributedBuildManager.java?rev=724132&view=auto
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/DistributedBuildManager.java (added)
+++ continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/DistributedBuildManager.java Sun Dec  7 05:54:40 2008
@@ -0,0 +1,20 @@
+package org.apache.continuum.builder.distributed.manager;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.continuum.builder.distributed.BuildAgentListener;
+import org.apache.maven.continuum.ContinuumException;
+
+public interface DistributedBuildManager
+{
+    void updateProjectScmRoot( Map context )
+        throws ContinuumException;
+
+    void updateBuildResult( Map context )
+        throws ContinuumException;
+
+    List<BuildAgentListener> getBuildAgentListeners();
+
+    void reload();
+}

Propchange: continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/DistributedBuildManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/DistributedBuildManager.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/scm/queue/PrepareBuildProjectsTask.java (from r722808, continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTask.java)
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/scm/queue/PrepareBuildProjectsTask.java?p2=continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/scm/queue/PrepareBuildProjectsTask.java&p1=continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTask.java&r1=722808&r2=724132&rev=724132&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTask.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/scm/queue/PrepareBuildProjectsTask.java Sun Dec  7 05:54:40 2008
@@ -1,4 +1,4 @@
-package org.apache.maven.continuum.scm.queue;
+package org.apache.continuum.scm.queue;
 
 import java.util.Map;
 

Propchange: continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/scm/queue/PrepareBuildProjectsTask.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Sun Dec  7 05:54:40 2008
@@ -0,0 +1 @@
+/continuum/branches/continuum-1.2.x/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTask.java:690684,690689-690799,698449-698533,698817-698819,699529,700250,700273,700936,705894,705910,708339

Added: continuum/branches/continuum-distributed-builds/continuum-builder/pom.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-builder/pom.xml?rev=724132&view=auto
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-builder/pom.xml (added)
+++ continuum/branches/continuum-distributed-builds/continuum-builder/pom.xml Sun Dec  7 05:54:40 2008
@@ -0,0 +1,70 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>continuum</artifactId>
+    <groupId>org.apache.continuum</groupId>
+    <version>1.3-SNAPSHOT</version>
+  </parent>
+  <artifactId>continuum-builder</artifactId>
+  <name>Continuum :: Builder</name>
+  <version>1.3-SNAPSHOT</version>
+  <url>http://maven.apache.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.continuum</groupId>
+      <artifactId>continuum-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.continuum</groupId>
+      <artifactId>continuum-commons</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.continuum</groupId>
+      <artifactId>continuum-store</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-spring</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.xmlrpc</groupId>
+      <artifactId>xmlrpc-server</artifactId>
+      <version>3.0</version>
+    </dependency>
+    <dependency>
+      <groupId>hsqldb</groupId>
+      <artifactId>hsqldb</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.continuum</groupId>
+      <artifactId>continuum-test</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

Propchange: continuum/branches/continuum-distributed-builds/continuum-builder/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: continuum/branches/continuum-distributed-builds/continuum-builder/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/AbstractContinuumBuilder.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/AbstractContinuumBuilder.java?rev=724132&view=auto
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/AbstractContinuumBuilder.java (added)
+++ continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/AbstractContinuumBuilder.java Sun Dec  7 05:54:40 2008
@@ -0,0 +1,215 @@
+package org.apache.continuum.builder;
+
+import java.util.Map;
+
+import org.apache.continuum.builder.ContinuumBuilder;
+
+public abstract class AbstractContinuumBuilder
+    implements ContinuumBuilder
+{
+    public static final String KEY_PROJECT_ID = "project-id";
+
+    public static final String KEY_BUILD_DEFINITION_ID = "builddefinition-id";
+
+    public static final String KEY_TRIGGER = "trigger";
+
+    public static final String KEY_EXECUTOR_ID = "executor-id";
+
+    public static final String KEY_SCM_URL = "scm-url";
+
+    public static final String KEY_SCM_USERNAME = "scm-username";
+
+    public static final String KEY_SCM_PASSWORD = "scm-password";
+
+    public static final String KEY_BUILD_FILE = "build-file";
+
+    public static final String KEY_GOALS = "goals";
+
+    public static final String KEY_ARGUMENTS = "arguments";
+
+    public static final String KEY_BUILD_FRESH = "build-fresh";
+
+    public static final String KEY_BUILD_START = "build-start";
+
+    public static final String KEY_BUILD_END = "build-end";
+
+    public static final String KEY_BUILD_ERROR = "build-error";
+
+    public static final String KEY_BUILD_EXIT_CODE = "build-exit-code";
+
+    public static final String KEY_BUILD_STATE = "build-state";
+
+    public static final String KEY_SCM_COMMAND_OUTPUT = "scm-command-output";
+
+    public static final String KEY_SCM_COMMAND_LINE = "scm-command-line";
+
+    public static final String KEY_SCM_PROVIDER_MESSAGE = "scm-provider-message";
+
+    public static final String KEY_SCM_EXCEPTION = "scm-exception";
+
+    public static final String KEY_PREPARE_BUILD_FINISHED = "prepare-build-finished";
+
+    public static int getProjectId( Map context )
+    {
+        return getInteger( context, KEY_PROJECT_ID );
+    }
+
+    public static int getBuildDefinitionId( Map context )
+    {
+        return getInteger( context, KEY_BUILD_DEFINITION_ID );
+    }
+
+    public static String getBuildError( Map context )
+    {
+        return getString( context, KEY_BUILD_ERROR );
+    }
+
+    public static int getTrigger( Map context )
+    {
+        return getInteger( context, KEY_TRIGGER );
+    }
+
+    public static long getBuildStart( Map context )
+    {
+        return getLong( context, KEY_BUILD_START );
+    }
+
+    public static long getBuildEnd( Map context )
+    {
+        return getLong( context, KEY_BUILD_END );
+    }
+
+    public static int getBuildExitCode( Map context )
+    {
+        return getInteger( context, KEY_BUILD_EXIT_CODE );
+    }
+
+    public static int getBuildState( Map context )
+    {
+        return getInteger( context, KEY_BUILD_STATE );
+    }
+
+    public static String getScmCommandLine( Map context )
+    {
+        return getString( context, KEY_SCM_COMMAND_LINE );
+    }
+
+    public static String getScmCommandOutput( Map context )
+    {
+        return getString( context, KEY_SCM_COMMAND_OUTPUT );
+    }
+
+    public static String getScmException( Map context )
+    {
+        return getString( context, KEY_SCM_EXCEPTION );
+    }
+
+    public static String getScmProviderMessage( Map context )
+    {
+        return getString( context, KEY_SCM_PROVIDER_MESSAGE );
+    }
+
+    public static boolean isPrepareBuildFinished( Map context )
+    {
+        return getBoolean( context, KEY_PREPARE_BUILD_FINISHED );
+    }
+
+    // ----------------------------------------------------------------------
+    //
+    // ----------------------------------------------------------------------
+
+    protected static String getString( Map context, String key )
+    {
+        Object obj = getObject( context, key, null );
+
+        if ( obj == null )
+        {
+            return null;
+        }
+        else
+        {
+            return (String) obj;
+        }
+    }
+
+    protected static String getString( Map context, String key, String defaultValue )
+    {
+        return (String) getObject( context, key, defaultValue );
+    }
+
+    protected static boolean getBoolean( Map context, String key )
+    {
+        Object obj = getObject( context, key, null );
+        
+        if ( obj == null )
+        {
+            return false;
+        }
+        else
+        {
+            return ( (Boolean) obj ).booleanValue();
+        }
+    }
+    
+    protected static boolean getBoolean( Map context, String key, boolean defaultValue )
+    {
+        return ( (Boolean) getObject( context, key, Boolean.valueOf( defaultValue ) ) ).booleanValue();
+    }    
+
+    protected static int getInteger( Map context, String key )
+    {
+        Object obj = getObject( context, key, null );
+        
+        if ( obj == null )
+        {
+            return 0;
+        }
+        else
+        {
+            return ( (Integer) obj ).intValue();
+        }
+    }
+
+    protected static long getLong( Map context, String key )
+    {
+        Object obj = getObject( context, key, null );
+        
+        if ( obj == null )
+        {
+            return 0;
+        }
+        else
+        {
+            return ( (Long) obj ).longValue();
+        }
+    }
+
+    protected static Object getObject( Map context, String key )
+    {
+        if ( !context.containsKey( key ) )
+        {
+            throw new RuntimeException( "Missing key '" + key + "'." );
+        }
+
+        Object value = context.get( key );
+
+        if ( value == null )
+        {
+            throw new RuntimeException( "Missing value for key '" + key + "'." );
+        }
+
+        return value;
+    }
+
+    protected static Object getObject( Map context, String key, Object defaultValue )
+    {
+        Object value = context.get( key );
+
+        if ( value == null )
+        {
+            return defaultValue;
+        }
+
+        return value;
+    }
+}

Propchange: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/AbstractContinuumBuilder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/AbstractContinuumBuilder.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/DefaultBuildAgentListener.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/DefaultBuildAgentListener.java?rev=724132&view=auto
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/DefaultBuildAgentListener.java (added)
+++ continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/DefaultBuildAgentListener.java Sun Dec  7 05:54:40 2008
@@ -0,0 +1,78 @@
+package org.apache.continuum.builder.distributed;
+
+import java.util.List;
+
+import org.apache.maven.continuum.model.project.Project;
+
+public class DefaultBuildAgentListener
+    implements BuildAgentListener
+{
+    private String url;
+
+    private boolean busy;
+
+    private boolean enabled;
+
+    private List<Project> projects;
+
+    public DefaultBuildAgentListener()
+    {
+    }
+
+    public DefaultBuildAgentListener( String url, boolean busy, boolean enabled )
+    {
+        this.url = url;
+        this.busy = busy;
+        this.enabled = enabled;
+    }
+
+    public String getUrl()
+    {
+        return url;
+    }
+
+    public void setUrl( String url )
+    {
+        this.url = url;
+    }
+
+    public boolean isBusy()
+    {
+        return busy;
+    }
+
+    public void setBusy( boolean busy )
+    {
+        this.busy = busy;
+    }
+
+    public boolean isEnabled()
+    {
+        return enabled;
+    }
+
+    public void setEnabled( boolean enabled )
+    {
+        this.enabled = enabled;
+    }
+
+    public List<Project> getProjects()
+    {
+        return projects;
+    }
+
+    public boolean hasProjects()
+    {
+        if ( projects != null || projects.size() > 0 )
+        {
+            return true;
+        }
+
+        return false;
+    }
+
+    public void setProjects( List<Project> projects )
+    {
+        this.projects = projects;
+    }
+}

Propchange: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/DefaultBuildAgentListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/DefaultBuildAgentListener.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java?rev=724132&view=auto
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java (added)
+++ continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java Sun Dec  7 05:54:40 2008
@@ -0,0 +1,585 @@
+package org.apache.continuum.builder.distributed.manager;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.continuum.builder.AbstractContinuumBuilder;
+import org.apache.continuum.builder.distributed.BuildAgentListener;
+import org.apache.continuum.builder.distributed.DefaultBuildAgentListener;
+import org.apache.continuum.builder.distributed.manager.DistributedBuildManager;
+import org.apache.continuum.configuration.BuildAgentConfiguration;
+import org.apache.continuum.dao.BuildDefinitionDao;
+import org.apache.continuum.dao.BuildResultDao;
+import org.apache.continuum.dao.ProjectDao;
+import org.apache.continuum.dao.ProjectScmRootDao;
+import org.apache.continuum.model.project.ProjectScmRoot;
+import org.apache.continuum.scm.queue.PrepareBuildProjectsTask;
+import org.apache.continuum.utils.ProjectSorter;
+//import org.apache.continuum.xmlrpc.distributed.client.ContinuumDistributedBuildClient;
+import org.apache.maven.continuum.ContinuumException;
+import org.apache.maven.continuum.configuration.ConfigurationService;
+import org.apache.maven.continuum.model.project.BuildDefinition;
+import org.apache.maven.continuum.model.project.BuildResult;
+import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.model.project.ProjectDependency;
+import org.apache.maven.continuum.model.scm.ScmResult;
+import org.apache.maven.continuum.project.ContinuumProjectState;
+import org.apache.maven.continuum.store.ContinuumStoreException;
+import org.apache.xmlrpc.XmlRpcException;
+
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.dag.CycleDetectedException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author Maria Catherine Tan
+ */
+public class DefaultDistributedBuildManager
+    extends AbstractContinuumBuilder
+    implements DistributedBuildManager
+{
+    private Logger log = LoggerFactory.getLogger( this.getClass() );
+
+    /**
+     * @plexus.requirement
+     */
+    private ConfigurationService configurationService;
+
+    /**
+     * @plexus.requirement
+     */
+    private ProjectDao projectDao;
+
+    /**
+     * @plexus.requirement
+     */
+    private BuildDefinitionDao buildDefinitionDao;
+
+    /**
+     * @plexus.requirement
+     */
+    private ProjectScmRootDao projectScmRootDao;
+
+    /**
+     * @plexus.requirement
+     */
+    private BuildResultDao buildResultDao;
+
+    private List<PrepareBuildProjectsTask> projectsBuildInQueue;
+    
+    private List<BuildAgentListener> listeners;
+
+    public void initialize()
+    {
+        List<BuildAgentConfiguration> agents = configurationService.getBuildAgents();
+
+        if ( listeners == null )
+        {
+            listeners = new ArrayList<BuildAgentListener>();
+        }
+        
+        if ( agents != null )
+        {
+            for ( BuildAgentConfiguration agent : agents )
+            {
+                boolean found = false;
+
+                for ( BuildAgentListener listener : listeners )
+                {
+                    if ( listener.getUrl().equals( agent.getUrl() ) )
+                    {
+                        found = true;
+                        listener.setEnabled( agent.isEnabled() );
+                        break;
+                    }
+                }
+
+                if ( !found )
+                {
+                    BuildAgentListener listener = new DefaultBuildAgentListener( agent.getUrl(), false, agent.isEnabled() );
+                    listeners.add( listener );
+                }
+            }
+        }
+    }
+
+    public ConfigurationService getConfigurationService()
+    {
+        return configurationService;
+    }
+
+    public void setConfigurationService( ConfigurationService configurationService )
+    {
+        this.configurationService = configurationService;
+    }
+
+    public ProjectDao getProjectDao()
+    {
+        return projectDao;
+    }
+
+    public void setProjectDao( ProjectDao projectDao )
+    {
+        this.projectDao = projectDao;
+    }
+
+    public BuildDefinitionDao getBuildDefinitionDao()
+    {
+        return buildDefinitionDao;
+    }
+
+    public void setBuildDefinitionDao( BuildDefinitionDao buildDefinitionDao )
+    {
+        this.buildDefinitionDao = buildDefinitionDao;
+    }
+
+    public BuildResultDao getBuildResultDao()
+    {
+        return buildResultDao;
+    }
+
+    public void setBuildResultDao( BuildResultDao buildResultDao )
+    {
+        this.buildResultDao = buildResultDao;
+    }
+
+    public ProjectScmRootDao getProjectScmRootDao()
+    {
+        return projectScmRootDao;
+    }
+
+    public void setProjectScmRootDao( ProjectScmRootDao projectScmRootDao )
+    {
+        this.projectScmRootDao = projectScmRootDao;
+    }
+
+    public void buildProjects( Map<Integer, Integer> projectsAndBuildDefinitionsMap, int trigger )
+        throws ContinuumException
+    {
+        buildProjects( projectsAndBuildDefinitionsMap, trigger, false );
+    }
+
+    public void buildProjectsInQueue()
+        throws ContinuumException
+    {
+        for ( PrepareBuildProjectsTask task : projectsBuildInQueue )
+        {
+            Map projectsAndBuildDefinitions = task.getProjectsBuildDefinitionsMap();
+            int trigger = task.getTrigger();
+            
+            buildProjects( projectsAndBuildDefinitions, trigger, true );
+        }
+    }
+
+    public synchronized void buildProjects( Map<Integer, Integer> projectsAndBuildDefinitionsMap, int trigger, boolean inBuildQueue )
+        throws ContinuumException
+    {
+        boolean found = false;
+        
+        for ( BuildAgentListener listener : listeners )
+        {
+            if ( !listener.isBusy() && listener.isEnabled() )
+            {
+                List buildContext = initializeBuildContext( projectsAndBuildDefinitionsMap, trigger, listener );
+/*
+                try
+                {
+                    ContinuumDistributedBuildClient client = new ContinuumDistributedBuildClient( new URL( listener.getUrl() ) );
+                    client.ping();
+                }
+                catch ( MalformedURLException e )
+                {
+                    throw new ContinuumException( "Invalid url", e );
+                }
+                catch ( XmlRpcException e )
+                {
+                    throw new ContinuumException( "", e );
+                }
+                catch ( Exception e )
+                {
+                    
+                }*/
+
+                //{
+                    //client.ping();
+                    //found = true; 
+                    //client.buildProjects( buildContext );
+                //}
+                //catch ( XmlRpcException e )
+                //{
+                    //do something about the server Url
+                    //client.getServerUrl();
+                    //get projects of buildagent and set to build error the first project.
+                //}
+                log.info( "dispatched build to " + listener.getUrl() );
+                found = true;
+            }
+        }
+
+        if ( !found && !inBuildQueue )
+        {
+            // all build agents are busy, put into projectBuildQueue for now
+            if ( projectsBuildInQueue == null )
+            {
+                projectsBuildInQueue = new ArrayList<PrepareBuildProjectsTask>();
+            }
+
+            PrepareBuildProjectsTask prepareBuildTask = new PrepareBuildProjectsTask( projectsAndBuildDefinitionsMap, trigger );
+            projectsBuildInQueue.add( prepareBuildTask );
+        }
+    }
+
+    public void updateProjectScmRoot( Map context )
+        throws ContinuumException
+    {
+        try
+        {
+            int projectId = getProjectId( context );
+            
+            Project project = projectDao.getProjectWithScmDetails( projectId );
+            
+            ScmResult scmResult = new ScmResult();
+            scmResult.setCommandLine( getScmCommandLine( context ) );
+            scmResult.setCommandOutput( getScmCommandOutput( context ) );
+            scmResult.setException( getScmException( context ) );
+            scmResult.setProviderMessage( getScmProviderMessage( context ) );
+
+            String error = convertScmResultToError( scmResult );
+
+            if ( error == null )
+            {
+                scmResult.setSuccess( true );
+            }
+            else
+            {
+                scmResult.setSuccess( false );
+            }
+
+            project.setScmResult( scmResult );
+            projectDao.updateProject( project );
+
+            if ( error != null || isPrepareBuildFinished( context ) )
+            {
+                List<ProjectScmRoot> scmRoots = projectScmRootDao.getProjectScmRootByProjectGroup( project.getProjectGroup().getId() );
+                
+                for ( ProjectScmRoot scmRoot : scmRoots )
+                {
+                    if ( project.getScmUrl().startsWith( scmRoot.getScmRootAddress() ) )
+                    {
+                        if ( error != null )
+                        {
+                            scmRoot.setError( error );
+                            scmRoot.setState( ContinuumProjectState.ERROR );
+                        }
+                        else
+                        {
+                            scmRoot.setState( ContinuumProjectState.UPDATED );
+                        }
+                        projectScmRootDao.updateProjectScmRoot( scmRoot );
+                    }
+                }
+            }
+
+            if ( error != null )
+            {
+                updateBuildAgent( project.getId(), true );
+            }
+        }
+        catch ( ContinuumStoreException e )
+        {
+            throw new ContinuumException( "Error updating project scm root", e );
+        }
+    }
+
+    public void updateBuildResult( Map context )
+        throws ContinuumException
+    {
+        try
+        {
+            int projectId = getProjectId( context );
+            int buildDefinitionId = getBuildDefinitionId( context );
+
+            Project project = projectDao.getProjectWithAllDetails( projectId );
+            BuildDefinition buildDefinition = buildDefinitionDao.getBuildDefinition( buildDefinitionId );
+
+            BuildResult oldBuildResult =
+                buildResultDao.getLatestBuildResultForBuildDefinition( projectId, buildDefinitionId );
+
+            int buildNumber;
+
+            if ( getBuildState( context ) == ContinuumProjectState.OK )
+            {
+                buildNumber = project.getBuildNumber() + 1;
+            }
+            else
+            {
+                buildNumber = project.getBuildNumber();
+            }
+
+            // ----------------------------------------------------------------------
+            // Make the buildResult
+            // ----------------------------------------------------------------------
+
+            BuildResult buildResult = new BuildResult();
+
+            buildResult.setStartTime( getBuildStart( context ) );
+            buildResult.setEndTime( getBuildEnd( context ) );
+            buildResult.setBuildDefinition( buildDefinition );
+            buildResult.setBuildNumber( buildNumber );
+            buildResult.setError( getBuildError( context ) );
+            buildResult.setExitCode( getBuildExitCode( context ) );
+            buildResult.setModifiedDependencies( getModifiedDependencies( oldBuildResult, context ) );
+            buildResult.setState( getBuildState( context ) );
+            buildResult.setTrigger( getTrigger( context ) );
+            
+            buildResultDao.addBuildResult( project, buildResult );
+            
+            project.setBuildNumber( buildNumber );
+            project.setLatestBuildId( buildResult.getId() );
+            project.setOldState( project.getState() );
+            project.setState( getBuildState( context ) );
+
+            projectDao.updateProject( project );
+
+            updateBuildAgent( project.getId(), false );
+        }
+        catch ( ContinuumStoreException e )
+        {
+            throw new ContinuumException( "Error while updating build result for project", e );
+        }
+    }
+
+    public void reload()
+    {
+        this.initialize();
+    }
+
+    private List initializeBuildContext( Map<Integer, Integer> projectsAndBuildDefinitions, 
+                                         int trigger, BuildAgentListener listener )
+        throws ContinuumException
+    {
+        List buildContext = new ArrayList();
+        List<Project> projects = new ArrayList<Project>();
+
+        try
+        {
+            for ( Integer projectId : projectsAndBuildDefinitions.keySet() )
+            {
+                Project project = projectDao.getProjectWithDependencies( projectId );
+                projects.add( project );
+            }
+
+            try
+            {
+                projects = ProjectSorter.getSortedProjects( projects, null );
+            }
+            catch ( CycleDetectedException e )
+            {
+                log.info( "Cycle Detected" );
+            }
+
+            int ctr = 0;
+            
+            for ( Project project : projects )
+            {
+                if ( ctr == 0 )
+                {
+                    List<ProjectScmRoot> scmRoots = projectScmRootDao.getProjectScmRootByProjectGroup( project.getProjectGroup().getId() );
+                    for ( ProjectScmRoot scmRoot : scmRoots )
+                    {
+                        if ( project.getScmUrl().startsWith( scmRoot.getScmRootAddress() ) )
+                        {
+                            scmRoot.setOldState( scmRoot.getState() );
+                            scmRoot.setState( ContinuumProjectState.UPDATING );
+                            projectScmRootDao.updateProjectScmRoot( scmRoot );
+                            break;
+                        }
+                    }
+                }
+                
+                int buildDefinitionId = projectsAndBuildDefinitions.get( project.getId() );
+                BuildDefinition buildDef = buildDefinitionDao.getBuildDefinition( buildDefinitionId );
+                BuildResult oldBuildResult =
+                    buildResultDao.getLatestBuildResultForBuildDefinition( project.getId(), buildDefinitionId );
+
+                Map context = new HashMap();
+                context.put( KEY_PROJECT_ID, project.getId() );
+                context.put( KEY_EXECUTOR_ID, project.getExecutorId() );
+                context.put( KEY_SCM_URL, project.getScmUrl() );
+                context.put( KEY_SCM_USERNAME, project.getScmUsername() );
+                context.put( KEY_SCM_PASSWORD, project.getScmPassword() );
+                context.put( KEY_BUILD_DEFINITION_ID, buildDefinitionId );
+                context.put( KEY_BUILD_FILE, buildDef.getBuildFile() );
+                context.put( KEY_GOALS, buildDef.getGoals() );
+                context.put( KEY_ARGUMENTS, buildDef.getArguments() );
+                context.put( KEY_TRIGGER, trigger );
+                context.put( KEY_BUILD_FRESH, buildDef.isBuildFresh() );
+                
+                buildContext.add( context );
+                ctr++;
+            }
+            
+            listener.setBusy( true );
+            listener.setProjects( projects );
+
+            return buildContext;
+        }
+        catch ( ContinuumStoreException e )
+        {
+            throw new ContinuumException( "Error while initializing build context", e );
+        }
+    }
+
+    private List<ProjectDependency> getModifiedDependencies( BuildResult oldBuildResult, Map context )
+        throws ContinuumException
+    {
+        if ( oldBuildResult == null )
+        {
+            return null;
+        }
+
+        try
+        {
+            Project project = projectDao.getProjectWithAllDetails( getProjectId( context ) );
+            List<ProjectDependency> dependencies = project.getDependencies();
+
+            if ( dependencies == null )
+            {
+                dependencies = new ArrayList<ProjectDependency>();
+            }
+
+            if ( project.getParent() != null )
+            {
+                dependencies.add( project.getParent() );
+            }
+
+            if ( dependencies.isEmpty() )
+            {
+                return null;
+            }
+
+            List<ProjectDependency> modifiedDependencies = new ArrayList<ProjectDependency>();
+
+            for ( ProjectDependency dep : dependencies )
+            {
+                Project dependencyProject =
+                    projectDao.getProject( dep.getGroupId(), dep.getArtifactId(), dep.getVersion() );
+
+                if ( dependencyProject != null )
+                {
+                    List buildResults = buildResultDao.getBuildResultsInSuccessForProject( dependencyProject.getId(),
+                                                                                           oldBuildResult.getEndTime() );
+                    if ( buildResults != null && !buildResults.isEmpty() )
+                    {
+                        log.debug( "Dependency changed: " + dep.getGroupId() + ":" + dep.getArtifactId() + ":" +
+                            dep.getVersion() );
+                        modifiedDependencies.add( dep );
+                    }
+                    else
+                    {
+                        log.debug( "Dependency not changed: " + dep.getGroupId() + ":" + dep.getArtifactId() +
+                            ":" + dep.getVersion() );
+                    }
+                }
+                else
+                {
+                    log.debug( "Skip non Continuum project: " + dep.getGroupId() + ":" + dep.getArtifactId() +
+                        ":" + dep.getVersion() );
+                }
+            }
+
+            return modifiedDependencies;
+        }
+        catch ( ContinuumStoreException e )
+        {
+            log.warn( "Can't get the project dependencies", e );
+        }
+
+        return null;
+    }
+
+    private String convertScmResultToError( ScmResult result )
+    {
+        String error = "";
+
+        if ( result == null )
+        {
+            error = "Scm result is null.";
+        }
+        else
+        {
+            if ( result.getCommandLine() != null )
+            {
+                error = "Command line: " + StringUtils.clean( result.getCommandLine() ) +
+                    System.getProperty( "line.separator" );
+            }
+
+            if ( result.getProviderMessage() != null )
+            {
+                error = "Provider message: " + StringUtils.clean( result.getProviderMessage() ) +
+                    System.getProperty( "line.separator" );
+            }
+
+            if ( result.getCommandOutput() != null )
+            {
+                error += "Command output: " + System.getProperty( "line.separator" );
+                error += "-------------------------------------------------------------------------------" +
+                    System.getProperty( "line.separator" );
+                error += StringUtils.clean( result.getCommandOutput() ) + System.getProperty( "line.separator" );
+                error += "-------------------------------------------------------------------------------" +
+                    System.getProperty( "line.separator" );
+            }
+
+            if ( result.getException() != null )
+            {
+                error += "Exception:" + System.getProperty( "line.separator" );
+                error += result.getException();
+            }
+        }
+
+        return error;
+    }
+
+    private void updateBuildAgent( int projectId, boolean removeAll )
+        throws ContinuumException
+    {
+        for ( BuildAgentListener listener : listeners )
+        {
+            for ( Project project : listener.getProjects() )
+            {
+                if ( project.getId() == projectId )
+                {
+                    if ( removeAll )
+                    {
+                        listener.setProjects( null );
+                        listener.setBusy( false );
+
+                        buildProjectsInQueue();
+                    }
+                    else
+                    {
+                        listener.getProjects().remove( project );
+
+                        if ( !listener.hasProjects() )
+                        {
+                            listener.setBusy( false );
+
+                            buildProjectsInQueue();
+                        }
+                    }
+                    return;
+                }
+            }
+        }
+    }
+
+    public List<BuildAgentListener> getBuildAgentListeners()
+    {
+        return listeners;
+    }
+}

Propchange: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/resources/META-INF/spring-context.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-builder/src/main/resources/META-INF/spring-context.xml?rev=724132&view=auto
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-builder/src/main/resources/META-INF/spring-context.xml (added)
+++ continuum/branches/continuum-distributed-builds/continuum-builder/src/main/resources/META-INF/spring-context.xml Sun Dec  7 05:54:40 2008
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:aop="http://www.springframework.org/schema/aop"
+	xmlns:util="http://www.springframework.org/schema/util"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
+		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
+
+  <bean id="distributedBuildManager"
+    class="org.apache.continuum.builder.distributed.manager.DefaultDistributedBuildManager" init-method="initialize">
+    <property name="configurationService" ref="configurationService"/>
+    <property name="projectDao" ref="projectDao"/>
+    <property name="buildDefinitionDao" ref="buildDefinitionDao"/>
+    <property name="buildResultDao" ref="buildResultDao"/>
+    <property name="projectScmRootDao" ref="projectScmRootDao"/>
+  </bean>
+
+</beans>

Propchange: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/resources/META-INF/spring-context.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/resources/META-INF/spring-context.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManagerTest.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManagerTest.java?rev=724132&view=auto
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManagerTest.java (added)
+++ continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManagerTest.java Sun Dec  7 05:54:40 2008
@@ -0,0 +1,133 @@
+package org.apache.continuum.builder.distributed.manager;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.continuum.builder.ContinuumBuilder;
+import org.apache.continuum.dao.BuildDefinitionDao;
+import org.apache.continuum.dao.BuildResultDao;
+import org.apache.continuum.dao.ProjectScmRootDao;
+import org.apache.continuum.model.project.ProjectScmRoot;
+import org.apache.maven.continuum.AbstractContinuumTest;
+import org.apache.maven.continuum.model.project.BuildDefinition;
+import org.apache.maven.continuum.model.project.BuildResult;
+import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.model.scm.ScmResult;
+import org.apache.maven.continuum.project.ContinuumProjectState;
+
+public class DefaultDistributedBuildManagerTest
+    extends AbstractContinuumTest
+{
+    DistributedBuildManager distributedBuildManager;
+
+    @Override
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        distributedBuildManager = (DistributedBuildManager) lookup( "distributedBuildManager" );
+    }
+
+    public void testUpdateScmResult()
+        throws Exception
+    {
+        ProjectScmRootDao projectScmRootDao = (ProjectScmRootDao) lookup( ProjectScmRootDao.class.getName() );
+        
+        Project project = addProject( "project1" );
+        project.setScmUrl( "http://sample/scmurl" );
+        getProjectDao().updateProject( project );
+
+        ProjectScmRoot scmRoot = new ProjectScmRoot();
+        scmRoot.setScmRootAddress( "http://sample/scmurl" );
+        scmRoot.setProjectGroup( project.getProjectGroup() );
+        projectScmRootDao.addProjectScmRoot( scmRoot );
+
+        ScmResult expectedScmResult = new ScmResult();
+        expectedScmResult.setSuccess( true );
+
+        Map context = new HashMap();
+        context.put( "project-id", project.getId() );
+        context.put( "scm-command-line", null );
+        context.put( "scm-command-output", null );
+        context.put( "scm-exception", null );
+        context.put( "scm-provider-message", null );
+        context.put( "prepare-build-finished", true );
+
+        distributedBuildManager.updateProjectScmRoot( context );
+
+        project = getProjectDao().getProjectWithScmDetails( project.getId() );
+
+        assertNotNull( project.getScmResult() );
+        assertScmResultEquals( expectedScmResult, project.getScmResult() );
+    }
+
+    public void testUpdateBuildResult()
+        throws Exception
+    {
+        Project project = addProject( "project1" );
+        project = getProjectDao().getProjectWithAllDetails( project.getId() );
+        
+        BuildDefinition buildDef = new BuildDefinition();
+        buildDef.setBuildFile( "pom.xml" );
+        buildDef.setGoals( "mvn clean" );
+        buildDef.setType( "maven2" );
+        buildDef.setTemplate( false );
+        
+        BuildDefinitionDao buildDefinitionDao = (BuildDefinitionDao) lookup( BuildDefinitionDao.class.getName() );
+        buildDef = buildDefinitionDao.addBuildDefinition( buildDef );
+        
+        BuildResult expectedBuildResult = new BuildResult();
+        expectedBuildResult.setBuildNumber( project.getBuildNumber() + 1 );
+        expectedBuildResult.setBuildDefinition( buildDef );
+        expectedBuildResult.setError( null );
+        expectedBuildResult.setExitCode( 0 );
+        expectedBuildResult.setTrigger( ContinuumProjectState.TRIGGER_FORCED );
+        expectedBuildResult.setEndTime( new Long( "3456789012345" ) );
+        expectedBuildResult.setStartTime( new Long( "1234567890123" ) );
+        expectedBuildResult.setState( ContinuumProjectState.OK );
+
+        Map context = new HashMap();
+        context.put( "project-id", project.getId() );
+        context.put( "builddefinition-id", buildDef.getId() );
+        context.put( "build-start", expectedBuildResult.getStartTime() );
+        context.put( "build-end", expectedBuildResult.getEndTime() );
+        context.put( "build-error", expectedBuildResult.getError() );
+        context.put( "build-exit-code", expectedBuildResult.getExitCode() );
+        context.put( "build-state", expectedBuildResult.getState() );
+        context.put( "trigger", expectedBuildResult.getTrigger() );
+        
+        distributedBuildManager.updateBuildResult( context );
+
+        project = getProjectDao().getProjectWithBuildDetails( project.getId() );
+
+        BuildResultDao buildResultDao = (BuildResultDao) lookup( BuildResultDao.class.getName() );
+        BuildResult buildResult = buildResultDao.getBuildResult( project.getLatestBuildId() );
+
+        assertNotNull( buildResult );
+        assertBuildResultEquals( expectedBuildResult, buildResult );
+    }
+    
+    private void assertBuildResultEquals( BuildResult expected, BuildResult actual )
+        throws Exception
+    {
+        assertEquals( expected.getEndTime(), actual.getEndTime() );
+        assertEquals( expected.getStartTime(), actual.getStartTime() );
+        assertEquals( expected.getState(), actual.getState() );
+        assertEquals( expected.getBuildNumber(), actual.getBuildNumber() );
+        assertEquals( expected.getError(), actual.getError() );
+        assertEquals( expected.getExitCode(), actual.getExitCode() );
+        assertEquals( expected.getTrigger(), actual.getTrigger() );
+        assertEquals( expected.getBuildDefinition().getId(), actual.getBuildDefinition().getId() );
+    }
+
+    private void assertScmResultEquals( ScmResult expected, ScmResult actual )
+        throws Exception
+    {
+        assertEquals( expected.getChanges(), actual.getChanges() );
+        assertEquals( expected.getCommandLine(), actual.getCommandLine() );
+        assertEquals( expected.getCommandOutput(), actual.getCommandOutput() );
+        assertEquals( expected.getException(), actual.getException() );
+        assertEquals( expected.getProviderMessage(), actual.getProviderMessage() );
+    }
+}

Propchange: continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManagerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManagerTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: continuum/branches/continuum-distributed-builds/continuum-commons/src/main/java/org/apache/continuum/utils/ProjectSorter.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-commons/src/main/java/org/apache/continuum/utils/ProjectSorter.java?rev=724132&view=auto
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-commons/src/main/java/org/apache/continuum/utils/ProjectSorter.java (added)
+++ continuum/branches/continuum-distributed-builds/continuum-commons/src/main/java/org/apache/continuum/utils/ProjectSorter.java Sun Dec  7 05:54:40 2008
@@ -0,0 +1,159 @@
+package org.apache.continuum.utils;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.model.project.ProjectDependency;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.dag.CycleDetectedException;
+import org.codehaus.plexus.util.dag.DAG;
+import org.codehaus.plexus.util.dag.TopologicalSorter;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Sort projects by dependencies.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @version $Id$
+ */
+public class ProjectSorter
+{
+    private ProjectSorter()
+    {
+        // no touchy...
+    }
+
+    /**
+     * Sort a list of projects.
+     * <ul>
+     * <li>collect all the vertices for the projects that we want to build.</li>
+     * <li>iterate through the deps of each project and if that dep is within
+     * the set of projects we want to build then add an edge, otherwise throw
+     * the edge away because that dependency is not within the set of projects
+     * we are trying to build. we assume a closed set.</li>
+     * <li>do a topo sort on the graph that remains.</li>
+     * </ul>
+     */
+    public static List<Project> getSortedProjects( Collection<Project> projects, Logger logger )
+        throws CycleDetectedException
+    {
+        DAG dag = new DAG();
+
+        Map<String, Project> projectMap = new HashMap<String, Project>();
+
+        for ( Project project : projects )
+        {
+            String id = getProjectId( project );
+
+            if ( dag.getVertex( id ) != null )
+            {
+                logger.warn( "Project '" + id + "' is duplicated in the reactor" );
+            }
+
+            dag.addVertex( id );
+
+            projectMap.put( id, project );
+        }
+
+        for ( Project project : projects )
+        {
+            String id = getProjectId( project );
+
+            // Dependencies
+            for ( Object o : project.getDependencies() )
+            {
+                ProjectDependency dependency = (ProjectDependency) o;
+
+                String dependencyId = getDependencyId( dependency );
+
+                if ( dag.getVertex( dependencyId ) != null )
+                {
+                    dag.addEdge( id, dependencyId );
+                }
+            }
+
+            // Parent
+            ProjectDependency parent = project.getParent();
+
+            if ( parent != null )
+            {
+                String parentId = getDependencyId( parent );
+
+                if ( dag.getVertex( parentId ) != null )
+                {
+                    // Parent is added as an edge, but must not cause a cycle - so we remove any other edges it has in conflict
+                    if ( dag.hasEdge( parentId, id ) )
+                    {
+                        dag.removeEdge( parentId, id );
+                    }
+                    dag.addEdge( id, parentId );
+                }
+            }
+        }
+
+        List<Project> sortedProjects = new ArrayList<Project>();
+
+        for ( Object o : TopologicalSorter.sort( dag ) )
+        {
+            String id = (String) o;
+
+            sortedProjects.add( projectMap.get( id ) );
+        }
+
+        return sortedProjects;
+    }
+
+    private static String getProjectId( Project project )
+    {
+        String groupId;
+
+        String artifactId;
+
+        if ( project.getGroupId() == null )
+        {
+            groupId = project.getName();
+        }
+        else
+        {
+            groupId = project.getGroupId();
+        }
+
+        if ( project.getArtifactId() == null )
+        {
+            artifactId = project.getName();
+        }
+        else
+        {
+            artifactId = project.getArtifactId();
+        }
+
+        return groupId + ":" + artifactId + ":" + project.getVersion();
+    }
+
+    private static String getDependencyId( ProjectDependency project )
+    {
+        return project.getGroupId() + ":" + project.getArtifactId() + ":" + project.getVersion();
+    }
+}

Propchange: continuum/branches/continuum-distributed-builds/continuum-commons/src/main/java/org/apache/continuum/utils/ProjectSorter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: continuum/branches/continuum-distributed-builds/continuum-commons/src/main/java/org/apache/continuum/utils/ProjectSorter.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: continuum/branches/continuum-distributed-builds/continuum-commons/src/test/java/org/apache/continuum/utils/ProjectSorterTest.java (from r724086, continuum/branches/continuum-distributed-builds/continuum-core/src/test/java/org/apache/maven/continuum/utils/ProjectSorterTest.java)
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-commons/src/test/java/org/apache/continuum/utils/ProjectSorterTest.java?p2=continuum/branches/continuum-distributed-builds/continuum-commons/src/test/java/org/apache/continuum/utils/ProjectSorterTest.java&p1=continuum/branches/continuum-distributed-builds/continuum-core/src/test/java/org/apache/maven/continuum/utils/ProjectSorterTest.java&r1=724086&r2=724132&rev=724132&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-core/src/test/java/org/apache/maven/continuum/utils/ProjectSorterTest.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-commons/src/test/java/org/apache/continuum/utils/ProjectSorterTest.java Sun Dec  7 05:54:40 2008
@@ -1,4 +1,4 @@
-package org.apache.maven.continuum.utils;
+package org.apache.continuum.utils;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one

Propchange: continuum/branches/continuum-distributed-builds/continuum-commons/src/test/java/org/apache/continuum/utils/ProjectSorterTest.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Sun Dec  7 05:54:40 2008
@@ -0,0 +1 @@
+/continuum/branches/continuum-1.2.x/continuum-core/src/test/java/org/apache/maven/continuum/utils/ProjectSorterTest.java:690684,690689-690799,698449-698533,698817-698819,699529,700250,700273,700936,705894,705910,708339

Modified: continuum/branches/continuum-distributed-builds/continuum-core/pom.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-core/pom.xml?rev=724132&r1=724131&r2=724132&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-core/pom.xml (original)
+++ continuum/branches/continuum-distributed-builds/continuum-core/pom.xml Sun Dec  7 05:54:40 2008
@@ -172,6 +172,10 @@
       <artifactId>mail</artifactId>
       <version>1.4</version>
       <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.continuum</groupId>
+      <artifactId>continuum-builder</artifactId>
     </dependency>    
     <!-- === Testing Dependencies === -->
     <dependency>

Modified: continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/DefaultTaskQueueManager.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/DefaultTaskQueueManager.java?rev=724132&r1=724131&r2=724132&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/DefaultTaskQueueManager.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/DefaultTaskQueueManager.java Sun Dec  7 05:54:40 2008
@@ -12,12 +12,12 @@
 import org.apache.continuum.model.repository.RepositoryPurgeConfiguration;
 import org.apache.continuum.purge.PurgeConfigurationService;
 import org.apache.continuum.purge.task.PurgeTask;
+import org.apache.continuum.scm.queue.PrepareBuildProjectsTask;
 import org.apache.maven.continuum.buildqueue.BuildProjectTask;
 import org.apache.maven.continuum.model.project.BuildDefinition;
 import org.apache.maven.continuum.model.project.Project;
 import org.apache.maven.continuum.release.tasks.PerformReleaseProjectTask;
 import org.apache.maven.continuum.scm.queue.CheckOutTask;
-import org.apache.maven.continuum.scm.queue.PrepareBuildProjectsTask;
 import org.apache.maven.continuum.store.ContinuumStoreException;
 import org.codehaus.plexus.PlexusConstants;
 import org.codehaus.plexus.PlexusContainer;

Modified: continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java?rev=724132&r1=724131&r2=724132&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java Sun Dec  7 05:54:40 2008
@@ -33,6 +33,7 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.continuum.builder.ContinuumBuilder;
 import org.apache.continuum.configuration.ContinuumConfigurationException;
 import org.apache.continuum.dao.BuildDefinitionDao;
 import org.apache.continuum.dao.BuildResultDao;
@@ -43,14 +44,15 @@
 import org.apache.continuum.dao.ProjectGroupDao;
 import org.apache.continuum.dao.ProjectScmRootDao;
 import org.apache.continuum.dao.ScheduleDao;
-import org.apache.continuum.distributed.manager.DistributedBuildManager;
 import org.apache.continuum.model.project.ProjectScmRoot;
 import org.apache.continuum.model.release.ContinuumReleaseResult;
 import org.apache.continuum.purge.ContinuumPurgeManager;
 import org.apache.continuum.purge.PurgeConfigurationService;
 import org.apache.continuum.repository.RepositoryService;
+import org.apache.continuum.scm.queue.PrepareBuildProjectsTask;
 import org.apache.continuum.taskqueue.manager.TaskQueueManager;
 import org.apache.continuum.taskqueue.manager.TaskQueueManagerException;
+import org.apache.continuum.utils.ProjectSorter;
 import org.apache.maven.continuum.build.settings.SchedulesActivationException;
 import org.apache.maven.continuum.build.settings.SchedulesActivator;
 import org.apache.maven.continuum.builddefinition.BuildDefinitionService;
@@ -80,11 +82,9 @@
 import org.apache.maven.continuum.project.builder.maven.MavenOneContinuumProjectBuilder;
 import org.apache.maven.continuum.project.builder.maven.MavenTwoContinuumProjectBuilder;
 import org.apache.maven.continuum.release.ContinuumReleaseManager;
-import org.apache.maven.continuum.scm.queue.PrepareBuildProjectsTask;
 import org.apache.maven.continuum.store.ContinuumObjectNotFoundException;
 import org.apache.maven.continuum.store.ContinuumStoreException;
 import org.apache.maven.continuum.utils.ContinuumUrlValidator;
-import org.apache.maven.continuum.utils.ProjectSorter;
 import org.apache.maven.continuum.utils.WorkingDirectoryService;
 import org.codehaus.plexus.PlexusConstants;
 import org.codehaus.plexus.PlexusContainer;
@@ -249,9 +249,9 @@
     private TaskQueueManager taskQueueManager;
 
     /**
-     * @plexus.requirement
+     * @plexus.requirement role-hint="distributedBuild"
      */
-    private DistributedBuildManager distributedBuildManager;
+    private ContinuumBuilder distributedBuilder;
 
     public DefaultContinuum()
     {
@@ -3359,7 +3359,7 @@
     {
         if ( configurationService.isDistributedBuildEnabled() )
         {
-            distributedBuildManager.buildProjects( projectsBuildDefinitionsMap, trigger );
+            distributedBuilder.buildProjects( projectsBuildDefinitionsMap, trigger );
         }
         else
         {

Modified: continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/core/action/UpdateWorkingDirectoryFromScmContinuumAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/core/action/UpdateWorkingDirectoryFromScmContinuumAction.java?rev=724132&r1=724131&r2=724132&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/core/action/UpdateWorkingDirectoryFromScmContinuumAction.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/core/action/UpdateWorkingDirectoryFromScmContinuumAction.java Sun Dec  7 05:54:40 2008
@@ -30,7 +30,6 @@
 import org.apache.maven.continuum.model.scm.ChangeSet;
 import org.apache.maven.continuum.model.scm.ScmResult;
 import org.apache.maven.continuum.notification.ContinuumNotificationDispatcher;
-import org.apache.maven.continuum.project.ContinuumProjectState;
 import org.apache.maven.continuum.store.ContinuumObjectNotFoundException;
 import org.apache.maven.continuum.store.ContinuumStoreException;
 import org.apache.maven.continuum.utils.ContinuumUtils;
@@ -88,11 +87,13 @@
 
         BuildDefinition buildDefinition = getBuildDefinition( context );
 
-        int state = project.getState();
+        // do not set state of project to updating
 
-        project.setState( ContinuumProjectState.UPDATING );
+        //int state = project.getState();
 
-        projectDao.updateProject( project );
+        //project.setState( ContinuumProjectState.UPDATING );
+
+        //projectDao.updateProject( project );
 
         UpdateScmResult scmResult;
 
@@ -175,19 +176,19 @@
         {
             // set back to the original state
             // TODO: transient states!
-            try
-            {
-                project = projectDao.getProject( project.getId() );
-
-                project.setState( state );
-
-                projectDao.updateProject( project );
-            }
-            catch ( Exception e )
-            {
+            //try
+            //{
+            //    project = projectDao.getProject( project.getId() );
+
+            //    project.setState( state );
+
+            //    projectDao.updateProject( project );
+            //}
+            //catch ( Exception e )
+            //{
                 // nasty nasty, but we're in finally, so just sacrifice the state to keep the original exception
-                getLogger().error( e.getMessage(), e );
-            }
+            //    getLogger().error( e.getMessage(), e );
+            //}
 
             notifier.checkoutComplete( project, buildDefinition );
         }

Modified: continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTaskExecutor.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTaskExecutor.java?rev=724132&r1=724131&r2=724132&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTaskExecutor.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTaskExecutor.java Sun Dec  7 05:54:40 2008
@@ -9,6 +9,8 @@
 import org.apache.continuum.dao.ProjectDao;
 import org.apache.continuum.dao.ProjectScmRootDao;
 import org.apache.continuum.model.project.ProjectScmRoot;
+import org.apache.continuum.scm.queue.PrepareBuildProjectsTask;
+import org.apache.continuum.utils.ProjectSorter;
 import org.apache.maven.continuum.core.action.AbstractContinuumAction;
 import org.apache.maven.continuum.model.project.Project;
 import org.apache.maven.continuum.model.project.ProjectGroup;
@@ -18,7 +20,6 @@
 import org.apache.maven.continuum.project.ContinuumProjectState;
 import org.apache.maven.continuum.store.ContinuumStoreException;
 import org.apache.maven.continuum.utils.ContinuumUtils;
-import org.apache.maven.continuum.utils.ProjectSorter;
 import org.apache.maven.continuum.utils.WorkingDirectoryService;
 import org.codehaus.plexus.action.ActionManager;
 import org.codehaus.plexus.action.ActionNotFoundException;

Modified: continuum/branches/continuum-distributed-builds/continuum-core/src/main/resources/META-INF/spring-context.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-core/src/main/resources/META-INF/spring-context.xml?rev=724132&r1=724131&r2=724132&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-core/src/main/resources/META-INF/spring-context.xml (original)
+++ continuum/branches/continuum-distributed-builds/continuum-core/src/main/resources/META-INF/spring-context.xml Sun Dec  7 05:54:40 2008
@@ -33,8 +33,9 @@
     </property>
   </bean>
 
-  <bean id="distributedBuildManager"
-    class="org.apache.continuum.distributed.manager.DefaultDistributedBuildManager" init-method="initialize">
+  <bean name="continuumBuilder#distributedBuild"
+        class="org.apache.continuum.builder.distributed.manager.DefaultDistributedBuildManager"
+        init-method="initialize">
     <property name="configurationService" ref="configurationService"/>
     <property name="projectDao" ref="projectDao"/>
     <property name="buildDefinitionDao" ref="buildDefinitionDao"/>

Modified: continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java?rev=724132&r1=724131&r2=724132&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java Sun Dec  7 05:54:40 2008
@@ -20,8 +20,8 @@
  */
 
 import org.apache.continuum.configuration.BuildAgentConfiguration;
-import org.apache.continuum.distributed.BuildAgent;
-import org.apache.continuum.distributed.manager.DistributedBuildManager;
+import org.apache.continuum.builder.distributed.BuildAgentListener;
+import org.apache.continuum.builder.distributed.manager.DistributedBuildManager;
 import org.apache.maven.continuum.configuration.ConfigurationService;
 import org.apache.maven.continuum.model.system.Installation;
 import org.apache.maven.continuum.security.ContinuumRoleConstants;
@@ -148,20 +148,20 @@
             return CONFIRM;
         }
 
-        List<BuildAgent> agents = distributedBuildManager.getBuildAgents();
+        List<BuildAgentListener> listeners = distributedBuildManager.getBuildAgentListeners();
 
-        for ( BuildAgent agent : agents )
+        for ( BuildAgentListener listener : listeners )
         {
-            if ( agent.getUrl().equals( buildAgent.getUrl() ) )
+            if ( listener.getUrl().equals( buildAgent.getUrl() ) )
             {
-                if ( agent.isBusy() )
+                if ( listener.isBusy() )
                 {
                     message = getText( "buildAgent.error.delete.busy" );
                     return ERROR;
                 }
                 else
                 {
-                    agents.remove( agent );
+                    listeners.remove( listener );
                     break;
                 }
             }

Modified: continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/DistributedBuildAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/DistributedBuildAction.java?rev=724132&r1=724131&r2=724132&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/DistributedBuildAction.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/DistributedBuildAction.java Sun Dec  7 05:54:40 2008
@@ -22,8 +22,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.continuum.distributed.BuildAgent;
-import org.apache.continuum.distributed.manager.DistributedBuildManager;
+import org.apache.continuum.builder.distributed.BuildAgentListener;
+import org.apache.continuum.builder.distributed.manager.DistributedBuildManager;
 import org.apache.maven.continuum.model.project.Project;
 import org.apache.maven.continuum.security.ContinuumRoleConstants;
 import org.apache.maven.continuum.web.action.ContinuumActionSupport;
@@ -54,20 +54,18 @@
 
     public String view()
     {
-        List<BuildAgent> buildAgents = distributedBuildManager.getBuildAgents();
-        
         distributedBuildSummary = new ArrayList<DistributedBuildSummary>();
         
-        for ( BuildAgent buildAgent : buildAgents )
+        for ( BuildAgentListener listener : distributedBuildManager.getBuildAgentListeners() )
         {
-            if ( buildAgent.getProjects() != null )
+            if ( listener.hasProjects() )
             {
-                for ( Project project : buildAgent.getProjects() )
+                for ( Project project : listener.getProjects() )
                 {
                     DistributedBuildSummary summary = new DistributedBuildSummary();
                     summary.setProjectId( project.getId() );
                     summary.setProjectName( project.getName() );
-                    summary.setUrl( buildAgent.getUrl() );
+                    summary.setUrl( listener.getUrl() );
                     
                     distributedBuildSummary.add( summary );
                 }

Modified: continuum/branches/continuum-distributed-builds/pom.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/pom.xml?rev=724132&r1=724131&r2=724132&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/pom.xml (original)
+++ continuum/branches/continuum-distributed-builds/pom.xml Sun Dec  7 05:54:40 2008
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding='UTF-8'?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -16,8 +16,7 @@
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+--><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
     <groupId>org.apache.continuum</groupId>
@@ -219,6 +218,8 @@
     <module>continuum-docs</module>
     <module>continuum-jetty</module>
     <module>continuum-purge</module>
+    <module>continuum-distributed-build</module>
+    <module>continuum-builder</module>
   </modules>
   <!-- TODO: confirm whether these are needed -->
   <repositories>
@@ -565,6 +566,11 @@
         <version>${pom.version}</version>
       </dependency>
       <dependency>
+        <groupId>org.apache.continuum</groupId>
+        <artifactId>continuum-builder</artifactId>
+        <version>${pom.version}</version>
+      </dependency>
+      <dependency>
         <groupId>net.sf.ehcache</groupId>
         <artifactId>ehcache</artifactId>
         <version>1.5.0</version>