diff --git a/scm-core/src/main/java/sonia/scm/repository/api/HookContext.java b/scm-core/src/main/java/sonia/scm/repository/api/HookContext.java index 97fb911924..3eeaceeeb8 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/HookContext.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/HookContext.java @@ -39,6 +39,9 @@ import sonia.scm.repository.Repository; import sonia.scm.repository.spi.HookContextProvider; /** + * The context for all repository hooks. With the {@link HookContext} class it + * is able to send messages back to the client and retrieve {@link Changeset}s + * which are added during this push/commit. * * @author Sebastian Sdorra * @since 1.33 @@ -65,7 +68,7 @@ public final class HookContext //~--- get methods ---------------------------------------------------------- /** - * Returns a {@link HookChangesetBuilder} which is able to return all + * Returns a {@link HookChangesetBuilder} which is able to return all * {@link Changeset}'s during this push/commit. * * @@ -97,6 +100,19 @@ public final class HookContext return provider.getMessageProvider(); } + /** + * Returns true if the underlying provider support the requested feature. + * + * + * @param feature feature to check if it is supported + * + * @return true if the feature is supported + */ + public boolean isFeatureSupported(HookFeature feature) + { + return provider.getSupportedFeatures().contains(feature); + } + //~--- fields --------------------------------------------------------------- /** Field description */ diff --git a/scm-core/src/main/java/sonia/scm/repository/api/HookFeature.java b/scm-core/src/main/java/sonia/scm/repository/api/HookFeature.java new file mode 100644 index 0000000000..082f315a35 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/api/HookFeature.java @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.repository.api; + +/** + * Enumeration of available hook features. + * + * @author Sebastian Sdorra + * @since 1.33 + */ +public enum HookFeature { MESSAGE_PROVIDER, CHANGESET_PROVIDER; } diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/HookContextProvider.java b/scm-core/src/main/java/sonia/scm/repository/spi/HookContextProvider.java index 06aefba0dc..5d67715cd8 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/HookContextProvider.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/HookContextProvider.java @@ -33,8 +33,13 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- +import sonia.scm.repository.api.HookFeature; import sonia.scm.repository.api.HookMessageProvider; +//~--- JDK imports ------------------------------------------------------------ + +import java.util.Set; + /** * * @author Sebastian Sdorra @@ -61,6 +66,14 @@ public abstract class HookContextProvider return createMessageProvider(); } + /** + * Method description + * + * + * @return + */ + public abstract Set getSupportedFeatures(); + /** * Method description * @@ -78,7 +91,8 @@ public abstract class HookContextProvider * Method description * */ - void handleClientFinalization() { + void handleClientFinalization() + { clientFinalization = true; } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitHookContextProvider.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitHookContextProvider.java index cfb9c00d68..8f0d32c615 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitHookContextProvider.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitHookContextProvider.java @@ -38,11 +38,14 @@ import org.eclipse.jgit.transport.ReceivePack; import sonia.scm.repository.RepositoryHookType; import sonia.scm.repository.api.GitHookMessageProvider; +import sonia.scm.repository.api.HookFeature; import sonia.scm.repository.api.HookMessageProvider; //~--- JDK imports ------------------------------------------------------------ +import java.util.EnumSet; import java.util.List; +import java.util.Set; /** * @@ -51,6 +54,12 @@ import java.util.List; public class GitHookContextProvider extends HookContextProvider { + /** Field description */ + private static final Set SUPPORTED_FEATURES = + EnumSet.of(HookFeature.MESSAGE_PROVIDER, HookFeature.CHANGESET_PROVIDER); + + //~--- constructors --------------------------------------------------------- + /** * Constructs ... * @@ -67,6 +76,20 @@ public class GitHookContextProvider extends HookContextProvider this.type = type; } + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + @Override + public HookMessageProvider createMessageProvider() + { + return new GitHookMessageProvider(receivePack); + } + //~--- get methods ---------------------------------------------------------- /** @@ -88,9 +111,9 @@ public class GitHookContextProvider extends HookContextProvider * @return */ @Override - public HookMessageProvider createMessageProvider() + public Set getSupportedFeatures() { - return new GitHookMessageProvider(receivePack); + return SUPPORTED_FEATURES; } //~--- fields ---------------------------------------------------------------