From af7b7b8e4d0c6d90e2e74d5919eb7c8f11c8c4fa Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 28 Sep 2010 19:19:11 +0200 Subject: [PATCH] added new plugin api --- .../java/sonia/scm/BasicContextProvider.java | 24 ++++++++++++++ .../src/main/java/sonia/scm/SCMPlugin.java | 32 +++++++++++++++++++ .../repository/BasicRepositoryManager.java | 28 ++++++++++++++++ .../scm/repository/RepositoryManager.java | 10 ++++++ 4 files changed, 94 insertions(+) create mode 100644 scm-core/src/main/java/sonia/scm/SCMPlugin.java diff --git a/scm-core/src/main/java/sonia/scm/BasicContextProvider.java b/scm-core/src/main/java/sonia/scm/BasicContextProvider.java index 519989d304..44456a50df 100644 --- a/scm-core/src/main/java/sonia/scm/BasicContextProvider.java +++ b/scm-core/src/main/java/sonia/scm/BasicContextProvider.java @@ -25,6 +25,7 @@ import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; /** * @@ -64,6 +65,11 @@ public class BasicContextProvider implements SCMContextProvider @Override public void close() throws IOException { + for (SCMPlugin plugin : plugins) + { + plugin.contextDestroyed(this); + } + for (GroupManager manager : groupManagerMap.values()) { manager.close(); @@ -82,6 +88,7 @@ public class BasicContextProvider implements SCMContextProvider loadGroupManagers(); loadRepositoryManager(); loadEncryptionHandler(); + loadPlugins(); } //~--- get methods ---------------------------------------------------------- @@ -202,6 +209,20 @@ public class BasicContextProvider implements SCMContextProvider } } + /** + * Method description + * + */ + private void loadPlugins() + { + plugins = ServiceUtil.getServices(SCMPlugin.class); + + for (SCMPlugin plugin : plugins) + { + plugin.contextInitialized(this); + } + } + /** * Method description * @@ -229,6 +250,9 @@ public class BasicContextProvider implements SCMContextProvider /** Field description */ private Map groupManagerMap; + /** Field description */ + private List plugins; + /** Field description */ private RepositoryManager repositoryManager; } diff --git a/scm-core/src/main/java/sonia/scm/SCMPlugin.java b/scm-core/src/main/java/sonia/scm/SCMPlugin.java new file mode 100644 index 0000000000..112ebd9b00 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/SCMPlugin.java @@ -0,0 +1,32 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + + + +package sonia.scm; + +/** + * + * @author Sebastian Sdorra + */ +public interface SCMPlugin +{ + + /** + * Method description + * + * + * @param context + */ + public void contextDestroyed(SCMContextProvider context); + + /** + * Method description + * + * + * @param context + */ + public void contextInitialized(SCMContextProvider context); +} diff --git a/scm-core/src/main/java/sonia/scm/repository/BasicRepositoryManager.java b/scm-core/src/main/java/sonia/scm/repository/BasicRepositoryManager.java index 94e4e4dd10..5a1a637395 100644 --- a/scm-core/src/main/java/sonia/scm/repository/BasicRepositoryManager.java +++ b/scm-core/src/main/java/sonia/scm/repository/BasicRepositoryManager.java @@ -9,7 +9,10 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import sonia.scm.ConfigurationException; +import sonia.scm.SCMContext; import sonia.scm.SCMContextProvider; +import sonia.scm.util.AssertUtil; import sonia.scm.util.ServiceUtil; import sonia.scm.util.Util; @@ -44,6 +47,31 @@ public class BasicRepositoryManager extends AbstractRepositoryManager //~--- methods -------------------------------------------------------------- + /** + * Method description + * + * + * @param handler + */ + @Override + public void addHandler(RepositoryHandler handler) + { + AssertUtil.assertIsNotNull(handler); + + RepositoryType type = handler.getType(); + + AssertUtil.assertIsNotNull(type); + + if (handlerMap.containsKey(type.getName())) + { + throw new ConfigurationException( + type.getName().concat("allready registered")); + } + + handlerMap.put(type.getName(), handler); + handler.init(SCMContext.getContext()); + } + /** * Method description * diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryManager.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryManager.java index 0ebb80eeba..efeeba3b46 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryManager.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryManager.java @@ -25,6 +25,16 @@ public interface RepositoryManager ListenerSupport { + /** + * Method description + * + * + * @param handler + */ + public void addHandler(RepositoryHandler handler); + + //~--- get methods ---------------------------------------------------------- + /** * Method description *