rebuild repository hook api

This commit is contained in:
Sebastian Sdorra
2011-07-19 15:32:53 +02:00
parent 292d143761
commit 96400d164b
12 changed files with 451 additions and 147 deletions

View File

@@ -47,8 +47,8 @@ import sonia.scm.io.FileSystem;
import sonia.scm.plugin.ext.Extension;
import sonia.scm.plugin.ext.ExtensionProcessor;
import sonia.scm.repository.ChangesetPreProcessor;
import sonia.scm.repository.PostReceiveHook;
import sonia.scm.repository.RepositoryHandler;
import sonia.scm.repository.RepositoryHook;
import sonia.scm.repository.RepositoryListener;
import sonia.scm.resources.ResourceHandler;
import sonia.scm.security.EncryptionHandler;
@@ -212,16 +212,16 @@ public class BindingExtensionProcessor implements ExtensionProcessor
changesetPreProcessorBinder.addBinding().to(extensionClass);
}
else if (PostReceiveHook.class.isAssignableFrom(extensionClass))
else if (RepositoryHook.class.isAssignableFrom(extensionClass))
{
if (logger.isInfoEnabled())
{
logger.info("bind PostReceiveHook {}", extensionClass.getName());
logger.info("bind RepositoryHook {}", extensionClass.getName());
}
PostReceiveHook hook = (PostReceiveHook) extensionClass.newInstance();
RepositoryHook hook = (RepositoryHook) extensionClass.newInstance();
postReceiveHooks.add(hook);
hooks.add(hook);
}
else
{
@@ -310,9 +310,9 @@ public class BindingExtensionProcessor implements ExtensionProcessor
*
* @return
*/
public Set<Module> getModuleSet()
public Set<RepositoryHook> getHooks()
{
return moduleSet;
return hooks;
}
/**
@@ -321,9 +321,9 @@ public class BindingExtensionProcessor implements ExtensionProcessor
*
* @return
*/
public Set<PostReceiveHook> getPostReceiveHooks()
public Set<Module> getModuleSet()
{
return postReceiveHooks;
return moduleSet;
}
/**
@@ -402,11 +402,10 @@ public class BindingExtensionProcessor implements ExtensionProcessor
private Class<? extends FileSystem> fileSystemClass;
/** Field description */
private Set<Module> moduleSet;
private Set<RepositoryHook> hooks = new HashSet<RepositoryHook>();
/** Field description */
private Set<PostReceiveHook> postReceiveHooks =
new HashSet<PostReceiveHook>();
private Set<Module> moduleSet;
/** Field description */
private Set<RepositoryListener> repositoryListeners =

View File

@@ -148,8 +148,7 @@ public class ScmContextListener extends GuiceServletContextListener
injector.getInstance(RepositoryManager.class);
repositoryManager.addListeners(bindExtProcessor.getRepositoryListeners());
repositoryManager.addPostReceiveHooks(
bindExtProcessor.getPostReceiveHooks());
repositoryManager.addHooks(bindExtProcessor.getHooks());
repositoryManager.init(context);
// init UserManager

View File

@@ -38,24 +38,19 @@ package sonia.scm.repository.xml;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.repository.Changeset;
import sonia.scm.repository.PostReceiveHook;
import sonia.scm.repository.Repository;
//~--- JDK imports ------------------------------------------------------------
import java.util.List;
import sonia.scm.repository.RepositoryHook;
import sonia.scm.repository.RepositoryHookEvent;
/**
*
* @author Sebastian Sdorra
*/
public class PostReceiveHookTask implements Runnable
public class RepositoryHookTask implements Runnable
{
/** the logger for PostReceiveHookTask */
/** the logger for RepositoryHookTask */
private static final Logger logger =
LoggerFactory.getLogger(PostReceiveHookTask.class);
LoggerFactory.getLogger(RepositoryHookTask.class);
//~--- constructors ---------------------------------------------------------
@@ -64,15 +59,12 @@ public class PostReceiveHookTask implements Runnable
*
*
* @param hook
* @param repository
* @param changesets
* @param event
*/
public PostReceiveHookTask(PostReceiveHook hook, Repository repository,
List<Changeset> changesets)
public RepositoryHookTask(RepositoryHook hook, RepositoryHookEvent event)
{
this.hook = hook;
this.repository = repository;
this.changesets = changesets;
this.event = event;
}
//~--- methods --------------------------------------------------------------
@@ -86,21 +78,20 @@ public class PostReceiveHookTask implements Runnable
{
if (logger.isDebugEnabled())
{
logger.debug("execute async PostReceiveHook {} for repository {}",
hook.getClass().getName(), repository.getName());
Object[] args = new Object[] { event.getType(), hook.getClass().getName(),
event.getRepository().getName() };
logger.debug("execute async {} hook {} for repository {}", args);
}
hook.onPostReceive(repository, changesets);
hook.onEvent(event);
}
//~--- fields ---------------------------------------------------------------
/** Field description */
private List<Changeset> changesets;
private RepositoryHookEvent event;
/** Field description */
private PostReceiveHook hook;
/** Field description */
private Repository repository;
private RepositoryHook hook;
}

View File

@@ -47,17 +47,17 @@ import sonia.scm.HandlerEvent;
import sonia.scm.SCMContextProvider;
import sonia.scm.Type;
import sonia.scm.repository.AbstractRepositoryManager;
import sonia.scm.repository.Changeset;
import sonia.scm.repository.ChangesetViewer;
import sonia.scm.repository.PermissionType;
import sonia.scm.repository.PermissionUtil;
import sonia.scm.repository.PostReceiveHook;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryAllreadyExistExeption;
import sonia.scm.repository.RepositoryBrowser;
import sonia.scm.repository.RepositoryException;
import sonia.scm.repository.RepositoryHandler;
import sonia.scm.repository.RepositoryHandlerNotFoundException;
import sonia.scm.repository.RepositoryHook;
import sonia.scm.repository.RepositoryHookEvent;
import sonia.scm.repository.RepositoryNotFoundException;
import sonia.scm.security.ScmSecurityException;
import sonia.scm.store.Store;
@@ -227,18 +227,17 @@ public class XmlRepositoryManager extends AbstractRepositoryManager
}
/**
* TODO protect
* Method description
*
*
* @param type
* @param name
* @param changesets
* @param event
*
* @throws RepositoryNotFoundException
*/
@Override
public void firePostReceiveEvent(String type, String name,
List<Changeset> changesets)
public void fireHookEvent(String type, String name, RepositoryHookEvent event)
throws RepositoryNotFoundException
{
Repository repository = repositoryDB.get(type, name);
@@ -248,20 +247,20 @@ public class XmlRepositoryManager extends AbstractRepositoryManager
throw new RepositoryNotFoundException();
}
firePostReceiveEvent(repository, changesets);
fireHookEvent(repository, event);
}
/**
* TODO protect
* Method description
*
*
* @param id
* @param changesets
* @param event
*
* @throws RepositoryNotFoundException
*/
@Override
public void firePostReceiveEvent(String id, List<Changeset> changesets)
public void fireHookEvent(String id, RepositoryHookEvent event)
throws RepositoryNotFoundException
{
Repository repository = repositoryDB.get(id);
@@ -271,7 +270,7 @@ public class XmlRepositoryManager extends AbstractRepositoryManager
throw new RepositoryNotFoundException();
}
firePostReceiveEvent(repository, changesets);
fireHookEvent(repository, event);
}
/**
@@ -616,28 +615,27 @@ public class XmlRepositoryManager extends AbstractRepositoryManager
*
*
* @param hook
* @param repository
* @param changesets
* @param event
*/
@Override
protected void firePostReceiveEvent(PostReceiveHook hook,
Repository repository, List<Changeset> changesets)
protected void fireHookEvent(RepositoryHook hook, RepositoryHookEvent event)
{
if (hook.isAsynchronous())
if (hook.isAsync())
{
// TODO add queue
new Thread(new PostReceiveHookTask(hook, repository, changesets)).start();
new Thread(new RepositoryHookTask(hook, event)).start();
}
else
{
if (logger.isDebugEnabled())
{
logger.debug("execute PostReceiveHook {} for repository {}",
hook.getClass().getName(), repository.getName());
Object[] args = new Object[] { event.getType(),
hook.getClass().getName(),
event.getRepository().getName() };
logger.debug("execute {} hook {} for repository {}", args);
}
hook.onPostReceive(repository, changesets);
hook.onEvent(event);
}
}