From 6250565bf39d08a0532d3abc4b05b00a56a78212 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 8 Sep 2010 15:16:42 +0200 Subject: [PATCH] added basic structure --- .../java/sonia/scm/BasicContextProvider.java | 29 +++++ .../src/main/java/sonia/scm/Initable.java | 24 ++++ scm-core/src/main/java/sonia/scm/Manager.java | 90 +++++++++++++ .../src/main/java/sonia/scm/SCMContext.java | 52 ++++++++ .../java/sonia/scm/SCMContextProvider.java | 37 ++++++ .../java/sonia/scm/{ => group}/Group.java | 2 +- .../scm/group/GroupAllreadyExistExeption.java | 19 +++ .../java/sonia/scm/group/GroupException.java | 64 ++++++++++ .../java/sonia/scm/group/GroupManager.java | 18 +++ .../scm/{ => repository}/Repository.java | 2 +- .../RepositoryAllreadyExistExeption.java | 19 +++ .../scm/repository/RepositoryException.java | 64 ++++++++++ .../scm/repository/RepositoryManager.java | 19 +++ .../scm/{ => repository}/RepositoryType.java | 2 +- .../main/java/sonia/scm/util/ServiceUtil.java | 119 ++++++++++++++++++ .../src/main/java/sonia/scm/ScmState.java | 1 + .../scm/api/rest/JsonJaxbContextResolver.java | 2 +- .../resources/AuthenticationResource.java | 2 +- .../scm/api/rest/resources/GroupResource.java | 2 +- .../rest/resources/RepositoryResource.java | 2 +- 20 files changed, 562 insertions(+), 7 deletions(-) create mode 100644 scm-core/src/main/java/sonia/scm/BasicContextProvider.java create mode 100644 scm-core/src/main/java/sonia/scm/Initable.java create mode 100644 scm-core/src/main/java/sonia/scm/Manager.java create mode 100644 scm-core/src/main/java/sonia/scm/SCMContext.java create mode 100644 scm-core/src/main/java/sonia/scm/SCMContextProvider.java rename scm-core/src/main/java/sonia/scm/{ => group}/Group.java (99%) create mode 100644 scm-core/src/main/java/sonia/scm/group/GroupAllreadyExistExeption.java create mode 100644 scm-core/src/main/java/sonia/scm/group/GroupException.java create mode 100644 scm-core/src/main/java/sonia/scm/group/GroupManager.java rename scm-core/src/main/java/sonia/scm/{ => repository}/Repository.java (98%) create mode 100644 scm-core/src/main/java/sonia/scm/repository/RepositoryAllreadyExistExeption.java create mode 100644 scm-core/src/main/java/sonia/scm/repository/RepositoryException.java create mode 100644 scm-core/src/main/java/sonia/scm/repository/RepositoryManager.java rename scm-core/src/main/java/sonia/scm/{ => repository}/RepositoryType.java (97%) create mode 100644 scm-core/src/main/java/sonia/scm/util/ServiceUtil.java diff --git a/scm-core/src/main/java/sonia/scm/BasicContextProvider.java b/scm-core/src/main/java/sonia/scm/BasicContextProvider.java new file mode 100644 index 0000000000..5955c0afff --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/BasicContextProvider.java @@ -0,0 +1,29 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package sonia.scm; + +import sonia.scm.group.GroupManager; +import sonia.scm.repository.RepositoryManager; + +/** + * + * @author Sebastian Sdorra + */ +public class BasicContextProvider implements SCMContextProvider { + + @Override + public GroupManager getGroupManager() + { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public RepositoryManager getRepositoryManager() + { + throw new UnsupportedOperationException("Not supported yet."); + } + +} diff --git a/scm-core/src/main/java/sonia/scm/Initable.java b/scm-core/src/main/java/sonia/scm/Initable.java new file mode 100644 index 0000000000..a237d9a3e8 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/Initable.java @@ -0,0 +1,24 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + + + +package sonia.scm; + +/** + * + * @author Sebastian Sdorra + */ +public interface Initable +{ + + /** + * Method description + * + * + * @param context + */ + public void init(SCMContextProvider context); +} diff --git a/scm-core/src/main/java/sonia/scm/Manager.java b/scm-core/src/main/java/sonia/scm/Manager.java new file mode 100644 index 0000000000..d964c6bc45 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/Manager.java @@ -0,0 +1,90 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + + + +package sonia.scm; + +//~--- JDK imports ------------------------------------------------------------ + +import java.io.Closeable; +import java.io.IOException; + +import java.util.Collection; + +/** + * + * @author Sebastian Sdorra + * + * @param + * @param + */ +public interface Manager extends Initable, Closeable +{ + + /** + * Method description + * + * + * @param object + * + * @throws E + * @throws IOException + */ + public void create(T object) throws E, IOException; + + /** + * Method description + * + * + * @param object + * + * @throws E + * @throws IOException + */ + public void delete(T object) throws E, IOException; + + /** + * Method description + * + * + * @param object + * + * @throws E + * @throws IOException + */ + public void modify(T object) throws E, IOException; + + /** + * Method description + * + * + * @param object + * + * @throws E + * @throws IOException + */ + public void refresh(T object) throws E, IOException; + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @param name + * + * @return + */ + public T get(String name); + + /** + * Method description + * + * + * @return + */ + public Collection getAll(); +} diff --git a/scm-core/src/main/java/sonia/scm/SCMContext.java b/scm-core/src/main/java/sonia/scm/SCMContext.java new file mode 100644 index 0000000000..16791fdf69 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/SCMContext.java @@ -0,0 +1,52 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + + + +package sonia.scm; + +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.util.ServiceUtil; + +/** + * + * @author Sebastian Sdorra + */ +public class SCMContext +{ + + /** Field description */ + private static volatile SCMContextProvider provider; + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + public static SCMContextProvider getContext() + { + if (provider == null) + { + synchronized (SCMContext.class) + { + if (provider == null) + { + provider = ServiceUtil.getService(SCMContextProvider.class); + + if (provider == null) + { + provider = new BasicContextProvider(); + } + } + } + } + + return provider; + } +} diff --git a/scm-core/src/main/java/sonia/scm/SCMContextProvider.java b/scm-core/src/main/java/sonia/scm/SCMContextProvider.java new file mode 100644 index 0000000000..21292b5643 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/SCMContextProvider.java @@ -0,0 +1,37 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + + + +package sonia.scm; + +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.group.GroupManager; +import sonia.scm.repository.RepositoryManager; + +/** + * + * @author Sebastian Sdorra + */ +public interface SCMContextProvider +{ + + /** + * Method description + * + * + * @return + */ + public GroupManager getGroupManager(); + + /** + * Method description + * + * + * @return + */ + public RepositoryManager getRepositoryManager(); +} diff --git a/scm-core/src/main/java/sonia/scm/Group.java b/scm-core/src/main/java/sonia/scm/group/Group.java similarity index 99% rename from scm-core/src/main/java/sonia/scm/Group.java rename to scm-core/src/main/java/sonia/scm/group/Group.java index 5a3f2a8ca6..42179f7d8c 100644 --- a/scm-core/src/main/java/sonia/scm/Group.java +++ b/scm-core/src/main/java/sonia/scm/group/Group.java @@ -5,7 +5,7 @@ -package sonia.scm; +package sonia.scm.group; //~--- non-JDK imports -------------------------------------------------------- diff --git a/scm-core/src/main/java/sonia/scm/group/GroupAllreadyExistExeption.java b/scm-core/src/main/java/sonia/scm/group/GroupAllreadyExistExeption.java new file mode 100644 index 0000000000..b7fb32ebfb --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/group/GroupAllreadyExistExeption.java @@ -0,0 +1,19 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + + + +package sonia.scm.group; + +/** + * + * @author Sebastian Sdorra + */ +public class GroupAllreadyExistExeption extends GroupException +{ + + /** Field description */ + private static final long serialVersionUID = 4042878550219750430L; +} diff --git a/scm-core/src/main/java/sonia/scm/group/GroupException.java b/scm-core/src/main/java/sonia/scm/group/GroupException.java new file mode 100644 index 0000000000..c8bc03abe5 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/group/GroupException.java @@ -0,0 +1,64 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + + + +package sonia.scm.group; + +/** + * + * @author Sebastian Sdorra + */ +public class GroupException extends Exception +{ + + /** Field description */ + private static final long serialVersionUID = 5191341492098994225L; + + //~--- constructors --------------------------------------------------------- + + /** + * Constructs ... + * + */ + public GroupException() + { + super(); + } + + /** + * Constructs ... + * + * + * @param message + */ + public GroupException(String message) + { + super(message); + } + + /** + * Constructs ... + * + * + * @param cause + */ + public GroupException(Throwable cause) + { + super(cause); + } + + /** + * Constructs ... + * + * + * @param message + * @param cause + */ + public GroupException(String message, Throwable cause) + { + super(message, cause); + } +} diff --git a/scm-core/src/main/java/sonia/scm/group/GroupManager.java b/scm-core/src/main/java/sonia/scm/group/GroupManager.java new file mode 100644 index 0000000000..63429fa76a --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/group/GroupManager.java @@ -0,0 +1,18 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + + + +package sonia.scm.group; + +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.Manager; + +/** + * + * @author Sebastian Sdorra + */ +public interface GroupManager extends Manager {} diff --git a/scm-core/src/main/java/sonia/scm/Repository.java b/scm-core/src/main/java/sonia/scm/repository/Repository.java similarity index 98% rename from scm-core/src/main/java/sonia/scm/Repository.java rename to scm-core/src/main/java/sonia/scm/repository/Repository.java index a51780218b..176d8e2c2a 100644 --- a/scm-core/src/main/java/sonia/scm/Repository.java +++ b/scm-core/src/main/java/sonia/scm/repository/Repository.java @@ -5,7 +5,7 @@ -package sonia.scm; +package sonia.scm.repository; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryAllreadyExistExeption.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryAllreadyExistExeption.java new file mode 100644 index 0000000000..90d5e4e465 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryAllreadyExistExeption.java @@ -0,0 +1,19 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + + + +package sonia.scm.repository; + +/** + * + * @author Sebastian Sdorra + */ +public class RepositoryAllreadyExistExeption extends RepositoryException +{ + + /** Field description */ + private static final long serialVersionUID = -774929917214137675L; +} diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryException.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryException.java new file mode 100644 index 0000000000..779c1b4b46 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryException.java @@ -0,0 +1,64 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + + + +package sonia.scm.repository; + +/** + * + * @author Sebastian Sdorra + */ +public class RepositoryException extends Exception +{ + + /** Field description */ + private static final long serialVersionUID = -4939196278070910058L; + + //~--- constructors --------------------------------------------------------- + + /** + * Constructs ... + * + */ + public RepositoryException() + { + super(); + } + + /** + * Constructs ... + * + * + * @param message + */ + public RepositoryException(String message) + { + super(message); + } + + /** + * Constructs ... + * + * + * @param cause + */ + public RepositoryException(Throwable cause) + { + super(cause); + } + + /** + * Constructs ... + * + * + * @param message + * @param cause + */ + public RepositoryException(String message, Throwable cause) + { + super(message, cause); + } +} diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryManager.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryManager.java new file mode 100644 index 0000000000..63e0a53052 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryManager.java @@ -0,0 +1,19 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + + + +package sonia.scm.repository; + +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.Manager; + +/** + * + * @author Sebastian Sdorra + */ +public interface RepositoryManager + extends Manager {} diff --git a/scm-core/src/main/java/sonia/scm/RepositoryType.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryType.java similarity index 97% rename from scm-core/src/main/java/sonia/scm/RepositoryType.java rename to scm-core/src/main/java/sonia/scm/repository/RepositoryType.java index 26093c15f2..06a7d872d7 100644 --- a/scm-core/src/main/java/sonia/scm/RepositoryType.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryType.java @@ -5,7 +5,7 @@ -package sonia.scm; +package sonia.scm.repository; /** * diff --git a/scm-core/src/main/java/sonia/scm/util/ServiceUtil.java b/scm-core/src/main/java/sonia/scm/util/ServiceUtil.java new file mode 100644 index 0000000000..610fa7cfba --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/util/ServiceUtil.java @@ -0,0 +1,119 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package sonia.scm.util; + +import java.util.ArrayList; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.ServiceLoader; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author Sebastian Sdorra + */ +public class ServiceUtil +{ + + /** Field description */ + private static final Logger logger = + Logger.getLogger(ServiceUtil.class.getName()); + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @param type + * @param def + * @param + * + * @return + */ + public static T getService(Class type, T def) + { + T result = getService(type); + + if (result == null) + { + result = def; + } + + return result; + } + + /** + * Method description + * + * + * @param type + * @param + * + * @return + */ + public static T getService(Class type) + { + T result = null; + + try + { + ServiceLoader loader = ServiceLoader.load(type); + + if (loader != null) + { + result = loader.iterator().next(); + } + } + catch (NoSuchElementException ex) + { + if (logger.isLoggable(Level.FINEST)) + { + logger.log(Level.FINEST, null, ex); + } + } + + return result; + } + + /** + * Method description + * + * + * @param type + * @param + * + * @return + */ + public static List getServices(Class type) + { + List result = new ArrayList(); + + try + { + ServiceLoader loader = ServiceLoader.load(type); + + if (loader != null) + { + for (T service : loader) + { + result.add(service); + } + } + } + catch (NoSuchElementException ex) + { + if (logger.isLoggable(Level.FINEST)) + { + logger.log(Level.FINEST, null, ex); + } + } + + return result; + } +} + diff --git a/scm-webapp/src/main/java/sonia/scm/ScmState.java b/scm-webapp/src/main/java/sonia/scm/ScmState.java index 23d6332051..d63e31abc9 100644 --- a/scm-webapp/src/main/java/sonia/scm/ScmState.java +++ b/scm-webapp/src/main/java/sonia/scm/ScmState.java @@ -9,6 +9,7 @@ package sonia.scm; //~--- JDK imports ------------------------------------------------------------ +import sonia.scm.repository.RepositoryType; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/JsonJaxbContextResolver.java b/scm-webapp/src/main/java/sonia/scm/api/rest/JsonJaxbContextResolver.java index 36d97bda3b..2d8b4c777b 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/JsonJaxbContextResolver.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/JsonJaxbContextResolver.java @@ -9,7 +9,7 @@ package sonia.scm.api.rest; //~--- non-JDK imports -------------------------------------------------------- -import sonia.scm.Group; +import sonia.scm.group.Group; //~--- JDK imports ------------------------------------------------------------ import com.sun.jersey.api.json.JSONConfiguration; diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java index 010a1c1097..e599ceb943 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java @@ -9,7 +9,7 @@ package sonia.scm.api.rest.resources; //~--- non-JDK imports -------------------------------------------------------- -import sonia.scm.RepositoryType; +import sonia.scm.repository.RepositoryType; import sonia.scm.ScmState; import sonia.scm.User; import sonia.scm.security.Authenticator; diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupResource.java index 4b33d49d5a..b314294e7c 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupResource.java @@ -9,7 +9,7 @@ package sonia.scm.api.rest.resources; //~--- non-JDK imports -------------------------------------------------------- -import sonia.scm.Group; +import sonia.scm.group.Group; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java index cf7d146fae..bb639526d6 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java @@ -9,7 +9,7 @@ package sonia.scm.api.rest.resources; //~--- non-JDK imports -------------------------------------------------------- -import sonia.scm.Repository; +import sonia.scm.repository.Repository; //~--- JDK imports ------------------------------------------------------------