From ac5fab3e8dca6cf3634827542e6fb2f65d515655 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 15 Jul 2012 16:20:18 +0200 Subject: [PATCH] allow multiple provider implementations --- .../GitRepositoryClientFactoryProvider.java | 15 +++++ .../client/api/RepositoryClientFactory.java | 59 ++++++++++++++++--- .../spi/RepositoryClientFactoryProvider.java | 10 ++++ 3 files changed, 75 insertions(+), 9 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/client/spi/GitRepositoryClientFactoryProvider.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/client/spi/GitRepositoryClientFactoryProvider.java index 415fd1bbeb..32727f873c 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/client/spi/GitRepositoryClientFactoryProvider.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/client/spi/GitRepositoryClientFactoryProvider.java @@ -38,6 +38,7 @@ import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.transport.CredentialsProvider; import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; +import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.client.api.RepositoryClientException; //~--- JDK imports ------------------------------------------------------------ @@ -118,4 +119,18 @@ public class GitRepositoryClientFactoryProvider return new GitRepositoryClientProvider(git, credentialsProvider); } + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + @Override + public String getType() + { + return GitRepositoryHandler.TYPE_NAME; + } } diff --git a/scm-test/src/main/java/sonia/scm/repository/client/api/RepositoryClientFactory.java b/scm-test/src/main/java/sonia/scm/repository/client/api/RepositoryClientFactory.java index b1f024ec00..84ec0a98ee 100644 --- a/scm-test/src/main/java/sonia/scm/repository/client/api/RepositoryClientFactory.java +++ b/scm-test/src/main/java/sonia/scm/repository/client/api/RepositoryClientFactory.java @@ -53,10 +53,13 @@ public final class RepositoryClientFactory * * * @param provider + * + * @param providers */ - public RepositoryClientFactory(RepositoryClientFactoryProvider provider) + public RepositoryClientFactory( + Iterable providers) { - this.provider = provider; + this.providers = providers; } //~--- methods -------------------------------------------------------------- @@ -65,6 +68,8 @@ public final class RepositoryClientFactory * Method description * * + * + * @param type * @param main * @param workingCopy * @@ -72,16 +77,19 @@ public final class RepositoryClientFactory * * @throws IOException */ - public RepositoryClient create(File main, File workingCopy) throws IOException + public RepositoryClient create(String type, File main, File workingCopy) + throws IOException { - return new RepositoryClient(provider.create(main, workingCopy)); + return new RepositoryClient(getProvider(type).create(main, workingCopy)); } /** * Method description * * + * + * @param type * @param url * @param username * @param password @@ -91,16 +99,49 @@ public final class RepositoryClientFactory * * @throws IOException */ - public RepositoryClient create(String url, String username, String password, - File workingCopy) + public RepositoryClient create(String type, String url, String username, + String password, File workingCopy) throws IOException { - return new RepositoryClient(provider.create(url, username, password, - workingCopy)); + return new RepositoryClient(getProvider(type).create(url, username, + password, workingCopy)); + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @param type + * + * @return + */ + private RepositoryClientFactoryProvider getProvider(String type) + { + RepositoryClientFactoryProvider provider = null; + + for (RepositoryClientFactoryProvider p : providers) + { + if (p.getType().equalsIgnoreCase(type)) + { + provider = p; + + break; + } + } + + if (provider == null) + { + throw new RuntimeException( + "could not find provider for type ".concat(type)); + } + + return provider; } //~--- fields --------------------------------------------------------------- /** Field description */ - private RepositoryClientFactoryProvider provider; + private Iterable providers; } diff --git a/scm-test/src/main/java/sonia/scm/repository/client/spi/RepositoryClientFactoryProvider.java b/scm-test/src/main/java/sonia/scm/repository/client/spi/RepositoryClientFactoryProvider.java index 57a6d184ab..0f6361d459 100644 --- a/scm-test/src/main/java/sonia/scm/repository/client/spi/RepositoryClientFactoryProvider.java +++ b/scm-test/src/main/java/sonia/scm/repository/client/spi/RepositoryClientFactoryProvider.java @@ -74,4 +74,14 @@ public interface RepositoryClientFactoryProvider public RepositoryClientProvider create(String url, String username, String password, File workingCopy) throws IOException; + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + public String getType(); }