You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by db...@apache.org on 2005/11/11 10:40:17 UTC

svn commit: r332501 - in /geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent: ContinuumBuildAgent.java ContinuumStoreContext.java DistrubutedBuildController.java MapContinuumStore.java MockContinuumNotificationDispatcher.java

Author: dblevins
Date: Fri Nov 11 01:40:13 2005
New Revision: 332501

URL: http://svn.apache.org/viewcvs?rev=332501&view=rev
Log:
Basic continuum agent code

Added:
    geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumStoreContext.java
    geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/MapContinuumStore.java
      - copied, changed from r332478, geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/DistributedContinuumStore.java
    geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/MockContinuumNotificationDispatcher.java
Modified:
    geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgent.java
    geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/DistrubutedBuildController.java

Modified: geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgent.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgent.java?rev=332501&r1=332500&r2=332501&view=diff
==============================================================================
--- geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgent.java (original)
+++ geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgent.java Fri Nov 11 01:40:13 2005
@@ -17,38 +17,79 @@
 package org.apache.geronimo.gbuild.agent;
 
 import org.activemq.ActiveMQConnectionFactory;
-import org.apache.maven.continuum.utils.shell.ShellCommandHelper;
+import org.apache.maven.continuum.store.ContinuumStore;
+import org.apache.maven.continuum.buildcontroller.BuildController;
 
 import javax.jms.Connection;
-import javax.jms.Destination;
 import javax.jms.ExceptionListener;
 import javax.jms.JMSException;
 import javax.jms.Message;
 import javax.jms.MessageConsumer;
-import javax.jms.ObjectMessage;
 import javax.jms.Session;
