From 4b74fc9cf199933a1882ea02c668291c6a407fc4 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 8 Sep 2010 15:58:12 +0200 Subject: [PATCH] implementing SCMContextProvider --- .../java/sonia/scm/BasicContextProvider.java | 170 +++++++++++++++++- .../java/sonia/scm/SCMContextProvider.java | 20 ++- .../java/sonia/scm/group/GroupManager.java | 12 +- .../scm/repository/RepositoryManager.java | 12 +- 4 files changed, 203 insertions(+), 11 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/BasicContextProvider.java b/scm-core/src/main/java/sonia/scm/BasicContextProvider.java index 5955c0afff..2d59739cc0 100644 --- a/scm-core/src/main/java/sonia/scm/BasicContextProvider.java +++ b/scm-core/src/main/java/sonia/scm/BasicContextProvider.java @@ -3,27 +3,183 @@ * and open the template in the editor. */ + + package sonia.scm; +//~--- non-JDK imports -------------------------------------------------------- + import sonia.scm.group.GroupManager; import sonia.scm.repository.RepositoryManager; +import sonia.scm.util.ServiceUtil; +import sonia.scm.util.Util; + +//~--- JDK imports ------------------------------------------------------------ + +import java.io.File; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * * @author Sebastian Sdorra */ -public class BasicContextProvider implements SCMContextProvider { +public class BasicContextProvider implements SCMContextProvider +{ - @Override - public GroupManager getGroupManager() + /** Field description */ + public static final String DIRECTORY_DEFAULT = ".scm"; + + /** Field description */ + public static final String DIRECTORY_ENVIRONMENT = "SCM_HOME"; + + /** Field description */ + public static final String DIRECTORY_PROPERTY = "scm.home"; + + //~--- constructors --------------------------------------------------------- + + /** + * Constructs ... + * + */ + public BasicContextProvider() { - throw new UnsupportedOperationException("Not supported yet."); + baseDirectory = findBaseDirectory(); } - @Override - public RepositoryManager getRepositoryManager() + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + */ + public void init() { - throw new UnsupportedOperationException("Not supported yet."); + loadGroupManagers(); + loadRepositoryManagers(); } + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + @Override + public File getBaseDirectory() + { + return baseDirectory; + } + + /** + * Method description + * + * + * @param type + * + * @return + */ + @Override + public GroupManager getGroupManager(String type) + { + return groupManagerMap.get(type); + } + + /** + * Method description + * + * + * @param type + * + * @return + */ + @Override + public RepositoryManager getRepositoryManager(String type) + { + return repositoryManagerMap.get(type); + } + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + private File findBaseDirectory() + { + String path = System.getProperty(DIRECTORY_PROPERTY); + + if (Util.isEmpty(path)) + { + path = System.getenv(DIRECTORY_ENVIRONMENT); + + if (Util.isEmpty(path)) + { + path = System.getProperty("user.home").concat(File.separator).concat( + DIRECTORY_DEFAULT); + } + } + + File directory = new File(path); + + if (!directory.exists() &&!directory.mkdirs()) + { + throw new IllegalStateException("could not create directory"); + } + + return directory; + } + + /** + * Method description + * + */ + private void loadGroupManagers() + { + groupManagerMap = new HashMap(); + + List groupManagers = + ServiceUtil.getServices(GroupManager.class); + + for (GroupManager manager : groupManagers) + { + manager.init(this); + groupManagerMap.put(manager.getType(), manager); + } + } + + /** + * Method description + * + */ + private void loadRepositoryManagers() + { + repositoryManagerMap = new HashMap(); + + List repositoryManagers = + ServiceUtil.getServices(RepositoryManager.class); + + for (RepositoryManager manager : repositoryManagers) + { + manager.init(this); + repositoryManagerMap.put(manager.getType().getName(), manager); + } + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + private File baseDirectory; + + /** Field description */ + private Map groupManagerMap; + + /** Field description */ + private Map repositoryManagerMap; } diff --git a/scm-core/src/main/java/sonia/scm/SCMContextProvider.java b/scm-core/src/main/java/sonia/scm/SCMContextProvider.java index 21292b5643..67f6cc0faa 100644 --- a/scm-core/src/main/java/sonia/scm/SCMContextProvider.java +++ b/scm-core/src/main/java/sonia/scm/SCMContextProvider.java @@ -12,6 +12,10 @@ package sonia.scm; import sonia.scm.group.GroupManager; import sonia.scm.repository.RepositoryManager; +//~--- JDK imports ------------------------------------------------------------ + +import java.io.File; + /** * * @author Sebastian Sdorra @@ -25,13 +29,25 @@ public interface SCMContextProvider * * @return */ - public GroupManager getGroupManager(); + public File getBaseDirectory(); /** * Method description * * + * + * @param type * @return */ - public RepositoryManager getRepositoryManager(); + public GroupManager getGroupManager(String type); + + /** + * Method description + * + * + * + * @param type + * @return + */ + public RepositoryManager getRepositoryManager(String type); } diff --git a/scm-core/src/main/java/sonia/scm/group/GroupManager.java b/scm-core/src/main/java/sonia/scm/group/GroupManager.java index 63429fa76a..74d3d33ea0 100644 --- a/scm-core/src/main/java/sonia/scm/group/GroupManager.java +++ b/scm-core/src/main/java/sonia/scm/group/GroupManager.java @@ -15,4 +15,14 @@ import sonia.scm.Manager; * * @author Sebastian Sdorra */ -public interface GroupManager extends Manager {} +public interface GroupManager extends Manager +{ + + /** + * Method description + * + * + * @return + */ + public String getType(); +} 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 63e0a53052..3b7e61915c 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryManager.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryManager.java @@ -16,4 +16,14 @@ import sonia.scm.Manager; * @author Sebastian Sdorra */ public interface RepositoryManager - extends Manager {} + extends Manager +{ + + /** + * Method description + * + * + * @return + */ + public RepositoryType getType(); +}