From a075962a66e8c56faeb4d8f1a241175103fcaaaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 14 Sep 2018 08:49:09 +0200 Subject: [PATCH] Introduce extension point for scm http requests --- .../spi/ScmProviderHttpServletFactory.java | 7 ++++++ .../main/java/sonia/scm/util/Decorators.java | 1 - .../src/main/java/sonia/scm/web/Git.java | 14 ++++++++++++ .../web/GitScmProtocolProviderWrapper.java | 3 ++- .../java/sonia/scm/web/GitServletModule.java | 3 +++ .../sonia/scm/web/ScmGitServletProvider.java | 22 +++++++++++++++++++ 6 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServletFactory.java rename {scm-webapp => scm-core}/src/main/java/sonia/scm/util/Decorators.java (99%) create mode 100644 scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/Git.java create mode 100644 scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServletProvider.java diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServletFactory.java b/scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServletFactory.java new file mode 100644 index 0000000000..1f49dec4ba --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServletFactory.java @@ -0,0 +1,7 @@ +package sonia.scm.repository.spi; + +import sonia.scm.DecoratorFactory; +import sonia.scm.plugin.ExtensionPoint; + +@ExtensionPoint +public interface ScmProviderHttpServletFactory extends DecoratorFactory {} diff --git a/scm-webapp/src/main/java/sonia/scm/util/Decorators.java b/scm-core/src/main/java/sonia/scm/util/Decorators.java similarity index 99% rename from scm-webapp/src/main/java/sonia/scm/util/Decorators.java rename to scm-core/src/main/java/sonia/scm/util/Decorators.java index 41c75660a9..6465631d03 100644 --- a/scm-webapp/src/main/java/sonia/scm/util/Decorators.java +++ b/scm-core/src/main/java/sonia/scm/util/Decorators.java @@ -37,7 +37,6 @@ package sonia.scm.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.DecoratorFactory; /** diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/Git.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/Git.java new file mode 100644 index 0000000000..8bcf85c8f0 --- /dev/null +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/Git.java @@ -0,0 +1,14 @@ +package sonia.scm.web; + +import com.google.inject.BindingAnnotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@BindingAnnotation +@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER }) +@Retention(RetentionPolicy.RUNTIME) +@interface Git { +} diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitScmProtocolProviderWrapper.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitScmProtocolProviderWrapper.java index 3df7bcce3f..2924a27915 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitScmProtocolProviderWrapper.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitScmProtocolProviderWrapper.java @@ -4,6 +4,7 @@ import sonia.scm.api.v2.resources.ScmPathInfoStore; import sonia.scm.config.ScmConfiguration; import sonia.scm.plugin.Extension; import sonia.scm.repository.spi.InitializingHttpScmProtocolWrapper; +import sonia.scm.repository.spi.ScmProviderHttpServlet; import javax.inject.Inject; import javax.inject.Provider; @@ -13,7 +14,7 @@ import javax.inject.Singleton; @Extension public class GitScmProtocolProviderWrapper extends InitializingHttpScmProtocolWrapper { @Inject - public GitScmProtocolProviderWrapper(Provider servletProvider, Provider permissionFilter, Provider uriInfoStore, ScmConfiguration scmConfiguration) { + public GitScmProtocolProviderWrapper(@Git Provider servletProvider, Provider permissionFilter, Provider uriInfoStore, ScmConfiguration scmConfiguration) { super(servletProvider, permissionFilter, uriInfoStore, scmConfiguration); } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitServletModule.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitServletModule.java index e731e01a62..8c7b30572f 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitServletModule.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitServletModule.java @@ -41,6 +41,7 @@ import org.mapstruct.factory.Mappers; import sonia.scm.api.v2.resources.GitConfigDtoToGitConfigMapper; import sonia.scm.api.v2.resources.GitConfigToGitConfigDtoMapper; import sonia.scm.plugin.Extension; +import sonia.scm.repository.spi.ScmProviderHttpServlet; import sonia.scm.web.lfs.LfsBlobStoreFactory; /** @@ -63,5 +64,7 @@ public class GitServletModule extends ServletModule bind(GitConfigDtoToGitConfigMapper.class).to(Mappers.getMapper(GitConfigDtoToGitConfigMapper.class).getClass()); bind(GitConfigToGitConfigDtoMapper.class).to(Mappers.getMapper(GitConfigToGitConfigDtoMapper.class).getClass()); + + bind(ScmProviderHttpServlet.class).annotatedWith(Git.class).toProvider(ScmGitServletProvider.class); } } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServletProvider.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServletProvider.java new file mode 100644 index 0000000000..2c7c8b19f9 --- /dev/null +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServletProvider.java @@ -0,0 +1,22 @@ +package sonia.scm.web; + +import com.google.inject.Inject; +import sonia.scm.repository.spi.ScmProviderHttpServlet; +import sonia.scm.repository.spi.ScmProviderHttpServletFactory; +import sonia.scm.util.Decorators; + +import javax.inject.Provider; +import java.util.Set; + +public class ScmGitServletProvider implements Provider { + + @Inject + private Provider scmGitServlet; + @Inject(optional = true) + private Set decoratorFactories; + + @Override + public ScmProviderHttpServlet get() { + return Decorators.decorate(scmGitServlet.get(), decoratorFactories); + } +}