-import java.util.HashMap;
+import javax.jms.MapMessage;
+import javax.jms.Queue;
+import javax.jms.MessageProducer;
+import javax.jms.DeliveryMode;
+import javax.jms.TextMessage;
+import javax.jms.Topic;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
 
 /**
  * @version $Rev$ $Date$
  */
 public class ContinuumBuildAgent implements BuildAgent, ExceptionListener {
 
+    // ----------------------------------------------------------------------
+    // Keys for the values that can be in the context
+    // ----------------------------------------------------------------------
+
+    public static final String KEY_STORE = "store";
+
+    public static final String KEY_PROJECT_ID = "projectId";
+
+    public static final String KEY_BUILD_DEFINITION_ID = "buildDefinitionId";
+
+    public static final String KEY_TRIGGER = "trigger";
+
+    public static final String KEY_HOST_NAME = "hostName";
+
+    public static final String KEY_HOST_ADDRESS = "hostAddress";
+
+    public static final String KEY_CONTRIBUTOR = "contributor";
+
+    public static final String KEY_ADMIN_ADDRESS = "adminAddress";
+
     /**
      * @plexus.requirement
      */
-    private ShellCommandHelper shellCommandHelper;
+    private BuildController controller;
 
     /**
      * @plexus.configuration
      */
-    private String subject;
+    private String contributor;
+
+    /**
+     * @plexus.configuration
+     */
+    private String adminAddress;
 
     /**
      * @plexus.configuration
      */
     private String url;
 
+    /**
+     * @plexus.configuration
+     */
+    private String buildQueueSubject;
+
+    /**
+     * @plexus.configuration
+     */
+    private String buildResultsSubject;
+
     private boolean run;
 
     public void run() {
@@ -60,6 +101,7 @@
 
             // Create a Connection
             Connection connection = connectionFactory.createConnection();
+
             connection.start();
 
             connection.setExceptionListener(this);
@@ -67,26 +109,62 @@
             // Create a Session
             Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 
-            // Create the destination (Topic or Queue)
-            Destination destination = session.createQueue(subject);
+            MessageConsumer buildConsumer = createQueueConsumer(session, buildQueueSubject);
 
-            // Create a MessageConsumer from the Session to the Topic or Queue
-            MessageConsumer consumer = session.createConsumer(destination);
+            MessageProducer resultsProducer = createTopicProducer(session, buildResultsSubject);
 
             while (run) {
                 // Wait for a message
-                Message message = consumer.receive();
+                Message message = buildConsumer.receive();
+
+                if (message instanceof MapMessage) {
+
+                    MapMessage mapMessage = (MapMessage) message;
+
+                    ContinuumStore store = getContinuumStore(mapMessage);
+
+                    ContinuumStoreContext.setStore(store);
+
+                    int projectId = getProjectId(mapMessage);
+
+                    int buildDefinitionId = getBuildDefinitionId(mapMessage);
+
+                    int trigger = getTrigger(mapMessage);
+
+                    controller.build(projectId, buildDefinitionId, trigger);
+
+                    MapMessage results = session.createMapMessage();
+
+                    setStore(results, store);
+
+                    setProjectId(results, projectId);
+
+                    setBuildDefinitionId(results, buildDefinitionId);
+
+                    setTrigger(results, trigger);
+
+                    setSystemProperty(results, "os.version");
+
+                    setSystemProperty(results, "os.name");
+
+                    setSystemProperty(results, "java.version");
 
-                if (message instanceof ObjectMessage) {
-                    ObjectMessage objectMessage = (ObjectMessage) message;
-                    HashMap map = (HashMap) objectMessage.getObject();
+                    setSystemProperty(results, "java.vendor");
+
+                    setHostInformation(results);
+
+                    setContributor(results);
+
+                    setAdminAddress(results);
+
+                    resultsProducer.send(results);
 
                 } else {
                     System.out.println("Incorect message type: " + message.getClass().getName());
                 }
             }
 
-            consumer.close();
+            buildConsumer.close();
             session.close();
             connection.close();
         } catch (Exception e) {
@@ -95,6 +173,74 @@
         }
     }
 
+    private void setAdminAddress(MapMessage results) throws JMSException {
+        results.setString(KEY_ADMIN_ADDRESS, adminAddress);
+    }
+
+    private void setContributor(MapMessage results) throws JMSException {
+        results.setString(KEY_CONTRIBUTOR, contributor);
+    }
+
+    private void setHostInformation(MapMessage results) throws UnknownHostException, JMSException {
+        InetAddress localHost = InetAddress.getLocalHost();
+        results.setString(KEY_HOST_NAME, localHost.getHostName());
+        results.setString(KEY_HOST_ADDRESS, localHost.getHostAddress());
+    }
+
+    private void setSystemProperty(MapMessage results, String name) throws JMSException {
+        results.setString(name, System.getProperty(name));
+    }
+
+    private void setStore(MapMessage results, ContinuumStore store) throws JMSException {
+        results.setObject(KEY_STORE, store);
+    }
+
+    private void setBuildDefinitionId(MapMessage results, int buildDefinitionId) throws JMSException {
+        results.setInt(KEY_BUILD_DEFINITION_ID, buildDefinitionId);
+    }
+
+    private void setTrigger(MapMessage results, int trigger) throws JMSException {
+        results.setInt(KEY_TRIGGER, trigger);
+    }
+
+    private void setProjectId(MapMessage results, int projectId) throws JMSException {
+        results.setInt(KEY_PROJECT_ID, projectId);
+    }
+
+    private int getTrigger(MapMessage mapMessage) throws JMSException {
+        return mapMessage.getIntProperty(KEY_TRIGGER);
+    }
+
+    private int getBuildDefinitionId(MapMessage mapMessage) throws JMSException {
+        return mapMessage.getIntProperty(KEY_BUILD_DEFINITION_ID);
+    }
+
+    private int getProjectId(MapMessage mapMessage) throws JMSException {
+        return mapMessage.getIntProperty(KEY_PROJECT_ID);
+    }
+
+    private ContinuumStore getContinuumStore(MapMessage mapMessage) throws JMSException {
+        return (ContinuumStore) mapMessage.getObject(KEY_STORE);
+    }
+
+    private MessageConsumer createQueueConsumer(Session session, String subject) throws JMSException {
+        Queue queue = session.createQueue(subject);
+
+        MessageConsumer consumer = session.createConsumer(queue);
+
+        return consumer;
+    }
+
+    private MessageProducer createTopicProducer(Session session, String subject) throws JMSException {
+        Topic topic = session.createTopic(subject);
+
+        MessageProducer producer = session.createProducer(topic);
+
+        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
+
+        return producer;
+    }
+
     public synchronized boolean isRunning() {
         return run;
     }
@@ -102,7 +248,7 @@
     public synchronized void stop() {
         run = false;
     }
-    
+
     public synchronized void onException(JMSException ex) {
         System.out.println("JMS Exception occured.  Shutting down client.");
     }

Added: geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumStoreContext.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumStoreContext.java?rev=332501&view=auto
==============================================================================
--- geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumStoreContext.java (added)
+++ geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumStoreContext.java Fri Nov 11 01:40:13 2005
@@ -0,0 +1,300 @@
+/**
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ *  Licensed 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.
+ */
+package org.apache.geronimo.gbuild.agent;
+
+import org.apache.maven.continuum.store.ContinuumStore;
+import org.apache.maven.continuum.store.ContinuumStoreException;
+import org.apache.maven.continuum.store.ContinuumObjectNotFoundException;
+import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.model.project.ProjectNotifier;
+import org.apache.maven.continuum.model.project.BuildDefinition;
+import org.apache.maven.continuum.model.project.ProjectGroup;
+import org.apache.maven.continuum.model.project.Schedule;
+import org.apache.maven.continuum.model.project.Profile;
+import org.apache.maven.continuum.model.project.BuildResult;
+import org.apache.maven.continuum.model.system.Installation;
+import org.apache.maven.continuum.model.system.SystemConfiguration;
+import org.apache.maven.continuum.model.system.ContinuumUser;
+import org.apache.maven.continuum.model.system.Permission;
+import org.apache.maven.continuum.model.system.UserGroup;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ContinuumStoreContext implements ContinuumStore {
+
+    private static ThreadLocal stores = new ThreadLocal();
+
+    public static ContinuumStore getStore() {
+        return (ContinuumStore) stores.get();
+    }
+
+    public static void setStore(ContinuumStore store) {
+        stores.set(store);
+    }
+
+    public Project getProjectByName(String name) throws ContinuumStoreException {
+        return getStore().getProjectByName(name);
+    }
+
+    public void removeNotifier(ProjectNotifier notifier) throws ContinuumStoreException {
+        getStore().removeNotifier(notifier);
+    }
+
+    public ProjectNotifier storeNotifier(ProjectNotifier notifier) throws ContinuumStoreException {
+        return getStore().storeNotifier(notifier);
+    }
+
+    public BuildDefinition getBuildDefinition(int buildDefinitionId) throws ContinuumStoreException, ContinuumObjectNotFoundException {
+        return getStore().getBuildDefinition(buildDefinitionId);
+    }
+
+    public void removeBuildDefinition(BuildDefinition buildDefinition) throws ContinuumStoreException {
+        getStore().removeBuildDefinition(buildDefinition);
+    }
+
+    public BuildDefinition storeBuildDefinition(BuildDefinition buildDefinition) throws ContinuumStoreException {
+        return getStore().storeBuildDefinition(buildDefinition);
+    }
+
+    public ProjectGroup addProjectGroup(ProjectGroup group) {
+        return getStore().addProjectGroup(group);
+    }
+
+    public ProjectGroup getProjectGroup(int projectGroupId) throws ContinuumStoreException, ContinuumObjectNotFoundException {
+        return getStore().getProjectGroup(projectGroupId);
+    }
+
+    public void updateProjectGroup(ProjectGroup group) throws ContinuumStoreException {
+        getStore().updateProjectGroup(group);
+    }
+
+    public Collection getAllProjectGroupsWithProjects() {
+        return getStore().getAllProjectGroupsWithProjects();
+    }
+
+    public List getAllProjectsByName() {
+        return getStore().getAllProjectsByName();
+    }
+
+    public List getAllSchedulesByName() {
+        return getStore().getAllSchedulesByName();
+    }
+
+    public Schedule addSchedule(Schedule schedule) {
+        return getStore().addSchedule(schedule);
+    }
+
+    public Schedule getScheduleByName(String name) throws ContinuumStoreException {
+        return getStore().getScheduleByName(name);
+    }
+
+    public Schedule storeSchedule(Schedule schedule) throws ContinuumStoreException {
+        return getStore().storeSchedule(schedule);
+    }
+
+    public List getAllProfilesByName() {
+        return getStore().getAllProfilesByName();
+    }
+
+    public Profile addProfile(Profile profile) {
+        return getStore().addProfile(profile);
+    }
+
+    public Installation addInstallation(Installation installation) {
+        return getStore().addInstallation(installation);
+    }
+
+    public List getAllInstallations() {
+        return getStore().getAllInstallations();
+    }
+
+    public List getAllBuildsForAProjectByDate(int projectId) {
+        return getStore().getAllBuildsForAProjectByDate(projectId);
+    }
+
+    public Project getProject(int projectId) throws ContinuumStoreException, ContinuumObjectNotFoundException {
+        return getStore().getProject(projectId);
+    }
+
+    public void updateProject(Project project) throws ContinuumStoreException {
+        getStore().updateProject(project);
+    }
+
+    public void updateProfile(Profile profile) throws ContinuumStoreException {
+        getStore().updateProfile(profile);
+    }
+
+    public void updateSchedule(Schedule schedule) throws ContinuumStoreException {
+        getStore().updateSchedule(schedule);
+    }
+
+    public Project getProjectWithBuilds(int projectId) throws ContinuumStoreException, ContinuumObjectNotFoundException {
+        return getStore().getProjectWithBuilds(projectId);
+    }
+
+    public void removeProfile(Profile profile) {
+        getStore().removeProfile(profile);
+    }
+
+    public void removeSchedule(Schedule schedule) {
+        getStore().removeSchedule(schedule);
+    }
+
+    public Project getProjectWithCheckoutResult(int projectId) throws ContinuumObjectNotFoundException, ContinuumStoreException {
+        return getStore().getProjectWithCheckoutResult(projectId);
+    }
+
+    public BuildResult getBuildResult(int buildId) throws ContinuumObjectNotFoundException, ContinuumStoreException {
+        return getStore().getBuildResult(buildId);
+    }
+
+    public void removeProject(Project project) {
+        getStore().removeProject(project);
+    }
+
+    public void removeProjectGroup(ProjectGroup projectGroup) {
+        getStore().removeProjectGroup(projectGroup);
+    }
+
+    public ProjectGroup getProjectGroupWithBuildDetails(int projectGroupId) throws ContinuumObjectNotFoundException, ContinuumStoreException {
+        return getStore().getProjectGroupWithBuildDetails(projectGroupId);
+    }
+
+    public List getAllProjectGroupsWithBuildDetails() {
+        return getStore().getAllProjectGroupsWithBuildDetails();
+    }
+
+    public List getAllProjectsWithAllDetails() {
+        return getStore().getAllProjectsWithAllDetails();
+    }
+
+    public Project getProjectWithAllDetails(int projectId) throws ContinuumObjectNotFoundException, ContinuumStoreException {
+        return getStore().getProjectWithAllDetails(projectId);
+    }
+
+    public Schedule getSchedule(int scheduleId) throws ContinuumObjectNotFoundException, ContinuumStoreException {
+        return getStore().getSchedule(scheduleId);
+    }
+
+    public Profile getProfile(int profileId) throws ContinuumObjectNotFoundException, ContinuumStoreException {
+        return getStore().getProfile(profileId);
+    }
+
+    public ProjectGroup getProjectGroupByGroupId(String groupId) throws ContinuumStoreException, ContinuumObjectNotFoundException {
+        return getStore().getProjectGroupByGroupId(groupId);
+    }
+
+    public BuildResult getLatestBuildResultForProject(int projectId) throws ContinuumStoreException {
+        return getStore().getLatestBuildResultForProject(projectId);
+    }
+
+    public void addBuildResult(Project project, BuildResult build) throws ContinuumStoreException, ContinuumObjectNotFoundException {
+        getStore().addBuildResult(project, build);
+    }
+
+    public void updateBuildResult(BuildResult build) throws ContinuumStoreException {
+        getStore().updateBuildResult(build);
+    }
+
+    public Project getProjectWithBuildDetails(int projectId) throws ContinuumObjectNotFoundException, ContinuumStoreException {
+        return getStore().getProjectWithBuildDetails(projectId);
+    }
+
+    public ProjectGroup getDefaultProjectGroup() throws ContinuumStoreException {
+        return getStore().getDefaultProjectGroup();
+    }
+
+    public SystemConfiguration addSystemConfiguration(SystemConfiguration systemConf) {
+        return getStore().addSystemConfiguration(systemConf);
+    }
+
+    public void updateSystemConfiguration(SystemConfiguration systemConf) throws ContinuumStoreException {
+        getStore().updateSystemConfiguration(systemConf);
+    }
+
+    public SystemConfiguration getSystemConfiguration() throws ContinuumStoreException {
+        return getStore().getSystemConfiguration();
+    }
+
+    public ContinuumUser addUser(ContinuumUser user) {
+        return getStore().addUser(user);
+    }
+
+    public void updateUser(ContinuumUser user) throws ContinuumStoreException {
+        getStore().updateUser(user);
+    }
+
+    public ContinuumUser getUser(int userId) throws ContinuumObjectNotFoundException, ContinuumStoreException {
+        return getStore().getUser(userId);
+    }
+
+    public ContinuumUser getGuestUser() throws ContinuumStoreException {
+        return getStore().getGuestUser();
+    }
+
+    public List getUsers() throws ContinuumStoreException {
+        return getStore().getUsers();
+    }
+
+    public ContinuumUser getUserByUsername(String username) throws ContinuumStoreException {
+        return getStore().getUserByUsername(username);
+    }
+
+    public void removeUser(ContinuumUser user) {
+        getStore().removeUser(user);
+    }
+
+    public List getPermissions() throws ContinuumStoreException {
+        return getStore().getPermissions();
+    }
+
+    public Permission getPermission(String name) throws ContinuumStoreException {
+        return getStore().getPermission(name);
+    }
+
+    public Permission addPermission(Permission perm) {
+        return getStore().addPermission(perm);
+    }
+
+    public UserGroup addUserGroup(UserGroup group) {
+        return getStore().addUserGroup(group);
+    }
+
+    public void updateUserGroup(UserGroup group) throws ContinuumStoreException {
+        getStore().updateUserGroup(group);
+    }
+
+    public List getUserGroups() throws ContinuumStoreException {
+        return getStore().getUserGroups();
+    }
+
+    public UserGroup getUserGroup(int userGroupId) throws ContinuumObjectNotFoundException, ContinuumStoreException {
+        return getStore().getUserGroup(userGroupId);
+    }
+
+    public UserGroup getUserGroup(String name) {
+        return getStore().getUserGroup(name);
+    }
+
+    public void removeUserGroup(UserGroup group) {
+        getStore().removeUserGroup(group);
+    }
+}

Modified: geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/DistrubutedBuildController.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/DistrubutedBuildController.java?rev=332501&r1=332500&r2=332501&view=diff
==============================================================================
--- geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/DistrubutedBuildController.java (original)
+++ geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/DistrubutedBuildController.java Fri Nov 11 01:40:13 2005
@@ -40,6 +40,8 @@
  */
 public class DistrubutedBuildController extends AbstractLogEnabled {
 
+    public String ROLE = DistrubutedBuildController.class.getName(); 
+
     /**
      * @plexus.requirement
      */

Copied: geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/MapContinuumStore.java (from r332478, geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/DistributedContinuumStore.java)
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/MapContinuumStore.java?p2=geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/MapContinuumStore.java&p1=geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/DistributedContinuumStore.java&r1=332478&r2=332501&rev=332501&view=diff
==============================================================================
--- geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/DistributedContinuumStore.java (original)
+++ geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/MapContinuumStore.java Fri Nov 11 01:40:13 2005
@@ -28,7 +28,7 @@
 /**
  * @version $Rev$ $Date$
  */
-public class DistributedContinuumStore extends MockContinuumStore implements Serializable {
+public class MapContinuumStore extends MockContinuumStore implements Serializable {
 
     private Map store = new HashMap();
 

Added: geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/MockContinuumNotificationDispatcher.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/MockContinuumNotificationDispatcher.java?rev=332501&view=auto
==============================================================================
--- geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/MockContinuumNotificationDispatcher.java (added)
+++ geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/MockContinuumNotificationDispatcher.java Fri Nov 11 01:40:13 2005
@@ -0,0 +1,45 @@
+/**
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ *  Licensed 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.
+ */
+package org.apache.geronimo.gbuild.agent;
+
+import org.apache.maven.continuum.notification.ContinuumNotificationDispatcher;
+import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.model.project.BuildResult;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class MockContinuumNotificationDispatcher implements ContinuumNotificationDispatcher {
+
+    public void buildStarted(Project project) {
+    }
+
+    public void checkoutStarted(Project project) {
+    }
+
+    public void checkoutComplete(Project project) {
+    }
+
+    public void runningGoals(Project project, BuildResult build) {
+    }
+
+    public void goalsCompleted(Project project, BuildResult build) {
+    }
+
+    public void buildComplete(Project project, BuildResult build) {
+    }
+}