diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmProviderHttpServletProvider.java b/scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServletProvider.java similarity index 71% rename from scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmProviderHttpServletProvider.java rename to scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServletProvider.java index a9369d8f4e..991728e72c 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmProviderHttpServletProvider.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServletProvider.java @@ -1,8 +1,6 @@ -package sonia.scm.web; +package sonia.scm.repository.spi; import com.google.inject.Inject; -import sonia.scm.repository.spi.ScmProviderHttpServlet; -import sonia.scm.repository.spi.ScmProviderHttpServletDecoratorFactory; import sonia.scm.util.Decorators; import javax.inject.Provider; @@ -15,9 +13,15 @@ public abstract class ScmProviderHttpServletProvider implements Provider decoratorFactories; + private final String type; + + protected ScmProviderHttpServletProvider(String type) { + this.type = type; + } + @Override public ScmProviderHttpServlet get() { - return Decorators.decorate(getRootServlet(), decoratorFactories.stream().filter(d -> d.handlesScmType("git")).collect(toList())); + return Decorators.decorate(getRootServlet(), decoratorFactories.stream().filter(d -> d.handlesScmType(type)).collect(toList())); } protected abstract ScmProviderHttpServlet getRootServlet(); 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 index b8eb38de6d..5e8ef80d3d 100644 --- 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 @@ -1,16 +1,22 @@ package sonia.scm.web; import com.google.inject.Inject; +import sonia.scm.repository.spi.ScmProviderHttpServlet; +import sonia.scm.repository.spi.ScmProviderHttpServletProvider; import javax.inject.Provider; public class ScmGitServletProvider extends ScmProviderHttpServletProvider { @Inject - private Provider scmGitServlet; + private Provider servletProvider; + + public ScmGitServletProvider() { + super("git"); + } @Override - protected ScmGitServlet getRootServlet() { - return scmGitServlet.get(); + protected ScmProviderHttpServlet getRootServlet() { + return servletProvider.get(); } } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/Hg.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/Hg.java new file mode 100644 index 0000000000..e4fe39e724 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/Hg.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 Hg { +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServletProvider.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServletProvider.java new file mode 100644 index 0000000000..d17479b399 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServletProvider.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.ScmProviderHttpServletProvider; + +import javax.inject.Provider; + +public class HgCGIServletProvider extends ScmProviderHttpServletProvider { + + @Inject + private Provider servletProvider; + + public HgCGIServletProvider() { + super("hg"); + } + + @Override + protected ScmProviderHttpServlet getRootServlet() { + return servletProvider.get(); + } +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgScmProtocolProviderWrapper.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgScmProtocolProviderWrapper.java index 5ea8e66501..1d75e63332 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgScmProtocolProviderWrapper.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgScmProtocolProviderWrapper.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 HgScmProtocolProviderWrapper extends InitializingHttpScmProtocolWrapper { @Inject - public HgScmProtocolProviderWrapper(Provider servletProvider, Provider permissionFilter, Provider uriInfoStore, ScmConfiguration scmConfiguration) { + public HgScmProtocolProviderWrapper(@Hg Provider servletProvider, Provider permissionFilter, Provider uriInfoStore, ScmConfiguration scmConfiguration) { super(servletProvider, permissionFilter, uriInfoStore, scmConfiguration); } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java index ba9ae3a0b9..6949be2ea9 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java @@ -46,6 +46,7 @@ import sonia.scm.plugin.Extension; import sonia.scm.repository.HgContext; import sonia.scm.repository.HgContextProvider; import sonia.scm.repository.HgHookManager; +import sonia.scm.repository.spi.ScmProviderHttpServlet; /** * @@ -79,6 +80,8 @@ public class HgServletModule extends ServletModule bind(HgConfigPackagesToDtoMapper.class).to(Mappers.getMapper(HgConfigPackagesToDtoMapper.class).getClass()); bind(HgConfigInstallationsToDtoMapper.class); + bind(ScmProviderHttpServlet.class).annotatedWith(Hg.class).toProvider(HgCGIServletProvider.class); + // bind servlets serve(MAPPING_HOOK).with(HgHookCallbackServlet.class); } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/Svn.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/Svn.java new file mode 100644 index 0000000000..744c1a0939 --- /dev/null +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/Svn.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 Svn { +} diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServletProvider.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServletProvider.java new file mode 100644 index 0000000000..586b277673 --- /dev/null +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServletProvider.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.ScmProviderHttpServletProvider; + +import javax.inject.Provider; + +public class SvnDAVServletProvider extends ScmProviderHttpServletProvider { + + @Inject + private Provider servletProvider; + + public SvnDAVServletProvider() { + super("svn"); + } + + @Override + protected ScmProviderHttpServlet getRootServlet() { + return servletProvider.get(); + } +} diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnScmProtocolProviderWrapper.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnScmProtocolProviderWrapper.java index 14b946acc7..ed47791793 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnScmProtocolProviderWrapper.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnScmProtocolProviderWrapper.java @@ -26,7 +26,7 @@ public class SvnScmProtocolProviderWrapper extends InitializingHttpScmProtocolWr } @Inject - public SvnScmProtocolProviderWrapper(Provider servletProvider, Provider permissionFilter, Provider uriInfoStore, ScmConfiguration scmConfiguration) { + public SvnScmProtocolProviderWrapper(@Svn Provider servletProvider, Provider permissionFilter, Provider uriInfoStore, ScmConfiguration scmConfiguration) { super(servletProvider, permissionFilter, uriInfoStore, scmConfiguration); } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnServletModule.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnServletModule.java index 8526d6380a..cd47a2fa44 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnServletModule.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnServletModule.java @@ -38,6 +38,7 @@ import org.mapstruct.factory.Mappers; import sonia.scm.api.v2.resources.SvnConfigDtoToSvnConfigMapper; import sonia.scm.api.v2.resources.SvnConfigToSvnConfigDtoMapper; import sonia.scm.plugin.Extension; +import sonia.scm.repository.spi.ScmProviderHttpServlet; /** * @@ -50,5 +51,7 @@ public class SvnServletModule extends ServletModule { protected void configureServlets() { bind(SvnConfigDtoToSvnConfigMapper.class).to(Mappers.getMapper(SvnConfigDtoToSvnConfigMapper.class).getClass()); bind(SvnConfigToSvnConfigDtoMapper.class).to(Mappers.getMapper(SvnConfigToSvnConfigDtoMapper.class).getClass()); + + bind(ScmProviderHttpServlet.class).annotatedWith(Svn.class).toProvider(SvnDAVServletProvider.class); } }