From a0f74e3329043523f928e15cb59caef9a94948d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 21 Aug 2018 07:53:33 +0200 Subject: [PATCH] Replace model object exception with generic ones and migrate guice --- pom.xml | 38 ++-- .../sonia/scm/AlreadyExistsException.java | 4 + .../java/sonia/scm/BasicPropertiesAware.java | 11 +- .../scm/ConcurrentModificationException.java | 4 + scm-core/src/main/java/sonia/scm/Handler.java | 9 +- .../src/main/java/sonia/scm/HandlerBase.java | 11 +- scm-core/src/main/java/sonia/scm/Manager.java | 9 +- .../main/java/sonia/scm/ManagerDecorator.java | 64 +----- .../java/sonia/scm/NotFoundException.java | 10 + .../src/main/java/sonia/scm/TypeManager.java | 8 +- .../java/sonia/scm/cache/CacheStatistics.java | 3 +- .../sonia/scm/event/AbstractHandlerEvent.java | 4 +- .../src/main/java/sonia/scm/group/Group.java | 3 +- .../group/GroupAlreadyExistsException.java | 50 ----- .../java/sonia/scm/group/GroupException.java | 91 -------- .../java/sonia/scm/group/GroupManager.java | 6 +- .../scm/group/GroupManagerDecorator.java | 6 +- .../main/java/sonia/scm/group/GroupNames.java | 5 +- .../scm/group/GroupNotFoundException.java | 58 ----- .../java/sonia/scm/i18n/I18nMessages.java | 7 +- .../java/sonia/scm/plugin/ClassElement.java | 7 +- .../scm/plugin/ExtensionPointElement.java | 7 +- .../main/java/sonia/scm/plugin/Plugin.java | 10 +- .../sonia/scm/plugin/PluginCondition.java | 18 +- .../sonia/scm/plugin/PluginInformation.java | 17 +- .../sonia/scm/plugin/PluginRepository.java | 7 +- .../sonia/scm/plugin/PluginResources.java | 10 +- .../sonia/scm/plugin/SubscriberElement.java | 7 +- .../scm/repository/AbstactImportHandler.java | 42 +--- .../AbstractSimpleRepositoryHandler.java | 32 ++- .../java/sonia/scm/repository/BlameLine.java | 7 +- .../sonia/scm/repository/BlameResult.java | 15 +- .../java/sonia/scm/repository/Branch.java | 10 +- .../repository/BranchNotFoundException.java | 9 + .../java/sonia/scm/repository/Branches.java | 11 +- .../sonia/scm/repository/BrowserResult.java | 15 +- .../java/sonia/scm/repository/Changeset.java | 15 +- .../scm/repository/ChangesetPagingResult.java | 15 +- .../java/sonia/scm/repository/FileObject.java | 11 +- .../scm/repository/HealthCheckFailure.java | 7 +- .../scm/repository/HealthCheckResult.java | 7 +- .../sonia/scm/repository/ImportHandler.java | 5 +- .../sonia/scm/repository/ImportResult.java | 13 +- .../InternalRepositoryException.java | 15 ++ .../sonia/scm/repository/Modifications.java | 11 +- .../scm/repository/PathNotFoundException.java | 5 +- .../java/sonia/scm/repository/Permission.java | 13 +- .../java/sonia/scm/repository/Person.java | 8 +- .../java/sonia/scm/repository/Repository.java | 3 +- .../RepositoryAlreadyExistsException.java | 68 ------ .../scm/repository/RepositoryException.java | 95 -------- .../scm/repository/RepositoryHandler.java | 2 +- .../RepositoryHandlerNotFoundException.java | 64 ------ .../RepositoryIsNotArchivedException.java | 2 +- .../scm/repository/RepositoryManager.java | 7 +- .../RepositoryManagerDecorator.java | 7 +- .../RepositoryNotFoundException.java | 8 +- .../repository/RepositoryRequestListener.java | 13 +- .../repository/RevisionNotFoundException.java | 6 +- .../sonia/scm/repository/SubRepository.java | 10 +- .../main/java/sonia/scm/repository/Tag.java | 7 +- .../main/java/sonia/scm/repository/Tags.java | 12 +- ...stractBundleOrUnbundleCommandResponse.java | 4 +- .../repository/api/BlameCommandBuilder.java | 10 +- .../api/BranchesCommandBuilder.java | 12 +- .../repository/api/BrowseCommandBuilder.java | 16 +- .../repository/api/BundleCommandBuilder.java | 23 +- .../scm/repository/api/CatCommandBuilder.java | 15 +- .../repository/api/DiffCommandBuilder.java | 27 +-- .../api/IncomingCommandBuilder.java | 11 +- .../scm/repository/api/LogCommandBuilder.java | 18 +- .../api/OutgoingCommandBuilder.java | 8 +- .../repository/api/PullCommandBuilder.java | 19 +- .../repository/api/PushCommandBuilder.java | 17 +- .../api/RepositoryServiceFactory.java | 5 +- .../repository/api/TagsCommandBuilder.java | 18 +- .../api/UnbundleCommandBuilder.java | 24 +-- .../scm/repository/spi/BlameCommand.java | 9 +- .../scm/repository/spi/BranchesCommand.java | 9 +- .../scm/repository/spi/BrowseCommand.java | 11 +- .../repository/spi/BrowseCommandRequest.java | 4 +- .../scm/repository/spi/BundleCommand.java | 8 +- .../sonia/scm/repository/spi/CatCommand.java | 7 +- .../sonia/scm/repository/spi/DiffCommand.java | 10 +- .../spi/FileBaseCommandRequest.java | 7 +- .../scm/repository/spi/HookEventFacade.java | 10 +- .../scm/repository/spi/IncomingCommand.java | 20 +- .../sonia/scm/repository/spi/LogCommand.java | 37 +--- .../scm/repository/spi/LogCommandRequest.java | 7 +- .../scm/repository/spi/OutgoingCommand.java | 10 +- .../spi/PagedRemoteCommandRequest.java | 4 +- .../sonia/scm/repository/spi/PullCommand.java | 9 +- .../sonia/scm/repository/spi/PushCommand.java | 9 +- .../repository/spi/RemoteCommandRequest.java | 8 +- .../sonia/scm/repository/spi/TagsCommand.java | 9 +- .../scm/repository/spi/UnbundleCommand.java | 8 +- .../scm/security/AssignedPermission.java | 10 +- .../sonia/scm/security/DAORealmHelper.java | 7 +- .../scm/security/PermissionDescriptor.java | 10 +- .../scm/security/RepositoryPermission.java | 9 +- .../StoredAssignedPermissionEvent.java | 10 +- .../scm/security/SyncingRealmHelper.java | 42 ++-- .../java/sonia/scm/template/Viewable.java | 4 +- .../src/main/java/sonia/scm/user/User.java | 14 +- .../scm/user/UserAlreadyExistsException.java | 51 ----- .../java/sonia/scm/user/UserException.java | 87 -------- .../main/java/sonia/scm/user/UserManager.java | 2 +- .../sonia/scm/user/UserManagerDecorator.java | 6 +- .../sonia/scm/user/UserNotFoundException.java | 57 ----- .../main/java/sonia/scm/util/HttpUtil.java | 4 +- .../main/java/sonia/scm/version/Version.java | 4 +- .../main/java/sonia/scm/web/UserAgent.java | 9 +- .../scm/web/proxy/ProxyConfiguration.java | 15 +- .../test/java/sonia/scm/io/DeepCopyTest.java | 10 +- .../scm/security/SyncingRealmHelperTest.java | 62 ++---- .../scm/repository/GitRepositoryHandler.java | 32 +-- .../java/sonia/scm/repository/GitUtil.java | 32 +-- .../AbstractGitIncomingOutgoingCommand.java | 50 +---- .../spi/AbstractGitPushOrPullCommand.java | 28 +-- .../scm/repository/spi/GitBlameCommand.java | 36 +--- .../repository/spi/GitBranchesCommand.java | 23 +- .../scm/repository/spi/GitBrowseCommand.java | 63 +----- .../scm/repository/spi/GitCatCommand.java | 11 +- .../repository/spi/GitIncomingCommand.java | 22 +- .../scm/repository/spi/GitLogCommand.java | 14 +- .../repository/spi/GitOutgoingCommand.java | 8 +- .../scm/repository/spi/GitPullCommand.java | 56 +---- .../scm/repository/spi/GitPushCommand.java | 8 +- .../scm/repository/spi/GitTagsCommand.java | 23 +- .../sonia/scm/web/GitRepositoryViewer.java | 27 +-- .../java/sonia/scm/web/ScmGitServlet.java | 3 +- .../repository/spi/GitBlameCommandTest.java | 21 +- .../repository/spi/GitBrowseCommandTest.java | 52 ++--- .../scm/repository/spi/GitCatCommandTest.java | 15 +- .../spi/GitIncomingCommandTest.java | 22 +- .../scm/repository/spi/GitLogCommandTest.java | 35 +-- .../spi/GitOutgoingCommandTest.java | 13 +- .../repository/spi/GitPushCommandTest.java | 15 +- .../scm/repository/AbstractHgHandler.java | 43 +--- .../sonia/scm/repository/HgHookManager.java | 18 +- .../sonia/scm/repository/HgImportHandler.java | 19 +- .../scm/repository/HgRepositoryHandler.java | 15 +- .../java/sonia/scm/repository/HgVersion.java | 7 +- .../scm/repository/HgVersionHandler.java | 21 +- .../scm/repository/spi/HgBlameCommand.java | 22 +- .../scm/repository/spi/HgBranchesCommand.java | 21 +- .../scm/repository/spi/HgBrowseCommand.java | 19 +- .../scm/repository/spi/HgCatCommand.java | 8 +- .../scm/repository/spi/HgDiffCommand.java | 18 +- .../scm/repository/spi/HgIncomingCommand.java | 25 +-- .../scm/repository/spi/HgLogCommand.java | 38 +--- .../scm/repository/spi/HgOutgoingCommand.java | 21 +- .../scm/repository/spi/HgPullCommand.java | 24 +-- .../scm/repository/spi/HgPushCommand.java | 24 +-- .../repository/spi/HgBlameCommandTest.java | 32 +-- .../repository/spi/HgBrowseCommandTest.java | 70 ++---- .../scm/repository/spi/HgCatCommandTest.java | 21 +- .../repository/spi/HgIncomingCommandTest.java | 41 +--- .../scm/repository/spi/HgLogCommandTest.java | 73 ++----- .../repository/spi/HgOutgoingCommandTest.java | 42 +--- .../scm/repository/SvnRepositoryHandler.java | 69 +----- .../java/sonia/scm/repository/SvnUtil.java | 29 +-- .../scm/repository/spi/SvnBlameCommand.java | 38 +--- .../scm/repository/spi/SvnBrowseCommand.java | 41 +--- .../scm/repository/spi/SvnBundleCommand.java | 46 +--- .../scm/repository/spi/SvnCatCommand.java | 65 +----- .../scm/repository/spi/SvnDiffCommand.java | 40 +--- .../scm/repository/spi/SvnLogCommand.java | 77 +------ .../repository/spi/SvnBlameCommandTest.java | 28 +-- .../repository/spi/SvnBrowseCommandTest.java | 58 ++--- .../repository/spi/SvnBundleCommandTest.java | 26 +-- .../scm/repository/spi/SvnCatCommandTest.java | 13 +- .../scm/repository/spi/SvnLogCommandTest.java | 70 +----- .../spi/SvnUnbundleCommandTest.java | 37 +--- .../main/java/sonia/scm/ManagerTestBase.java | 10 +- .../repository/DummyRepositoryHandler.java | 5 +- .../SimpleRepositoryHandlerTestBase.java | 9 +- .../repository/client/spi/CommitRequest.java | 4 +- .../scm/repository/client/spi/TagRequest.java | 4 +- .../sonia/scm/user/UserManagerTestBase.java | 204 +++--------------- scm-webapp/pom.xml | 5 - .../main/java/sonia/scm/ClassOverride.java | 7 +- .../java/sonia/scm/ManagerDaoAdapter.java | 26 +-- ...java => AlreadyExistsExceptionMapper.java} | 6 +- .../GroupAlreadyExistsExceptionMapper.java | 16 -- .../java/sonia/scm/api/rest/Permission.java | 10 +- ...epositoryAlreadyExistsExceptionMapper.java | 16 -- .../scm/api/rest/RestExceptionResult.java | 7 +- .../resources/AbstractManagerResource.java | 22 +- .../resources/BrowserStreamingOutput.java | 15 +- .../resources/ChangePasswordResource.java | 22 +- .../rest/resources/DiffStreamingOutput.java | 43 ++-- .../scm/api/rest/resources/GroupResource.java | 31 +-- .../resources/RepositoryImportResource.java | 66 +++--- .../rest/resources/RepositoryResource.java | 91 +++++--- .../scm/api/rest/resources/UserResource.java | 20 +- .../api/v2/resources/BranchRootResource.java | 5 +- .../CollectionResourceManagerAdapter.java | 9 +- .../scm/api/v2/resources/ContentResource.java | 11 +- .../v2/resources/GroupCollectionResource.java | 21 +- .../scm/api/v2/resources/GroupResource.java | 11 +- .../resources/IdResourceManagerAdapter.java | 15 +- .../scm/api/v2/resources/MeResource.java | 3 +- .../RepositoryCollectionResource.java | 6 +- .../api/v2/resources/RepositoryResource.java | 3 +- .../SingleResourceManagerAdapter.java | 8 +- .../v2/resources/UserCollectionResource.java | 21 +- .../scm/api/v2/resources/UserResource.java | 11 +- .../sonia/scm/cache/CacheConfigurations.java | 11 +- .../scm/cache/GuavaCacheConfiguration.java | 11 +- .../sonia/scm/group/DefaultGroupManager.java | 45 ++-- .../repository/DefaultRepositoryManager.java | 47 ++-- .../sonia/scm/repository/HealthChecker.java | 46 +--- .../LastModifiedUpdateListener.java | 10 +- .../ConfigurableLoginAttemptHandler.java | 13 +- .../DefaultAuthorizationCollector.java | 8 +- .../java/sonia/scm/security/SecureKey.java | 4 +- .../sonia/scm/user/DefaultUserManager.java | 24 +-- .../AbstractManagerResourceTest.java | 6 +- .../resources/AuthenticationResourceTest.java | 15 +- .../v2/resources/GroupRootResourceTest.java | 7 +- .../scm/api/v2/resources/MeResourceTest.java | 17 +- .../resources/RepositoryRootResourceTest.java | 3 +- .../v2/resources/UserRootResourceTest.java | 23 +- .../cache/CacheConfigurationTestLoader.java | 18 +- .../DefaultRepositoryManagerTest.java | 93 ++++---- .../selenium/page/RepositoriesAddPage.java | 7 +- 227 files changed, 1380 insertions(+), 3549 deletions(-) create mode 100644 scm-core/src/main/java/sonia/scm/AlreadyExistsException.java create mode 100644 scm-core/src/main/java/sonia/scm/ConcurrentModificationException.java create mode 100644 scm-core/src/main/java/sonia/scm/NotFoundException.java delete mode 100644 scm-core/src/main/java/sonia/scm/group/GroupAlreadyExistsException.java delete mode 100644 scm-core/src/main/java/sonia/scm/group/GroupException.java delete mode 100644 scm-core/src/main/java/sonia/scm/group/GroupNotFoundException.java create mode 100644 scm-core/src/main/java/sonia/scm/repository/BranchNotFoundException.java create mode 100644 scm-core/src/main/java/sonia/scm/repository/InternalRepositoryException.java delete mode 100644 scm-core/src/main/java/sonia/scm/repository/RepositoryAlreadyExistsException.java delete mode 100644 scm-core/src/main/java/sonia/scm/repository/RepositoryException.java delete mode 100644 scm-core/src/main/java/sonia/scm/repository/RepositoryHandlerNotFoundException.java delete mode 100644 scm-core/src/main/java/sonia/scm/user/UserAlreadyExistsException.java delete mode 100644 scm-core/src/main/java/sonia/scm/user/UserException.java delete mode 100644 scm-core/src/main/java/sonia/scm/user/UserNotFoundException.java rename scm-webapp/src/main/java/sonia/scm/api/rest/{UserAlreadyExistsExceptionMapper.java => AlreadyExistsExceptionMapper.java} (53%) delete mode 100644 scm-webapp/src/main/java/sonia/scm/api/rest/GroupAlreadyExistsExceptionMapper.java delete mode 100644 scm-webapp/src/main/java/sonia/scm/api/rest/RepositoryAlreadyExistsExceptionMapper.java diff --git a/pom.xml b/pom.xml index 3295e732db..5c6abbbf87 100644 --- a/pom.xml +++ b/pom.xml @@ -402,24 +402,24 @@ - - com.github.legman - legman-maven-plugin - ${legman.version} - - true - - - - process-classes - - - guava-migration-check - - - - + + + + + + + + + + + + + + + + + + org.apache.maven.plugins @@ -725,7 +725,7 @@ 1.8.15-scm1 - 16.0.1 + 26.0-jre 2.2.3 diff --git a/scm-core/src/main/java/sonia/scm/AlreadyExistsException.java b/scm-core/src/main/java/sonia/scm/AlreadyExistsException.java new file mode 100644 index 0000000000..36052d99e9 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/AlreadyExistsException.java @@ -0,0 +1,4 @@ +package sonia.scm; + +public class AlreadyExistsException extends Exception { +} diff --git a/scm-core/src/main/java/sonia/scm/BasicPropertiesAware.java b/scm-core/src/main/java/sonia/scm/BasicPropertiesAware.java index f0b7772a77..cfd4284fae 100644 --- a/scm-core/src/main/java/sonia/scm/BasicPropertiesAware.java +++ b/scm-core/src/main/java/sonia/scm/BasicPropertiesAware.java @@ -37,18 +37,15 @@ package sonia.scm; import com.google.common.base.Objects; import com.google.common.collect.Maps; - import sonia.scm.xml.XmlMapStringAdapter; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; - -import java.util.Map; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import java.io.Serializable; +import java.util.Map; + +//~--- JDK imports ------------------------------------------------------------ /** * Default implementation of {@link PropertiesAware} interface. diff --git a/scm-core/src/main/java/sonia/scm/ConcurrentModificationException.java b/scm-core/src/main/java/sonia/scm/ConcurrentModificationException.java new file mode 100644 index 0000000000..f0340a6a59 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/ConcurrentModificationException.java @@ -0,0 +1,4 @@ +package sonia.scm; + +public class ConcurrentModificationException extends Exception { +} diff --git a/scm-core/src/main/java/sonia/scm/Handler.java b/scm-core/src/main/java/sonia/scm/Handler.java index 67ec039fba..a4e927ed7b 100644 --- a/scm-core/src/main/java/sonia/scm/Handler.java +++ b/scm-core/src/main/java/sonia/scm/Handler.java @@ -39,11 +39,8 @@ package sonia.scm; * @author Sebastian Sdorra * * @param a typed object - * @param */ -public interface Handler - extends HandlerBase -{ +public interface Handler extends HandlerBase { /** * Returns the type object of the handler. @@ -51,7 +48,7 @@ public interface Handler * * @return type object of the handler */ - public Type getType(); + Type getType(); /** * Returns true if the hanlder is configured. @@ -59,5 +56,5 @@ public interface Handler * * @return true if the hanlder is configured */ - public boolean isConfigured(); + boolean isConfigured(); } diff --git a/scm-core/src/main/java/sonia/scm/HandlerBase.java b/scm-core/src/main/java/sonia/scm/HandlerBase.java index 6ce7d9a6a6..bbe78c8cf7 100644 --- a/scm-core/src/main/java/sonia/scm/HandlerBase.java +++ b/scm-core/src/main/java/sonia/scm/HandlerBase.java @@ -44,9 +44,8 @@ import java.io.IOException; * @author Sebastian Sdorra * * @param type object of the handler - * @param exception type of the handler */ -public interface HandlerBase +public interface HandlerBase extends Initable, Closeable { @@ -55,7 +54,7 @@ public interface HandlerBase * * @return The persisted object. */ - public T create(T object) throws E; + T create(T object) throws AlreadyExistsException; /** * Removes a persistent object. @@ -63,10 +62,9 @@ public interface HandlerBase * * @param object to delete * - * @throws E * @throws IOException */ - public void delete(T object) throws E; + void delete(T object) throws NotFoundException; /** * Modifies a persistent object. @@ -74,8 +72,7 @@ public interface HandlerBase * * @param object to modify * - * @throws E * @throws IOException */ - public void modify(T object) throws E; + void modify(T object) throws NotFoundException; } diff --git a/scm-core/src/main/java/sonia/scm/Manager.java b/scm-core/src/main/java/sonia/scm/Manager.java index c0d074520a..2925b5b6b4 100644 --- a/scm-core/src/main/java/sonia/scm/Manager.java +++ b/scm-core/src/main/java/sonia/scm/Manager.java @@ -42,10 +42,9 @@ import java.util.Comparator; * @author Sebastian Sdorra * * @param type of the model object - * @param type of the exception */ -public interface Manager - extends HandlerBase, LastModifiedAware +public interface Manager + extends HandlerBase, LastModifiedAware { /** @@ -54,9 +53,9 @@ public interface Manager * * @param object to refresh * - * @throws E + * @throws NotFoundException */ - void refresh(T object) throws E; + void refresh(T object) throws NotFoundException; //~--- get methods ---------------------------------------------------------- diff --git a/scm-core/src/main/java/sonia/scm/ManagerDecorator.java b/scm-core/src/main/java/sonia/scm/ManagerDecorator.java index 3b90002d13..7b3f03ee8c 100644 --- a/scm-core/src/main/java/sonia/scm/ManagerDecorator.java +++ b/scm-core/src/main/java/sonia/scm/ManagerDecorator.java @@ -45,11 +45,8 @@ import java.util.Comparator; * @since 1.23 * * @param model type - * @param exception type */ -public class ManagerDecorator - implements Manager -{ +public class ManagerDecorator implements Manager { /** * Constructs a new ManagerDecorator. @@ -57,125 +54,78 @@ public class ManagerDecorator * * @param decorated manager implementation */ - public ManagerDecorator(Manager decorated) + public ManagerDecorator(Manager decorated) { this.decorated = decorated; } - //~--- methods -------------------------------------------------------------- - - /** - * {@inheritDoc} - */ @Override public void close() throws IOException { decorated.close(); } - /** - * {@inheritDoc} - */ @Override - public T create(T object) throws E - { + public T create(T object) throws AlreadyExistsException { return decorated.create(object); } - /** - * {@inheritDoc} - */ @Override - public void delete(T object) throws E - { + public void delete(T object) throws NotFoundException { decorated.delete(object); } - /** - * {@inheritDoc} - */ @Override public void init(SCMContextProvider context) { decorated.init(context); } - /** - * {@inheritDoc} - */ @Override - public void modify(T object) throws E - { + public void modify(T object) throws NotFoundException { decorated.modify(object); } - /** - * {@inheritDoc} - */ @Override - public void refresh(T object) throws E - { + public void refresh(T object) throws NotFoundException { decorated.refresh(object); } - //~--- get methods ---------------------------------------------------------- - - /** - * {@inheritDoc} - */ @Override public T get(String id) { return decorated.get(id); } - /** - * {@inheritDoc} - */ @Override public Collection getAll() { return decorated.getAll(); } - /** - * {@inheritDoc} - */ @Override public Collection getAll(Comparator comparator) { return decorated.getAll(comparator); } - /** - * {@inheritDoc} - */ @Override public Collection getAll(int start, int limit) { return decorated.getAll(start, limit); } - /** - * {@inheritDoc} - */ @Override public Collection getAll(Comparator comparator, int start, int limit) { return decorated.getAll(comparator, start, limit); } - /** - * {@inheritDoc} - */ @Override public Long getLastModified() { return decorated.getLastModified(); } - //~--- fields --------------------------------------------------------------- - - /** manager implementation */ - private Manager decorated; + private Manager decorated; } diff --git a/scm-core/src/main/java/sonia/scm/NotFoundException.java b/scm-core/src/main/java/sonia/scm/NotFoundException.java new file mode 100644 index 0000000000..8a7ae642bd --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/NotFoundException.java @@ -0,0 +1,10 @@ +package sonia.scm; + +public class NotFoundException extends Exception { + public NotFoundException(String type, String id) { + super(type + " with id '" + id + "' not found"); + } + + public NotFoundException() { + } +} diff --git a/scm-core/src/main/java/sonia/scm/TypeManager.java b/scm-core/src/main/java/sonia/scm/TypeManager.java index 52a43e5593..6f13cb82d8 100644 --- a/scm-core/src/main/java/sonia/scm/TypeManager.java +++ b/scm-core/src/main/java/sonia/scm/TypeManager.java @@ -44,10 +44,8 @@ import java.util.Collection; * * @param type of the model object * @param type of the handler - * @param type of the exception */ -public interface TypeManager, - E extends Exception> extends Manager +public interface TypeManager> extends Manager { /** @@ -58,7 +56,7 @@ public interface TypeManager, * * @return the handler for given type */ - public H getHandler(String type); + H getHandler(String type); /** * Returns a {@link java.util.Collection} of all @@ -66,5 +64,5 @@ public interface TypeManager, * * @return all available types */ - public Collection getTypes(); + Collection getTypes(); } diff --git a/scm-core/src/main/java/sonia/scm/cache/CacheStatistics.java b/scm-core/src/main/java/sonia/scm/cache/CacheStatistics.java index 067e623e6d..cc791ff91f 100644 --- a/scm-core/src/main/java/sonia/scm/cache/CacheStatistics.java +++ b/scm-core/src/main/java/sonia/scm/cache/CacheStatistics.java @@ -33,6 +33,7 @@ package sonia.scm.cache; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; /** @@ -101,7 +102,7 @@ public final class CacheStatistics public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("name", name) .add("hitCount", hitCount) .add("missCount", missCount) diff --git a/scm-core/src/main/java/sonia/scm/event/AbstractHandlerEvent.java b/scm-core/src/main/java/sonia/scm/event/AbstractHandlerEvent.java index 5efbf118ba..1582247f35 100644 --- a/scm-core/src/main/java/sonia/scm/event/AbstractHandlerEvent.java +++ b/scm-core/src/main/java/sonia/scm/event/AbstractHandlerEvent.java @@ -33,8 +33,8 @@ package sonia.scm.event; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; - import sonia.scm.HandlerEventType; /** @@ -127,7 +127,7 @@ public class AbstractHandlerEvent implements HandlerEvent public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("eventType", eventType) .add("item", item) .add("oldItem", oldItem) diff --git a/scm-core/src/main/java/sonia/scm/group/Group.java b/scm-core/src/main/java/sonia/scm/group/Group.java index 5341024203..98d9dcc7a3 100644 --- a/scm-core/src/main/java/sonia/scm/group/Group.java +++ b/scm-core/src/main/java/sonia/scm/group/Group.java @@ -37,6 +37,7 @@ package sonia.scm.group; import com.github.sdorra.ssp.PermissionObject; import com.github.sdorra.ssp.StaticPermissions; +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.collect.Lists; import sonia.scm.BasicPropertiesAware; @@ -259,7 +260,7 @@ public class Group extends BasicPropertiesAware public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("name", name) .add("description", description) .add("members", members) diff --git a/scm-core/src/main/java/sonia/scm/group/GroupAlreadyExistsException.java b/scm-core/src/main/java/sonia/scm/group/GroupAlreadyExistsException.java deleted file mode 100644 index 2b3c73535e..0000000000 --- a/scm-core/src/main/java/sonia/scm/group/GroupAlreadyExistsException.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.group; - -/** - * This {@link Exception} is thrown when trying to create a group - * that already exists. - * - * @author Sebastian Sdorra - */ -public class GroupAlreadyExistsException extends GroupException -{ - - private static final long serialVersionUID = 4042878550219750430L; - - public GroupAlreadyExistsException(Group group) { - super(group.getName() + " group already exists"); - } -} diff --git a/scm-core/src/main/java/sonia/scm/group/GroupException.java b/scm-core/src/main/java/sonia/scm/group/GroupException.java deleted file mode 100644 index e0dc799e92..0000000000 --- a/scm-core/src/main/java/sonia/scm/group/GroupException.java +++ /dev/null @@ -1,91 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.group; - -/** - * General {@link Exception} for group errors. - * - * @author Sebastian Sdorra - */ -public class GroupException extends Exception -{ - - /** Field description */ - private static final long serialVersionUID = 5191341492098994225L; - - //~--- constructors --------------------------------------------------------- - - /** - * Constructs a {@link GroupException} object. - * - */ - public GroupException() - { - super(); - } - - /** - * Constructs a {@link GroupException} object. - * - * - * @param message for the exception - */ - public GroupException(String message) - { - super(message); - } - - /** - * Constructs a {@link GroupException} object. - * - * - * @param cause of the exception - */ - public GroupException(Throwable cause) - { - super(cause); - } - - /** - * Constructs a {@link GroupException} object. - * - * - * @param message of the exception - * @param cause of the exception - */ - 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 index 428559edef..288196894d 100644 --- a/scm-core/src/main/java/sonia/scm/group/GroupManager.java +++ b/scm-core/src/main/java/sonia/scm/group/GroupManager.java @@ -38,10 +38,10 @@ package sonia.scm.group; import sonia.scm.Manager; import sonia.scm.search.Searchable; -//~--- JDK imports ------------------------------------------------------------ - import java.util.Collection; +//~--- JDK imports ------------------------------------------------------------ + /** * The central class for managing {@link Group}s. * This class is a singleton and is available via injection. @@ -49,7 +49,7 @@ import java.util.Collection; * @author Sebastian Sdorra */ public interface GroupManager - extends Manager, Searchable + extends Manager, Searchable { /** diff --git a/scm-core/src/main/java/sonia/scm/group/GroupManagerDecorator.java b/scm-core/src/main/java/sonia/scm/group/GroupManagerDecorator.java index 955e218b43..e2367d863c 100644 --- a/scm-core/src/main/java/sonia/scm/group/GroupManagerDecorator.java +++ b/scm-core/src/main/java/sonia/scm/group/GroupManagerDecorator.java @@ -38,10 +38,10 @@ package sonia.scm.group; import sonia.scm.ManagerDecorator; import sonia.scm.search.SearchRequest; -//~--- JDK imports ------------------------------------------------------------ - import java.util.Collection; +//~--- JDK imports ------------------------------------------------------------ + /** * Decorator for {@link GroupManager}. * @@ -49,7 +49,7 @@ import java.util.Collection; * @since 1.23 */ public class GroupManagerDecorator - extends ManagerDecorator implements GroupManager + extends ManagerDecorator implements GroupManager { /** diff --git a/scm-core/src/main/java/sonia/scm/group/GroupNames.java b/scm-core/src/main/java/sonia/scm/group/GroupNames.java index 43ca462d32..24d32972b6 100644 --- a/scm-core/src/main/java/sonia/scm/group/GroupNames.java +++ b/scm-core/src/main/java/sonia/scm/group/GroupNames.java @@ -39,14 +39,13 @@ import com.google.common.base.Joiner; import com.google.common.base.Objects; import com.google.common.collect.Lists; -//~--- JDK imports ------------------------------------------------------------ - import java.io.Serializable; - import java.util.Collection; import java.util.Collections; import java.util.Iterator; +//~--- JDK imports ------------------------------------------------------------ + /** * This class represents all associated groups for a user. * diff --git a/scm-core/src/main/java/sonia/scm/group/GroupNotFoundException.java b/scm-core/src/main/java/sonia/scm/group/GroupNotFoundException.java deleted file mode 100644 index 2ea5d16cf0..0000000000 --- a/scm-core/src/main/java/sonia/scm/group/GroupNotFoundException.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - -package sonia.scm.group; - -/** - * The GroupNotFoundException is thrown e.g. from the - * modify method of the {@link GroupManager}, if the group does not exists. - * - * @author Sebastian Sdorra - * - * @since 1.28 - */ -public class GroupNotFoundException extends GroupException -{ - - /** Field description */ - private static final long serialVersionUID = -1617037899954718001L; - - //~--- constructors --------------------------------------------------------- - - /** - * Constructs a new GroupNotFoundException. - * - */ - public GroupNotFoundException(Group group) { - super("group " + group.getName() + " does not exist"); - } -} diff --git a/scm-core/src/main/java/sonia/scm/i18n/I18nMessages.java b/scm-core/src/main/java/sonia/scm/i18n/I18nMessages.java index 9c4a9353be..0af1cef895 100644 --- a/scm-core/src/main/java/sonia/scm/i18n/I18nMessages.java +++ b/scm-core/src/main/java/sonia/scm/i18n/I18nMessages.java @@ -36,16 +36,13 @@ package sonia.scm.i18n; import com.google.common.base.Objects; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; - import sonia.scm.util.ClassLoaders; -//~--- JDK imports ------------------------------------------------------------ - +import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Field; - import java.util.Locale; -import javax.servlet.http.HttpServletRequest; +//~--- JDK imports ------------------------------------------------------------ /** * The I18nMessages class instantiates a class and initializes all {@link String} diff --git a/scm-core/src/main/java/sonia/scm/plugin/ClassElement.java b/scm-core/src/main/java/sonia/scm/plugin/ClassElement.java index 8f931e5599..813a5a850f 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/ClassElement.java +++ b/scm-core/src/main/java/sonia/scm/plugin/ClassElement.java @@ -33,12 +33,13 @@ package sonia.scm.plugin; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - import javax.xml.bind.annotation.XmlElement; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -117,7 +118,7 @@ public final class ClassElement public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("clazz", clazz) .add("description", description) .toString(); diff --git a/scm-core/src/main/java/sonia/scm/plugin/ExtensionPointElement.java b/scm-core/src/main/java/sonia/scm/plugin/ExtensionPointElement.java index 25b8fe303a..7f6f1efe07 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/ExtensionPointElement.java +++ b/scm-core/src/main/java/sonia/scm/plugin/ExtensionPointElement.java @@ -33,15 +33,16 @@ package sonia.scm.plugin; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -129,7 +130,7 @@ public final class ExtensionPointElement public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("class", clazz) .add("description", description) .add("multiple", multiple) diff --git a/scm-core/src/main/java/sonia/scm/plugin/Plugin.java b/scm-core/src/main/java/sonia/scm/plugin/Plugin.java index d55555e747..e8fd166e78 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/Plugin.java +++ b/scm-core/src/main/java/sonia/scm/plugin/Plugin.java @@ -35,18 +35,18 @@ package sonia.scm.plugin; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.collect.ImmutableSet; -//~--- JDK imports ------------------------------------------------------------ - -import java.util.Set; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; +import java.util.Set; + +//~--- JDK imports ------------------------------------------------------------ /** * @@ -142,7 +142,7 @@ public final class Plugin extends ScmModule public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("scmVersion", scmVersion) .add("condition", condition) .add("information", information) diff --git a/scm-core/src/main/java/sonia/scm/plugin/PluginCondition.java b/scm-core/src/main/java/sonia/scm/plugin/PluginCondition.java index ad6ba84875..e70821d0df 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/PluginCondition.java +++ b/scm-core/src/main/java/sonia/scm/plugin/PluginCondition.java @@ -35,27 +35,25 @@ package sonia.scm.plugin; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; - import sonia.scm.PlatformType; import sonia.scm.SCMContext; import sonia.scm.util.SystemUtil; import sonia.scm.util.Util; import sonia.scm.version.Version; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +//~--- JDK imports ------------------------------------------------------------ /** * @@ -164,7 +162,7 @@ public class PluginCondition implements Cloneable, Serializable public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("arch", arch) .add("minVersion", minVersion) .add("os", os) diff --git a/scm-core/src/main/java/sonia/scm/plugin/PluginInformation.java b/scm-core/src/main/java/sonia/scm/plugin/PluginInformation.java index 1cf23fd3d9..3ae359ceb7 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/PluginInformation.java +++ b/scm-core/src/main/java/sonia/scm/plugin/PluginInformation.java @@ -37,24 +37,21 @@ package sonia.scm.plugin; import com.github.sdorra.ssp.PermissionObject; import com.github.sdorra.ssp.StaticPermissions; - +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; - import sonia.scm.Validateable; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; - -import java.util.ArrayList; -import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +//~--- JDK imports ------------------------------------------------------------ /** * @@ -180,7 +177,7 @@ public class PluginInformation public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("artifactId", artifactId) .add("author", author) .add("category", category) diff --git a/scm-core/src/main/java/sonia/scm/plugin/PluginRepository.java b/scm-core/src/main/java/sonia/scm/plugin/PluginRepository.java index c546788d09..1d4cc07338 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/PluginRepository.java +++ b/scm-core/src/main/java/sonia/scm/plugin/PluginRepository.java @@ -35,12 +35,13 @@ package sonia.scm.plugin; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - import java.io.Serializable; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -121,7 +122,7 @@ public class PluginRepository implements Serializable @Override public String toString() { - return Objects.toStringHelper(this).add("id", id).add("url", + return MoreObjects.toStringHelper(this).add("id", id).add("url", url).toString(); } diff --git a/scm-core/src/main/java/sonia/scm/plugin/PluginResources.java b/scm-core/src/main/java/sonia/scm/plugin/PluginResources.java index b039c291f5..07e35e0e4f 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/PluginResources.java +++ b/scm-core/src/main/java/sonia/scm/plugin/PluginResources.java @@ -35,15 +35,15 @@ package sonia.scm.plugin; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - -import java.util.Set; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; +import java.util.Set; + +//~--- JDK imports ------------------------------------------------------------ /** * @@ -124,7 +124,7 @@ public class PluginResources public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("scriptResources", scriptResources) .add("stylesheetResources", stylesheetResources) .toString(); diff --git a/scm-core/src/main/java/sonia/scm/plugin/SubscriberElement.java b/scm-core/src/main/java/sonia/scm/plugin/SubscriberElement.java index 44c3d6edd2..5cc98d0bf9 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/SubscriberElement.java +++ b/scm-core/src/main/java/sonia/scm/plugin/SubscriberElement.java @@ -33,15 +33,16 @@ package sonia.scm.plugin; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -126,7 +127,7 @@ public final class SubscriberElement public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("eventClass", eventClass) .add("subscriberClass", subscriberClass) .add("description", description) diff --git a/scm-core/src/main/java/sonia/scm/repository/AbstactImportHandler.java b/scm-core/src/main/java/sonia/scm/repository/AbstactImportHandler.java index 6e0827af4a..2195e87730 100644 --- a/scm-core/src/main/java/sonia/scm/repository/AbstactImportHandler.java +++ b/scm-core/src/main/java/sonia/scm/repository/AbstactImportHandler.java @@ -35,9 +35,9 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- -import com.google.common.base.Throwables; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.AlreadyExistsException; import sonia.scm.repository.ImportResult.Builder; import java.io.File; @@ -86,9 +86,7 @@ public abstract class AbstactImportHandler implements AdvancedImportHandler * {@inheritDoc} */ @Override - public List importRepositories(RepositoryManager manager) - throws IOException, RepositoryException - { + public List importRepositories(RepositoryManager manager) throws IOException { return doRepositoryImport(manager, true).getImportedDirectories(); } @@ -98,22 +96,7 @@ public abstract class AbstactImportHandler implements AdvancedImportHandler @Override public ImportResult importRepositoriesFromDirectory(RepositoryManager manager) { - try - { - return doRepositoryImport(manager, false); - } - catch (IOException ex) - { - - // should never happen - throw Throwables.propagate(ex); - } - catch (RepositoryException ex) - { - - // should never happen - throw Throwables.propagate(ex); - } + return doRepositoryImport(manager, false); } /** @@ -126,12 +109,8 @@ public abstract class AbstactImportHandler implements AdvancedImportHandler * @return repository * * @throws IOException - * @throws RepositoryException */ - protected Repository createRepository(File repositoryDirectory, - String repositoryName) - throws IOException, RepositoryException - { + protected Repository createRepository(File repositoryDirectory, String repositoryName) throws IOException { Repository repository = new Repository(); repository.setName(repositoryName); @@ -151,12 +130,8 @@ public abstract class AbstactImportHandler implements AdvancedImportHandler * @return import result * * @throws IOException - * @throws RepositoryException */ - private ImportResult doRepositoryImport(RepositoryManager manager, - boolean throwExceptions) - throws IOException, RepositoryException - { + private ImportResult doRepositoryImport(RepositoryManager manager, boolean throwExceptions) { Builder builder = ImportResult.builder(); logger.trace("search for repositories to import"); @@ -215,11 +190,10 @@ public abstract class AbstactImportHandler implements AdvancedImportHandler * @param directoryName * * @throws IOException - * @throws RepositoryException */ private void importRepository(RepositoryManager manager, Builder builder, boolean throwExceptions, String directoryName) - throws IOException, RepositoryException + throws IOException { logger.trace("check repository {} for import", directoryName); @@ -266,12 +240,10 @@ public abstract class AbstactImportHandler implements AdvancedImportHandler * * @return * @throws IOException - * @throws RepositoryException */ private void importRepository(RepositoryManager manager, String repositoryName) - throws IOException, RepositoryException - { + throws IOException, AlreadyExistsException { Repository repository = createRepository(getRepositoryDirectory(repositoryName), repositoryName); diff --git a/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java b/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java index 536b7bd9e9..a717cdf05b 100644 --- a/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java +++ b/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java @@ -38,6 +38,7 @@ import com.google.common.base.Throwables; import com.google.common.io.Resources; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.AlreadyExistsException; import sonia.scm.ConfigurationException; import sonia.scm.io.CommandResult; import sonia.scm.io.ExtendedCommand; @@ -80,12 +81,11 @@ public abstract class AbstractSimpleRepositoryHandler public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("total", total) .add("blameLines", blameLines) .toString(); diff --git a/scm-core/src/main/java/sonia/scm/repository/Branch.java b/scm-core/src/main/java/sonia/scm/repository/Branch.java index 3e610812ff..ce1d43c82b 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Branch.java +++ b/scm-core/src/main/java/sonia/scm/repository/Branch.java @@ -35,15 +35,15 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +//~--- JDK imports ------------------------------------------------------------ /** * Represents a branch in a repository. @@ -132,7 +132,7 @@ public final class Branch implements Serializable public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("name", name) .add("revision", revision) .toString(); diff --git a/scm-core/src/main/java/sonia/scm/repository/BranchNotFoundException.java b/scm-core/src/main/java/sonia/scm/repository/BranchNotFoundException.java new file mode 100644 index 0000000000..a4a1c66d67 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/BranchNotFoundException.java @@ -0,0 +1,9 @@ +package sonia.scm.repository; + +import sonia.scm.NotFoundException; + +public class BranchNotFoundException extends NotFoundException { + public BranchNotFoundException(String branch) { + super("branch", branch); + } +} diff --git a/scm-core/src/main/java/sonia/scm/repository/Branches.java b/scm-core/src/main/java/sonia/scm/repository/Branches.java index f2f7de1a2a..1eb679908e 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Branches.java +++ b/scm-core/src/main/java/sonia/scm/repository/Branches.java @@ -34,17 +34,18 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.collect.Lists; -//~--- JDK imports ------------------------------------------------------------ - -import java.util.Iterator; -import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; +import java.util.Iterator; +import java.util.List; + +//~--- JDK imports ------------------------------------------------------------ /** * Represents all branches of a repository. @@ -148,7 +149,7 @@ public final class Branches implements Iterable public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("branches", branches) .toString(); //J+ diff --git a/scm-core/src/main/java/sonia/scm/repository/BrowserResult.java b/scm-core/src/main/java/sonia/scm/repository/BrowserResult.java index 7880b58f11..212ce45f81 100644 --- a/scm-core/src/main/java/sonia/scm/repository/BrowserResult.java +++ b/scm-core/src/main/java/sonia/scm/repository/BrowserResult.java @@ -35,20 +35,19 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; - -import java.util.Iterator; -import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; +import java.util.Iterator; +import java.util.List; + +//~--- JDK imports ------------------------------------------------------------ /** * @@ -161,7 +160,7 @@ public class BrowserResult implements Iterable, Serializable public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("revision", revision) .add("tag", tag) .add("branch", branch) diff --git a/scm-core/src/main/java/sonia/scm/repository/Changeset.java b/scm-core/src/main/java/sonia/scm/repository/Changeset.java index fecfd74cc9..422611e4e8 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Changeset.java +++ b/scm-core/src/main/java/sonia/scm/repository/Changeset.java @@ -36,24 +36,21 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.base.Objects; - import sonia.scm.BasicPropertiesAware; import sonia.scm.Validateable; import sonia.scm.util.Util; import sonia.scm.util.ValidationUtil; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +//~--- JDK imports ------------------------------------------------------------ /** * Represents a changeset/commit of a repository. diff --git a/scm-core/src/main/java/sonia/scm/repository/ChangesetPagingResult.java b/scm-core/src/main/java/sonia/scm/repository/ChangesetPagingResult.java index 0712ed40af..59a705e36a 100644 --- a/scm-core/src/main/java/sonia/scm/repository/ChangesetPagingResult.java +++ b/scm-core/src/main/java/sonia/scm/repository/ChangesetPagingResult.java @@ -35,20 +35,19 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; - -import java.util.Iterator; -import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; +import java.util.Iterator; +import java.util.List; + +//~--- JDK imports ------------------------------------------------------------ /** * The changeset paging result is used to do a paging over the @@ -156,7 +155,7 @@ public class ChangesetPagingResult implements Iterable, Serializable public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("changesets", changesets) .add("total", total) .toString(); diff --git a/scm-core/src/main/java/sonia/scm/repository/FileObject.java b/scm-core/src/main/java/sonia/scm/repository/FileObject.java index c5c4366a0e..5279921257 100644 --- a/scm-core/src/main/java/sonia/scm/repository/FileObject.java +++ b/scm-core/src/main/java/sonia/scm/repository/FileObject.java @@ -35,18 +35,17 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; - import sonia.scm.LastModifiedAware; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +//~--- JDK imports ------------------------------------------------------------ /** * The FileObject represents a file or a directory in a repository. @@ -110,7 +109,7 @@ public class FileObject implements LastModifiedAware, Serializable public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("name", name) .add("path", path) .add("directory", directory) diff --git a/scm-core/src/main/java/sonia/scm/repository/HealthCheckFailure.java b/scm-core/src/main/java/sonia/scm/repository/HealthCheckFailure.java index 8bac16de8d..55f1abbaa6 100644 --- a/scm-core/src/main/java/sonia/scm/repository/HealthCheckFailure.java +++ b/scm-core/src/main/java/sonia/scm/repository/HealthCheckFailure.java @@ -33,14 +33,15 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; +//~--- JDK imports ------------------------------------------------------------ + /** * Single failure of a {@link HealthCheck}. * @@ -132,7 +133,7 @@ public final class HealthCheckFailure public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("id", id) .add("summary", summary) .add("url", url) diff --git a/scm-core/src/main/java/sonia/scm/repository/HealthCheckResult.java b/scm-core/src/main/java/sonia/scm/repository/HealthCheckResult.java index f5cb690533..9ff902e3cd 100644 --- a/scm-core/src/main/java/sonia/scm/repository/HealthCheckResult.java +++ b/scm-core/src/main/java/sonia/scm/repository/HealthCheckResult.java @@ -33,13 +33,14 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.collect.ImmutableSet; -//~--- JDK imports ------------------------------------------------------------ - import java.util.Set; +//~--- JDK imports ------------------------------------------------------------ + /** * Result of {@link HealthCheck}. * @@ -182,7 +183,7 @@ public final class HealthCheckResult @Override public String toString() { - return Objects.toStringHelper(this).add("failures", failures).toString(); + return MoreObjects.toStringHelper(this).add("failures", failures).toString(); } //~--- get methods ---------------------------------------------------------- diff --git a/scm-core/src/main/java/sonia/scm/repository/ImportHandler.java b/scm-core/src/main/java/sonia/scm/repository/ImportHandler.java index a3c567c930..cee142b48e 100644 --- a/scm-core/src/main/java/sonia/scm/repository/ImportHandler.java +++ b/scm-core/src/main/java/sonia/scm/repository/ImportHandler.java @@ -35,7 +35,6 @@ package sonia.scm.repository; //~--- JDK imports ------------------------------------------------------------ import java.io.IOException; - import java.util.List; /** @@ -56,8 +55,6 @@ public interface ImportHandler * * @return a {@link List} names of imported repositories * @throws IOException - * @throws RepositoryException */ - public List importRepositories(RepositoryManager manager) - throws IOException, RepositoryException; + public List importRepositories(RepositoryManager manager) throws IOException; } diff --git a/scm-core/src/main/java/sonia/scm/repository/ImportResult.java b/scm-core/src/main/java/sonia/scm/repository/ImportResult.java index a7d242abc4..e834a7ec6c 100644 --- a/scm-core/src/main/java/sonia/scm/repository/ImportResult.java +++ b/scm-core/src/main/java/sonia/scm/repository/ImportResult.java @@ -33,18 +33,19 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; -import static com.google.common.base.Preconditions.*; - -//~--- JDK imports ------------------------------------------------------------ - -import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +import static com.google.common.base.Preconditions.checkNotNull; + +//~--- JDK imports ------------------------------------------------------------ /** * Import result of the {@link AdvancedImportHandler}. @@ -130,7 +131,7 @@ public final class ImportResult public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("importedDirectories", importedDirectories) .add("failedDirectories", failedDirectories) .toString(); diff --git a/scm-core/src/main/java/sonia/scm/repository/InternalRepositoryException.java b/scm-core/src/main/java/sonia/scm/repository/InternalRepositoryException.java new file mode 100644 index 0000000000..d397028d7e --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/InternalRepositoryException.java @@ -0,0 +1,15 @@ +package sonia.scm.repository; + +public class InternalRepositoryException extends RuntimeException { + public InternalRepositoryException(Throwable ex) { + super(ex); + } + + public InternalRepositoryException(String msg, Exception ex) { + super(msg, ex); + } + + public InternalRepositoryException(String message) { + super(message); + } +} diff --git a/scm-core/src/main/java/sonia/scm/repository/Modifications.java b/scm-core/src/main/java/sonia/scm/repository/Modifications.java index 26804c91a6..4079d8f574 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Modifications.java +++ b/scm-core/src/main/java/sonia/scm/repository/Modifications.java @@ -37,20 +37,17 @@ package sonia.scm.repository; import com.google.common.base.Objects; import com.google.common.collect.Lists; - import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; - -import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; +import java.util.List; + +//~--- JDK imports ------------------------------------------------------------ /** * diff --git a/scm-core/src/main/java/sonia/scm/repository/PathNotFoundException.java b/scm-core/src/main/java/sonia/scm/repository/PathNotFoundException.java index 7048dc2cf7..ed62a5967c 100644 --- a/scm-core/src/main/java/sonia/scm/repository/PathNotFoundException.java +++ b/scm-core/src/main/java/sonia/scm/repository/PathNotFoundException.java @@ -35,6 +35,7 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import sonia.scm.NotFoundException; import sonia.scm.util.Util; /** @@ -42,7 +43,7 @@ import sonia.scm.util.Util; * * @author Sebastian Sdorra */ -public class PathNotFoundException extends RepositoryException +public class PathNotFoundException extends NotFoundException { /** Field description */ @@ -59,7 +60,7 @@ public class PathNotFoundException extends RepositoryException */ public PathNotFoundException(String path) { - super("path \"".concat(Util.nonNull(path)).concat("\" not found")); + super("path", Util.nonNull(path)); this.path = Util.nonNull(path); } diff --git a/scm-core/src/main/java/sonia/scm/repository/Permission.java b/scm-core/src/main/java/sonia/scm/repository/Permission.java index b5de810f75..8b42d68a1f 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Permission.java +++ b/scm-core/src/main/java/sonia/scm/repository/Permission.java @@ -35,17 +35,16 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; - import sonia.scm.security.PermissionObject; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +//~--- JDK imports ------------------------------------------------------------ /** * Permissions controls the access to {@link Repository}. @@ -136,7 +135,7 @@ public class Permission implements PermissionObject, Serializable final Permission other = (Permission) obj; - return Objects.equal(name, other.name) + return Objects.equal(name, other.name) && Objects.equal(type, other.type) && Objects.equal(groupPermission, other.groupPermission); } @@ -163,7 +162,7 @@ public class Permission implements PermissionObject, Serializable public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("name", name) .add("type", type) .add("groupPermission", groupPermission) diff --git a/scm-core/src/main/java/sonia/scm/repository/Person.java b/scm-core/src/main/java/sonia/scm/repository/Person.java index b3bf15c49a..d5674e7ad0 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Person.java +++ b/scm-core/src/main/java/sonia/scm/repository/Person.java @@ -36,18 +36,16 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.base.Objects; - import sonia.scm.Validateable; import sonia.scm.util.Util; import sonia.scm.util.ValidationUtil; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +//~--- JDK imports ------------------------------------------------------------ /** * The {@link Person} (author) of a changeset. diff --git a/scm-core/src/main/java/sonia/scm/repository/Repository.java b/scm-core/src/main/java/sonia/scm/repository/Repository.java index 44841893e7..adec211c1d 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Repository.java +++ b/scm-core/src/main/java/sonia/scm/repository/Repository.java @@ -35,6 +35,7 @@ package sonia.scm.repository; import com.github.sdorra.ssp.PermissionObject; import com.github.sdorra.ssp.StaticPermissions; +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.collect.Lists; import sonia.scm.BasicPropertiesAware; @@ -401,7 +402,7 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per @Override public String toString() { - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("id", id) .add("namespace", namespace) .add("name", name) diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryAlreadyExistsException.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryAlreadyExistsException.java deleted file mode 100644 index c439b2d0f4..0000000000 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryAlreadyExistsException.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.repository; - -/** - * This {@link Exception} is thrown when trying to create a repository with - * the same name and type already exists. - * - * @author Sebastian Sdorra - */ -public class RepositoryAlreadyExistsException extends RepositoryException -{ - private static final long serialVersionUID = -774929917214137675L; - - /** - * Creates a new instance. - * - * @param message exception message - */ - public RepositoryAlreadyExistsException(String message) { - super(message); - } - - /** - * Creates a new {@link RepositoryAlreadyExistsException} with an appropriate message. - * - * @param repository repository that already exists - * - * @return new exception with appropriate message - */ - public static RepositoryAlreadyExistsException create(Repository repository){ - StringBuilder buffer = new StringBuilder("repository with name "); - buffer.append(repository.getName()).append(" of type "); - buffer.append(repository.getType()).append("already exists"); - return new RepositoryAlreadyExistsException(buffer.toString()); - } -} diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryException.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryException.java deleted file mode 100644 index 63538d08e3..0000000000 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryException.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.repository; - -/** - * Base class for all repository exceptions. - * - * @author Sebastian Sdorra - */ -public class RepositoryException extends Exception -{ - - /** Field description */ - private static final long serialVersionUID = -4939196278070910058L; - - //~--- constructors --------------------------------------------------------- - - /** - * Constructs a new {@link RepositoryException} with null as its - * error detail message. - * - */ - public RepositoryException() - { - super(); - } - - /** - * Constructs a new {@link RepositoryException} with the specified - * detail message. - * - * - * @param message detail message - */ - public RepositoryException(String message) - { - super(message); - } - - /** - * Constructs a new {@link RepositoryException} with the specified - * detail message and cause. - * - * - * @param cause the cause for the exception - */ - public RepositoryException(Throwable cause) - { - super(cause); - } - - /** - * Constructs a new {@link RepositoryException} with the specified - * detail message and cause. - * - * - * @param message detail message - * @param cause the cause for the exception - */ - public RepositoryException(String message, Throwable cause) - { - super(message, cause); - } -} diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryHandler.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryHandler.java index 739d0d0177..445fc22ab8 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryHandler.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryHandler.java @@ -47,7 +47,7 @@ import sonia.scm.plugin.ExtensionPoint; */ @ExtensionPoint public interface RepositoryHandler - extends Handler + extends Handler { /** diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryHandlerNotFoundException.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryHandlerNotFoundException.java deleted file mode 100644 index 4583902ef8..0000000000 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryHandlerNotFoundException.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.repository; - -/** - * - * @author Sebastian Sdorra - */ -public class RepositoryHandlerNotFoundException extends RepositoryException -{ - - /** Field description */ - private static final long serialVersionUID = 5270463060802850944L; - - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - */ - public RepositoryHandlerNotFoundException() {} - - /** - * Constructs ... - * - * - * @param message - */ - public RepositoryHandlerNotFoundException(String message) - { - super(message); - } -} diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryIsNotArchivedException.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryIsNotArchivedException.java index 3742512622..a427050633 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryIsNotArchivedException.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryIsNotArchivedException.java @@ -38,7 +38,7 @@ package sonia.scm.repository; * * @since 1.14 */ -public class RepositoryIsNotArchivedException extends RepositoryException { +public class RepositoryIsNotArchivedException extends RuntimeException { private static final long serialVersionUID = 7728748133123987511L; 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 4fc9db5c32..2c4d958d8d 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryManager.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryManager.java @@ -35,6 +35,7 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import sonia.scm.AlreadyExistsException; import sonia.scm.TypeManager; import javax.servlet.http.HttpServletRequest; @@ -52,7 +53,7 @@ import java.util.Collection; * @apiviz.uses sonia.scm.repository.RepositoryHandler */ public interface RepositoryManager - extends TypeManager + extends TypeManager { /** @@ -72,10 +73,8 @@ public interface RepositoryManager * @param repository {@link Repository} to import * * @throws IOException - * @throws RepositoryException */ - public void importRepository(Repository repository) - throws IOException, RepositoryException; + public void importRepository(Repository repository) throws IOException, AlreadyExistsException; //~--- get methods ---------------------------------------------------------- diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryManagerDecorator.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryManagerDecorator.java index b504359bc0..aa4117af34 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryManagerDecorator.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryManagerDecorator.java @@ -35,6 +35,7 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import sonia.scm.AlreadyExistsException; import sonia.scm.ManagerDecorator; import sonia.scm.Type; @@ -51,7 +52,7 @@ import java.util.Collection; * @since 1.23 */ public class RepositoryManagerDecorator - extends ManagerDecorator + extends ManagerDecorator implements RepositoryManager { @@ -82,9 +83,7 @@ public class RepositoryManagerDecorator * {@inheritDoc} */ @Override - public void importRepository(Repository repository) - throws IOException, RepositoryException - { + public void importRepository(Repository repository) throws IOException, AlreadyExistsException { decorated.importRepository(repository); } diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryNotFoundException.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryNotFoundException.java index 11f1a98bfd..070221117a 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryNotFoundException.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryNotFoundException.java @@ -33,13 +33,15 @@ package sonia.scm.repository; +import sonia.scm.NotFoundException; + /** * Signals that the specified {@link Repository} could be found. * * @author Sebastian Sdorra * @since 1.6 */ -public class RepositoryNotFoundException extends RepositoryException +public class RepositoryNotFoundException extends NotFoundException { /** Field description */ @@ -53,10 +55,10 @@ public class RepositoryNotFoundException extends RepositoryException * */ public RepositoryNotFoundException(Repository repository) { - super("repository " + repository.getName() + "/" + repository.getNamespace() + " does not exist"); + super("repository", repository.getName() + "/" + repository.getNamespace()); } public RepositoryNotFoundException(String repositoryId) { - super("repository with id " + repositoryId + " does not exist"); + super("repository", repositoryId); } } diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryRequestListener.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryRequestListener.java index 219aa9cee2..409052fe19 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryRequestListener.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryRequestListener.java @@ -37,12 +37,11 @@ package sonia.scm.repository; import sonia.scm.plugin.ExtensionPoint; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +//~--- JDK imports ------------------------------------------------------------ /** * Listener before a repository request is executed. Repository request are @@ -68,10 +67,6 @@ public interface RepositoryRequestListener * * @return false to abort the request * @throws IOException - * @throws RepositoryException */ - public boolean handleRequest(HttpServletRequest request, - HttpServletResponse response, - Repository repository) - throws IOException, RepositoryException; + boolean handleRequest(HttpServletRequest request, HttpServletResponse response, Repository repository) throws IOException; } diff --git a/scm-core/src/main/java/sonia/scm/repository/RevisionNotFoundException.java b/scm-core/src/main/java/sonia/scm/repository/RevisionNotFoundException.java index a0fbd3f6a4..4185e3223d 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RevisionNotFoundException.java +++ b/scm-core/src/main/java/sonia/scm/repository/RevisionNotFoundException.java @@ -35,6 +35,7 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import sonia.scm.NotFoundException; import sonia.scm.util.Util; /** @@ -42,8 +43,7 @@ import sonia.scm.util.Util; * * @author Sebastian Sdorra */ -public class RevisionNotFoundException extends RepositoryException -{ +public class RevisionNotFoundException extends NotFoundException { /** Field description */ private static final long serialVersionUID = -5594008535358811998L; @@ -59,7 +59,7 @@ public class RevisionNotFoundException extends RepositoryException */ public RevisionNotFoundException(String revision) { - super("revision \"".concat(Util.nonNull(revision)).concat("\" not found")); + super("revision", revision); this.revision = Util.nonNull(revision); } diff --git a/scm-core/src/main/java/sonia/scm/repository/SubRepository.java b/scm-core/src/main/java/sonia/scm/repository/SubRepository.java index 3c8acc4831..55ff0e2269 100644 --- a/scm-core/src/main/java/sonia/scm/repository/SubRepository.java +++ b/scm-core/src/main/java/sonia/scm/repository/SubRepository.java @@ -35,16 +35,16 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +//~--- JDK imports ------------------------------------------------------------ /** * @since 1.10 @@ -157,7 +157,7 @@ public class SubRepository implements Serializable public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("repositoryUrl", repositoryUrl) .add("browserUrl", browserUrl) .add("revision", revision) diff --git a/scm-core/src/main/java/sonia/scm/repository/Tag.java b/scm-core/src/main/java/sonia/scm/repository/Tag.java index 4fc246e0c5..ae436c1a7a 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Tag.java +++ b/scm-core/src/main/java/sonia/scm/repository/Tag.java @@ -34,14 +34,15 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; +//~--- JDK imports ------------------------------------------------------------ + /** * Represents a tag in a repository. * @@ -124,7 +125,7 @@ public final class Tag public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("name", name) .add("revision", revision) .toString(); diff --git a/scm-core/src/main/java/sonia/scm/repository/Tags.java b/scm-core/src/main/java/sonia/scm/repository/Tags.java index fd38b421a5..e89ed314ea 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Tags.java +++ b/scm-core/src/main/java/sonia/scm/repository/Tags.java @@ -34,18 +34,18 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.collect.Lists; -//~--- JDK imports ------------------------------------------------------------ - -import java.util.Iterator; -import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; +import java.util.Iterator; +import java.util.List; + +//~--- JDK imports ------------------------------------------------------------ /** * Represents all tags of a repository. @@ -138,7 +138,7 @@ public final class Tags implements Iterable public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("tags", tags) .toString(); //J+ diff --git a/scm-core/src/main/java/sonia/scm/repository/api/AbstractBundleOrUnbundleCommandResponse.java b/scm-core/src/main/java/sonia/scm/repository/api/AbstractBundleOrUnbundleCommandResponse.java index 36ae6f89ad..d1d7ef5045 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/AbstractBundleOrUnbundleCommandResponse.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/AbstractBundleOrUnbundleCommandResponse.java @@ -33,8 +33,8 @@ package sonia.scm.repository.api; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; - /** * Abstract class for bundle or unbundle command. * @@ -95,7 +95,7 @@ public abstract class AbstractBundleOrUnbundleCommandResponse public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("changesetCount", changesetCount) .toString(); //J+ diff --git a/scm-core/src/main/java/sonia/scm/repository/api/BlameCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/BlameCommandBuilder.java index 203a01b331..5a34345dce 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/BlameCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/BlameCommandBuilder.java @@ -38,25 +38,22 @@ package sonia.scm.repository.api; import com.google.common.base.Objects; import com.google.common.base.Preconditions; import com.google.common.base.Strings; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.cache.Cache; import sonia.scm.cache.CacheManager; import sonia.scm.repository.BlameResult; import sonia.scm.repository.PreProcessorUtil; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryCacheKey; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.spi.BlameCommand; import sonia.scm.repository.spi.BlameCommandRequest; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; import java.io.Serializable; +//~--- JDK imports ------------------------------------------------------------ + /** * Shows changeset information by line for a given file. * Blame is also known as annotate in some SCM systems.
@@ -138,10 +135,9 @@ public final class BlameCommandBuilder * @throws IllegalArgumentException if the path is null or empty * * @throws IOException - * @throws RepositoryException */ public BlameResult getBlameResult(String path) - throws IOException, RepositoryException + throws IOException { Preconditions.checkArgument(!Strings.isNullOrEmpty(path), "path is required"); diff --git a/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java index 5a456de936..968f9ba39d 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java @@ -40,8 +40,6 @@ import sonia.scm.repository.Branch; import sonia.scm.repository.Branches; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryCacheKey; -import sonia.scm.repository.RepositoryException; -import sonia.scm.repository.spi.BlameCommand; import sonia.scm.repository.spi.BranchesCommand; import java.io.IOException; @@ -80,10 +78,8 @@ public final class BranchesCommandBuilder * only be called from the {@link RepositoryService}. * * @param cacheManager cache manager - * @param blameCommand implementation of the {@link BlameCommand} - * @param branchesCommand + * @param branchesCommand implementation of the {@link BranchesCommand} * @param repository repository to query - * @param preProcessorUtil */ BranchesCommandBuilder(CacheManager cacheManager, BranchesCommand branchesCommand, Repository repository) @@ -102,9 +98,8 @@ public final class BranchesCommandBuilder * @return branches from the repository * * @throws IOException - * @throws RepositoryException */ - public Branches getBranches() throws RepositoryException, IOException + public Branches getBranches() throws IOException { Branches branches; @@ -173,10 +168,9 @@ public final class BranchesCommandBuilder * @return * * @throws IOException - * @throws RepositoryException */ private Branches getBranchesFromCommand() - throws RepositoryException, IOException + throws IOException { return new Branches(branchesCommand.getBranches()); } diff --git a/scm-core/src/main/java/sonia/scm/repository/api/BrowseCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/BrowseCommandBuilder.java index 655b7d4816..eeae45b893 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/BrowseCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/BrowseCommandBuilder.java @@ -36,10 +36,8 @@ package sonia.scm.repository.api; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.base.Objects; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.cache.Cache; import sonia.scm.cache.CacheManager; import sonia.scm.repository.BrowserResult; @@ -48,18 +46,17 @@ import sonia.scm.repository.FileObjectNameComparator; import sonia.scm.repository.PreProcessorUtil; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryCacheKey; -import sonia.scm.repository.RepositoryException; +import sonia.scm.repository.RevisionNotFoundException; import sonia.scm.repository.spi.BrowseCommand; import sonia.scm.repository.spi.BrowseCommandRequest; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; import java.io.Serializable; - import java.util.Collections; import java.util.List; +//~--- JDK imports ------------------------------------------------------------ + /** * BrowseCommandBuilder is able to browse the files of a {@link Repository}. *

@@ -100,7 +97,7 @@ public final class BrowseCommandBuilder * only be called from the {@link RepositoryService}. * * @param cacheManager cache manager - * @param logCommand implementation of the {@link LogCommand} + * @param browseCommand implementation of the {@link BrowseCommand} * @param browseCommand * @param repository repository to query * @param preProcessorUtil @@ -140,11 +137,8 @@ public final class BrowseCommandBuilder * @return files for the given parameters * * @throws IOException - * @throws RepositoryException */ - public BrowserResult getBrowserResult() - throws IOException, RepositoryException - { + public BrowserResult getBrowserResult() throws IOException, RevisionNotFoundException { BrowserResult result = null; if (disableCache) diff --git a/scm-core/src/main/java/sonia/scm/repository/api/BundleCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/BundleCommandBuilder.java index 4a25c0df50..4fed0a7b60 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/BundleCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/BundleCommandBuilder.java @@ -37,23 +37,21 @@ package sonia.scm.repository.api; import com.google.common.io.ByteSink; import com.google.common.io.Files; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.spi.BundleCommand; import sonia.scm.repository.spi.BundleCommandRequest; -import static com.google.common.base.Preconditions.*; - -//~--- JDK imports ------------------------------------------------------------ - import java.io.File; import java.io.IOException; import java.io.OutputStream; +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; + +//~--- JDK imports ------------------------------------------------------------ + /** * The bundle command dumps a repository to a byte source such as a file. The * created bundle can be restored to an empty repository with the @@ -94,11 +92,8 @@ public final class BundleCommandBuilder * @return bundle response * * @throws IOException - * @throws RepositoryException */ - public BundleResponse bundle(File outputFile) - throws IOException, RepositoryException - { + public BundleResponse bundle(File outputFile) throws IOException { checkArgument((outputFile != null) &&!outputFile.exists(), "file is null or exists already"); @@ -120,10 +115,9 @@ public final class BundleCommandBuilder * @return bundle response * * @throws IOException - * @throws RepositoryException */ public BundleResponse bundle(OutputStream outputStream) - throws IOException, RepositoryException + throws IOException { checkNotNull(outputStream, "output stream is required"); @@ -141,10 +135,9 @@ public final class BundleCommandBuilder * @return bundle response * * @throws IOException - * @throws RepositoryException */ public BundleResponse bundle(ByteSink sink) - throws IOException, RepositoryException + throws IOException { checkNotNull(sink, "byte sink is required"); logger.info("bundle {} to byte sink"); diff --git a/scm-core/src/main/java/sonia/scm/repository/api/CatCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/CatCommandBuilder.java index 270b996635..bf896efed8 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/CatCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/CatCommandBuilder.java @@ -37,8 +37,9 @@ import com.google.common.base.Preconditions; import com.google.common.base.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.repository.PathNotFoundException; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; +import sonia.scm.repository.RevisionNotFoundException; import sonia.scm.repository.spi.CatCommand; import sonia.scm.repository.spi.CatCommandRequest; import sonia.scm.util.IOUtil; @@ -106,7 +107,7 @@ public final class CatCommandBuilder * @param outputStream output stream for the content * @param path file path */ - public void retriveContent(OutputStream outputStream, String path) throws IOException, RepositoryException { + public void retriveContent(OutputStream outputStream, String path) throws IOException, PathNotFoundException, RevisionNotFoundException { getCatResult(outputStream, path); } @@ -115,7 +116,7 @@ public final class CatCommandBuilder * * @param path file path */ - public InputStream getStream(String path) throws IOException, RepositoryException { + public InputStream getStream(String path) throws IOException, PathNotFoundException, RevisionNotFoundException { Preconditions.checkArgument(!Strings.isNullOrEmpty(path), "path is required"); @@ -137,10 +138,8 @@ public final class CatCommandBuilder * @return content of the file * * @throws IOException - * @throws RepositoryException */ - public String getContent(String path) throws IOException, RepositoryException - { + public String getContent(String path) throws IOException, PathNotFoundException, RevisionNotFoundException { String content = null; ByteArrayOutputStream baos = null; @@ -185,11 +184,9 @@ public final class CatCommandBuilder * @param path path of the file * * @throws IOException - * @throws RepositoryException */ private void getCatResult(OutputStream outputStream, String path) - throws IOException, RepositoryException - { + throws IOException, PathNotFoundException, RevisionNotFoundException { Preconditions.checkNotNull(outputStream, "OutputStream is required"); Preconditions.checkArgument(!Strings.isNullOrEmpty(path), "path is required"); diff --git a/scm-core/src/main/java/sonia/scm/repository/api/DiffCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/DiffCommandBuilder.java index e1d7ba5f1a..c0e9e3f622 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/DiffCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/DiffCommandBuilder.java @@ -36,21 +36,19 @@ package sonia.scm.repository.api; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.base.Preconditions; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - -import sonia.scm.repository.RepositoryException; +import sonia.scm.repository.RevisionNotFoundException; import sonia.scm.repository.spi.DiffCommand; import sonia.scm.repository.spi.DiffCommandRequest; import sonia.scm.util.IOUtil; -//~--- JDK imports ------------------------------------------------------------ - import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; +//~--- JDK imports ------------------------------------------------------------ + /** * Shows differences between revisions for a specified file or * the entire revision.
@@ -87,9 +85,7 @@ public final class DiffCommandBuilder * Constructs a new {@link DiffCommandBuilder}, this constructor should * only be called from the {@link RepositoryService}. * - * @param implementation of {@link DiffCommand} - * - * @param diffCommand + * @param diffCommand implementation of {@link DiffCommand} */ DiffCommandBuilder(DiffCommand diffCommand) { @@ -107,11 +103,8 @@ public final class DiffCommandBuilder * @return {@code this} * * @throws IOException - * @throws RepositoryException */ - public DiffCommandBuilder retriveContent(OutputStream outputStream) - throws IOException, RepositoryException - { + public DiffCommandBuilder retriveContent(OutputStream outputStream) throws IOException, RevisionNotFoundException { getDiffResult(outputStream); return this; @@ -125,10 +118,8 @@ public final class DiffCommandBuilder * @return content of the difference * * @throws IOException - * @throws RepositoryException */ - public String getContent() throws IOException, RepositoryException - { + public String getContent() throws IOException, RevisionNotFoundException { String content = null; ByteArrayOutputStream baos = null; @@ -205,14 +196,10 @@ public final class DiffCommandBuilder * * * @param outputStream - * @param path * * @throws IOException - * @throws RepositoryException */ - private void getDiffResult(OutputStream outputStream) - throws IOException, RepositoryException - { + private void getDiffResult(OutputStream outputStream) throws IOException, RevisionNotFoundException { Preconditions.checkNotNull(outputStream, "OutputStream is required"); Preconditions.checkArgument(request.isValid(), "path and/or revision is required"); diff --git a/scm-core/src/main/java/sonia/scm/repository/api/IncomingCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/IncomingCommandBuilder.java index 747cb837a0..6c7c620fa4 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/IncomingCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/IncomingCommandBuilder.java @@ -36,22 +36,20 @@ package sonia.scm.repository.api; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; - import sonia.scm.cache.CacheManager; import sonia.scm.repository.Changeset; import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.PermissionType; import sonia.scm.repository.PreProcessorUtil; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.spi.IncomingCommand; import sonia.scm.repository.spi.IncomingCommandRequest; import sonia.scm.security.RepositoryPermission; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; +//~--- JDK imports ------------------------------------------------------------ + /** * The incoming command shows new {@link Changeset}s found in a different * repository location. @@ -66,8 +64,6 @@ public final class IncomingCommandBuilder * Constructs a new {@link IncomingCommandBuilder}, this constructor should * only be called from the {@link RepositoryService}. * - * @param cacheManager cache manager - * * @param cacheManger * @param command implementation of the {@link IncomingCommand} * @param repository repository to query @@ -91,11 +87,10 @@ public final class IncomingCommandBuilder * @return incoming changesets * * @throws IOException - * @throws RepositoryException */ public ChangesetPagingResult getIncomingChangesets( Repository remoteRepository) - throws IOException, RepositoryException + throws IOException { Subject subject = SecurityUtils.getSubject(); diff --git a/scm-core/src/main/java/sonia/scm/repository/api/LogCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/LogCommandBuilder.java index de5e2b1b9f..1450cf687a 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/LogCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/LogCommandBuilder.java @@ -37,10 +37,8 @@ package sonia.scm.repository.api; import com.google.common.base.Objects; import com.google.common.collect.ImmutableList; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.cache.Cache; import sonia.scm.cache.CacheManager; import sonia.scm.repository.Changeset; @@ -48,15 +46,15 @@ import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.PreProcessorUtil; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryCacheKey; -import sonia.scm.repository.RepositoryException; +import sonia.scm.repository.RevisionNotFoundException; import sonia.scm.repository.spi.LogCommand; import sonia.scm.repository.spi.LogCommandRequest; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; import java.io.Serializable; +//~--- JDK imports ------------------------------------------------------------ + /** * LogCommandBuilder is able to show the history of a file in a * {@link Repository} or the entire history of a {@link Repository}. @@ -166,11 +164,8 @@ public final class LogCommandBuilder * @return the {@link Changeset} with the given id or null * * @throws IOException - * @throws RepositoryException */ - public Changeset getChangeset(String id) - throws IOException, RepositoryException - { + public Changeset getChangeset(String id) throws IOException, RevisionNotFoundException { Changeset changeset; if (disableCache) @@ -228,11 +223,8 @@ public final class LogCommandBuilder * @return all changesets with the given parameters * * @throws IOException - * @throws RepositoryException */ - public ChangesetPagingResult getChangesets() - throws IOException, RepositoryException - { + public ChangesetPagingResult getChangesets() throws IOException, RevisionNotFoundException { ChangesetPagingResult cpr; if (disableCache) diff --git a/scm-core/src/main/java/sonia/scm/repository/api/OutgoingCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/OutgoingCommandBuilder.java index def8c3ae7f..2753128eac 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/OutgoingCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/OutgoingCommandBuilder.java @@ -30,7 +30,6 @@ */ package sonia.scm.repository.api; -import java.io.IOException; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; import sonia.scm.cache.CacheManager; @@ -38,11 +37,12 @@ import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.PermissionType; import sonia.scm.repository.PreProcessorUtil; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.spi.OutgoingCommand; import sonia.scm.repository.spi.OutgoingCommandRequest; import sonia.scm.security.RepositoryPermission; +import java.io.IOException; + /** * Show changesets not found in a remote repository. * @@ -62,7 +62,7 @@ public final class OutgoingCommandBuilder * @param repository repository to query * @param preProcessorUtil pre processor util */ - OutgoingCommandBuilder(CacheManager cacheManger, OutgoingCommand command, + OutgoingCommandBuilder(CacheManager cacheManager, OutgoingCommand command, Repository repository, PreProcessorUtil preProcessorUtil) { this.command = command; @@ -80,7 +80,7 @@ public final class OutgoingCommandBuilder * @return outgoing changesets */ public ChangesetPagingResult getOutgoingChangesets( - Repository remoteRepository) throws IOException, RepositoryException + Repository remoteRepository) throws IOException { Subject subject = SecurityUtils.getSubject(); diff --git a/scm-core/src/main/java/sonia/scm/repository/api/PullCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/PullCommandBuilder.java index 528c93eef9..a0f5ff4115 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/PullCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/PullCommandBuilder.java @@ -36,22 +36,19 @@ package sonia.scm.repository.api; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.repository.PermissionType; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.spi.PullCommand; import sonia.scm.repository.spi.PullCommandRequest; import sonia.scm.security.RepositoryPermission; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; import java.net.URL; +//~--- JDK imports ------------------------------------------------------------ + /** * The pull command pull changes from a other repository. * @@ -93,13 +90,10 @@ public final class PullCommandBuilder * @return informations over the executed pull command * * @throws IOException - * @throws RepositoryException - * + * * @since 1.43 */ - public PullResponse pull(String url) - throws IOException, RepositoryException - { + public PullResponse pull(String url) throws IOException { Subject subject = SecurityUtils.getSubject(); //J- subject.checkPermission( @@ -125,11 +119,8 @@ public final class PullCommandBuilder * @return informations over the executed pull command * * @throws IOException - * @throws RepositoryException */ - public PullResponse pull(Repository remoteRepository) - throws IOException, RepositoryException - { + public PullResponse pull(Repository remoteRepository) throws IOException { Subject subject = SecurityUtils.getSubject(); //J- diff --git a/scm-core/src/main/java/sonia/scm/repository/api/PushCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/PushCommandBuilder.java index fabe938ff7..7b318e49ec 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/PushCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/PushCommandBuilder.java @@ -37,23 +37,19 @@ package sonia.scm.repository.api; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.repository.PermissionType; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.spi.PushCommand; import sonia.scm.repository.spi.PushCommandRequest; import sonia.scm.security.RepositoryPermission; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; - import java.net.URL; +//~--- JDK imports ------------------------------------------------------------ + /** * The push command push changes to a other repository. * @@ -91,11 +87,8 @@ public final class PushCommandBuilder * @return informations of the executed push command * * @throws IOException - * @throws RepositoryException */ - public PushResponse push(Repository remoteRepository) - throws IOException, RepositoryException - { + public PushResponse push(Repository remoteRepository) throws IOException { Subject subject = SecurityUtils.getSubject(); //J- @@ -120,12 +113,10 @@ public final class PushCommandBuilder * @return informations of the executed push command * * @throws IOException - * @throws RepositoryException * * @since 1.43 */ - public PushResponse push(String url) throws IOException, RepositoryException - { + public PushResponse push(String url) throws IOException { URL remoteUrl = new URL(url); diff --git a/scm-core/src/main/java/sonia/scm/repository/api/RepositoryServiceFactory.java b/scm-core/src/main/java/sonia/scm/repository/api/RepositoryServiceFactory.java index 2e4ff644f4..627e57a797 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/RepositoryServiceFactory.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/RepositoryServiceFactory.java @@ -167,9 +167,7 @@ public final class RepositoryServiceFactory * @throws ScmSecurityException if current user has not read permissions * for that repository */ - public RepositoryService create(String repositoryId) - throws RepositoryNotFoundException - { + public RepositoryService create(String repositoryId) throws RepositoryNotFoundException { Preconditions.checkArgument(!Strings.isNullOrEmpty(repositoryId), "a non empty repositoryId is required"); @@ -328,7 +326,6 @@ public final class RepositoryServiceFactory /** * Clear caches on repository delete event. * - * @param repository changed repository * @param event repository event */ @Subscribe(referenceType = ReferenceType.STRONG) diff --git a/scm-core/src/main/java/sonia/scm/repository/api/TagsCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/TagsCommandBuilder.java index 65ceef0828..3a6ea16b10 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/TagsCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/TagsCommandBuilder.java @@ -36,25 +36,21 @@ package sonia.scm.repository.api; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.base.Objects; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.cache.Cache; import sonia.scm.cache.CacheManager; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryCacheKey; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.Tag; import sonia.scm.repository.Tags; import sonia.scm.repository.spi.TagsCommand; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; - import java.util.List; +//~--- JDK imports ------------------------------------------------------------ + /** * The tags command list all repository tags.
*
@@ -88,8 +84,7 @@ public final class TagsCommandBuilder * only be called from the {@link RepositoryService}. * * @param cacheManager cache manager - * @param logCommand implementation of the {@link TagsCommand} - * @param command + * @param command implementation of the {@link TagsCommand} * @param repository repository */ TagsCommandBuilder(CacheManager cacheManager, TagsCommand command, @@ -109,10 +104,8 @@ public final class TagsCommandBuilder * @return tags from the repository * * @throws IOException - * @throws RepositoryException */ - public Tags getTags() throws RepositoryException, IOException - { + public Tags getTags() throws IOException { Tags tags; if (disableCache) @@ -183,9 +176,8 @@ public final class TagsCommandBuilder * @return * * @throws IOException - * @throws RepositoryException */ - private Tags getTagsFromCommand() throws RepositoryException, IOException + private Tags getTagsFromCommand() throws IOException { List tagList = command.getTags(); diff --git a/scm-core/src/main/java/sonia/scm/repository/api/UnbundleCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/UnbundleCommandBuilder.java index ff28e5c668..bfb998c6fe 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/UnbundleCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/UnbundleCommandBuilder.java @@ -37,25 +37,22 @@ package sonia.scm.repository.api; import com.google.common.io.ByteSource; import com.google.common.io.Files; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.spi.UnbundleCommand; import sonia.scm.repository.spi.UnbundleCommandRequest; -import static com.google.common.base.Preconditions.*; - -//~--- JDK imports ------------------------------------------------------------ - import java.io.File; import java.io.IOException; import java.io.InputStream; - import java.util.zip.GZIPInputStream; +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; + +//~--- JDK imports ------------------------------------------------------------ + /** * The unbundle command can restore an empty repository from a bundle. The * bundle can be created with the {@link BundleCommandBuilder}. @@ -97,10 +94,9 @@ public final class UnbundleCommandBuilder * @return unbundle response * * @throws IOException - * @throws RepositoryException */ public UnbundleResponse unbundle(File inputFile) - throws IOException, RepositoryException + throws IOException { checkArgument((inputFile != null) && inputFile.exists(), "existing file is required"); @@ -122,10 +118,9 @@ public final class UnbundleCommandBuilder * @return unbundle response * * @throws IOException - * @throws RepositoryException */ public UnbundleResponse unbundle(InputStream inputStream) - throws IOException, RepositoryException + throws IOException { checkNotNull(inputStream, "input stream is required"); logger.info("unbundle archive from stream"); @@ -142,10 +137,9 @@ public final class UnbundleCommandBuilder * @return unbundle response * * @throws IOException - * @throws RepositoryException */ public UnbundleResponse unbundle(ByteSource byteSource) - throws IOException, RepositoryException + throws IOException { checkNotNull(byteSource, "byte source is required"); logger.info("unbundle from byte source"); @@ -186,7 +180,7 @@ public final class UnbundleCommandBuilder { @Override - public InputStream openStream() throws IOException + public InputStream openStream() { return inputStream; } diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/BlameCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/BlameCommand.java index 80c155a534..9953746fd1 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/BlameCommand.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/BlameCommand.java @@ -36,12 +36,11 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import sonia.scm.repository.BlameResult; -import sonia.scm.repository.RepositoryException; - -//~--- JDK imports ------------------------------------------------------------ import java.io.IOException; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -59,8 +58,6 @@ public interface BlameCommand * @return * * @throws IOException - * @throws RepositoryException */ - public BlameResult getBlameResult(BlameCommandRequest request) - throws IOException, RepositoryException; + BlameResult getBlameResult(BlameCommandRequest request) throws IOException; } diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/BranchesCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/BranchesCommand.java index a5659a8ffc..ba512ed4d2 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/BranchesCommand.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/BranchesCommand.java @@ -35,14 +35,12 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import sonia.scm.repository.Branch; -import sonia.scm.repository.RepositoryException; - -//~--- JDK imports ------------------------------------------------------------ import java.io.IOException; - import java.util.List; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -58,7 +56,6 @@ public interface BranchesCommand * @return * * @throws IOException - * @throws RepositoryException */ - public List getBranches() throws RepositoryException, IOException; + List getBranches() throws IOException; } diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/BrowseCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/BrowseCommand.java index 4afc02b125..2c9fff589c 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/BrowseCommand.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/BrowseCommand.java @@ -36,12 +36,12 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import sonia.scm.repository.BrowserResult; -import sonia.scm.repository.RepositoryException; - -//~--- JDK imports ------------------------------------------------------------ +import sonia.scm.repository.RevisionNotFoundException; import java.io.IOException; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -59,8 +59,5 @@ public interface BrowseCommand * @return * * @throws IOException - * @throws RepositoryException */ - public BrowserResult getBrowserResult(BrowseCommandRequest request) - throws IOException, RepositoryException; -} + BrowserResult getBrowserResult(BrowseCommandRequest request) throws IOException, RevisionNotFoundException;} diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/BrowseCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/BrowseCommandRequest.java index 2f7c007959..39da9a9ace 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/BrowseCommandRequest.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/BrowseCommandRequest.java @@ -35,8 +35,8 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; - /** * * @author Sebastian Sdorra @@ -127,7 +127,7 @@ public final class BrowseCommandRequest extends FileBaseCommandRequest public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("path", getPath()) .add("revision", getRevision()) .add("recursive", recursive) diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/BundleCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/BundleCommand.java index 8a0f21a714..7b6404c556 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/BundleCommand.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/BundleCommand.java @@ -35,13 +35,12 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.api.BundleResponse; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; +//~--- JDK imports ------------------------------------------------------------ + /** * Service provider implementation for the bundle command. * @@ -60,8 +59,7 @@ public interface BundleCommand * @return bundle response * * @throws IOException - * @throws RepositoryException */ public BundleResponse bundle(BundleCommandRequest request) - throws IOException, RepositoryException; + throws IOException; } diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/CatCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/CatCommand.java index e0e336f2ff..06f242783b 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/CatCommand.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/CatCommand.java @@ -33,7 +33,8 @@ package sonia.scm.repository.spi; -import sonia.scm.repository.RepositoryException; +import sonia.scm.repository.PathNotFoundException; +import sonia.scm.repository.RevisionNotFoundException; import java.io.IOException; import java.io.InputStream; @@ -46,7 +47,7 @@ import java.io.OutputStream; */ public interface CatCommand { - void getCatResult(CatCommandRequest request, OutputStream output) throws IOException, RepositoryException; + void getCatResult(CatCommandRequest request, OutputStream output) throws IOException, RevisionNotFoundException, PathNotFoundException; - InputStream getCatResultStream(CatCommandRequest request) throws IOException, RepositoryException; + InputStream getCatResultStream(CatCommandRequest request) throws IOException, RevisionNotFoundException, PathNotFoundException; } diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommand.java index a4d0c24444..105f4e48e1 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommand.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/DiffCommand.java @@ -33,11 +33,7 @@ package sonia.scm.repository.spi; -//~--- non-JDK imports -------------------------------------------------------- - -import sonia.scm.repository.RepositoryException; - -//~--- JDK imports ------------------------------------------------------------ +import sonia.scm.repository.RevisionNotFoundException; import java.io.IOException; import java.io.OutputStream; @@ -59,8 +55,6 @@ public interface DiffCommand * * @throws IOException * @throws RuntimeException - * @throws RepositoryException */ - public void getDiffResult(DiffCommandRequest request, OutputStream output) - throws IOException, RepositoryException; + public void getDiffResult(DiffCommandRequest request, OutputStream output) throws IOException, RevisionNotFoundException; } diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/FileBaseCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/FileBaseCommandRequest.java index aec2b7087a..9f563345fd 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/FileBaseCommandRequest.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/FileBaseCommandRequest.java @@ -35,12 +35,13 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - import java.io.Serializable; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -115,7 +116,7 @@ public abstract class FileBaseCommandRequest public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("path", path) .add("revision", revision) .toString(); diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/HookEventFacade.java b/scm-core/src/main/java/sonia/scm/repository/spi/HookEventFacade.java index 93ed5f1111..52ef68f272 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/HookEventFacade.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/HookEventFacade.java @@ -37,7 +37,6 @@ import com.google.inject.Inject; import com.google.inject.Provider; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RepositoryHookEvent; import sonia.scm.repository.RepositoryHookType; import sonia.scm.repository.RepositoryManager; @@ -72,19 +71,18 @@ public final class HookEventFacade //~--- methods -------------------------------------------------------------- - public HookEventHandler handle(String id) throws RepositoryException { + public HookEventHandler handle(String id) throws RepositoryNotFoundException { return handle(repositoryManagerProvider.get().get(id)); } - public HookEventHandler handle(NamespaceAndName namespaceAndName) throws RepositoryException { + public HookEventHandler handle(NamespaceAndName namespaceAndName) throws RepositoryNotFoundException { return handle(repositoryManagerProvider.get().get(namespaceAndName)); } - public HookEventHandler handle(Repository repository) throws RepositoryException - { + public HookEventHandler handle(Repository repository) throws RepositoryNotFoundException { if (repository == null) { - throw new RepositoryNotFoundException("could not find repository"); + throw new RepositoryNotFoundException(repository); } return new HookEventHandler(repositoryManagerProvider.get(), diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/IncomingCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/IncomingCommand.java index 8b3341f77b..669f307acd 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/IncomingCommand.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/IncomingCommand.java @@ -35,12 +35,11 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import sonia.scm.repository.ChangesetPagingResult; -import sonia.scm.repository.RepositoryException; - -//~--- JDK imports ------------------------------------------------------------ import java.io.IOException; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -49,18 +48,5 @@ import java.io.IOException; public interface IncomingCommand { - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ - public ChangesetPagingResult getIncomingChangesets( - IncomingCommandRequest request) - throws IOException, RepositoryException; + ChangesetPagingResult getIncomingChangesets(IncomingCommandRequest request) throws IOException; } diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/LogCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/LogCommand.java index 168c279c19..e4a7f3437b 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/LogCommand.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/LogCommand.java @@ -37,45 +37,20 @@ package sonia.scm.repository.spi; import sonia.scm.repository.Changeset; import sonia.scm.repository.ChangesetPagingResult; -import sonia.scm.repository.RepositoryException; - -//~--- JDK imports ------------------------------------------------------------ +import sonia.scm.repository.RevisionNotFoundException; import java.io.IOException; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra * @since 1.17 */ -public interface LogCommand -{ +public interface LogCommand { - /** - * Method description - * - * - * @param id - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ - public Changeset getChangeset(String id) - throws IOException, RepositoryException; + Changeset getChangeset(String id) throws IOException, RevisionNotFoundException; - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ - public ChangesetPagingResult getChangesets(LogCommandRequest request) - throws IOException, RepositoryException; + ChangesetPagingResult getChangesets(LogCommandRequest request) throws IOException, RevisionNotFoundException; } diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/LogCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/LogCommandRequest.java index 1637a92c16..9356bb212a 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/LogCommandRequest.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/LogCommandRequest.java @@ -35,12 +35,13 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - import java.io.Serializable; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -125,7 +126,7 @@ public final class LogCommandRequest implements Serializable, Resetable public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("startChangeset", startChangeset) .add("endChangeset", endChangeset) .add("pagingStart", pagingStart) diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/OutgoingCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/OutgoingCommand.java index 9e5509e945..c37950abe2 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/OutgoingCommand.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/OutgoingCommand.java @@ -35,12 +35,11 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import sonia.scm.repository.ChangesetPagingResult; -import sonia.scm.repository.RepositoryException; - -//~--- JDK imports ------------------------------------------------------------ import java.io.IOException; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -58,9 +57,6 @@ public interface OutgoingCommand * @return * * @throws IOException - * @throws RepositoryException */ - public ChangesetPagingResult getOutgoingChangesets( - OutgoingCommandRequest request) - throws IOException, RepositoryException; + ChangesetPagingResult getOutgoingChangesets(OutgoingCommandRequest request) throws IOException; } diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/PagedRemoteCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/PagedRemoteCommandRequest.java index c07ddb54ef..b6545bdc4d 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/PagedRemoteCommandRequest.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/PagedRemoteCommandRequest.java @@ -34,8 +34,8 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; - /** * * @author Sebastian Sdorra @@ -84,7 +84,7 @@ public abstract class PagedRemoteCommandRequest extends RemoteCommandRequest { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("remoteURL", remoteRepository) .add("pagingStart", pagingStart) .add("pagingLimit", pagingLimit) diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/PullCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/PullCommand.java index 533f8e1351..e7aa044353 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/PullCommand.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/PullCommand.java @@ -34,13 +34,12 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.api.PullResponse; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -58,8 +57,6 @@ public interface PullCommand * @return * * @throws IOException - * @throws RepositoryException */ - public PullResponse pull(PullCommandRequest request) - throws IOException, RepositoryException; + PullResponse pull(PullCommandRequest request) throws IOException; } diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/PushCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/PushCommand.java index c77947937a..9530add4f8 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/PushCommand.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/PushCommand.java @@ -34,13 +34,12 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.api.PushResponse; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -58,8 +57,6 @@ public interface PushCommand * @return * * @throws IOException - * @throws RepositoryException */ - public PushResponse push(PushCommandRequest request) - throws IOException, RepositoryException; + PushResponse push(PushCommandRequest request) throws IOException; } diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/RemoteCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/RemoteCommandRequest.java index 0f3cd909d9..bbc902cd2a 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/RemoteCommandRequest.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/RemoteCommandRequest.java @@ -35,14 +35,14 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; - import sonia.scm.repository.Repository; -//~--- JDK imports ------------------------------------------------------------ - import java.net.URL; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -101,7 +101,7 @@ public abstract class RemoteCommandRequest implements Resetable public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("remoteRepository", remoteRepository) .add("remoteUrl", remoteUrl) .toString(); diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/TagsCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/TagsCommand.java index 5de358d94f..c2e6c9092d 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/TagsCommand.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/TagsCommand.java @@ -34,15 +34,13 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.Tag; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; - import java.util.List; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -57,7 +55,6 @@ public interface TagsCommand * @return * * @throws IOException - * @throws RepositoryException */ - public List getTags() throws RepositoryException, IOException; + public List getTags() throws IOException; } diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/UnbundleCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/UnbundleCommand.java index 4777e0c11b..07e35e2715 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/UnbundleCommand.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/UnbundleCommand.java @@ -35,13 +35,12 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.api.UnbundleResponse; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; +//~--- JDK imports ------------------------------------------------------------ + /** * Service provider implementation for the unbundle command. * @@ -60,8 +59,7 @@ public interface UnbundleCommand * @return unbundle response * * @throws IOException - * @throws RepositoryException */ public UnbundleResponse unbundle(UnbundleCommandRequest request) - throws IOException, RepositoryException; + throws IOException; } diff --git a/scm-core/src/main/java/sonia/scm/security/AssignedPermission.java b/scm-core/src/main/java/sonia/scm/security/AssignedPermission.java index fc9083d13a..56b8d04a41 100644 --- a/scm-core/src/main/java/sonia/scm/security/AssignedPermission.java +++ b/scm-core/src/main/java/sonia/scm/security/AssignedPermission.java @@ -34,16 +34,16 @@ package sonia.scm.security; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +//~--- JDK imports ------------------------------------------------------------ /** * Permission object which is assigned to a specific user or group. @@ -150,7 +150,7 @@ public class AssignedPermission implements PermissionObject, Serializable public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("name", name) .add("groupPermisison", groupPermission) .add("permission", permission) diff --git a/scm-core/src/main/java/sonia/scm/security/DAORealmHelper.java b/scm-core/src/main/java/sonia/scm/security/DAORealmHelper.java index 87ccfaf4cc..3fcab8762c 100644 --- a/scm-core/src/main/java/sonia/scm/security/DAORealmHelper.java +++ b/scm-core/src/main/java/sonia/scm/security/DAORealmHelper.java @@ -33,11 +33,10 @@ package sonia.scm.security; //~--- non-JDK imports -------------------------------------------------------- -import com.google.common.base.Objects; +import com.google.common.base.MoreObjects; import com.google.common.base.Strings; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet.Builder; - import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; @@ -47,10 +46,8 @@ import org.apache.shiro.authc.UnknownAccountException; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authc.credential.CredentialsMatcher; import org.apache.shiro.subject.SimplePrincipalCollection; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.group.Group; import sonia.scm.group.GroupDAO; import sonia.scm.group.GroupNames; @@ -161,7 +158,7 @@ public final class DAORealmHelper collection.add(principal, realm); collection.add(user, realm); collection.add(collectGroups(principal), realm); - collection.add(Objects.firstNonNull(scope, Scope.empty()), realm); + collection.add(MoreObjects.firstNonNull(scope, Scope.empty()), realm); String creds = credentials; diff --git a/scm-core/src/main/java/sonia/scm/security/PermissionDescriptor.java b/scm-core/src/main/java/sonia/scm/security/PermissionDescriptor.java index 5cd5520d61..20d95958a1 100644 --- a/scm-core/src/main/java/sonia/scm/security/PermissionDescriptor.java +++ b/scm-core/src/main/java/sonia/scm/security/PermissionDescriptor.java @@ -34,16 +34,16 @@ package sonia.scm.security; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +//~--- JDK imports ------------------------------------------------------------ /** * Descriptor for available permission objects. @@ -125,7 +125,7 @@ public class PermissionDescriptor implements Serializable { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("displayName", displayName) .add("description", description) .add("value", value) diff --git a/scm-core/src/main/java/sonia/scm/security/RepositoryPermission.java b/scm-core/src/main/java/sonia/scm/security/RepositoryPermission.java index f697e82dfd..1b0229d6f5 100644 --- a/scm-core/src/main/java/sonia/scm/security/RepositoryPermission.java +++ b/scm-core/src/main/java/sonia/scm/security/RepositoryPermission.java @@ -35,17 +35,16 @@ package sonia.scm.security; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; - import org.apache.shiro.authz.Permission; - import sonia.scm.repository.PermissionType; import sonia.scm.repository.Repository; -//~--- JDK imports ------------------------------------------------------------ - import java.io.Serializable; +//~--- JDK imports ------------------------------------------------------------ + /** * This class represents the permission to a repository of a user. * @@ -174,7 +173,7 @@ public final class RepositoryPermission public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("repositoryId", repositoryId) .add("permissionType", permissionType) .toString(); diff --git a/scm-core/src/main/java/sonia/scm/security/StoredAssignedPermissionEvent.java b/scm-core/src/main/java/sonia/scm/security/StoredAssignedPermissionEvent.java index acd7d62052..ad93bf25a9 100644 --- a/scm-core/src/main/java/sonia/scm/security/StoredAssignedPermissionEvent.java +++ b/scm-core/src/main/java/sonia/scm/security/StoredAssignedPermissionEvent.java @@ -34,14 +34,14 @@ package sonia.scm.security; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; - import sonia.scm.HandlerEventType; - -//~--- JDK imports ------------------------------------------------------------ +import sonia.scm.event.Event; import java.io.Serializable; -import sonia.scm.event.Event; + +//~--- JDK imports ------------------------------------------------------------ /** * Event which is fired after a {@link StoredAssignedPermission} was added, @@ -114,7 +114,7 @@ public final class StoredAssignedPermissionEvent implements Serializable public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("type", type) .add("permission", permission) .toString(); diff --git a/scm-core/src/main/java/sonia/scm/security/SyncingRealmHelper.java b/scm-core/src/main/java/sonia/scm/security/SyncingRealmHelper.java index 9e0c97f234..0e3c06e32d 100644 --- a/scm-core/src/main/java/sonia/scm/security/SyncingRealmHelper.java +++ b/scm-core/src/main/java/sonia/scm/security/SyncingRealmHelper.java @@ -30,17 +30,18 @@ package sonia.scm.security; import com.google.common.collect.ImmutableList; import com.google.inject.Inject; -import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.subject.SimplePrincipalCollection; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import sonia.scm.AlreadyExistsException; +import sonia.scm.NotFoundException; import sonia.scm.group.Group; -import sonia.scm.group.GroupException; import sonia.scm.group.GroupManager; import sonia.scm.group.GroupNames; import sonia.scm.plugin.Extension; import sonia.scm.user.User; -import sonia.scm.user.UserException; import sonia.scm.user.UserManager; import sonia.scm.web.security.AdministrationContext; @@ -56,6 +57,8 @@ import java.util.Collection; @Extension public final class SyncingRealmHelper { + private static final Logger LOG = LoggerFactory.getLogger(SyncingRealmHelper.class); + private final AdministrationContext ctx; private final GroupManager groupManager; @@ -121,17 +124,19 @@ public final class SyncingRealmHelper { */ public void store(final Group group) { ctx.runAsAdmin(() -> { - try { - if (groupManager.get(group.getId()) != null) { + if (groupManager.get(group.getId()) != null) { + try { groupManager.modify(group); + } catch (NotFoundException e) { + throw new IllegalStateException("got NotFoundException though group " + group.getName() + " could be loaded", e); } - else { + } else { + try { groupManager.create(group); + } catch (AlreadyExistsException e) { + throw new IllegalStateException("got AlreadyExistsException though group " + group.getName() + " could not be loaded", e); } } - catch (GroupException ex) { - throw new AuthenticationException("could not store group", ex); - } }); } @@ -142,17 +147,20 @@ public final class SyncingRealmHelper { */ public void store(final User user) { ctx.runAsAdmin(() -> { - try { - if (userManager.contains(user.getName())) { + if (userManager.contains(user.getName())) { + try { userManager.modify(user); + } catch (NotFoundException e) { + throw new IllegalStateException("got NotFoundException though user " + user.getName() + " could be loaded", e); } - else { + } else { + try { userManager.create(user); + } catch (AlreadyExistsException e) { + throw new IllegalStateException("got AlreadyExistsException though user " + user.getName() + " could not be loaded", e); + } } - catch (UserException ex) { - throw new AuthenticationException("could not store user", ex); - } - }); + }); + } } -} diff --git a/scm-core/src/main/java/sonia/scm/template/Viewable.java b/scm-core/src/main/java/sonia/scm/template/Viewable.java index 8344d2820e..47fd8af57b 100644 --- a/scm-core/src/main/java/sonia/scm/template/Viewable.java +++ b/scm-core/src/main/java/sonia/scm/template/Viewable.java @@ -30,9 +30,9 @@ */ package sonia.scm.template; +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; - /** * A viewable holds the path to a template and the context object which is used to render the template. Viewables can * be used as return type of jax-rs resources. @@ -81,7 +81,7 @@ public final class Viewable { @Override public String toString() { - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("path", path) .add("context", context) .toString(); diff --git a/scm-core/src/main/java/sonia/scm/user/User.java b/scm-core/src/main/java/sonia/scm/user/User.java index 69c5a5732f..778e573c14 100644 --- a/scm-core/src/main/java/sonia/scm/user/User.java +++ b/scm-core/src/main/java/sonia/scm/user/User.java @@ -37,20 +37,19 @@ package sonia.scm.user; import com.github.sdorra.ssp.PermissionObject; import com.github.sdorra.ssp.StaticPermissions; +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; - import sonia.scm.BasicPropertiesAware; import sonia.scm.ModelObject; import sonia.scm.util.Util; import sonia.scm.util.ValidationUtil; -//~--- JDK imports ------------------------------------------------------------ - -import java.security.Principal; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; +import java.security.Principal; + +//~--- JDK imports ------------------------------------------------------------ /** * @@ -59,7 +58,8 @@ import javax.xml.bind.annotation.XmlRootElement; @StaticPermissions("user") @XmlRootElement(name = "users") @XmlAccessorType(XmlAccessType.FIELD) -public class User extends BasicPropertiesAware implements Principal, ModelObject, PermissionObject +public class +User extends BasicPropertiesAware implements Principal, ModelObject, PermissionObject { /** Field description */ @@ -259,7 +259,7 @@ public class User extends BasicPropertiesAware implements Principal, ModelObject : "(not set)"; //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("name", name) .add("displayName",displayName) .add("mail", mail) diff --git a/scm-core/src/main/java/sonia/scm/user/UserAlreadyExistsException.java b/scm-core/src/main/java/sonia/scm/user/UserAlreadyExistsException.java deleted file mode 100644 index 1c77cb4f86..0000000000 --- a/scm-core/src/main/java/sonia/scm/user/UserAlreadyExistsException.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.user; - -/** - * This {@link Exception} is thrown when trying to create a user that already exists. - * - * @author Sebastian Sdorra - */ -public class UserAlreadyExistsException extends UserException -{ - - private static final long serialVersionUID = 9182294539718090814L; - - //~--- constructors --------------------------------------------------------- - - public UserAlreadyExistsException(User user) { - super(user.getName() + " user already exists"); - } -} diff --git a/scm-core/src/main/java/sonia/scm/user/UserException.java b/scm-core/src/main/java/sonia/scm/user/UserException.java deleted file mode 100644 index b8587d5299..0000000000 --- a/scm-core/src/main/java/sonia/scm/user/UserException.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.user; - -/** - * - * @author Sebastian Sdorra - */ -public class UserException extends Exception -{ - - /** Field description */ - private static final long serialVersionUID = 4147943028529739021L; - - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - */ - public UserException() {} - - /** - * Constructs ... - * - * - * @param message - */ - public UserException(String message) - { - super(message); - } - - /** - * Constructs ... - * - * - * @param throwable - */ - public UserException(Throwable throwable) - { - super(throwable); - } - - /** - * Constructs ... - * - * - * @param message - * @param throwable - */ - public UserException(String message, Throwable throwable) - { - super(message, throwable); - } -} diff --git a/scm-core/src/main/java/sonia/scm/user/UserManager.java b/scm-core/src/main/java/sonia/scm/user/UserManager.java index e21eb761dc..0a705c8d60 100644 --- a/scm-core/src/main/java/sonia/scm/user/UserManager.java +++ b/scm-core/src/main/java/sonia/scm/user/UserManager.java @@ -45,7 +45,7 @@ import sonia.scm.search.Searchable; * @author Sebastian Sdorra */ public interface UserManager - extends Manager, Searchable + extends Manager, Searchable { /** diff --git a/scm-core/src/main/java/sonia/scm/user/UserManagerDecorator.java b/scm-core/src/main/java/sonia/scm/user/UserManagerDecorator.java index 5ea14ca14e..225681f9e6 100644 --- a/scm-core/src/main/java/sonia/scm/user/UserManagerDecorator.java +++ b/scm-core/src/main/java/sonia/scm/user/UserManagerDecorator.java @@ -38,17 +38,17 @@ package sonia.scm.user; import sonia.scm.ManagerDecorator; import sonia.scm.search.SearchRequest; -//~--- JDK imports ------------------------------------------------------------ - import java.util.Collection; +//~--- JDK imports ------------------------------------------------------------ + /** * Decorator for {@link UserManager}. * * @author Sebastian Sdorra * @since 1.23 */ -public class UserManagerDecorator extends ManagerDecorator +public class UserManagerDecorator extends ManagerDecorator implements UserManager { diff --git a/scm-core/src/main/java/sonia/scm/user/UserNotFoundException.java b/scm-core/src/main/java/sonia/scm/user/UserNotFoundException.java deleted file mode 100644 index 82b1c2abb8..0000000000 --- a/scm-core/src/main/java/sonia/scm/user/UserNotFoundException.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - -package sonia.scm.user; - -/** - * The UserNotFoundException is thrown e.g. from the - * modify method of the {@link UserManager}, if the user does not exists. - * - * @author Sebastian Sdorra - * @since 1.28 - */ -public class UserNotFoundException extends UserException -{ - - /** Field description */ - private static final long serialVersionUID = 2560311805598995047L; - - //~--- constructors --------------------------------------------------------- - - /** - * Constructs a new UserNotFoundException. - * - */ - public UserNotFoundException(User user) { - super("user " + user.getName() + " does not exist"); - } -} diff --git a/scm-core/src/main/java/sonia/scm/util/HttpUtil.java b/scm-core/src/main/java/sonia/scm/util/HttpUtil.java index 30995a0b3c..bc3f4e74cd 100644 --- a/scm-core/src/main/java/sonia/scm/util/HttpUtil.java +++ b/scm-core/src/main/java/sonia/scm/util/HttpUtil.java @@ -37,7 +37,7 @@ package sonia.scm.util; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.CharMatcher; -import com.google.common.base.Objects; +import com.google.common.base.MoreObjects; import com.google.common.base.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -700,7 +700,7 @@ public final class HttpUtil { String value = request.getHeader(header); - return Objects.firstNonNull(value, defaultValue); + return MoreObjects.firstNonNull(value, defaultValue); } /** diff --git a/scm-core/src/main/java/sonia/scm/version/Version.java b/scm-core/src/main/java/sonia/scm/version/Version.java index 96f7a9ff07..cdc1a222c0 100644 --- a/scm-core/src/main/java/sonia/scm/version/Version.java +++ b/scm-core/src/main/java/sonia/scm/version/Version.java @@ -39,10 +39,10 @@ import com.google.common.base.Objects; import com.google.common.base.Preconditions; import com.google.common.collect.ComparisonChain; -//~--- JDK imports ------------------------------------------------------------ - import java.util.Locale; +//~--- JDK imports ------------------------------------------------------------ + /** * Version object for comparing and parsing versions. * diff --git a/scm-core/src/main/java/sonia/scm/web/UserAgent.java b/scm-core/src/main/java/sonia/scm/web/UserAgent.java index 7efd1bd1c2..e501ac8bdf 100644 --- a/scm-core/src/main/java/sonia/scm/web/UserAgent.java +++ b/scm-core/src/main/java/sonia/scm/web/UserAgent.java @@ -36,14 +36,15 @@ package sonia.scm.web; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.base.Charsets; +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -import static com.google.common.base.Preconditions.*; +import java.nio.charset.Charset; + +import static com.google.common.base.Preconditions.checkNotNull; //~--- JDK imports ------------------------------------------------------------ -import java.nio.charset.Charset; - /** * The software agent that is acting on behalf of a user. The user agent * represents a browser or one of the repository client (svn, git or hg). @@ -124,7 +125,7 @@ public final class UserAgent public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("name", name) .add("browser", browser) .add("basicAuthenticationCharset", basicAuthenticationCharset) diff --git a/scm-core/src/main/java/sonia/scm/web/proxy/ProxyConfiguration.java b/scm-core/src/main/java/sonia/scm/web/proxy/ProxyConfiguration.java index 71e39e13dd..bc30142052 100644 --- a/scm-core/src/main/java/sonia/scm/web/proxy/ProxyConfiguration.java +++ b/scm-core/src/main/java/sonia/scm/web/proxy/ProxyConfiguration.java @@ -34,20 +34,19 @@ package sonia.scm.web.proxy; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - -import java.net.URL; - -import java.util.Collections; -import java.util.Set; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; +import java.net.URL; +import java.util.Collections; +import java.util.Set; + +//~--- JDK imports ------------------------------------------------------------ /** * @@ -144,7 +143,7 @@ public class ProxyConfiguration public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("url", url) .add("copyRequestHeaders", copyRequestHeaders) .add("requestHeaderExcludes", requestHeaderExcludes) diff --git a/scm-core/src/test/java/sonia/scm/io/DeepCopyTest.java b/scm-core/src/test/java/sonia/scm/io/DeepCopyTest.java index 31a6185182..0f42e87b0c 100644 --- a/scm-core/src/test/java/sonia/scm/io/DeepCopyTest.java +++ b/scm-core/src/test/java/sonia/scm/io/DeepCopyTest.java @@ -34,16 +34,16 @@ package sonia.scm.io; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.base.Objects; - import org.junit.Test; -import static org.junit.Assert.*; - -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; import java.io.Serializable; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotSame; + +//~--- JDK imports ------------------------------------------------------------ + /** * Unit tests for {@link DeepCopy}. * diff --git a/scm-core/src/test/java/sonia/scm/security/SyncingRealmHelperTest.java b/scm-core/src/test/java/sonia/scm/security/SyncingRealmHelperTest.java index 3679a1870b..27ca923902 100644 --- a/scm-core/src/test/java/sonia/scm/security/SyncingRealmHelperTest.java +++ b/scm-core/src/test/java/sonia/scm/security/SyncingRealmHelperTest.java @@ -36,37 +36,35 @@ package sonia.scm.security; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.base.Throwables; - -import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; - import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; - +import sonia.scm.AlreadyExistsException; +import sonia.scm.NotFoundException; import sonia.scm.group.Group; -import sonia.scm.group.GroupException; import sonia.scm.group.GroupManager; import sonia.scm.group.GroupNames; import sonia.scm.user.User; -import sonia.scm.user.UserException; import sonia.scm.user.UserManager; import sonia.scm.web.security.AdministrationContext; import sonia.scm.web.security.PrivilegedAction; -import static org.hamcrest.Matchers.*; +import java.io.IOException; -import static org.junit.Assert.*; - -import static org.mockito.Mockito.*; +import static org.hamcrest.Matchers.hasItem; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; //~--- JDK imports ------------------------------------------------------------ -import java.io.IOException; - /** * Unit tests for {@link SyncingRealmHelper}. * @@ -131,11 +129,10 @@ public class SyncingRealmHelperTest { /** * Tests {@link SyncingRealmHelper#store(Group)}. * - * @throws GroupException * @throws IOException */ @Test - public void testStoreGroupCreate() throws GroupException, IOException { + public void testStoreGroupCreate() throws AlreadyExistsException { Group group = new Group("unit-test", "heartOfGold"); helper.store(group); @@ -143,27 +140,21 @@ public class SyncingRealmHelperTest { } /** - * Tests {@link SyncingRealmHelper#store(Group)} with thrown {@link GroupException}. - * - * @throws GroupException - * @throws IOException + * Tests {@link SyncingRealmHelper#store(Group)}. */ - @Test(expected = AuthenticationException.class) - public void testStoreGroupFailure() throws GroupException, IOException { + @Test(expected = IllegalStateException.class) + public void testStoreGroupFailure() throws AlreadyExistsException { Group group = new Group("unit-test", "heartOfGold"); - doThrow(GroupException.class).when(groupManager).create(group); + doThrow(AlreadyExistsException.class).when(groupManager).create(group); helper.store(group); } /** * Tests {@link SyncingRealmHelper#store(Group)} with an existing group. - * - * @throws GroupException - * @throws IOException */ @Test - public void testStoreGroupModify() throws GroupException, IOException { + public void testStoreGroupModify() throws NotFoundException { Group group = new Group("unit-test", "heartOfGold"); when(groupManager.get("heartOfGold")).thenReturn(group); @@ -175,11 +166,10 @@ public class SyncingRealmHelperTest { /** * Tests {@link SyncingRealmHelper#store(User)}. * - * @throws UserException * @throws IOException */ @Test - public void testStoreUserCreate() throws UserException, IOException { + public void testStoreUserCreate() throws AlreadyExistsException { User user = new User("tricia"); helper.store(user); @@ -187,27 +177,21 @@ public class SyncingRealmHelperTest { } /** - * Tests {@link SyncingRealmHelper#store(User)} with a thrown {@link UserException}. - * - * @throws UserException - * @throws IOException + * Tests {@link SyncingRealmHelper#store(User)} with a thrown {@link AlreadyExistsException}. */ - @Test(expected = AuthenticationException.class) - public void testStoreUserFailure() throws UserException, IOException { + @Test(expected = IllegalStateException.class) + public void testStoreUserFailure() throws AlreadyExistsException { User user = new User("tricia"); - doThrow(UserException.class).when(userManager).create(user); + doThrow(AlreadyExistsException.class).when(userManager).create(user); helper.store(user); } /** * Tests {@link SyncingRealmHelper#store(User)} with an existing user. - * - * @throws UserException - * @throws IOException */ @Test - public void testStoreUserModify() throws UserException, IOException { + public void testStoreUserModify() throws NotFoundException { when(userManager.contains("tricia")).thenReturn(Boolean.TRUE); User user = new User("tricia"); diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHandler.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHandler.java index 87f96f850f..c3436c2395 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHandler.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHandler.java @@ -38,25 +38,21 @@ package sonia.scm.repository; import com.google.common.base.Strings; import com.google.inject.Inject; import com.google.inject.Singleton; - import org.eclipse.jgit.storage.file.FileRepositoryBuilder; - +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import sonia.scm.SCMContextProvider; import sonia.scm.io.FileSystem; import sonia.scm.plugin.Extension; import sonia.scm.repository.spi.GitRepositoryServiceProvider; - -//~--- JDK imports ------------------------------------------------------------ +import sonia.scm.schedule.Scheduler; +import sonia.scm.schedule.Task; +import sonia.scm.store.ConfigurationStoreFactory; import java.io.File; import java.io.IOException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import sonia.scm.SCMContextProvider; -import sonia.scm.schedule.Scheduler; -import sonia.scm.schedule.Task; -import sonia.scm.store.ConfigurationStoreFactory; +//~--- JDK imports ------------------------------------------------------------ /** * @@ -185,20 +181,8 @@ public class GitRepositoryHandler //~--- methods -------------------------------------------------------------- - /** - * Method description - * - * - * @param repository - * @param directory - * - * @throws IOException - * @throws RepositoryException - */ @Override - protected void create(Repository repository, File directory) - throws RepositoryException, IOException - { + protected void create(Repository repository, File directory) throws IOException { try (org.eclipse.jgit.lib.Repository gitRepository = build(directory)) { gitRepository.create(true); } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitUtil.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitUtil.java index 1538269ee1..7e145f2dd9 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitUtil.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitUtil.java @@ -39,7 +39,6 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; - import org.eclipse.jgit.api.FetchCommand; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; @@ -54,23 +53,19 @@ import org.eclipse.jgit.transport.FetchResult; import org.eclipse.jgit.transport.RefSpec; import org.eclipse.jgit.treewalk.TreeWalk; import org.eclipse.jgit.util.FS; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.util.HttpUtil; import sonia.scm.util.Util; +import sonia.scm.web.GitUserAgentProvider; -//~--- JDK imports ------------------------------------------------------------ - +import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; - import java.util.Map; import java.util.concurrent.TimeUnit; -import javax.servlet.http.HttpServletRequest; -import sonia.scm.web.GitUserAgentProvider; +//~--- JDK imports ------------------------------------------------------------ /** * @@ -192,22 +187,7 @@ public final class GitUtil return tags; } - /** - * Method description - * - * - * @param git - * @param directory - * @param remoteRepository - * - * @return - * - * @throws RepositoryException - */ - public static FetchResult fetch(Git git, File directory, - Repository remoteRepository) - throws RepositoryException - { + public static FetchResult fetch(Git git, File directory, Repository remoteRepository) { try { FetchCommand fetch = git.fetch(); @@ -220,7 +200,7 @@ public final class GitUtil } catch (GitAPIException ex) { - throw new RepositoryException("could not fetch", ex); + throw new InternalRepositoryException("could not fetch", ex); } } @@ -294,7 +274,7 @@ public final class GitUtil { if (walk != null) { - walk.close();; + walk.close(); } } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitIncomingOutgoingCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitIncomingOutgoingCommand.java index aed1917110..e90a1c11ed 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitIncomingOutgoingCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitIncomingOutgoingCommand.java @@ -36,28 +36,25 @@ package sonia.scm.repository.spi; import com.google.common.collect.Lists; import com.google.common.io.Closeables; - import org.eclipse.jgit.api.Git; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; - import sonia.scm.repository.Changeset; import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.GitChangesetConverter; import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.GitUtil; +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; - -//~--- JDK imports ------------------------------------------------------------ import java.io.IOException; - import java.util.List; import java.util.Map.Entry; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -117,21 +114,7 @@ public abstract class AbstractGitIncomingOutgoingCommand //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ - protected ChangesetPagingResult getIncomingOrOutgoingChangesets( - PagedRemoteCommandRequest request) - throws IOException, RepositoryException - { + protected ChangesetPagingResult getIncomingOrOutgoingChangesets(PagedRemoteCommandRequest request) throws IOException { Repository remoteRepository = request.getRemoteRepository(); Git git = Git.wrap(open()); @@ -141,8 +124,7 @@ public abstract class AbstractGitIncomingOutgoingCommand ObjectId localId = getDefaultBranch(git.getRepository()); ObjectId remoteId = null; - Ref remoteBranch = getRemoteBranch(git.getRepository(), localId, - remoteRepository); + Ref remoteBranch = getRemoteBranch(git.getRepository(), localId, remoteRepository); if (remoteBranch != null) { @@ -178,7 +160,7 @@ public abstract class AbstractGitIncomingOutgoingCommand } catch (Exception ex) { - throw new RepositoryException("could not execute incoming command", ex); + throw new InternalRepositoryException("could not execute incoming command", ex); } finally { @@ -191,23 +173,7 @@ public abstract class AbstractGitIncomingOutgoingCommand return new ChangesetPagingResult(changesets.size(), changesets); } - /** - * Method description - * - * - * @param repository - * @param local - * @param remoteRepository - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ - private Ref getRemoteBranch(org.eclipse.jgit.lib.Repository repository, - ObjectId local, Repository remoteRepository) - throws IOException, RepositoryException - { + private Ref getRemoteBranch(org.eclipse.jgit.lib.Repository repository, ObjectId local, Repository remoteRepository) throws IOException { Ref ref = null; if (local != null) @@ -236,7 +202,7 @@ public abstract class AbstractGitIncomingOutgoingCommand { if (ref != null) { - throw new RepositoryException("could not find remote branch"); + throw new InternalRepositoryException("could not find remote branch"); } ref = e.getValue(); diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitPushOrPullCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitPushOrPullCommand.java index 764dde47f3..75050c26ea 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitPushOrPullCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitPushOrPullCommand.java @@ -37,28 +37,23 @@ package sonia.scm.repository.spi; import com.google.common.base.Preconditions; import com.google.common.collect.Iterables; - import org.eclipse.jgit.api.Git; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.transport.PushResult; import org.eclipse.jgit.transport.RemoteRefUpdate; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.GitUtil; -import sonia.scm.repository.RepositoryException; - -//~--- JDK imports ------------------------------------------------------------ +import sonia.scm.repository.InternalRepositoryException; import java.io.File; -import java.io.IOException; - import java.util.Collection; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -94,20 +89,7 @@ public abstract class AbstractGitPushOrPullCommand extends AbstractGitCommand //~--- methods -------------------------------------------------------------- - /** - * Method description - * - * @param source - * @param remoteUrl - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ - protected long push(Repository source, String remoteUrl) - throws IOException, RepositoryException - { + protected long push(Repository source, String remoteUrl) { Git git = Git.wrap(source); org.eclipse.jgit.api.PushCommand push = git.push(); @@ -132,7 +114,7 @@ public abstract class AbstractGitPushOrPullCommand extends AbstractGitCommand } catch (Exception ex) { - throw new RepositoryException("could not execute push/pull command", ex); + throw new InternalRepositoryException("could not execute push/pull command", ex); } return counter; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBlameCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBlameCommand.java index c797fd70eb..f50f245963 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBlameCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBlameCommand.java @@ -37,30 +37,26 @@ package sonia.scm.repository.spi; import com.google.common.base.Preconditions; import com.google.common.base.Strings; - import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.revwalk.RevCommit; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.repository.BlameLine; import sonia.scm.repository.BlameResult; import sonia.scm.repository.GitUtil; +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Person; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; - -//~--- JDK imports ------------------------------------------------------------ import java.io.IOException; - import java.util.ArrayList; import java.util.List; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -76,15 +72,6 @@ public class GitBlameCommand extends AbstractGitCommand implements BlameCommand //~--- constructors --------------------------------------------------------- - /** - * Constructs ... - * - * - * - * @param context - * @param repository - * @param repositoryDirectory - */ public GitBlameCommand(GitContext context, Repository repository) { super(context, repository); @@ -92,20 +79,9 @@ public class GitBlameCommand extends AbstractGitCommand implements BlameCommand //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override public BlameResult getBlameResult(BlameCommandRequest request) - throws IOException, RepositoryException + throws IOException { if (logger.isDebugEnabled()) { @@ -132,7 +108,7 @@ public class GitBlameCommand extends AbstractGitCommand implements BlameCommand if (gitBlameResult == null) { - throw new RepositoryException( + throw new InternalRepositoryException( "could not create blame result for path ".concat( request.getPath())); } @@ -174,7 +150,7 @@ public class GitBlameCommand extends AbstractGitCommand implements BlameCommand } catch (GitAPIException ex) { - throw new RepositoryException("could not create blame view", ex); + throw new InternalRepositoryException("could not create blame view", ex); } return result; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchesCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchesCommand.java index df32c2b5eb..0cc47100de 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchesCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchesCommand.java @@ -36,22 +36,19 @@ package sonia.scm.repository.spi; import com.google.common.base.Function; import com.google.common.collect.Lists; - import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.Ref; - import sonia.scm.repository.Branch; import sonia.scm.repository.GitUtil; +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; - -//~--- JDK imports ------------------------------------------------------------ import java.io.IOException; - import java.util.List; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -74,18 +71,8 @@ public class GitBranchesCommand extends AbstractGitCommand //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override - public List getBranches() throws RepositoryException, IOException - { + public List getBranches() throws IOException { List branches = null; Git git = new Git(open()); @@ -115,7 +102,7 @@ public class GitBranchesCommand extends AbstractGitCommand } catch (GitAPIException ex) { - throw new RepositoryException("could not read branches", ex); + throw new InternalRepositoryException("could not read branches", ex); } return branches; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBrowseCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBrowseCommand.java index 72ec3f73e7..f194796bdc 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBrowseCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBrowseCommand.java @@ -37,7 +37,6 @@ package sonia.scm.repository.spi; import com.google.common.collect.Lists; import com.google.common.collect.Maps; - import org.eclipse.jgit.errors.MissingObjectException; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.ObjectId; @@ -49,29 +48,25 @@ import org.eclipse.jgit.treewalk.TreeWalk; import org.eclipse.jgit.treewalk.filter.AndTreeFilter; import org.eclipse.jgit.treewalk.filter.PathFilter; import org.eclipse.jgit.treewalk.filter.TreeFilter; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.repository.BrowserResult; import sonia.scm.repository.FileObject; import sonia.scm.repository.GitSubModuleParser; import sonia.scm.repository.GitUtil; import sonia.scm.repository.PathNotFoundException; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; +import sonia.scm.repository.RevisionNotFoundException; import sonia.scm.repository.SubRepository; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - import java.io.ByteArrayOutputStream; import java.io.IOException; - import java.util.Collections; import java.util.List; import java.util.Map; -import sonia.scm.util.IOUtil; + +//~--- JDK imports ------------------------------------------------------------ /** * @@ -105,22 +100,10 @@ public class GitBrowseCommand extends AbstractGitCommand //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override @SuppressWarnings("unchecked") public BrowserResult getBrowserResult(BrowseCommandRequest request) - throws IOException, RepositoryException - { + throws IOException, RevisionNotFoundException { logger.debug("try to create browse result for {}", request); BrowserResult result; @@ -174,8 +157,7 @@ public class GitBrowseCommand extends AbstractGitCommand */ private FileObject createFileObject(org.eclipse.jgit.lib.Repository repo, BrowseCommandRequest request, ObjectId revId, TreeWalk treeWalk) - throws IOException, RepositoryException - { + throws IOException, RevisionNotFoundException { FileObject file; try @@ -283,24 +265,9 @@ public class GitBrowseCommand extends AbstractGitCommand return result; } - /** - * Method description - * - * - * @param repo - * @param request - * @param revId - * @param path - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ private BrowserResult getResult(org.eclipse.jgit.lib.Repository repo, BrowseCommandRequest request, ObjectId revId) - throws IOException, RepositoryException - { + throws IOException, RevisionNotFoundException { BrowserResult result = null; RevWalk revWalk = null; TreeWalk treeWalk = null; @@ -393,24 +360,11 @@ public class GitBrowseCommand extends AbstractGitCommand return result; } - /** - * Method description - * - * - * @param repo - * @param revision - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @SuppressWarnings("unchecked") private Map getSubRepositories(org.eclipse.jgit.lib.Repository repo, ObjectId revision) - throws IOException, RepositoryException - { + throws IOException, RevisionNotFoundException { if (logger.isDebugEnabled()) { logger.debug("read submodules of {} at {}", repository.getName(), @@ -435,8 +389,7 @@ public class GitBrowseCommand extends AbstractGitCommand private SubRepository getSubRepository(org.eclipse.jgit.lib.Repository repo, ObjectId revId, String path) - throws IOException, RepositoryException - { + throws IOException, RevisionNotFoundException { Map subRepositories = subrepositoryCache.get(revId); if (subRepositories == null) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitCatCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitCatCommand.java index c451dd8614..4b05098d03 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitCatCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitCatCommand.java @@ -46,7 +46,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.GitUtil; import sonia.scm.repository.PathNotFoundException; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RevisionNotFoundException; import sonia.scm.util.Util; @@ -66,7 +65,7 @@ public class GitCatCommand extends AbstractGitCommand implements CatCommand { } @Override - public void getCatResult(CatCommandRequest request, OutputStream output) throws IOException, RepositoryException { + public void getCatResult(CatCommandRequest request, OutputStream output) throws IOException, PathNotFoundException, RevisionNotFoundException { logger.debug("try to read content for {}", request); try (ClosableObjectLoaderContainer closableObjectLoaderContainer = getLoader(request)) { closableObjectLoaderContainer.objectLoader.copyTo(output); @@ -74,24 +73,24 @@ public class GitCatCommand extends AbstractGitCommand implements CatCommand { } @Override - public InputStream getCatResultStream(CatCommandRequest request) throws IOException, RepositoryException { + public InputStream getCatResultStream(CatCommandRequest request) throws IOException, PathNotFoundException, RevisionNotFoundException { logger.debug("try to read content for {}", request); return new InputStreamWrapper(getLoader(request)); } - void getContent(org.eclipse.jgit.lib.Repository repo, ObjectId revId, String path, OutputStream output) throws IOException, RepositoryException { + void getContent(org.eclipse.jgit.lib.Repository repo, ObjectId revId, String path, OutputStream output) throws IOException, PathNotFoundException, RevisionNotFoundException { try (ClosableObjectLoaderContainer closableObjectLoaderContainer = getLoader(repo, revId, path)) { closableObjectLoaderContainer.objectLoader.copyTo(output); } } - private ClosableObjectLoaderContainer getLoader(CatCommandRequest request) throws IOException, RepositoryException { + private ClosableObjectLoaderContainer getLoader(CatCommandRequest request) throws IOException, PathNotFoundException, RevisionNotFoundException { org.eclipse.jgit.lib.Repository repo = open(); ObjectId revId = getCommitOrDefault(repo, request.getRevision()); return getLoader(repo, revId, request.getPath()); } - private ClosableObjectLoaderContainer getLoader(Repository repo, ObjectId revId, String path) throws IOException, RepositoryException { + private ClosableObjectLoaderContainer getLoader(Repository repo, ObjectId revId, String path) throws IOException, PathNotFoundException, RevisionNotFoundException { TreeWalk treeWalk = new TreeWalk(repo); treeWalk.setRecursive(Util.nonNull(path).contains("/")); diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitIncomingCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitIncomingCommand.java index 9bd982a909..a1c1a7e652 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitIncomingCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitIncomingCommand.java @@ -36,16 +36,14 @@ package sonia.scm.repository.spi; import org.eclipse.jgit.api.LogCommand; import org.eclipse.jgit.lib.ObjectId; - import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; - -//~--- JDK imports ------------------------------------------------------------ import java.io.IOException; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -70,22 +68,8 @@ public class GitIncomingCommand extends AbstractGitIncomingOutgoingCommand //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override - public ChangesetPagingResult getIncomingChangesets( - IncomingCommandRequest request) - throws IOException, RepositoryException - { + public ChangesetPagingResult getIncomingChangesets(IncomingCommandRequest request) throws IOException { return getIncomingOrOutgoingChangesets(request); } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLogCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLogCommand.java index 0643035e7a..52625ff6c4 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLogCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLogCommand.java @@ -37,7 +37,6 @@ package sonia.scm.repository.spi; import com.google.common.base.Strings; import com.google.common.collect.Lists; - import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; @@ -45,25 +44,22 @@ import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.treewalk.filter.AndTreeFilter; import org.eclipse.jgit.treewalk.filter.PathFilter; import org.eclipse.jgit.treewalk.filter.TreeFilter; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.repository.Changeset; import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.GitChangesetConverter; import sonia.scm.repository.GitUtil; -import sonia.scm.repository.RepositoryException; +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.util.IOUtil; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; - import java.util.Collections; import java.util.Iterator; import java.util.List; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -165,7 +161,7 @@ public class GitLogCommand extends AbstractGitCommand implements LogCommand @Override @SuppressWarnings("unchecked") public ChangesetPagingResult getChangesets(LogCommandRequest request) - throws IOException, RepositoryException + throws IOException { if (logger.isDebugEnabled()) { @@ -268,7 +264,7 @@ public class GitLogCommand extends AbstractGitCommand implements LogCommand } catch (Exception ex) { - throw new RepositoryException("could not create change log", ex); + throw new InternalRepositoryException("could not create change log", ex); } finally { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitOutgoingCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitOutgoingCommand.java index 7b40a60a08..2a1f805cf6 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitOutgoingCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitOutgoingCommand.java @@ -36,16 +36,14 @@ package sonia.scm.repository.spi; import org.eclipse.jgit.api.LogCommand; import org.eclipse.jgit.lib.ObjectId; - import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; - -//~--- JDK imports ------------------------------------------------------------ import java.io.IOException; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -84,7 +82,7 @@ public class GitOutgoingCommand extends AbstractGitIncomingOutgoingCommand @Override public ChangesetPagingResult getOutgoingChangesets( OutgoingCommandRequest request) - throws IOException, RepositoryException + throws IOException { return getIncomingOrOutgoingChangesets(request); } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPullCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPullCommand.java index ec0f468a57..a7b341ff5d 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPullCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPullCommand.java @@ -37,7 +37,6 @@ package sonia.scm.repository.spi; import com.google.common.base.Preconditions; import com.google.common.collect.Iterables; - import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.ObjectId; @@ -46,23 +45,20 @@ import org.eclipse.jgit.transport.FetchResult; import org.eclipse.jgit.transport.RefSpec; import org.eclipse.jgit.transport.TagOpt; import org.eclipse.jgit.transport.TrackingRefUpdate; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.GitUtil; +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.api.PullResponse; -//~--- JDK imports ------------------------------------------------------------ - import java.io.File; import java.io.IOException; - import java.net.URL; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -109,7 +105,7 @@ public class GitPullCommand extends AbstractGitPushOrPullCommand */ @Override public PullResponse pull(PullCommandRequest request) - throws IOException, RepositoryException + throws IOException { PullResponse response; Repository sourceRepository = request.getRemoteRepository(); @@ -130,21 +126,7 @@ public class GitPullCommand extends AbstractGitPushOrPullCommand return response; } - /** - * Method description - * - * - * @param git - * @param result - * @param fetch - * - * @return - * - * @throws RepositoryException - */ - private PullResponse convert(Git git, FetchResult fetch) - throws RepositoryException - { + private PullResponse convert(Git git, FetchResult fetch) { long counter = 0l; for (TrackingRefUpdate tru : fetch.getTrackingRefUpdates()) @@ -212,19 +194,8 @@ public class GitPullCommand extends AbstractGitPushOrPullCommand return counter; } - /** - * Method description - * - * - * @param sourceRepository - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ private PullResponse pullFromScmRepository(Repository sourceRepository) - throws IOException, RepositoryException + throws IOException { File sourceDirectory = handler.getDirectory(sourceRepository); @@ -256,19 +227,8 @@ public class GitPullCommand extends AbstractGitPushOrPullCommand return response; } - /** - * Method description - * - * - * @param url - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ private PullResponse pullFromUrl(URL url) - throws IOException, RepositoryException + throws IOException { logger.debug("pull changes from {} to {}", url, repository.getId()); @@ -289,7 +249,7 @@ public class GitPullCommand extends AbstractGitPushOrPullCommand } catch (GitAPIException ex) { - throw new RepositoryException("error durring pull", ex); + throw new InternalRepositoryException("error durring pull", ex); } return response; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPushCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPushCommand.java index c64465194a..193d68d7a5 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPushCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPushCommand.java @@ -37,16 +37,14 @@ package sonia.scm.repository.spi; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.api.PushResponse; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -91,7 +89,7 @@ public class GitPushCommand extends AbstractGitPushOrPullCommand */ @Override public PushResponse push(PushCommandRequest request) - throws IOException, RepositoryException + throws IOException { String remoteUrl = getRemoteUrl(request); diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitTagsCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitTagsCommand.java index 14583ac7dc..02fee3cef0 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitTagsCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitTagsCommand.java @@ -37,27 +37,23 @@ package sonia.scm.repository.spi; import com.google.common.base.Function; import com.google.common.collect.Lists; - import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.repository.GitUtil; +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.Tag; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; - import java.util.List; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -79,17 +75,8 @@ public class GitTagsCommand extends AbstractGitCommand implements TagsCommand //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override - public List getTags() throws IOException, RepositoryException + public List getTags() throws IOException { List tags = null; @@ -108,7 +95,7 @@ public class GitTagsCommand extends AbstractGitCommand implements TagsCommand } catch (GitAPIException ex) { - throw new RepositoryException("could not read tags from repository", ex); + throw new InternalRepositoryException("could not read tags from repository", ex); } finally { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitRepositoryViewer.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitRepositoryViewer.java index f8fa5c8200..162e3db489 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitRepositoryViewer.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitRepositoryViewer.java @@ -40,17 +40,14 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.google.common.io.Closeables; import com.google.inject.Inject; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.repository.Branch; import sonia.scm.repository.Branches; import sonia.scm.repository.Changeset; import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.Person; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.template.Template; @@ -60,16 +57,14 @@ import sonia.scm.util.HttpUtil; import sonia.scm.util.IOUtil; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.Writer; - import java.util.Date; import java.util.Iterator; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +//~--- JDK imports ------------------------------------------------------------ /** * @@ -113,21 +108,9 @@ public class GitRepositoryViewer //~--- methods -------------------------------------------------------------- - /** - * Method description - * - * - * - * @param request - * @param response - * @param repository - * - * @throws IOException - * @throws RepositoryException - */ public void handleRequest(HttpServletRequest request, HttpServletResponse response, Repository repository) - throws RepositoryException, IOException + throws IOException { String baseUrl = HttpUtil.getCompleteUrl(request); @@ -171,7 +154,7 @@ public class GitRepositoryViewer * @throws RepositoryException */ private BranchesModel createBranchesModel(Repository repository) - throws RepositoryException, IOException + throws IOException { BranchesModel model = null; RepositoryService service = null; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServlet.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServlet.java index ebf4173ad5..5612a64652 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServlet.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServlet.java @@ -42,7 +42,6 @@ import org.eclipse.jgit.http.server.GitServlet; import org.eclipse.jgit.lfs.lib.Constants; import org.slf4j.Logger; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RepositoryProvider; import sonia.scm.repository.RepositoryRequestListenerUtil; import sonia.scm.util.HttpUtil; @@ -214,7 +213,7 @@ public class ScmGitServlet extends GitServlet private void handleBrowserRequest(HttpServletRequest request, HttpServletResponse response, Repository repository) throws ServletException, IOException { try { repositoryViewer.handleRequest(request, response, repository); - } catch (RepositoryException | IOException ex) { + } catch (IOException ex) { throw new ServletException("could not create repository view", ex); } } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBlameCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBlameCommandTest.java index d049447d7f..d0fd627046 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBlameCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBlameCommandTest.java @@ -35,17 +35,16 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import org.junit.Test; - import sonia.scm.repository.BlameLine; import sonia.scm.repository.BlameResult; -import sonia.scm.repository.RepositoryException; - -import static org.junit.Assert.*; - -//~--- JDK imports ------------------------------------------------------------ +import sonia.scm.repository.GitConstants; import java.io.IOException; -import sonia.scm.repository.GitConstants; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +//~--- JDK imports ------------------------------------------------------------ /** * Unit tests for {@link GitBlameCommand}. @@ -59,10 +58,10 @@ public class GitBlameCommandTest extends AbstractGitCommandTestBase * Tests blame command with default branch. * * @throws IOException - * @throws RepositoryException + * @ */ @Test - public void testDefaultBranch() throws IOException, RepositoryException { + public void testDefaultBranch() throws IOException { // without default branch, the repository head should be used BlameCommandRequest request = new BlameCommandRequest(); request.setPath("a.txt"); @@ -89,7 +88,7 @@ public class GitBlameCommandTest extends AbstractGitCommandTestBase * @throws RepositoryException */ @Test - public void testGetBlameResult() throws IOException, RepositoryException + public void testGetBlameResult() throws IOException { BlameCommandRequest request = new BlameCommandRequest(); @@ -124,7 +123,7 @@ public class GitBlameCommandTest extends AbstractGitCommandTestBase */ @Test public void testGetBlameResultWithRevision() - throws IOException, RepositoryException + throws IOException { BlameCommandRequest request = new BlameCommandRequest(); diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBrowseCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBrowseCommandTest.java index 727034b9ca..d71c85a152 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBrowseCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBrowseCommandTest.java @@ -36,19 +36,20 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import org.junit.Test; - import sonia.scm.repository.BrowserResult; import sonia.scm.repository.FileObject; -import sonia.scm.repository.RepositoryException; - -import static org.junit.Assert.*; - -//~--- JDK imports ------------------------------------------------------------ +import sonia.scm.repository.GitConstants; +import sonia.scm.repository.RevisionNotFoundException; import java.io.IOException; - import java.util.List; -import sonia.scm.repository.GitConstants; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +//~--- JDK imports ------------------------------------------------------------ /** * Unit tests for {@link GitBrowseCommand}. @@ -60,12 +61,9 @@ public class GitBrowseCommandTest extends AbstractGitCommandTestBase /** * Test browse command with default branch. - * - * @throws IOException - * @throws RepositoryException */ @Test - public void testDefaultBranch() throws IOException, RepositoryException { + public void testDefaultBranch() throws IOException, RevisionNotFoundException { // without default branch, the repository head should be used BrowserResult result = createCommand().getBrowserResult(new BrowseCommandRequest()); assertNotNull(result); @@ -94,16 +92,8 @@ public class GitBrowseCommandTest extends AbstractGitCommandTestBase assertEquals("c", foList.get(1).getName()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testBrowse() throws IOException, RepositoryException - { + public void testBrowse() throws IOException, RevisionNotFoundException { BrowserResult result = createCommand().getBrowserResult(new BrowseCommandRequest()); @@ -143,16 +133,8 @@ public class GitBrowseCommandTest extends AbstractGitCommandTestBase assertEquals("c", c.getPath()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testBrowseSubDirectory() throws IOException, RepositoryException - { + public void testBrowseSubDirectory() throws IOException, RevisionNotFoundException { BrowseCommandRequest request = new BrowseCommandRequest(); request.setPath("c"); @@ -198,16 +180,8 @@ public class GitBrowseCommandTest extends AbstractGitCommandTestBase checkDate(e.getLastModified()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testRecusive() throws IOException, RepositoryException - { + public void testRecusive() throws IOException, RevisionNotFoundException { BrowseCommandRequest request = new BrowseCommandRequest(); request.setRecursive(true); diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitCatCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitCatCommandTest.java index c23db0873b..3611c9c636 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitCatCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitCatCommandTest.java @@ -35,7 +35,6 @@ package sonia.scm.repository.spi; import org.junit.Test; import sonia.scm.repository.GitConstants; import sonia.scm.repository.PathNotFoundException; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RevisionNotFoundException; import java.io.ByteArrayOutputStream; @@ -54,7 +53,7 @@ import static org.junit.Assert.assertEquals; public class GitCatCommandTest extends AbstractGitCommandTestBase { @Test - public void testDefaultBranch() throws IOException, RepositoryException { + public void testDefaultBranch() throws IOException, PathNotFoundException, RevisionNotFoundException { // without default branch, the repository head should be used CatCommandRequest request = new CatCommandRequest(); request.setPath("a.txt"); @@ -67,7 +66,7 @@ public class GitCatCommandTest extends AbstractGitCommandTestBase { } @Test - public void testCat() throws IOException, RepositoryException { + public void testCat() throws IOException, PathNotFoundException, RevisionNotFoundException { CatCommandRequest request = new CatCommandRequest(); request.setPath("a.txt"); @@ -76,7 +75,7 @@ public class GitCatCommandTest extends AbstractGitCommandTestBase { } @Test - public void testSimpleCat() throws IOException, RepositoryException { + public void testSimpleCat() throws IOException, PathNotFoundException, RevisionNotFoundException { CatCommandRequest request = new CatCommandRequest(); request.setPath("b.txt"); @@ -84,7 +83,7 @@ public class GitCatCommandTest extends AbstractGitCommandTestBase { } @Test(expected = PathNotFoundException.class) - public void testUnknownFile() throws IOException, RepositoryException { + public void testUnknownFile() throws IOException, PathNotFoundException, RevisionNotFoundException { CatCommandRequest request = new CatCommandRequest(); request.setPath("unknown"); @@ -92,7 +91,7 @@ public class GitCatCommandTest extends AbstractGitCommandTestBase { } @Test(expected = RevisionNotFoundException.class) - public void testUnknownRevision() throws IOException, RepositoryException { + public void testUnknownRevision() throws IOException, PathNotFoundException, RevisionNotFoundException { CatCommandRequest request = new CatCommandRequest(); request.setRevision("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); @@ -101,7 +100,7 @@ public class GitCatCommandTest extends AbstractGitCommandTestBase { } @Test - public void testSimpleStream() throws IOException, RepositoryException { + public void testSimpleStream() throws IOException, PathNotFoundException, RevisionNotFoundException { CatCommandRequest request = new CatCommandRequest(); request.setPath("b.txt"); @@ -114,7 +113,7 @@ public class GitCatCommandTest extends AbstractGitCommandTestBase { catResultStream.close(); } - private String execute(CatCommandRequest request) throws IOException, RepositoryException { + private String execute(CatCommandRequest request) throws IOException, PathNotFoundException, RevisionNotFoundException { String content = null; ByteArrayOutputStream baos = new ByteArrayOutputStream(); diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitIncomingCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitIncomingCommandTest.java index 7cfe33f858..6aa852b12c 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitIncomingCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitIncomingCommandTest.java @@ -36,18 +36,16 @@ package sonia.scm.repository.spi; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.revwalk.RevCommit; - +import org.junit.Ignore; import org.junit.Test; - import sonia.scm.repository.ChangesetPagingResult; -import sonia.scm.repository.RepositoryException; - -import static org.junit.Assert.*; - -//~--- JDK imports ------------------------------------------------------------ import java.io.IOException; -import org.junit.Ignore; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +//~--- JDK imports ------------------------------------------------------------ /** * @@ -67,7 +65,7 @@ public class GitIncomingCommandTest */ @Test public void testGetIncomingChangesets() - throws IOException, GitAPIException, RepositoryException + throws IOException, GitAPIException { write(outgoing, outgoingDirectory, "a.txt", "content of a.txt"); @@ -101,7 +99,7 @@ public class GitIncomingCommandTest */ @Test public void testGetIncomingChangesetsWithAllreadyPullChangesets() - throws IOException, GitAPIException, RepositoryException + throws IOException, GitAPIException { write(outgoing, outgoingDirectory, "a.txt", "content of a.txt"); @@ -138,7 +136,7 @@ public class GitIncomingCommandTest */ @Test public void testGetIncomingChangesetsWithEmptyRepository() - throws IOException, RepositoryException + throws IOException { GitIncomingCommand cmd = createCommand(); IncomingCommandRequest request = new IncomingCommandRequest(); @@ -163,7 +161,7 @@ public class GitIncomingCommandTest @Test @Ignore public void testGetIncomingChangesetsWithUnrelatedRepository() - throws IOException, RepositoryException, GitAPIException + throws IOException, GitAPIException { write(outgoing, outgoingDirectory, "a.txt", "content of a.txt"); diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitLogCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitLogCommandTest.java index c5af70e3a9..1d78485ae3 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitLogCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitLogCommandTest.java @@ -35,22 +35,23 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- +import org.eclipse.jgit.api.errors.GitAPIException; import org.junit.Test; - import sonia.scm.repository.Changeset; import sonia.scm.repository.ChangesetPagingResult; +import sonia.scm.repository.GitConstants; import sonia.scm.repository.Modifications; -import sonia.scm.repository.RepositoryException; - -import static org.hamcrest.Matchers.*; - -import static org.junit.Assert.*; - -//~--- JDK imports ------------------------------------------------------------ import java.io.IOException; -import org.eclipse.jgit.api.errors.GitAPIException; -import sonia.scm.repository.GitConstants; + +import static org.hamcrest.Matchers.contains; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +//~--- JDK imports ------------------------------------------------------------ /** * Unit tests for {@link GitLogCommand}. @@ -65,10 +66,10 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase * * @throws IOException * @throws GitAPIException - * @throws RepositoryException + * @ */ @Test - public void testGetDefaultBranch() throws IOException, GitAPIException, RepositoryException { + public void testGetDefaultBranch() throws IOException, GitAPIException { // without default branch, the repository head should be used ChangesetPagingResult result = createCommand().getChangesets(new LogCommandRequest()); @@ -99,7 +100,7 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase * @throws RepositoryException */ @Test - public void testGetAll() throws IOException, RepositoryException + public void testGetAll() throws IOException { ChangesetPagingResult result = createCommand().getChangesets(new LogCommandRequest()); @@ -117,7 +118,7 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase * @throws RepositoryException */ @Test - public void testGetAllByPath() throws IOException, RepositoryException + public void testGetAllByPath() throws IOException { LogCommandRequest request = new LogCommandRequest(); @@ -140,7 +141,7 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase * @throws RepositoryException */ @Test - public void testGetAllWithLimit() throws IOException, RepositoryException + public void testGetAllWithLimit() throws IOException { LogCommandRequest request = new LogCommandRequest(); @@ -171,7 +172,7 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase * @throws RepositoryException */ @Test - public void testGetAllWithPaging() throws IOException, RepositoryException + public void testGetAllWithPaging() throws IOException { LogCommandRequest request = new LogCommandRequest(); @@ -231,7 +232,7 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase * @throws RepositoryException */ @Test - public void testGetRange() throws IOException, RepositoryException + public void testGetRange() throws IOException { LogCommandRequest request = new LogCommandRequest(); diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitOutgoingCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitOutgoingCommandTest.java index 28be6f7df0..58f70109ef 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitOutgoingCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitOutgoingCommandTest.java @@ -37,19 +37,16 @@ package sonia.scm.repository.spi; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.revwalk.RevCommit; - import org.junit.Test; - import sonia.scm.repository.ChangesetPagingResult; -import sonia.scm.repository.RepositoryException; + +import java.io.IOException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; //~--- JDK imports ------------------------------------------------------------ -import java.io.IOException; - /** * Unit tests for {@link OutgoingCommand}. * @@ -68,7 +65,7 @@ public class GitOutgoingCommandTest extends AbstractRemoteCommandTestBase */ @Test public void testGetOutgoingChangesets() - throws IOException, GitAPIException, RepositoryException + throws IOException, GitAPIException { write(outgoing, outgoingDirectory, "a.txt", "content of a.txt"); @@ -102,7 +99,7 @@ public class GitOutgoingCommandTest extends AbstractRemoteCommandTestBase */ @Test public void testGetOutgoingChangesetsWithAllreadyPushedChanges() - throws IOException, GitAPIException, RepositoryException + throws IOException, GitAPIException { write(outgoing, outgoingDirectory, "a.txt", "content of a.txt"); @@ -142,7 +139,7 @@ public class GitOutgoingCommandTest extends AbstractRemoteCommandTestBase */ @Test public void testGetOutgoingChangesetsWithEmptyRepository() - throws IOException, RepositoryException + throws IOException { GitOutgoingCommand cmd = createCommand(); OutgoingCommandRequest request = new OutgoingCommandRequest(); diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitPushCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitPushCommandTest.java index bf82193e84..91fad57880 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitPushCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitPushCommandTest.java @@ -37,20 +37,17 @@ package sonia.scm.repository.spi; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.revwalk.RevCommit; - import org.junit.Test; - -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.api.PushResponse; -import static org.junit.Assert.*; +import java.io.IOException; +import java.util.Iterator; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; //~--- JDK imports ------------------------------------------------------------ -import java.io.IOException; - -import java.util.Iterator; - /** * * @author Sebastian Sdorra @@ -68,7 +65,7 @@ public class GitPushCommandTest extends AbstractRemoteCommandTestBase */ @Test public void testPush() - throws IOException, GitAPIException, RepositoryException + throws IOException, GitAPIException { write(outgoing, outgoingDirectory, "a.txt", "content of a.txt"); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/AbstractHgHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/AbstractHgHandler.java index 22a64fe5b2..19cfd37665 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/AbstractHgHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/AbstractHgHandler.java @@ -37,18 +37,15 @@ package sonia.scm.repository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.SCMContext; import sonia.scm.util.IOUtil; import sonia.scm.util.Util; import sonia.scm.web.HgUtil; -//~--- JDK imports ------------------------------------------------------------ - +import javax.xml.bind.JAXBException; import java.io.File; import java.io.IOException; import java.io.InputStream; - import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -56,7 +53,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import javax.xml.bind.JAXBException; +//~--- JDK imports ------------------------------------------------------------ /** * @@ -257,45 +254,15 @@ public class AbstractHgHandler //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @param resultType - * @param script - * @param - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ - protected T getResultFromScript(Class resultType, - HgPythonScript script) - throws IOException, RepositoryException - { + protected T getResultFromScript(Class resultType, HgPythonScript script) throws IOException { return getResultFromScript(resultType, script, new HashMap()); } - /** - * Method description - * - * - * @param resultType - * @param script - * @param extraEnv - * @param - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @SuppressWarnings("unchecked") protected T getResultFromScript(Class resultType, HgPythonScript script, Map extraEnv) - throws IOException, RepositoryException + throws IOException { Process p = createScriptProcess(script, extraEnv); @@ -305,7 +272,7 @@ public class AbstractHgHandler } catch (JAXBException ex) { logger.error("could not parse result", ex); - throw new RepositoryException("could not parse result", ex); + throw new InternalRepositoryException("could not parse result", ex); } } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgHookManager.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgHookManager.java index aa0e4156ae..057bd173d9 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgHookManager.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgHookManager.java @@ -36,31 +36,25 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- import com.github.legman.Subscribe; - -import com.google.common.base.Objects; +import com.google.common.base.MoreObjects; import com.google.inject.Inject; import com.google.inject.OutOfScopeException; import com.google.inject.Provider; import com.google.inject.ProvisionException; import com.google.inject.Singleton; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.config.ScmConfiguration; - +import sonia.scm.config.ScmConfigurationChangedEvent; +import sonia.scm.net.ahc.AdvancedHttpClient; import sonia.scm.util.HttpUtil; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - +import javax.servlet.http.HttpServletRequest; import java.io.IOException; - import java.util.UUID; -import javax.servlet.http.HttpServletRequest; -import sonia.scm.config.ScmConfigurationChangedEvent; -import sonia.scm.net.ahc.AdvancedHttpClient; +//~--- JDK imports ------------------------------------------------------------ /** * @@ -273,7 +267,7 @@ public class HgHookManager { //J- return HttpUtil.getUriWithoutEndSeperator( - Objects.firstNonNull( + MoreObjects.firstNonNull( configuration.getBaseUrl(), "http://localhost:8080/scm" ) diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgImportHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgImportHandler.java index 30b5063c11..ad61926eef 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgImportHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgImportHandler.java @@ -37,18 +37,17 @@ package sonia.scm.repository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.io.INIConfiguration; import sonia.scm.io.INIConfigurationReader; import sonia.scm.io.INIConfigurationWriter; import sonia.scm.io.INISection; import sonia.scm.util.ValidationUtil; -//~--- JDK imports ------------------------------------------------------------ - import java.io.File; import java.io.IOException; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -80,22 +79,10 @@ public class HgImportHandler extends AbstactImportHandler //~--- methods -------------------------------------------------------------- - /** - * Method description - * - * - * @param repositoryDirectory - * @param repositoryName - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override protected Repository createRepository(File repositoryDirectory, String repositoryName) - throws IOException, RepositoryException + throws IOException { Repository repository = super.createRepository(repositoryDirectory, repositoryName); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java index aad546f651..39100b8cfa 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java @@ -38,10 +38,8 @@ package sonia.scm.repository; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.ConfigurationException; import sonia.scm.SCMContextProvider; import sonia.scm.installer.HgInstaller; @@ -55,23 +53,21 @@ import sonia.scm.io.INIConfigurationWriter; import sonia.scm.io.INISection; import sonia.scm.plugin.Extension; import sonia.scm.repository.spi.HgRepositoryServiceProvider; +import sonia.scm.store.ConfigurationStoreFactory; import sonia.scm.util.IOUtil; import sonia.scm.util.SystemUtil; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; - import java.text.MessageFormat; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import sonia.scm.store.ConfigurationStoreFactory; +//~--- JDK imports ------------------------------------------------------------ /** * @@ -430,11 +426,10 @@ public class HgRepositoryHandler * @param directory * * @throws IOException - * @throws RepositoryException */ @Override protected void postCreate(Repository repository, File directory) - throws IOException, RepositoryException + throws IOException { File hgrcFile = new File(directory, PATH_HGRC); INIConfiguration hgrc = new INIConfiguration(); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersion.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersion.java index afe6a17ca1..097046e7f7 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersion.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersion.java @@ -34,14 +34,15 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -100,7 +101,7 @@ public class HgVersion public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("mercurial", mercurial) .add("python", python) .toString(); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersionHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersionHandler.java index e52eee2c8a..26c9095ead 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersionHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersionHandler.java @@ -44,15 +44,6 @@ import java.io.IOException; public class HgVersionHandler extends AbstractHgHandler { - /** - * Constructs ... - * - * - * @param handler - * @param jaxbContext - * @param context - * @param directory - */ public HgVersionHandler(HgRepositoryHandler handler, HgContext context, File directory) { @@ -61,17 +52,7 @@ public class HgVersionHandler extends AbstractHgHandler //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ - public HgVersion getVersion() throws IOException, RepositoryException - { + public HgVersion getVersion() throws IOException { return getResultFromScript(HgVersion.class, HgPythonScript.VERSION); } } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBlameCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBlameCommand.java index be5dbeda04..96a57ece65 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBlameCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBlameCommand.java @@ -38,26 +38,21 @@ package sonia.scm.repository.spi; import com.aragost.javahg.Changeset; import com.aragost.javahg.commands.AnnotateCommand; import com.aragost.javahg.commands.AnnotateLine; - import com.google.common.base.Strings; import com.google.common.collect.Lists; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.repository.BlameLine; import sonia.scm.repository.BlameResult; import sonia.scm.repository.Person; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.web.HgUtil; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; - import java.util.List; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -87,20 +82,9 @@ public class HgBlameCommand extends AbstractCommand implements BlameCommand //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override public BlameResult getBlameResult(BlameCommandRequest request) - throws IOException, RepositoryException + throws IOException { if (logger.isDebugEnabled()) { diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchesCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchesCommand.java index 64d544c5ed..5c38205393 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchesCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchesCommand.java @@ -36,20 +36,15 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.aragost.javahg.Changeset; - import com.google.common.base.Function; import com.google.common.collect.Lists; - import sonia.scm.repository.Branch; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; - -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; import java.util.List; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -72,18 +67,8 @@ public class HgBranchesCommand extends AbstractCommand //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override - public List getBranches() throws RepositoryException, IOException - { + public List getBranches() { List hgBranches = com.aragost.javahg.commands.BranchesCommand.on(open()).execute(); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBrowseCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBrowseCommand.java index 0303275adf..4dc0b8a33e 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBrowseCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBrowseCommand.java @@ -36,16 +36,14 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.base.Strings; - import sonia.scm.repository.BrowserResult; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.spi.javahg.HgFileviewCommand; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -67,20 +65,9 @@ public class HgBrowseCommand extends AbstractCommand implements BrowseCommand //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override public BrowserResult getBrowserResult(BrowseCommandRequest request) - throws IOException, RepositoryException + throws IOException { HgFileviewCommand cmd = HgFileviewCommand.on(open()); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCatCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCatCommand.java index c0ae0b51b5..554d6aaf05 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCatCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCatCommand.java @@ -36,8 +36,8 @@ package sonia.scm.repository.spi; import com.aragost.javahg.commands.ExecutionException; import com.google.common.io.ByteStreams; import com.google.common.io.Closeables; +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.web.HgUtil; import java.io.IOException; @@ -51,7 +51,7 @@ public class HgCatCommand extends AbstractCommand implements CatCommand { } @Override - public void getCatResult(CatCommandRequest request, OutputStream output) throws IOException, RepositoryException { + public void getCatResult(CatCommandRequest request, OutputStream output) throws IOException { InputStream input = getCatResultStream(request); try { ByteStreams.copy(input, output); @@ -61,7 +61,7 @@ public class HgCatCommand extends AbstractCommand implements CatCommand { } @Override - public InputStream getCatResultStream(CatCommandRequest request) throws IOException, RepositoryException { + public InputStream getCatResultStream(CatCommandRequest request) throws IOException { com.aragost.javahg.commands.CatCommand cmd = com.aragost.javahg.commands.CatCommand.on(open()); @@ -70,7 +70,7 @@ public class HgCatCommand extends AbstractCommand implements CatCommand { try { return cmd.execute(request.getPath()); } catch (ExecutionException e) { - throw new RepositoryException(e); + throw new InternalRepositoryException(e); } } } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgDiffCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgDiffCommand.java index dcdcdeec2f..d705f0ac14 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgDiffCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgDiffCommand.java @@ -38,19 +38,17 @@ package sonia.scm.repository.spi; import com.google.common.base.Strings; import com.google.common.io.ByteStreams; import com.google.common.io.Closeables; - import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.api.DiffFormat; import sonia.scm.repository.spi.javahg.HgDiffInternalCommand; import sonia.scm.web.HgUtil; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -72,19 +70,9 @@ public class HgDiffCommand extends AbstractCommand implements DiffCommand //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @param request - * @param output - * - * @throws IOException - * @throws RepositoryException - */ @Override public void getDiffResult(DiffCommandRequest request, OutputStream output) - throws IOException, RepositoryException + throws IOException { com.aragost.javahg.Repository hgRepo = open(); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgIncomingCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgIncomingCommand.java index 73284d886a..55cf0fbe01 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgIncomingCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgIncomingCommand.java @@ -35,21 +35,19 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.aragost.javahg.commands.ExecutionException; - import sonia.scm.repository.Changeset; import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.HgRepositoryHandler; +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.spi.javahg.HgIncomingChangesetCommand; -//~--- JDK imports ------------------------------------------------------------ - import java.io.File; - import java.util.Collections; import java.util.List; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -80,22 +78,9 @@ public class HgIncomingCommand extends AbstractCommand //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws RepositoryException - */ @Override @SuppressWarnings("unchecked") - public ChangesetPagingResult getIncomingChangesets( - IncomingCommandRequest request) - throws RepositoryException - { + public ChangesetPagingResult getIncomingChangesets(IncomingCommandRequest request) { File remoteRepository = handler.getDirectory(request.getRemoteRepository()); com.aragost.javahg.Repository repository = open(); @@ -118,7 +103,7 @@ public class HgIncomingCommand extends AbstractCommand } else { - throw new RepositoryException("could not execute incoming command", ex); + throw new InternalRepositoryException("could not execute incoming command", ex); } } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgLogCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgLogCommand.java index af485d19df..68d6913962 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgLogCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgLogCommand.java @@ -36,20 +36,16 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.base.Strings; - import sonia.scm.repository.Changeset; import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.spi.javahg.HgLogChangesetCommand; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; - import java.util.ArrayList; import java.util.List; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -71,42 +67,16 @@ public class HgLogCommand extends AbstractCommand implements LogCommand //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @param id - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override - public Changeset getChangeset(String id) - throws IOException, RepositoryException - { + public Changeset getChangeset(String id) { com.aragost.javahg.Repository repository = open(); HgLogChangesetCommand cmd = on(repository); return cmd.rev(id).single(); } - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override - public ChangesetPagingResult getChangesets(LogCommandRequest request) - throws IOException, RepositoryException - { + public ChangesetPagingResult getChangesets(LogCommandRequest request) { ChangesetPagingResult result = null; com.aragost.javahg.Repository repository = open(); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgOutgoingCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgOutgoingCommand.java index 1322424198..b476b6c2ab 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgOutgoingCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgOutgoingCommand.java @@ -35,21 +35,19 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.aragost.javahg.commands.ExecutionException; - import sonia.scm.repository.Changeset; import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.HgRepositoryHandler; +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.spi.javahg.HgOutgoingChangesetCommand; -//~--- JDK imports ------------------------------------------------------------ - import java.io.File; - import java.util.Collections; import java.util.List; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -80,21 +78,10 @@ public class HgOutgoingCommand extends AbstractCommand //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws RepositoryException - */ @Override @SuppressWarnings("unchecked") public ChangesetPagingResult getOutgoingChangesets( OutgoingCommandRequest request) - throws RepositoryException { File remoteRepository = handler.getDirectory(request.getRemoteRepository()); @@ -116,7 +103,7 @@ public class HgOutgoingCommand extends AbstractCommand } else { - throw new RepositoryException("could not execute outgoing command", ex); + throw new InternalRepositoryException("could not execute outgoing command", ex); } } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgPullCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgPullCommand.java index 5243cbcc92..0eb23ef4e7 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgPullCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgPullCommand.java @@ -37,22 +37,19 @@ package sonia.scm.repository.spi; import com.aragost.javahg.Changeset; import com.aragost.javahg.commands.ExecutionException; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.repository.HgRepositoryHandler; +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.api.PullResponse; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; - import java.util.Collections; import java.util.List; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -83,21 +80,10 @@ public class HgPullCommand extends AbstractHgPushOrPullCommand //~--- methods -------------------------------------------------------------- - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override @SuppressWarnings("unchecked") public PullResponse pull(PullCommandRequest request) - throws RepositoryException, IOException + throws IOException { String url = getRemoteUrl(request); @@ -111,7 +97,7 @@ public class HgPullCommand extends AbstractHgPushOrPullCommand } catch (ExecutionException ex) { - throw new RepositoryException("could not execute push command", ex); + throw new InternalRepositoryException("could not execute push command", ex); } return new PullResponse(result.size()); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgPushCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgPushCommand.java index 10b4af002e..fb0a1a1c73 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgPushCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgPushCommand.java @@ -37,22 +37,19 @@ package sonia.scm.repository.spi; import com.aragost.javahg.Changeset; import com.aragost.javahg.commands.ExecutionException; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.repository.HgRepositoryHandler; +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.api.PushResponse; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; - import java.util.Collections; import java.util.List; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -83,21 +80,10 @@ public class HgPushCommand extends AbstractHgPushOrPullCommand //~--- methods -------------------------------------------------------------- - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override @SuppressWarnings("unchecked") public PushResponse push(PushCommandRequest request) - throws RepositoryException, IOException + throws IOException { String url = getRemoteUrl(request); @@ -111,7 +97,7 @@ public class HgPushCommand extends AbstractHgPushOrPullCommand } catch (ExecutionException ex) { - throw new RepositoryException("could not execute push command", ex); + throw new InternalRepositoryException("could not execute push command", ex); } return new PushResponse(result.size()); diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBlameCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBlameCommandTest.java index 0dea409589..8b46c5f290 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBlameCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBlameCommandTest.java @@ -36,17 +36,16 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import org.junit.Test; - import sonia.scm.repository.BlameLine; import sonia.scm.repository.BlameResult; -import sonia.scm.repository.RepositoryException; - -import static org.junit.Assert.*; - -//~--- JDK imports ------------------------------------------------------------ import java.io.IOException; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -54,16 +53,8 @@ import java.io.IOException; public class HgBlameCommandTest extends AbstractHgCommandTestBase { - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testGetBlameResult() throws IOException, RepositoryException - { + public void testGetBlameResult() throws IOException { BlameCommandRequest request = new BlameCommandRequest(); request.setPath("a.txt"); @@ -87,17 +78,8 @@ public class HgBlameCommandTest extends AbstractHgCommandTestBase line.getAuthor().getMail()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testGetBlameResultWithRevision() - throws IOException, RepositoryException - { + public void testGetBlameResultWithRevision() throws IOException { BlameCommandRequest request = new BlameCommandRequest(); request.setPath("a.txt"); diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBrowseCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBrowseCommandTest.java index 0262dfc36b..c53aa8c607 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBrowseCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBrowseCommandTest.java @@ -36,19 +36,20 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import org.junit.Test; - import sonia.scm.repository.BrowserResult; import sonia.scm.repository.FileObject; -import sonia.scm.repository.RepositoryException; - -import static org.junit.Assert.*; - -//~--- JDK imports ------------------------------------------------------------ import java.io.IOException; - import java.util.List; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -56,16 +57,8 @@ import java.util.List; public class HgBrowseCommandTest extends AbstractHgCommandTestBase { - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testBrowse() throws IOException, RepositoryException - { + public void testBrowse() throws IOException { List foList = getRootFromTip(new BrowseCommandRequest()); FileObject a = getFileObject(foList, "a.txt"); FileObject c = getFileObject(foList, "c"); @@ -81,16 +74,8 @@ public class HgBrowseCommandTest extends AbstractHgCommandTestBase assertEquals("c", c.getPath()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testBrowseSubDirectory() throws IOException, RepositoryException - { + public void testBrowseSubDirectory() throws IOException { BrowseCommandRequest request = new BrowseCommandRequest(); request.setPath("c"); @@ -137,16 +122,8 @@ public class HgBrowseCommandTest extends AbstractHgCommandTestBase checkDate(e.getLastModified()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testDisableLastCommit() throws IOException, RepositoryException - { + public void testDisableLastCommit() throws IOException { BrowseCommandRequest request = new BrowseCommandRequest(); request.setDisableLastCommit(true); @@ -159,16 +136,8 @@ public class HgBrowseCommandTest extends AbstractHgCommandTestBase assertNull(a.getLastModified()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testRecursive() throws IOException, RepositoryException - { + public void testRecursive() throws IOException { BrowseCommandRequest request = new BrowseCommandRequest(); request.setRecursive(true); @@ -215,20 +184,7 @@ public class HgBrowseCommandTest extends AbstractHgCommandTestBase return a; } - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ - private List getRootFromTip(BrowseCommandRequest request) - throws IOException, RepositoryException - { + private List getRootFromTip(BrowseCommandRequest request) throws IOException { BrowserResult result = new HgBrowseCommand(cmdContext, repository).getBrowserResult(request); diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgCatCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgCatCommandTest.java index afb5249b25..9379fd42a8 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgCatCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgCatCommandTest.java @@ -33,8 +33,10 @@ package sonia.scm.repository.spi; +import org.junit.Ignore; import org.junit.Test; -import sonia.scm.repository.RepositoryException; +import sonia.scm.NotFoundException; +import sonia.scm.repository.InternalRepositoryException; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -45,7 +47,7 @@ import static org.junit.Assert.assertEquals; public class HgCatCommandTest extends AbstractHgCommandTestBase { @Test - public void testCat() throws IOException, RepositoryException { + public void testCat() throws IOException { CatCommandRequest request = new CatCommandRequest(); request.setPath("a.txt"); @@ -54,23 +56,24 @@ public class HgCatCommandTest extends AbstractHgCommandTestBase { } @Test - public void testSimpleCat() throws IOException, RepositoryException { + public void testSimpleCat() throws IOException { CatCommandRequest request = new CatCommandRequest(); request.setPath("b.txt"); assertEquals("b", execute(request)); } - @Test(expected = RepositoryException.class) - public void testUnknownFile() throws IOException, RepositoryException { + @Test(expected = InternalRepositoryException.class) + public void testUnknownFile() throws IOException { CatCommandRequest request = new CatCommandRequest(); request.setPath("unknown"); execute(request); } - @Test(expected = RepositoryException.class) - public void testUnknownRevision() throws IOException, RepositoryException { + @Test(expected = NotFoundException.class) + @Ignore("detection of unknown revision in hg not yet implemented") + public void testUnknownRevision() throws IOException { CatCommandRequest request = new CatCommandRequest(); request.setRevision("abc"); @@ -79,7 +82,7 @@ public class HgCatCommandTest extends AbstractHgCommandTestBase { } @Test - public void testSimpleStream() throws IOException, RepositoryException { + public void testSimpleStream() throws IOException { CatCommandRequest request = new CatCommandRequest(); request.setPath("b.txt"); @@ -92,7 +95,7 @@ public class HgCatCommandTest extends AbstractHgCommandTestBase { catResultStream.close(); } - private String execute(CatCommandRequest request) throws IOException, RepositoryException { + private String execute(CatCommandRequest request) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); new HgCatCommand(cmdContext, repository).getCatResult(request, baos); return baos.toString().trim(); diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgIncomingCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgIncomingCommandTest.java index a8a5de156b..4d7b7c75d9 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgIncomingCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgIncomingCommandTest.java @@ -35,19 +35,18 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.aragost.javahg.Changeset; - import org.junit.Test; - import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.HgTestUtil; -import sonia.scm.repository.RepositoryException; - -import static org.junit.Assert.*; - -//~--- JDK imports ------------------------------------------------------------ +import sonia.scm.repository.InternalRepositoryException; import java.io.IOException; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -60,12 +59,9 @@ public class HgIncomingCommandTest extends IncomingOutgoingTestBase * * * @throws IOException - * @throws RepositoryException */ @Test - public void testGetIncomingChangesets() - throws IOException, RepositoryException - { + public void testGetIncomingChangesets() throws IOException { writeNewFile(outgoing, outgoingDirectory, "a.txt", "Content of file a.txt"); writeNewFile(outgoing, outgoingDirectory, "b.txt", "Content of file b.txt"); @@ -89,16 +85,8 @@ public class HgIncomingCommandTest extends IncomingOutgoingTestBase assertChangesetsEqual(c2, cpr.getChangesets().get(1)); } - /** - * Method description - * - * - * @throws RepositoryException - */ @Test - public void testGetIncomingChangesetsWithEmptyRepository() - throws RepositoryException - { + public void testGetIncomingChangesetsWithEmptyRepository() { HgIncomingCommand cmd = createIncomingCommand(); IncomingCommandRequest request = new IncomingCommandRequest(); @@ -110,17 +98,8 @@ public class HgIncomingCommandTest extends IncomingOutgoingTestBase assertEquals(0, cpr.getTotal()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ - @Test(expected = RepositoryException.class) - public void testGetIncomingChangesetsWithUnrelatedRepository() - throws IOException, RepositoryException - { + @Test(expected = InternalRepositoryException.class) + public void testGetIncomingChangesetsWithUnrelatedRepository() throws IOException { writeNewFile(outgoing, outgoingDirectory, "a.txt", "Content of file a.txt"); writeNewFile(outgoing, outgoingDirectory, "b.txt", "Content of file b.txt"); diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgLogCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgLogCommandTest.java index bae48180ce..c4d49ba8b5 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgLogCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgLogCommandTest.java @@ -36,20 +36,19 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import org.junit.Test; - import sonia.scm.repository.Changeset; import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.Modifications; -import sonia.scm.repository.RepositoryException; -import static org.hamcrest.Matchers.*; - -import static org.junit.Assert.*; +import static org.hamcrest.Matchers.contains; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; //~--- JDK imports ------------------------------------------------------------ -import java.io.IOException; - /** * * @author Sebastian Sdorra @@ -57,16 +56,8 @@ import java.io.IOException; public class HgLogCommandTest extends AbstractHgCommandTestBase { - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testGetAll() throws IOException, RepositoryException - { + public void testGetAll() { ChangesetPagingResult result = createComamnd().getChangesets(new LogCommandRequest()); @@ -75,16 +66,8 @@ public class HgLogCommandTest extends AbstractHgCommandTestBase assertEquals(5, result.getChangesets().size()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testGetAllByPath() throws IOException, RepositoryException - { + public void testGetAllByPath() { LogCommandRequest request = new LogCommandRequest(); request.setPath("a.txt"); @@ -102,16 +85,8 @@ public class HgLogCommandTest extends AbstractHgCommandTestBase result.getChangesets().get(2).getId()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testGetAllWithLimit() throws IOException, RepositoryException - { + public void testGetAllWithLimit() { LogCommandRequest request = new LogCommandRequest(); request.setPagingLimit(2); @@ -133,16 +108,8 @@ public class HgLogCommandTest extends AbstractHgCommandTestBase assertEquals("542bf4893dd2ff58a0eb719551d75ddeb919608b", c2.getId()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testGetAllWithPaging() throws IOException, RepositoryException - { + public void testGetAllWithPaging() { LogCommandRequest request = new LogCommandRequest(); request.setPagingStart(1); @@ -165,16 +132,8 @@ public class HgLogCommandTest extends AbstractHgCommandTestBase assertEquals("79b6baf49711ae675568e0698d730b97ef13e84a", c2.getId()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testGetCommit() throws IOException, RepositoryException - { + public void testGetCommit() { HgLogCommand command = createComamnd(); Changeset c = command.getChangeset("a9bacaf1b7fa0cebfca71fed4e59ed69a6319427"); @@ -197,16 +156,8 @@ public class HgLogCommandTest extends AbstractHgCommandTestBase assertThat(mods.getAdded(), contains("a.txt", "b.txt")); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testGetRange() throws IOException, RepositoryException - { + public void testGetRange() { LogCommandRequest request = new LogCommandRequest(); request.setStartChangeset("3049df33fdbb"); diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgOutgoingCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgOutgoingCommandTest.java index 7a43df98bc..354481b9b3 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgOutgoingCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgOutgoingCommandTest.java @@ -35,20 +35,18 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.aragost.javahg.Changeset; - import org.junit.Test; - import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.HgTestUtil; -import sonia.scm.repository.RepositoryException; +import sonia.scm.repository.InternalRepositoryException; + +import java.io.IOException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; //~--- JDK imports ------------------------------------------------------------ -import java.io.IOException; - /** * * @author Sebastian Sdorra @@ -56,17 +54,8 @@ import java.io.IOException; public class HgOutgoingCommandTest extends IncomingOutgoingTestBase { - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testGetOutgoingChangesets() - throws IOException, RepositoryException - { + public void testGetOutgoingChangesets() throws IOException { writeNewFile(outgoing, outgoingDirectory, "a.txt", "Content of file a.txt"); writeNewFile(outgoing, outgoingDirectory, "b.txt", "Content of file b.txt"); @@ -90,16 +79,8 @@ public class HgOutgoingCommandTest extends IncomingOutgoingTestBase assertChangesetsEqual(c2, cpr.getChangesets().get(1)); } - /** - * Method description - * - * - * @throws RepositoryException - */ @Test - public void testGetOutgoingChangesetsWithEmptyRepository() - throws RepositoryException - { + public void testGetOutgoingChangesetsWithEmptyRepository() { HgOutgoingCommand cmd = createOutgoingCommand(); OutgoingCommandRequest request = new OutgoingCommandRequest(); @@ -111,17 +92,8 @@ public class HgOutgoingCommandTest extends IncomingOutgoingTestBase assertEquals(0, cpr.getTotal()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ - @Test(expected = RepositoryException.class) - public void testGetOutgoingChangesetsWithUnrelatedRepository() - throws IOException, RepositoryException - { + @Test(expected = InternalRepositoryException.class) + public void testGetOutgoingChangesetsWithUnrelatedRepository() throws IOException { writeNewFile(outgoing, outgoingDirectory, "a.txt", "Content of file a.txt"); writeNewFile(outgoing, outgoingDirectory, "b.txt", "Content of file b.txt"); diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java index 58ada0738b..7d5c9695c9 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java @@ -37,10 +37,8 @@ package sonia.scm.repository; import com.google.inject.Inject; import com.google.inject.Singleton; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNURL; import org.tmatesoft.svn.core.internal.io.fs.FSHooks; @@ -48,19 +46,17 @@ import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory; import org.tmatesoft.svn.core.io.SVNRepository; import org.tmatesoft.svn.core.io.SVNRepositoryFactory; import org.tmatesoft.svn.util.SVNDebugLog; - import sonia.scm.io.FileSystem; import sonia.scm.logging.SVNKitLogger; import sonia.scm.plugin.Extension; +import sonia.scm.repository.spi.HookEventFacade; import sonia.scm.repository.spi.SvnRepositoryServiceProvider; +import sonia.scm.store.ConfigurationStoreFactory; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - import java.io.File; -import java.io.IOException; -import sonia.scm.repository.spi.HookEventFacade; -import sonia.scm.store.ConfigurationStoreFactory; + +//~--- JDK imports ------------------------------------------------------------ /** * @@ -72,38 +68,21 @@ public class SvnRepositoryHandler extends AbstractSimpleRepositoryHandler { - /** Field description */ public static final String PROPERTY_UUID = "svn.uuid"; - /** Field description */ - public static final String RESOURCE_VERSION = - "sonia/scm/version/scm-svn-plugin"; + public static final String RESOURCE_VERSION = "sonia/scm/version/scm-svn-plugin"; - /** Field description */ public static final String TYPE_DISPLAYNAME = "Subversion"; - /** Field description */ public static final String TYPE_NAME = "svn"; - /** Field description */ public static final RepositoryType TYPE = new RepositoryType(TYPE_NAME, TYPE_DISPLAYNAME, SvnRepositoryServiceProvider.COMMANDS); - /** the logger for SvnRepositoryHandler */ private static final Logger logger = LoggerFactory.getLogger(SvnRepositoryHandler.class); - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - * - * @param storeFactory - * @param fileSystem - * @param repositoryManager - */ @Inject public SvnRepositoryHandler(ConfigurationStoreFactory storeFactory, FileSystem fileSystem, HookEventFacade eventFacade) @@ -128,60 +107,26 @@ public class SvnRepositoryHandler } } - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ @Override public ImportHandler getImportHandler() { return new SvnImportHandler(this); } - /** - * Method description - * - * - * @return - */ @Override public RepositoryType getType() { return TYPE; } - /** - * Method description - * - * - * @return - */ @Override public String getVersionInformation() { return getStringFromResource(RESOURCE_VERSION, DEFAULT_VERSION_INFORMATION); } - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param repository - * @param directory - * - * @throws IOException - * @throws RepositoryException - */ @Override - protected void create(Repository repository, File directory) - throws RepositoryException, IOException - { + protected void create(Repository repository, File directory) throws InternalRepositoryException { Compatibility comp = config.getCompatibility(); if (logger.isDebugEnabled()) @@ -228,7 +173,7 @@ public class SvnRepositoryHandler } catch (SVNException ex) { - throw new RepositoryException(ex); + throw new InternalRepositoryException(ex); } finally { diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java index 6cc5eb5da9..28419391ab 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java @@ -38,10 +38,8 @@ package sonia.scm.repository; import com.google.common.base.Strings; import com.google.common.collect.Lists; import com.google.common.io.Closeables; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import org.tmatesoft.svn.core.SVNErrorCode; import org.tmatesoft.svn.core.SVNLogEntry; import org.tmatesoft.svn.core.SVNLogEntryPath; @@ -52,20 +50,17 @@ import org.tmatesoft.svn.core.internal.util.SVNXMLUtil; import org.tmatesoft.svn.core.io.SVNRepository; import org.tmatesoft.svn.core.wc.SVNClientManager; import org.tmatesoft.svn.core.wc.admin.SVNChangeEntry; - import sonia.scm.util.HttpUtil; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; - import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +//~--- JDK imports ------------------------------------------------------------ /** * @@ -351,21 +346,7 @@ public final class SvnUtil } } - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @param revision - * - * @return - * - * @throws RepositoryException - */ - public static long getRevisionNumber(String revision) - throws RepositoryException - { + public static long getRevisionNumber(String revision) throws RevisionNotFoundException { long revisionNumber = -1; if (Util.isNotEmpty(revision)) @@ -376,7 +357,7 @@ public final class SvnUtil } catch (NumberFormatException ex) { - throw new RepositoryException("given revision is not a svnrevision"); + throw new RevisionNotFoundException(revision); } } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBlameCommand.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBlameCommand.java index 9c059d0ea5..fe9a72ffce 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBlameCommand.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBlameCommand.java @@ -35,7 +35,6 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.collect.Lists; - import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNURL; import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager; @@ -43,21 +42,18 @@ import org.tmatesoft.svn.core.io.SVNRepository; import org.tmatesoft.svn.core.io.SVNRepositoryFactory; import org.tmatesoft.svn.core.wc.SVNLogClient; import org.tmatesoft.svn.core.wc.SVNRevision; - import sonia.scm.repository.BlameLine; import sonia.scm.repository.BlameResult; +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.SvnBlameHandler; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - import java.io.File; -import java.io.IOException; - import java.util.List; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -65,37 +61,13 @@ import java.util.List; public class SvnBlameCommand extends AbstractSvnCommand implements BlameCommand { - /** - * Constructs ... - * - * - * - * @param context - * @param repository - * @param repositoryDirectory - */ public SvnBlameCommand(SvnContext context, Repository repository) { super(context, repository); } - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override - public BlameResult getBlameResult(BlameCommandRequest request) - throws IOException, RepositoryException - { + public BlameResult getBlameResult(BlameCommandRequest request) { String path = request.getPath(); String revision = request.getRevision(); List blameLines = Lists.newArrayList(); @@ -126,7 +98,7 @@ public class SvnBlameCommand extends AbstractSvnCommand implements BlameCommand } catch (SVNException ex) { - throw new RepositoryException("could not create blame result", ex); + throw new InternalRepositoryException("could not create blame result", ex); } return new BlameResult(blameLines.size(), blameLines); diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBrowseCommand.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBrowseCommand.java index 1464d7eb96..54b8458715 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBrowseCommand.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBrowseCommand.java @@ -36,32 +36,27 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.collect.Lists; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import org.tmatesoft.svn.core.SVNDirEntry; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNNodeKind; import org.tmatesoft.svn.core.SVNProperties; import org.tmatesoft.svn.core.SVNProperty; import org.tmatesoft.svn.core.io.SVNRepository; - import sonia.scm.repository.BrowserResult; import sonia.scm.repository.FileObject; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; +import sonia.scm.repository.RevisionNotFoundException; import sonia.scm.repository.SubRepository; import sonia.scm.repository.SvnUtil; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; - import java.util.Collection; import java.util.List; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -76,40 +71,14 @@ public class SvnBrowseCommand extends AbstractSvnCommand private static final Logger logger = LoggerFactory.getLogger(SvnBrowseCommand.class); - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - * - * - * @param context - * @param repository - * @param repositoryDirectory - */ SvnBrowseCommand(SvnContext context, Repository repository) { super(context, repository); } - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override @SuppressWarnings("unchecked") - public BrowserResult getBrowserResult(BrowseCommandRequest request) - throws IOException, RepositoryException - { + public BrowserResult getBrowserResult(BrowseCommandRequest request) throws RevisionNotFoundException { String path = request.getPath(); long revisionNumber = SvnUtil.getRevisionNumber(request.getRevision()); @@ -293,7 +262,7 @@ public class SvnBrowseCommand extends AbstractSvnCommand } catch (SVNException ex) { - logger.error("could not fetch file properties"); + logger.error("could not fetch file properties", ex); } } } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBundleCommand.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBundleCommand.java index af9dbe5fda..c3ce87decf 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBundleCommand.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBundleCommand.java @@ -37,25 +37,22 @@ package sonia.scm.repository.spi; import com.google.common.io.ByteSink; import com.google.common.io.Closeables; - import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.wc.SVNClientManager; import org.tmatesoft.svn.core.wc.SVNRevision; import org.tmatesoft.svn.core.wc.admin.SVNAdminClient; - import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.SvnUtil; import sonia.scm.repository.api.BundleResponse; -import static com.google.common.base.Preconditions.*; - -//~--- JDK imports ------------------------------------------------------------ - import java.io.File; import java.io.IOException; import java.io.OutputStream; +import static com.google.common.base.Preconditions.checkNotNull; + +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -64,31 +61,11 @@ public class SvnBundleCommand extends AbstractSvnCommand implements BundleCommand { - /** - * Constructs ... - * - * - * @param context - * @param repository - */ public SvnBundleCommand(SvnContext context, Repository repository) { super(context, repository); } - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param adminClient - * @param repository - * @param target - * - * @throws IOException - * @throws SVNException - */ private static void dump(SVNAdminClient adminClient, File repository, ByteSink target) throws SVNException, IOException @@ -107,21 +84,8 @@ public class SvnBundleCommand extends AbstractSvnCommand } } - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override - public BundleResponse bundle(BundleCommandRequest request) - throws IOException, RepositoryException - { + public BundleResponse bundle(BundleCommandRequest request) throws IOException { ByteSink archive = checkNotNull(request.getArchive(), "archive is required"); diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnCatCommand.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnCatCommand.java index 4a8b907c29..4936a16a8c 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnCatCommand.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnCatCommand.java @@ -43,15 +43,14 @@ import org.tmatesoft.svn.core.SVNProperties; import org.tmatesoft.svn.core.io.SVNRepository; import org.tmatesoft.svn.core.wc.SVNClientManager; import org.tmatesoft.svn.core.wc.admin.SVNLookClient; +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.PathNotFoundException; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RevisionNotFoundException; import sonia.scm.repository.SvnUtil; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -72,15 +71,6 @@ public class SvnCatCommand extends AbstractSvnCommand implements CatCommand //~--- constructors --------------------------------------------------------- - /** - * Constructs ... - * - * - * - * @param context - * @param repository - * @param repositoryDirectory - */ SvnCatCommand(SvnContext context, Repository repository) { super(context, repository); @@ -88,20 +78,8 @@ public class SvnCatCommand extends AbstractSvnCommand implements CatCommand //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @param request - * @param output - * - * @throws IOException - * @throws RepositoryException - */ @Override - public void getCatResult(CatCommandRequest request, OutputStream output) - throws IOException, RepositoryException - { + public void getCatResult(CatCommandRequest request, OutputStream output) throws RevisionNotFoundException, PathNotFoundException { if (logger.isDebugEnabled()) { logger.debug("try to get content for {}", request); @@ -125,7 +103,7 @@ public class SvnCatCommand extends AbstractSvnCommand implements CatCommand } @Override - public InputStream getCatResultStream(CatCommandRequest request) throws IOException, RepositoryException { + public InputStream getCatResultStream(CatCommandRequest request) throws RevisionNotFoundException, PathNotFoundException { // There seems to be no method creating an input stream as a result, so // we have no other possibility then to copy the content into a buffer and // stream it from there. @@ -134,20 +112,7 @@ public class SvnCatCommand extends AbstractSvnCommand implements CatCommand return new ByteArrayInputStream(output.toByteArray()); } - /** - * Method description - * - * - * @param request - * @param output - * @param revision - * - * @throws RepositoryException - */ - private void getCatFromRevision(CatCommandRequest request, - OutputStream output, long revision) - throws RepositoryException - { + private void getCatFromRevision(CatCommandRequest request, OutputStream output, long revision) throws PathNotFoundException, RevisionNotFoundException { logger.debug("try to read content from revision {} and path {}", revision, request.getPath()); @@ -164,31 +129,18 @@ public class SvnCatCommand extends AbstractSvnCommand implements CatCommand } } - private void handleSvnException(CatCommandRequest request, SVNException ex) throws RepositoryException { + private void handleSvnException(CatCommandRequest request, SVNException ex) throws PathNotFoundException, RevisionNotFoundException { int svnErrorCode = ex.getErrorMessage().getErrorCode().getCode(); if (SVNErrorCode.FS_NOT_FOUND.getCode() == svnErrorCode) { throw new PathNotFoundException(request.getPath()); } else if (SVNErrorCode.FS_NO_SUCH_REVISION.getCode() == svnErrorCode) { throw new RevisionNotFoundException(request.getRevision()); } else { - throw new RepositoryException("could not get content from revision", ex); + throw new InternalRepositoryException("could not get content from revision", ex); } } - /** - * Method description - * - * - * @param request - * @param output - * @param txn - * - * @throws RepositoryException - */ - private void getCatFromTransaction(CatCommandRequest request, - OutputStream output, String txn) - throws RepositoryException - { + private void getCatFromTransaction(CatCommandRequest request, OutputStream output, String txn) { logger.debug("try to read content from transaction {} and path {}", txn, request.getPath()); @@ -204,8 +156,7 @@ public class SvnCatCommand extends AbstractSvnCommand implements CatCommand } catch (SVNException ex) { - throw new RepositoryException("could not get content from transaction", - ex); + throw new InternalRepositoryException("could not get content from transaction", ex); } finally { diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnDiffCommand.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnDiffCommand.java index f7af17326d..0b65466a42 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnDiffCommand.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnDiffCommand.java @@ -36,10 +36,8 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.base.Preconditions; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import org.tmatesoft.svn.core.SVNDepth; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNURL; @@ -48,18 +46,17 @@ import org.tmatesoft.svn.core.wc.ISVNDiffGenerator; import org.tmatesoft.svn.core.wc.SVNClientManager; import org.tmatesoft.svn.core.wc.SVNDiffClient; import org.tmatesoft.svn.core.wc.SVNRevision; - +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; +import sonia.scm.repository.RevisionNotFoundException; import sonia.scm.repository.SvnUtil; import sonia.scm.repository.api.DiffFormat; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; import java.io.OutputStream; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -73,38 +70,13 @@ public class SvnDiffCommand extends AbstractSvnCommand implements DiffCommand private static final Logger logger = LoggerFactory.getLogger(SvnDiffCommand.class); - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - * - * - * @param context - * @param repository - * @param repositoryDirectory - */ public SvnDiffCommand(SvnContext context, Repository repository) { super(context, repository); } - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @param request - * @param output - * - * @throws IOException - * @throws RepositoryException - */ @Override - public void getDiffResult(DiffCommandRequest request, OutputStream output) - throws IOException, RepositoryException - { + public void getDiffResult(DiffCommandRequest request, OutputStream output) throws RevisionNotFoundException { if (logger.isDebugEnabled()) { logger.debug("create diff for {}", request); @@ -149,7 +121,7 @@ public class SvnDiffCommand extends AbstractSvnCommand implements DiffCommand } catch (SVNException ex) { - throw new RepositoryException("could not create diff", ex); + throw new InternalRepositoryException("could not create diff", ex); } finally { diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnLogCommand.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnLogCommand.java index b1024ec5b4..ededb4e1f0 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnLogCommand.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnLogCommand.java @@ -37,33 +37,25 @@ package sonia.scm.repository.spi; import com.google.common.base.Strings; import com.google.common.collect.Lists; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import org.tmatesoft.svn.core.ISVNLogEntryHandler; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNLogEntry; import org.tmatesoft.svn.core.io.SVNRepository; - import sonia.scm.repository.Changeset; import sonia.scm.repository.ChangesetPagingResult; +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; +import sonia.scm.repository.RevisionNotFoundException; import sonia.scm.repository.SvnUtil; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; - import java.util.Collection; import java.util.List; -/** - * - * @author Sebastian Sdorra - */ +//~--- JDK imports ------------------------------------------------------------ + public class SvnLogCommand extends AbstractSvnCommand implements LogCommand { @@ -73,17 +65,6 @@ public class SvnLogCommand extends AbstractSvnCommand implements LogCommand private static final Logger logger = LoggerFactory.getLogger(SvnLogCommand.class); - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - * - * - * @param context - * @param repository - * @param repositoryDirectory - */ SvnLogCommand(SvnContext context, Repository repository) { super(context, repository); @@ -91,22 +72,9 @@ public class SvnLogCommand extends AbstractSvnCommand implements LogCommand //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @param revision - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override @SuppressWarnings("unchecked") - public Changeset getChangeset(String revision) - throws IOException, RepositoryException - { + public Changeset getChangeset(String revision) throws RevisionNotFoundException { Changeset changeset = null; if (logger.isDebugEnabled()) @@ -128,28 +96,15 @@ public class SvnLogCommand extends AbstractSvnCommand implements LogCommand } catch (SVNException ex) { - throw new RepositoryException("could not open repository", ex); + throw new InternalRepositoryException("could not open repository", ex); } return changeset; } - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ @Override @SuppressWarnings("unchecked") - public ChangesetPagingResult getChangesets(LogCommandRequest request) - throws IOException, RepositoryException - { + public ChangesetPagingResult getChangesets(LogCommandRequest request) throws RevisionNotFoundException { if (logger.isDebugEnabled()) { logger.debug("fetch changesets for {}", request); @@ -183,7 +138,7 @@ public class SvnLogCommand extends AbstractSvnCommand implements LogCommand } catch (SVNException ex) { - throw new RepositoryException("could not open repository", ex); + throw new InternalRepositoryException("could not open repository", ex); } return changesets; @@ -191,18 +146,7 @@ public class SvnLogCommand extends AbstractSvnCommand implements LogCommand //~--- methods -------------------------------------------------------------- - /** - * Method description - * - * - * @param v - * - * @return - * - * @throws RepositoryException - */ - private long parseRevision(String v) throws RepositoryException - { + private long parseRevision(String v) throws RevisionNotFoundException { long result = -1l; if (!Strings.isNullOrEmpty(v)) @@ -213,8 +157,7 @@ public class SvnLogCommand extends AbstractSvnCommand implements LogCommand } catch (NumberFormatException ex) { - throw new RepositoryException( - String.format("could not convert revision %s", v), ex); + throw new RevisionNotFoundException(v); } } diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnBlameCommandTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnBlameCommandTest.java index e320dd3251..ec4f375df4 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnBlameCommandTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnBlameCommandTest.java @@ -35,17 +35,15 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import org.junit.Test; - import sonia.scm.repository.BlameLine; import sonia.scm.repository.BlameResult; -import sonia.scm.repository.RepositoryException; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; //~--- JDK imports ------------------------------------------------------------ -import java.io.IOException; - /** * * @author Sebastian Sdorra @@ -53,15 +51,8 @@ import java.io.IOException; public class SvnBlameCommandTest extends AbstractSvnCommandTestBase { - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testGetBlameResult() throws IOException, RepositoryException + public void testGetBlameResult() { BlameCommandRequest request = new BlameCommandRequest(); @@ -85,17 +76,8 @@ public class SvnBlameCommandTest extends AbstractSvnCommandTestBase assertNull(line.getAuthor().getMail()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testGetBlameResultWithRevision() - throws IOException, RepositoryException - { + public void testGetBlameResultWithRevision() { BlameCommandRequest request = new BlameCommandRequest(); request.setPath("a.txt"); diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnBrowseCommandTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnBrowseCommandTest.java index 369d179fed..c4c658ea7a 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnBrowseCommandTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnBrowseCommandTest.java @@ -36,19 +36,21 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import org.junit.Test; - import sonia.scm.repository.BrowserResult; import sonia.scm.repository.FileObject; -import sonia.scm.repository.RepositoryException; - -import static org.junit.Assert.*; - -//~--- JDK imports ------------------------------------------------------------ +import sonia.scm.repository.RevisionNotFoundException; import java.io.IOException; - import java.util.List; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -56,16 +58,8 @@ import java.util.List; public class SvnBrowseCommandTest extends AbstractSvnCommandTestBase { - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testBrowse() throws IOException, RepositoryException - { + public void testBrowse() throws RevisionNotFoundException { List foList = getRootFromTip(new BrowseCommandRequest()); FileObject a = getFileObject(foList, "a.txt"); @@ -87,11 +81,9 @@ public class SvnBrowseCommandTest extends AbstractSvnCommandTestBase * * * @throws IOException - * @throws RepositoryException */ @Test - public void testBrowseSubDirectory() throws IOException, RepositoryException - { + public void testBrowseSubDirectory() throws RevisionNotFoundException { BrowseCommandRequest request = new BrowseCommandRequest(); request.setPath("c"); @@ -137,16 +129,8 @@ public class SvnBrowseCommandTest extends AbstractSvnCommandTestBase checkDate(e.getLastModified()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testDisableLastCommit() throws IOException, RepositoryException - { + public void testDisableLastCommit() throws RevisionNotFoundException { BrowseCommandRequest request = new BrowseCommandRequest(); request.setDisableLastCommit(true); @@ -160,8 +144,7 @@ public class SvnBrowseCommandTest extends AbstractSvnCommandTestBase } @Test - public void testRecursive() throws IOException, RepositoryException - { + public void testRecursive() throws RevisionNotFoundException { BrowseCommandRequest request = new BrowseCommandRequest(); request.setRecursive(true); BrowserResult result = createCommand().getBrowserResult(request); @@ -220,20 +203,7 @@ public class SvnBrowseCommandTest extends AbstractSvnCommandTestBase return a; } - /** - * Method description - * - * - * @param request - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ - private List getRootFromTip(BrowseCommandRequest request) - throws IOException, RepositoryException - { + private List getRootFromTip(BrowseCommandRequest request) throws RevisionNotFoundException { BrowserResult result = createCommand().getBrowserResult(request); assertNotNull(result); diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnBundleCommandTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnBundleCommandTest.java index 57fde186cf..9e7e40810c 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnBundleCommandTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnBundleCommandTest.java @@ -37,23 +37,22 @@ package sonia.scm.repository.spi; import com.google.common.io.ByteSink; import com.google.common.io.Files; - import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; - -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.api.BundleResponse; -import static org.hamcrest.Matchers.*; - -import static org.junit.Assert.*; - -//~--- JDK imports ------------------------------------------------------------ - import java.io.File; import java.io.IOException; +import static org.hamcrest.Matchers.greaterThan; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -61,15 +60,8 @@ import java.io.IOException; public class SvnBundleCommandTest extends AbstractSvnCommandTestBase { - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testBundle() throws IOException, RepositoryException + public void testBundle() throws IOException { File file = temp.newFile(); ByteSink sink = Files.asByteSink(file); diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnCatCommandTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnCatCommandTest.java index f7e2123bad..3980b3e558 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnCatCommandTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnCatCommandTest.java @@ -34,7 +34,6 @@ package sonia.scm.repository.spi; import org.junit.Test; import sonia.scm.repository.PathNotFoundException; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RevisionNotFoundException; import java.io.ByteArrayOutputStream; @@ -48,7 +47,7 @@ import static org.junit.Assert.assertEquals; public class SvnCatCommandTest extends AbstractSvnCommandTestBase { @Test - public void testCat() throws IOException, RepositoryException { + public void testCat() throws PathNotFoundException, RevisionNotFoundException { CatCommandRequest request = new CatCommandRequest(); request.setPath("a.txt"); @@ -57,7 +56,7 @@ public class SvnCatCommandTest extends AbstractSvnCommandTestBase { } @Test - public void testSimpleCat() throws IOException, RepositoryException { + public void testSimpleCat() throws PathNotFoundException, RevisionNotFoundException { CatCommandRequest request = new CatCommandRequest(); request.setPath("c/d.txt"); @@ -65,7 +64,7 @@ public class SvnCatCommandTest extends AbstractSvnCommandTestBase { } @Test(expected = PathNotFoundException.class) - public void testUnknownFile() throws IOException, RepositoryException { + public void testUnknownFile() throws PathNotFoundException, RevisionNotFoundException { CatCommandRequest request = new CatCommandRequest(); request.setPath("unknown"); @@ -75,7 +74,7 @@ public class SvnCatCommandTest extends AbstractSvnCommandTestBase { } @Test(expected = RevisionNotFoundException.class) - public void testUnknownRevision() throws IOException, RepositoryException { + public void testUnknownRevision() throws PathNotFoundException, RevisionNotFoundException { CatCommandRequest request = new CatCommandRequest(); request.setPath("a.txt"); @@ -85,7 +84,7 @@ public class SvnCatCommandTest extends AbstractSvnCommandTestBase { } @Test - public void testSimpleStream() throws IOException, RepositoryException { + public void testSimpleStream() throws IOException, PathNotFoundException, RevisionNotFoundException { CatCommandRequest request = new CatCommandRequest(); request.setPath("a.txt"); request.setRevision("1"); @@ -99,7 +98,7 @@ public class SvnCatCommandTest extends AbstractSvnCommandTestBase { catResultStream.close(); } - private String execute(CatCommandRequest request) throws IOException, RepositoryException { + private String execute(CatCommandRequest request) throws PathNotFoundException, RevisionNotFoundException { String content = null; ByteArrayOutputStream baos = new ByteArrayOutputStream(); diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnLogCommandTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnLogCommandTest.java index a3942bd0f4..941687190c 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnLogCommandTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnLogCommandTest.java @@ -35,18 +35,18 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import org.junit.Test; - import sonia.scm.repository.Changeset; import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.Modifications; -import sonia.scm.repository.RepositoryException; +import sonia.scm.repository.RevisionNotFoundException; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; //~--- JDK imports ------------------------------------------------------------ -import java.io.IOException; - /** * * @author Sebastian Sdorra @@ -54,16 +54,8 @@ import java.io.IOException; public class SvnLogCommandTest extends AbstractSvnCommandTestBase { - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testGetAll() throws IOException, RepositoryException - { + public void testGetAll() throws RevisionNotFoundException { ChangesetPagingResult result = createCommand().getChangesets(new LogCommandRequest()); @@ -72,16 +64,8 @@ public class SvnLogCommandTest extends AbstractSvnCommandTestBase assertEquals(6, result.getChangesets().size()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testGetAllByPath() throws IOException, RepositoryException - { + public void testGetAllByPath() throws RevisionNotFoundException { LogCommandRequest request = new LogCommandRequest(); request.setPath("a.txt"); @@ -96,16 +80,8 @@ public class SvnLogCommandTest extends AbstractSvnCommandTestBase assertEquals("1", result.getChangesets().get(2).getId()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testGetAllWithLimit() throws IOException, RepositoryException - { + public void testGetAllWithLimit() throws RevisionNotFoundException { LogCommandRequest request = new LogCommandRequest(); request.setPagingLimit(2); @@ -127,16 +103,8 @@ public class SvnLogCommandTest extends AbstractSvnCommandTestBase assertEquals("4", c2.getId()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testGetAllWithPaging() throws IOException, RepositoryException - { + public void testGetAllWithPaging() throws RevisionNotFoundException { LogCommandRequest request = new LogCommandRequest(); request.setPagingStart(1); @@ -159,16 +127,8 @@ public class SvnLogCommandTest extends AbstractSvnCommandTestBase assertEquals("3", c2.getId()); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testGetCommit() throws IOException, RepositoryException - { + public void testGetCommit() throws RevisionNotFoundException { Changeset c = createCommand().getChangeset("3"); assertNotNull(c); @@ -188,16 +148,8 @@ public class SvnLogCommandTest extends AbstractSvnCommandTestBase assertEquals("b.txt", mods.getRemoved().get(0)); } - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - */ @Test - public void testGetRange() throws IOException, RepositoryException - { + public void testGetRange() throws RevisionNotFoundException { LogCommandRequest request = new LogCommandRequest(); request.setStartChangeset("2"); diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnUnbundleCommandTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnUnbundleCommandTest.java index 2c59797296..133518e8db 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnUnbundleCommandTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnUnbundleCommandTest.java @@ -34,26 +34,22 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.io.Files; - import org.junit.Test; - import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.io.SVNRepository; import org.tmatesoft.svn.core.io.SVNRepositoryFactory; - -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.SvnUtil; import sonia.scm.repository.api.UnbundleResponse; -import static org.hamcrest.Matchers.*; - -import static org.junit.Assert.*; - -//~--- JDK imports ------------------------------------------------------------ - import java.io.File; import java.io.IOException; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; +import static org.junit.Assert.assertThat; + +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -61,17 +57,9 @@ import java.io.IOException; public class SvnUnbundleCommandTest extends AbstractSvnCommandTestBase { - /** - * Method description - * - * - * @throws IOException - * @throws RepositoryException - * @throws SVNException - */ @Test public void testUnbundle() - throws IOException, RepositoryException, SVNException + throws IOException, SVNException { File bundle = bundle(); SvnContext ctx = createEmptyContext(); @@ -95,16 +83,7 @@ public class SvnUnbundleCommandTest extends AbstractSvnCommandTestBase SvnUtil.closeSession(repo); } - /** - * Method description - * - * - * @return - * - * @throws IOException - * @throws RepositoryException - */ - private File bundle() throws IOException, RepositoryException + private File bundle() throws IOException { File file = tempFolder.newFile(); diff --git a/scm-test/src/main/java/sonia/scm/ManagerTestBase.java b/scm-test/src/main/java/sonia/scm/ManagerTestBase.java index 24bd2a0ebb..eda3182638 100644 --- a/scm-test/src/main/java/sonia/scm/ManagerTestBase.java +++ b/scm-test/src/main/java/sonia/scm/ManagerTestBase.java @@ -33,21 +33,21 @@ package sonia.scm; -import java.io.IOException; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.rules.TemporaryFolder; import sonia.scm.util.MockUtil; +import java.io.IOException; + /** * * @author Sebastian Sdorra * * @param - * @param */ -public abstract class ManagerTestBase +public abstract class ManagerTestBase { @Rule @@ -55,7 +55,7 @@ public abstract class ManagerTestBase manager; + protected Manager manager; @Before public void setUp() throws IOException { @@ -75,6 +75,6 @@ public abstract class ManagerTestBase createManager(); + protected abstract Manager createManager(); } diff --git a/scm-test/src/main/java/sonia/scm/repository/DummyRepositoryHandler.java b/scm-test/src/main/java/sonia/scm/repository/DummyRepositoryHandler.java index db4cfe0090..5a1dc605bb 100644 --- a/scm-test/src/main/java/sonia/scm/repository/DummyRepositoryHandler.java +++ b/scm-test/src/main/java/sonia/scm/repository/DummyRepositoryHandler.java @@ -34,6 +34,7 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.collect.Sets; +import sonia.scm.AlreadyExistsException; import sonia.scm.io.DefaultFileSystem; import sonia.scm.store.ConfigurationStoreFactory; @@ -70,10 +71,10 @@ public class DummyRepositoryHandler @Override - protected void create(Repository repository, File directory) throws RepositoryException { + protected void create(Repository repository, File directory) throws AlreadyExistsException { String key = repository.getNamespace() + "/" + repository.getName(); if (existingRepoNames.contains(key)) { - throw new RepositoryAlreadyExistsException("Repo exists"); + throw new AlreadyExistsException(); } else { existingRepoNames.add(key); } diff --git a/scm-test/src/main/java/sonia/scm/repository/SimpleRepositoryHandlerTestBase.java b/scm-test/src/main/java/sonia/scm/repository/SimpleRepositoryHandlerTestBase.java index 680ac83dd9..999ef1dc45 100644 --- a/scm-test/src/main/java/sonia/scm/repository/SimpleRepositoryHandlerTestBase.java +++ b/scm-test/src/main/java/sonia/scm/repository/SimpleRepositoryHandlerTestBase.java @@ -35,6 +35,7 @@ package sonia.scm.repository; import org.junit.Test; import sonia.scm.AbstractTestBase; +import sonia.scm.AlreadyExistsException; import sonia.scm.store.ConfigurationStoreFactory; import sonia.scm.store.InMemoryConfigurationStoreFactory; import sonia.scm.util.IOUtil; @@ -60,12 +61,12 @@ public abstract class SimpleRepositoryHandlerTestBase extends AbstractTestBase { ConfigurationStoreFactory factory, File directory); @Test - public void testCreate() throws RepositoryException { + public void testCreate() throws AlreadyExistsException { createRepository(); } @Test - public void testCreateResourcePath() throws RepositoryException { + public void testCreateResourcePath() throws AlreadyExistsException { Repository repository = createRepository(); String path = handler.createResourcePath(repository); @@ -75,7 +76,7 @@ public abstract class SimpleRepositoryHandlerTestBase extends AbstractTestBase { } @Test - public void testDelete() throws RepositoryException { + public void testDelete() throws Exception { Repository repository = createRepository(); handler.delete(repository); @@ -100,7 +101,7 @@ public abstract class SimpleRepositoryHandlerTestBase extends AbstractTestBase { } } - private Repository createRepository() throws RepositoryException { + private Repository createRepository() throws AlreadyExistsException { Repository repository = RepositoryTestData.createHeartOfGold(); handler.create(repository); diff --git a/scm-test/src/main/java/sonia/scm/repository/client/spi/CommitRequest.java b/scm-test/src/main/java/sonia/scm/repository/client/spi/CommitRequest.java index fd473300fa..2138fef5cc 100644 --- a/scm-test/src/main/java/sonia/scm/repository/client/spi/CommitRequest.java +++ b/scm-test/src/main/java/sonia/scm/repository/client/spi/CommitRequest.java @@ -34,8 +34,8 @@ package sonia.scm.repository.client.spi; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; - import sonia.scm.repository.Person; /** @@ -105,7 +105,7 @@ public final class CommitRequest public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("author", author) .add("message", message) .toString(); diff --git a/scm-test/src/main/java/sonia/scm/repository/client/spi/TagRequest.java b/scm-test/src/main/java/sonia/scm/repository/client/spi/TagRequest.java index fccf555c16..ff34309b6d 100644 --- a/scm-test/src/main/java/sonia/scm/repository/client/spi/TagRequest.java +++ b/scm-test/src/main/java/sonia/scm/repository/client/spi/TagRequest.java @@ -34,8 +34,8 @@ package sonia.scm.repository.client.spi; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; - /** * * @author Sebastian Sdorra @@ -103,7 +103,7 @@ public final class TagRequest public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("revision", revision) .add("name", name) .toString(); diff --git a/scm-test/src/main/java/sonia/scm/user/UserManagerTestBase.java b/scm-test/src/main/java/sonia/scm/user/UserManagerTestBase.java index 86b3de5615..9f1c50c797 100644 --- a/scm-test/src/main/java/sonia/scm/user/UserManagerTestBase.java +++ b/scm-test/src/main/java/sonia/scm/user/UserManagerTestBase.java @@ -37,46 +37,33 @@ package sonia.scm.user; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; - import org.junit.Test; - +import sonia.scm.AlreadyExistsException; +import sonia.scm.ConcurrentModificationException; import sonia.scm.Manager; import sonia.scm.ManagerTestBase; - -import static org.junit.Assert.*; - -//~--- JDK imports ------------------------------------------------------------ +import sonia.scm.NotFoundException; import java.io.IOException; - import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.UUID; -/** - * - * @author Sebastian Sdorra - */ -public abstract class UserManagerTestBase - extends ManagerTestBase -{ +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +//~--- JDK imports ------------------------------------------------------------ + +public abstract class UserManagerTestBase extends ManagerTestBase { - /** Field description */ public static final int THREAD_COUNT = 10; - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @throws IOException - * @throws UserException - */ @Test - public void testCreate() throws UserException, IOException - { + public void testCreate() throws AlreadyExistsException { User zaphod = UserTestData.createZaphod(); manager.create(zaphod); @@ -87,16 +74,8 @@ public abstract class UserManagerTestBase assertUserEquals(zaphod, otherUser); } - /** - * Method description - * - * - * @throws IOException - * @throws UserException - */ - @Test(expected = UserAlreadyExistsException.class) - public void testCreateExisting() throws UserException, IOException - { + @Test(expected = AlreadyExistsException.class) + public void testCreateExisting() throws AlreadyExistsException { User zaphod = UserTestData.createZaphod(); manager.create(zaphod); @@ -107,16 +86,8 @@ public abstract class UserManagerTestBase manager.create(sameUser); } - /** - * Method description - * - * - * @throws IOException - * @throws UserException - */ @Test - public void testDelete() throws UserException, IOException - { + public void testDelete() throws Exception { User zaphod = UserTestData.createZaphod(); manager.create(zaphod); @@ -125,29 +96,13 @@ public abstract class UserManagerTestBase assertNull(manager.get("zaphod")); } - /** - * Method description - * - * - * @throws IOException - * @throws UserException - */ - @Test(expected = UserNotFoundException.class) - public void testDeleteNotFound() throws UserException, IOException - { + @Test(expected = NotFoundException.class) + public void testDeleteNotFound() throws Exception { manager.delete(UserTestData.createDent()); } - /** - * Method description - * - * - * @throws IOException - * @throws UserException - */ @Test - public void testGet() throws UserException, IOException - { + public void testGet() throws AlreadyExistsException { User zaphod = UserTestData.createZaphod(); manager.create(zaphod); @@ -160,16 +115,8 @@ public abstract class UserManagerTestBase assertEquals("Zaphod Beeblebrox", zaphod.getDisplayName()); } - /** - * Method description - * - * - * @throws IOException - * @throws UserException - */ @Test - public void testGetAll() throws UserException, IOException - { + public void testGetAll() throws AlreadyExistsException { User zaphod = UserTestData.createZaphod(); manager.create(zaphod); @@ -233,16 +180,8 @@ public abstract class UserManagerTestBase assertEquals(reference.getDisplayName(), "Tricia McMillan"); } - /** - * Method description - * - * - * @throws IOException - * @throws UserException - */ @Test - public void testModify() throws UserException, IOException - { + public void testModify() throws AlreadyExistsException, NotFoundException, ConcurrentModificationException { User zaphod = UserTestData.createZaphod(); manager.create(zaphod); @@ -256,31 +195,13 @@ public abstract class UserManagerTestBase assertEquals(otherUser.getDisplayName(), "Tricia McMillan"); } - /** - * Method description - * - * - * @throws IOException - * @throws UserException - */ - @Test(expected = UserException.class) - public void testModifyNotExisting() throws UserException, IOException - { + @Test(expected = NotFoundException.class) + public void testModifyNotExisting() throws NotFoundException, ConcurrentModificationException { manager.modify(UserTestData.createZaphod()); } - /** - * Method description - * - * - * @throws IOException - * @throws InterruptedException - * @throws UserException - */ @Test - public void testMultiThreaded() - throws UserException, IOException, InterruptedException - { + public void testMultiThreaded() throws InterruptedException { int initialSize = manager.getAll().size(); List testers = new ArrayList(); @@ -316,16 +237,8 @@ public abstract class UserManagerTestBase assertTrue((initialSize + THREAD_COUNT) == manager.getAll().size()); } - /** - * Method description - * - * - * @throws IOException - * @throws UserException - */ @Test - public void testRefresh() throws UserException, IOException - { + public void testRefresh() throws AlreadyExistsException, NotFoundException { User zaphod = UserTestData.createZaphod(); manager.create(zaphod); @@ -335,26 +248,11 @@ public abstract class UserManagerTestBase assertEquals(zaphod.getDisplayName(), "Zaphod Beeblebrox"); } - /** - * Method description - * - * - * @throws IOException - * @throws UserException - */ - @Test(expected = UserNotFoundException.class) - public void testRefreshNotFound() throws UserException, IOException - { + @Test(expected = NotFoundException.class) + public void testRefreshNotFound() throws NotFoundException { manager.refresh(UserTestData.createDent()); } - /** - * Method description - * - * - * @param user - * @param otherUser - */ private void assertUserEquals(User user, User otherUser) { assertEquals(user.getName(), otherUser.getName()); @@ -363,35 +261,16 @@ public abstract class UserManagerTestBase assertEquals(user.getPassword(), otherUser.getPassword()); } - //~--- inner classes -------------------------------------------------------- - - /** - * Class description - * - * - * @version Enter version here..., 2010-11-23 - * @author Sebastian Sdorra - */ private static class MultiThreadTester implements Runnable { - /** - * Constructs ... - * - * - * @param userManager - */ - public MultiThreadTester(Manager userManager) + public MultiThreadTester(Manager userManager) { this.manager = userManager; } //~--- methods ------------------------------------------------------------ - /** - * Method description - * - */ @Override public void run() { @@ -410,17 +289,7 @@ public abstract class UserManagerTestBase finished = true; } - /** - * Method description - * - * - * @return - * - * @throws IOException - * @throws UserException - */ - private User createUser() throws UserException, IOException - { + private User createUser() throws AlreadyExistsException { String id = UUID.randomUUID().toString(); User user = new User(id, id.concat(" displayName"), id.concat("@mail.com")); @@ -430,18 +299,7 @@ public abstract class UserManagerTestBase return user; } - /** - * Method description - * - * - * @param user - * - * @throws IOException - * @throws UserException - */ - private void modifyAndDeleteUser(User user) - throws UserException, IOException - { + private void modifyAndDeleteUser(User user) throws IOException, NotFoundException, ConcurrentModificationException { String name = user.getName(); String nd = name.concat(" new displayname"); @@ -463,6 +321,6 @@ public abstract class UserManagerTestBase private boolean finished = false; /** Field description */ - private Manager manager; + private Manager manager; } } diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index 6d3b94412d..602be8185e 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -99,11 +99,6 @@ jackson-datatype-jsr310 ${jackson.version} - - javax - javaee-api - 7.0 - org.hibernate.validator hibernate-validator diff --git a/scm-webapp/src/main/java/sonia/scm/ClassOverride.java b/scm-webapp/src/main/java/sonia/scm/ClassOverride.java index 63d4c8339b..8741ce85af 100644 --- a/scm-webapp/src/main/java/sonia/scm/ClassOverride.java +++ b/scm-webapp/src/main/java/sonia/scm/ClassOverride.java @@ -34,13 +34,14 @@ package sonia.scm; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -97,7 +98,7 @@ public class ClassOverride implements Validateable public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("bind", bind) .add("to", to) .toString(); diff --git a/scm-webapp/src/main/java/sonia/scm/ManagerDaoAdapter.java b/scm-webapp/src/main/java/sonia/scm/ManagerDaoAdapter.java index abc9ab2fd9..e2a1f29a33 100644 --- a/scm-webapp/src/main/java/sonia/scm/ManagerDaoAdapter.java +++ b/scm-webapp/src/main/java/sonia/scm/ManagerDaoAdapter.java @@ -7,19 +7,15 @@ import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; -public class ManagerDaoAdapter { +public class ManagerDaoAdapter { private final GenericDAO dao; - private final Function notFoundException; - private final Function alreadyExistsException; - public ManagerDaoAdapter(GenericDAO dao, Function notFoundException, Function alreadyExistsException) { + public ManagerDaoAdapter(GenericDAO dao) { this.dao = dao; - this.notFoundException = notFoundException; - this.alreadyExistsException = alreadyExistsException; } - public void modify(T object, Function permissionCheck, AroundHandler beforeUpdate, AroundHandler afterUpdate) throws E { + public void modify(T object, Function permissionCheck, AroundHandler beforeUpdate, AroundHandler afterUpdate) throws NotFoundException { T notModified = dao.get(object.getId()); if (notModified != null) { permissionCheck.apply(notModified).check(); @@ -34,19 +30,19 @@ public class ManagerDaoAdapter { afterUpdate.handle(notModified); } else { - throw notFoundException.apply(object); + throw new NotFoundException(); } } - public T create(T newObject, Supplier permissionCheck, AroundHandler beforeCreate, AroundHandler afterCreate) throws E { + public T create(T newObject, Supplier permissionCheck, AroundHandler beforeCreate, AroundHandler afterCreate) throws AlreadyExistsException { return create(newObject, permissionCheck, beforeCreate, afterCreate, dao::contains); } - public T create(T newObject, Supplier permissionCheck, AroundHandler beforeCreate, AroundHandler afterCreate, Predicate existsCheck) throws E { + public T create(T newObject, Supplier permissionCheck, AroundHandler beforeCreate, AroundHandler afterCreate, Predicate existsCheck) throws AlreadyExistsException { permissionCheck.get().check(); AssertUtil.assertIsValid(newObject); if (existsCheck.test(newObject)) { - throw alreadyExistsException.apply(newObject); + throw new AlreadyExistsException(); } newObject.setCreationDate(System.currentTimeMillis()); beforeCreate.handle(newObject); @@ -55,19 +51,19 @@ public class ManagerDaoAdapter { return newObject; } - public void delete(T toDelete, Supplier permissionCheck, AroundHandler beforeDelete, AroundHandler afterDelete) throws E { + public void delete(T toDelete, Supplier permissionCheck, AroundHandler beforeDelete, AroundHandler afterDelete) throws NotFoundException { permissionCheck.get().check(); if (dao.contains(toDelete)) { beforeDelete.handle(toDelete); dao.delete(toDelete); afterDelete.handle(toDelete); } else { - throw notFoundException.apply(toDelete); + throw new NotFoundException(); } } @FunctionalInterface - public interface AroundHandler { - void handle(T notModified) throws E; + public interface AroundHandler { + void handle(T notModified); } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/UserAlreadyExistsExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/AlreadyExistsExceptionMapper.java similarity index 53% rename from scm-webapp/src/main/java/sonia/scm/api/rest/UserAlreadyExistsExceptionMapper.java rename to scm-webapp/src/main/java/sonia/scm/api/rest/AlreadyExistsExceptionMapper.java index ef0cc8b0a4..28240482e5 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/UserAlreadyExistsExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/AlreadyExistsExceptionMapper.java @@ -1,6 +1,6 @@ package sonia.scm.api.rest; -import sonia.scm.user.UserAlreadyExistsException; +import sonia.scm.AlreadyExistsException; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; @@ -8,9 +8,9 @@ import javax.ws.rs.ext.ExceptionMapper; import javax.ws.rs.ext.Provider; @Provider -public class UserAlreadyExistsExceptionMapper implements ExceptionMapper { +public class AlreadyExistsExceptionMapper implements ExceptionMapper { @Override - public Response toResponse(UserAlreadyExistsException exception) { + public Response toResponse(AlreadyExistsException exception) { return Response.status(Status.CONFLICT).build(); } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/GroupAlreadyExistsExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/GroupAlreadyExistsExceptionMapper.java deleted file mode 100644 index 43c0d1ff32..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/GroupAlreadyExistsExceptionMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package sonia.scm.api.rest; - -import sonia.scm.group.GroupAlreadyExistsException; - -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; - -@Provider -public class GroupAlreadyExistsExceptionMapper implements ExceptionMapper { - @Override - public Response toResponse(GroupAlreadyExistsException exception) { - return Response.status(Status.CONFLICT).build(); - } -} diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/Permission.java b/scm-webapp/src/main/java/sonia/scm/api/rest/Permission.java index cab11840df..ba707c19c2 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/Permission.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/Permission.java @@ -34,15 +34,15 @@ package sonia.scm.api.rest; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +//~--- JDK imports ------------------------------------------------------------ /** * @@ -127,7 +127,7 @@ public class Permission implements Serializable public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("id", id) .add("value", value) .toString(); diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/RepositoryAlreadyExistsExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/RepositoryAlreadyExistsExceptionMapper.java deleted file mode 100644 index e69b9e98d6..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/RepositoryAlreadyExistsExceptionMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package sonia.scm.api.rest; - -import sonia.scm.repository.RepositoryAlreadyExistsException; - -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; - -@Provider -public class RepositoryAlreadyExistsExceptionMapper implements ExceptionMapper { - @Override - public Response toResponse(RepositoryAlreadyExistsException exception) { - return Response.status(Status.CONFLICT).build(); - } -} diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/RestExceptionResult.java b/scm-webapp/src/main/java/sonia/scm/api/rest/RestExceptionResult.java index 42130a0a35..5c0e048b78 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/RestExceptionResult.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/RestExceptionResult.java @@ -34,15 +34,16 @@ package sonia.scm.api.rest; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.base.Throwables; -//~--- JDK imports ------------------------------------------------------------ - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -145,7 +146,7 @@ public class RestExceptionResult public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("message", message) .add("stacktrace", stacktrace) .toString(); diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AbstractManagerResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AbstractManagerResource.java index 2ad7a64255..f00072cdcb 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AbstractManagerResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AbstractManagerResource.java @@ -48,8 +48,13 @@ import sonia.scm.util.AssertUtil; import sonia.scm.util.HttpUtil; import sonia.scm.util.Util; -import javax.ws.rs.core.*; +import javax.ws.rs.core.CacheControl; +import javax.ws.rs.core.EntityTag; +import javax.ws.rs.core.GenericEntity; +import javax.ws.rs.core.Request; +import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; +import javax.ws.rs.core.UriInfo; import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; @@ -61,28 +66,19 @@ import java.util.Date; //~--- JDK imports ------------------------------------------------------------ -/** - * - * @author Sebastian Sdorra - * - * @param - * @param - */ -public abstract class AbstractManagerResource -{ +public abstract class AbstractManagerResource { /** the logger for AbstractManagerResource */ private static final Logger logger = LoggerFactory.getLogger(AbstractManagerResource.class); - protected final Manager manager; + protected final Manager manager; private final Class type; protected int cacheMaxAge = 0; protected boolean disableCache = false; - public AbstractManagerResource(Manager manager, Class type) { + public AbstractManagerResource(Manager manager, Class type) { this.manager = manager; this.type = type; } diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/BrowserStreamingOutput.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/BrowserStreamingOutput.java index 73f59f14da..2705b407de 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/BrowserStreamingOutput.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/BrowserStreamingOutput.java @@ -38,7 +38,6 @@ package sonia.scm.api.rest.resources; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.PathNotFoundException; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RevisionNotFoundException; import sonia.scm.repository.api.CatCommandBuilder; import sonia.scm.repository.api.RepositoryService; @@ -120,13 +119,13 @@ public class BrowserStreamingOutput implements StreamingOutput throw new WebApplicationException(Response.Status.NOT_FOUND); } - catch (RepositoryException ex) - { - logger.error("could not write content to page", ex); - - throw new WebApplicationException(ex, - Response.Status.INTERNAL_SERVER_ERROR); - } +// catch (RepositoryException ex) +// { +// logger.error("could not write content to page", ex); +// +// throw new WebApplicationException(ex, +// Response.Status.INTERNAL_SERVER_ERROR); +// } finally { IOUtil.close(repositoryService); diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/ChangePasswordResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/ChangePasswordResource.java index 7aed8dde0b..95f729c2a3 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/ChangePasswordResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/ChangePasswordResource.java @@ -39,26 +39,20 @@ import com.google.inject.Inject; import com.webcohesion.enunciate.metadata.rs.ResponseCode; import com.webcohesion.enunciate.metadata.rs.StatusCodes; import com.webcohesion.enunciate.metadata.rs.TypeHint; - import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.credential.PasswordService; import org.apache.shiro.subject.Subject; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - +import sonia.scm.ConcurrentModificationException; +import sonia.scm.NotFoundException; import sonia.scm.api.rest.RestActionResult; import sonia.scm.security.Role; import sonia.scm.security.ScmSecurityException; import sonia.scm.user.User; -import sonia.scm.user.UserException; import sonia.scm.user.UserManager; import sonia.scm.util.AssertUtil; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; - import javax.ws.rs.FormParam; import javax.ws.rs.POST; import javax.ws.rs.Path; @@ -67,6 +61,8 @@ import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +//~--- JDK imports ------------------------------------------------------------ + /** * Resource to change the password of the authenticated user. * @@ -104,11 +100,6 @@ public class ChangePasswordResource * * @param oldPassword old password of the current user * @param newPassword new password for the current user - * - * @return - * - * @throws IOException - * @throws UserException */ @POST @TypeHint(RestActionResult.class) @@ -118,10 +109,7 @@ public class ChangePasswordResource @ResponseCode(code = 500, condition = "internal server error") }) @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - public Response changePassword(@FormParam("old-password") String oldPassword, - @FormParam("new-password") String newPassword) - throws UserException, IOException - { + public Response changePassword(@FormParam("old-password") String oldPassword, @FormParam("new-password") String newPassword) throws NotFoundException, ConcurrentModificationException { AssertUtil.assertIsNotEmpty(oldPassword); AssertUtil.assertIsNotEmpty(newPassword); diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/DiffStreamingOutput.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/DiffStreamingOutput.java index fc0f3751e5..db29725917 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/DiffStreamingOutput.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/DiffStreamingOutput.java @@ -35,26 +35,20 @@ package sonia.scm.api.rest.resources; //~--- non-JDK imports -------------------------------------------------------- -import com.google.common.io.Closeables; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - -import sonia.scm.repository.PathNotFoundException; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RevisionNotFoundException; import sonia.scm.repository.api.DiffCommandBuilder; import sonia.scm.repository.api.RepositoryService; - -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; -import java.io.OutputStream; +import sonia.scm.util.IOUtil; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import javax.ws.rs.core.StreamingOutput; -import sonia.scm.util.IOUtil; +import java.io.IOException; +import java.io.OutputStream; + +//~--- JDK imports ------------------------------------------------------------ /** * @@ -96,22 +90,11 @@ public class DiffStreamingOutput implements StreamingOutput * @throws WebApplicationException */ @Override - public void write(OutputStream output) - throws IOException, WebApplicationException - { + public void write(OutputStream output) throws IOException { try { builder.retriveContent(output); } - catch (PathNotFoundException ex) - { - if (logger.isWarnEnabled()) - { - logger.warn("could not find path {}", ex.getPath()); - } - - throw new WebApplicationException(Response.Status.NOT_FOUND); - } catch (RevisionNotFoundException ex) { if (logger.isWarnEnabled()) @@ -121,13 +104,13 @@ public class DiffStreamingOutput implements StreamingOutput throw new WebApplicationException(Response.Status.NOT_FOUND); } - catch (RepositoryException ex) - { - logger.error("could not write content to page", ex); - - throw new WebApplicationException(ex, - Response.Status.INTERNAL_SERVER_ERROR); - } +// catch (RepositoryException ex) +// { +// logger.error("could not write content to page", ex); +// +// throw new WebApplicationException(ex, +// Response.Status.INTERNAL_SERVER_ERROR); +// } finally { IOUtil.close(repositoryService); 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 42816abd93..a560cc278e 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 @@ -43,12 +43,25 @@ import com.webcohesion.enunciate.metadata.rs.StatusCodes; import com.webcohesion.enunciate.metadata.rs.TypeHint; import org.apache.shiro.SecurityUtils; import sonia.scm.group.Group; -import sonia.scm.group.GroupException; import sonia.scm.group.GroupManager; import sonia.scm.security.Role; -import javax.ws.rs.*; -import javax.ws.rs.core.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.GenericEntity; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Request; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; import java.util.Collection; //~--- JDK imports ------------------------------------------------------------ @@ -60,23 +73,13 @@ import java.util.Collection; */ @Path("groups") @Singleton -public class GroupResource - extends AbstractManagerResource -{ +public class GroupResource extends AbstractManagerResource { /** Field description */ public static final String PATH_PART = "groups"; //~--- constructors --------------------------------------------------------- - /** - * Constructs ... - * - * - * - * @param securityContextProvider - * @param groupManager - */ @Inject public GroupResource(GroupManager groupManager) { diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryImportResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryImportResource.java index 1b25fc3f79..4ffb349057 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryImportResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryImportResource.java @@ -35,7 +35,7 @@ package sonia.scm.api.rest.resources; //~--- non-JDK imports -------------------------------------------------------- -import com.google.common.base.Objects; +import com.google.common.base.MoreObjects; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.io.Files; @@ -47,10 +47,19 @@ import com.webcohesion.enunciate.metadata.rs.TypeHint; import org.apache.shiro.SecurityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.AlreadyExistsException; +import sonia.scm.NotFoundException; import sonia.scm.NotSupportedFeatuerException; import sonia.scm.Type; import sonia.scm.api.rest.RestActionUploadResult; -import sonia.scm.repository.*; +import sonia.scm.repository.AdvancedImportHandler; +import sonia.scm.repository.ImportHandler; +import sonia.scm.repository.ImportResult; +import sonia.scm.repository.InternalRepositoryException; +import sonia.scm.repository.Repository; +import sonia.scm.repository.RepositoryHandler; +import sonia.scm.repository.RepositoryManager; +import sonia.scm.repository.RepositoryType; import sonia.scm.repository.api.Command; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; @@ -58,8 +67,21 @@ import sonia.scm.repository.api.UnbundleCommandBuilder; import sonia.scm.security.Role; import sonia.scm.util.IOUtil; -import javax.ws.rs.*; -import javax.ws.rs.core.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.FormParam; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.GenericEntity; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; @@ -256,10 +278,10 @@ public class RepositoryImportResource service = serviceFactory.create(repository); service.getPullCommand().pull(request.getUrl()); } - catch (RepositoryException ex) - { - handleImportFailure(ex, repository); - } +// catch (RepositoryException ex) +// { +// handleImportFailure(ex, repository); +// } catch (IOException ex) { handleImportFailure(ex, repository); @@ -413,11 +435,11 @@ public class RepositoryImportResource logger.warn("exception occured durring directory import", ex); response = Response.serverError().build(); } - catch (RepositoryException ex) - { - logger.warn("exception occured durring directory import", ex); - response = Response.serverError().build(); - } +// catch (RepositoryException ex) +// { +// logger.warn("exception occured durring directory import", ex); +// response = Response.serverError().build(); +// } } else { @@ -526,14 +548,14 @@ public class RepositoryImportResource // repository = new Repository(null, type, name); manager.create(repository); } - catch (RepositoryAlreadyExistsException ex) + catch (AlreadyExistsException ex) { logger.warn("a {} repository with the name {} already exists", type, name); throw new WebApplicationException(Response.Status.CONFLICT); } - catch (RepositoryException ex) + catch (InternalRepositoryException ex) { handleGenericCreationFailure(ex, type, name); } @@ -583,11 +605,7 @@ public class RepositoryImportResource service = serviceFactory.create(repository); service.getUnbundleCommand().setCompressed(compressed).unbundle(file); } - catch (RepositoryException ex) - { - handleImportFailure(ex, repository); - } - catch (IOException ex) + catch (InternalRepositoryException ex) { handleImportFailure(ex, repository); } @@ -685,9 +703,9 @@ public class RepositoryImportResource { manager.delete(repository); } - catch (RepositoryException e) + catch (InternalRepositoryException | NotFoundException e) { - logger.error("can not delete repository", e); + logger.error("can not delete repository after import failure", e); } throw new WebApplicationException(ex, @@ -741,7 +759,7 @@ public class RepositoryImportResource { throw new WebApplicationException(ex); } - catch (RepositoryException ex) + catch (InternalRepositoryException ex) { throw new WebApplicationException(ex); } @@ -812,7 +830,7 @@ public class RepositoryImportResource public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("name", name) .add("url", url) .toString(); 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 9b9688332f..4a9fd9e38f 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 @@ -46,16 +46,51 @@ import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.AuthorizationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import sonia.scm.repository.*; -import sonia.scm.repository.api.*; +import sonia.scm.NotFoundException; +import sonia.scm.repository.BlameResult; +import sonia.scm.repository.Branches; +import sonia.scm.repository.BrowserResult; +import sonia.scm.repository.Changeset; +import sonia.scm.repository.ChangesetPagingResult; +import sonia.scm.repository.HealthChecker; +import sonia.scm.repository.Permission; +import sonia.scm.repository.Repository; +import sonia.scm.repository.RepositoryIsNotArchivedException; +import sonia.scm.repository.RepositoryManager; +import sonia.scm.repository.RepositoryNotFoundException; +import sonia.scm.repository.Tags; +import sonia.scm.repository.api.BlameCommandBuilder; +import sonia.scm.repository.api.BrowseCommandBuilder; +import sonia.scm.repository.api.CatCommandBuilder; +import sonia.scm.repository.api.CommandNotSupportedException; +import sonia.scm.repository.api.DiffCommandBuilder; +import sonia.scm.repository.api.DiffFormat; +import sonia.scm.repository.api.LogCommandBuilder; +import sonia.scm.repository.api.RepositoryService; +import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.util.AssertUtil; import sonia.scm.util.HttpUtil; import sonia.scm.util.IOUtil; import sonia.scm.util.Util; -import javax.ws.rs.*; -import javax.ws.rs.core.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.GenericEntity; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Request; +import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; +import javax.ws.rs.core.StreamingOutput; +import javax.ws.rs.core.UriInfo; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; @@ -69,7 +104,7 @@ import java.util.Collection; */ @Singleton @Path("repositories") -public class RepositoryResource extends AbstractManagerResource +public class RepositoryResource extends AbstractManagerResource { /** Field description */ @@ -169,12 +204,15 @@ public class RepositoryResource extends AbstractManagerResource +public class UserResource extends AbstractManagerResource { /** Field description */ diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java index b06b5b9eba..d44a91d2c9 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java @@ -5,7 +5,6 @@ import com.webcohesion.enunciate.metadata.rs.StatusCodes; import com.webcohesion.enunciate.metadata.rs.TypeHint; import sonia.scm.repository.Branches; import sonia.scm.repository.NamespaceAndName; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RepositoryNotFoundException; import sonia.scm.repository.api.CommandNotSupportedException; import sonia.scm.repository.api.RepositoryService; @@ -55,7 +54,7 @@ public class BranchRootResource { @ResponseCode(code = 404, condition = "not found, no branch with the specified name for the repository available or repository not found"), @ResponseCode(code = 500, condition = "internal server error") }) - public Response get(@PathParam("namespace") String namespace, @PathParam("name") String name, @PathParam("branch") String branchName) throws IOException, RepositoryException { + public Response get(@PathParam("namespace") String namespace, @PathParam("name") String name, @PathParam("branch") String branchName) throws IOException { try (RepositoryService repositoryService = servicefactory.create(new NamespaceAndName(namespace, name))) { Branches branches = repositoryService.getBranchesCommand().getBranches(); return branches.getBranches() @@ -100,7 +99,7 @@ public class BranchRootResource { @ResponseCode(code = 404, condition = "not found, no repository found for the given namespace and name"), @ResponseCode(code = 500, condition = "internal server error") }) - public Response getAll(@PathParam("namespace") String namespace, @PathParam("name") String name) throws IOException, RepositoryException { + public Response getAll(@PathParam("namespace") String namespace, @PathParam("name") String name) throws IOException { try (RepositoryService repositoryService = servicefactory.create(new NamespaceAndName(namespace, name))) { Branches branches = repositoryService.getBranchesCommand().getBranches(); return Response.ok(branchCollectionToDtoMapper.map(namespace, name, branches.getBranches())).build(); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CollectionResourceManagerAdapter.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CollectionResourceManagerAdapter.java index 3169088331..3ef19f7294 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CollectionResourceManagerAdapter.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CollectionResourceManagerAdapter.java @@ -1,6 +1,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.HalRepresentation; +import sonia.scm.AlreadyExistsException; import sonia.scm.Manager; import sonia.scm.ModelObject; import sonia.scm.PageResult; @@ -22,16 +23,14 @@ import static javax.ws.rs.core.Response.Status.BAD_REQUEST; * * @param The type of the model object, eg. {@link sonia.scm.user.User}. * @param The corresponding transport object, eg. {@link UserDto}. - * @param The exception type for the model object, eg. {@link sonia.scm.user.UserException}. * * @see SingleResourceManagerAdapter */ @SuppressWarnings("squid:S00119") // "MODEL_OBJECT" is much more meaningful than "M", right? class CollectionResourceManagerAdapter extends AbstractManagerResource { + DTO extends HalRepresentation> extends AbstractManagerResource { - CollectionResourceManagerAdapter(Manager manager, Class type) { + CollectionResourceManagerAdapter(Manager manager, Class type) { super(manager, type); } @@ -48,7 +47,7 @@ class CollectionResourceManagerAdapter modelObjectSupplier, Function uriCreator) throws EXCEPTION { + public Response create(DTO dto, Supplier modelObjectSupplier, Function uriCreator) throws AlreadyExistsException { if (dto == null) { return Response.status(BAD_REQUEST).build(); } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ContentResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ContentResource.java index 0936a5b4a0..bf97a998d7 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ContentResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ContentResource.java @@ -8,7 +8,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.PathNotFoundException; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RepositoryNotFoundException; import sonia.scm.repository.RevisionNotFoundException; import sonia.scm.repository.api.RepositoryService; @@ -79,9 +78,9 @@ public class ContentResource { } catch (PathNotFoundException e) { LOG.debug("path '{}' not found in repository {}/{}", path, namespace, name, e); throw new WebApplicationException(Status.NOT_FOUND); - } catch (RepositoryException e) { - LOG.info("error reading repository resource {} from {}/{}", path, namespace, name, e); - throw new WebApplicationException(Status.INTERNAL_SERVER_ERROR); + } catch (RevisionNotFoundException e) { + LOG.debug("revision '{}' not found in repository {}/{}", revision, namespace, name, e); + throw new WebApplicationException(Status.NOT_FOUND); } }; } @@ -124,7 +123,7 @@ public class ContentResource { } catch (RevisionNotFoundException e) { LOG.debug("revision '{}' not found in repository {}/{}", revision, namespace, name, e); return Response.status(Status.NOT_FOUND).build(); - } catch (IOException | RepositoryException e) { + } catch (IOException e) { LOG.info("error reading repository resource {} from {}/{}", path, namespace, name, e); return Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); } @@ -137,7 +136,7 @@ public class ContentResource { contentType.getLanguage().ifPresent(language -> responseBuilder.header("Language", language)); } - private byte[] getHead(String revision, String path, RepositoryService repositoryService) throws IOException, RepositoryException { + private byte[] getHead(String revision, String path, RepositoryService repositoryService) throws IOException, PathNotFoundException, RevisionNotFoundException { InputStream stream = repositoryService.getCatCommand().setRevision(revision).getStream(path); try { byte[] buffer = new byte[HEAD_BUFFER_SIZE]; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupCollectionResource.java index 4a9c797b9f..acc02c0da4 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupCollectionResource.java @@ -1,15 +1,24 @@ package sonia.scm.api.v2.resources; -import com.webcohesion.enunciate.metadata.rs.*; +import com.webcohesion.enunciate.metadata.rs.ResponseCode; +import com.webcohesion.enunciate.metadata.rs.ResponseHeader; +import com.webcohesion.enunciate.metadata.rs.ResponseHeaders; +import com.webcohesion.enunciate.metadata.rs.StatusCodes; +import com.webcohesion.enunciate.metadata.rs.TypeHint; +import sonia.scm.AlreadyExistsException; import sonia.scm.group.Group; -import sonia.scm.group.GroupException; import sonia.scm.group.GroupManager; import sonia.scm.web.VndMediaType; import javax.inject.Inject; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; -import java.io.IOException; public class GroupCollectionResource { @@ -19,7 +28,7 @@ public class GroupCollectionResource { private final GroupCollectionToDtoMapper groupCollectionToDtoMapper; private final ResourceLinks resourceLinks; - private final IdResourceManagerAdapter adapter; + private final IdResourceManagerAdapter adapter; @Inject public GroupCollectionResource(GroupManager manager, GroupDtoToGroupMapper dtoToGroupMapper, GroupCollectionToDtoMapper groupCollectionToDtoMapper, ResourceLinks resourceLinks) { @@ -76,7 +85,7 @@ public class GroupCollectionResource { }) @TypeHint(TypeHint.NO_CONTENT.class) @ResponseHeaders(@ResponseHeader(name = "Location", description = "uri to the created group")) - public Response create(GroupDto groupDto) throws IOException, GroupException { + public Response create(GroupDto groupDto) throws AlreadyExistsException { return adapter.create(groupDto, () -> dtoToGroupMapper.map(groupDto), group -> resourceLinks.group().self(group.getName())); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java index 10818ec953..c0bb7e5bc5 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java @@ -4,19 +4,24 @@ import com.webcohesion.enunciate.metadata.rs.ResponseCode; import com.webcohesion.enunciate.metadata.rs.StatusCodes; import com.webcohesion.enunciate.metadata.rs.TypeHint; import sonia.scm.group.Group; -import sonia.scm.group.GroupException; import sonia.scm.group.GroupManager; import sonia.scm.web.VndMediaType; import javax.inject.Inject; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; import javax.ws.rs.core.Response; public class GroupResource { private final GroupToGroupDtoMapper groupToGroupDtoMapper; private final GroupDtoToGroupMapper dtoToGroupMapper; - private final IdResourceManagerAdapter adapter; + private final IdResourceManagerAdapter adapter; @Inject public GroupResource(GroupManager manager, GroupToGroupDtoMapper groupToGroupDtoMapper, diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IdResourceManagerAdapter.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IdResourceManagerAdapter.java index ded4bff309..e1f9be1ead 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IdResourceManagerAdapter.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IdResourceManagerAdapter.java @@ -1,12 +1,12 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.HalRepresentation; +import sonia.scm.AlreadyExistsException; import sonia.scm.Manager; import sonia.scm.ModelObject; import sonia.scm.PageResult; import javax.ws.rs.core.Response; -import java.io.IOException; import java.util.Optional; import java.util.function.Function; import java.util.function.Predicate; @@ -18,15 +18,14 @@ import java.util.function.Supplier; */ @SuppressWarnings("squid:S00119") // "MODEL_OBJECT" is much more meaningful than "M", right? class IdResourceManagerAdapter { + DTO extends HalRepresentation> { - private final Manager manager; + private final Manager manager; - private final SingleResourceManagerAdapter singleAdapter; - private final CollectionResourceManagerAdapter collectionAdapter; + private final SingleResourceManagerAdapter singleAdapter; + private final CollectionResourceManagerAdapter collectionAdapter; - IdResourceManagerAdapter(Manager manager, Class type) { + IdResourceManagerAdapter(Manager manager, Class type) { this.manager = manager; singleAdapter = new SingleResourceManagerAdapter<>(manager, type); collectionAdapter = new CollectionResourceManagerAdapter<>(manager, type); @@ -48,7 +47,7 @@ class IdResourceManagerAdapter modelObjectSupplier, Function uriCreator) throws IOException, EXCEPTION { + public Response create(DTO dto, Supplier modelObjectSupplier, Function uriCreator) throws AlreadyExistsException { return collectionAdapter.create(dto, modelObjectSupplier, uriCreator); } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeResource.java index f9a32c7ddd..9421c3ca14 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeResource.java @@ -5,7 +5,6 @@ import com.webcohesion.enunciate.metadata.rs.StatusCodes; import com.webcohesion.enunciate.metadata.rs.TypeHint; import org.apache.shiro.SecurityUtils; import sonia.scm.user.User; -import sonia.scm.user.UserException; import sonia.scm.user.UserManager; import sonia.scm.web.VndMediaType; @@ -28,7 +27,7 @@ public class MeResource { private final UserToUserDtoMapper userToDtoMapper; - private final IdResourceManagerAdapter adapter; + private final IdResourceManagerAdapter adapter; @Inject public MeResource(UserToUserDtoMapper userToDtoMapper, UserManager manager) { this.userToDtoMapper = userToDtoMapper; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java index 9fef539756..9f4858d2f6 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java @@ -5,8 +5,8 @@ import com.webcohesion.enunciate.metadata.rs.ResponseHeader; import com.webcohesion.enunciate.metadata.rs.ResponseHeaders; import com.webcohesion.enunciate.metadata.rs.StatusCodes; import com.webcohesion.enunciate.metadata.rs.TypeHint; +import sonia.scm.AlreadyExistsException; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RepositoryManager; import sonia.scm.web.VndMediaType; @@ -25,7 +25,7 @@ public class RepositoryCollectionResource { private static final int DEFAULT_PAGE_SIZE = 10; - private final CollectionResourceManagerAdapter adapter; + private final CollectionResourceManagerAdapter adapter; private final RepositoryCollectionToDtoMapper repositoryCollectionToDtoMapper; private final RepositoryDtoToRepositoryMapper dtoToRepositoryMapper; private final ResourceLinks resourceLinks; @@ -87,7 +87,7 @@ public class RepositoryCollectionResource { }) @TypeHint(TypeHint.NO_CONTENT.class) @ResponseHeaders(@ResponseHeader(name = "Location", description = "uri to the created repository")) - public Response create(@Valid RepositoryDto repositoryDto) throws RepositoryException { + public Response create(@Valid RepositoryDto repositoryDto) throws AlreadyExistsException { return adapter.create(repositoryDto, () -> dtoToRepositoryMapper.map(repositoryDto, null), repository -> resourceLinks.repository().self(repository.getNamespace(), repository.getName())); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java index 817eb29f11..703e6c4403 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java @@ -5,7 +5,6 @@ import com.webcohesion.enunciate.metadata.rs.StatusCodes; import com.webcohesion.enunciate.metadata.rs.TypeHint; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RepositoryIsNotArchivedException; import sonia.scm.repository.RepositoryManager; import sonia.scm.web.VndMediaType; @@ -30,7 +29,7 @@ public class RepositoryResource { private final RepositoryDtoToRepositoryMapper dtoToRepositoryMapper; private final RepositoryManager manager; - private final SingleResourceManagerAdapter adapter; + private final SingleResourceManagerAdapter adapter; private final Provider tagRootResource; private final Provider branchRootResource; private final Provider changesetRootResource; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SingleResourceManagerAdapter.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SingleResourceManagerAdapter.java index 06195284df..bc84ca7c33 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SingleResourceManagerAdapter.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SingleResourceManagerAdapter.java @@ -22,22 +22,20 @@ import static javax.ws.rs.core.Response.Status.BAD_REQUEST; * * @param The type of the model object, eg. {@link sonia.scm.user.User}. * @param The corresponding transport object, eg. {@link UserDto}. - * @param The exception type for the model object, eg. {@link sonia.scm.user.UserException}. * * @see CollectionResourceManagerAdapter */ @SuppressWarnings("squid:S00119") // "MODEL_OBJECT" is much more meaningful than "M", right? class SingleResourceManagerAdapter extends AbstractManagerResource { + DTO extends HalRepresentation> extends AbstractManagerResource { private final Function> errorHandler; - SingleResourceManagerAdapter(Manager manager, Class type) { + SingleResourceManagerAdapter(Manager manager, Class type) { this(manager, type, e -> Optional.empty()); } - SingleResourceManagerAdapter(Manager manager, Class type, Function> errorHandler) { + SingleResourceManagerAdapter(Manager manager, Class type, Function> errorHandler) { super(manager, type); this.errorHandler = errorHandler; } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java index 36a1e69a83..550c60de5d 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java @@ -1,15 +1,24 @@ package sonia.scm.api.v2.resources; -import com.webcohesion.enunciate.metadata.rs.*; +import com.webcohesion.enunciate.metadata.rs.ResponseCode; +import com.webcohesion.enunciate.metadata.rs.ResponseHeader; +import com.webcohesion.enunciate.metadata.rs.ResponseHeaders; +import com.webcohesion.enunciate.metadata.rs.StatusCodes; +import com.webcohesion.enunciate.metadata.rs.TypeHint; +import sonia.scm.AlreadyExistsException; import sonia.scm.user.User; -import sonia.scm.user.UserException; import sonia.scm.user.UserManager; import sonia.scm.web.VndMediaType; import javax.inject.Inject; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; -import java.io.IOException; public class UserCollectionResource { @@ -18,7 +27,7 @@ public class UserCollectionResource { private final UserCollectionToDtoMapper userCollectionToDtoMapper; private final ResourceLinks resourceLinks; - private final IdResourceManagerAdapter adapter; + private final IdResourceManagerAdapter adapter; @Inject public UserCollectionResource(UserManager manager, UserDtoToUserMapper dtoToUserMapper, @@ -78,7 +87,7 @@ public class UserCollectionResource { }) @TypeHint(TypeHint.NO_CONTENT.class) @ResponseHeaders(@ResponseHeader(name = "Location", description = "uri to the created user")) - public Response create(UserDto userDto) throws IOException, UserException { + public Response create(UserDto userDto) throws AlreadyExistsException { return adapter.create(userDto, () -> dtoToUserMapper.map(userDto, ""), user -> resourceLinks.user().self(user.getName())); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java index f05c8165cb..a4e07382dd 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java @@ -4,12 +4,17 @@ import com.webcohesion.enunciate.metadata.rs.ResponseCode; import com.webcohesion.enunciate.metadata.rs.StatusCodes; import com.webcohesion.enunciate.metadata.rs.TypeHint; import sonia.scm.user.User; -import sonia.scm.user.UserException; import sonia.scm.user.UserManager; import sonia.scm.web.VndMediaType; import javax.inject.Inject; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; import javax.ws.rs.core.Response; public class UserResource { @@ -17,7 +22,7 @@ public class UserResource { private final UserDtoToUserMapper dtoToUserMapper; private final UserToUserDtoMapper userToDtoMapper; - private final IdResourceManagerAdapter adapter; + private final IdResourceManagerAdapter adapter; @Inject public UserResource(UserDtoToUserMapper dtoToUserMapper, UserToUserDtoMapper userToDtoMapper, UserManager manager) { diff --git a/scm-webapp/src/main/java/sonia/scm/cache/CacheConfigurations.java b/scm-webapp/src/main/java/sonia/scm/cache/CacheConfigurations.java index f84782fee2..c425992a0a 100644 --- a/scm-webapp/src/main/java/sonia/scm/cache/CacheConfigurations.java +++ b/scm-webapp/src/main/java/sonia/scm/cache/CacheConfigurations.java @@ -35,19 +35,18 @@ package sonia.scm.cache; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.collect.Iterators; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; - import java.net.URL; - import java.util.Enumeration; import java.util.Iterator; +import static java.util.Collections.emptyIterator; + +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -109,7 +108,7 @@ public final class CacheConfigurations if (it == null) { - it = Iterators.emptyIterator(); + it = emptyIterator(); } return it; diff --git a/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheConfiguration.java b/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheConfiguration.java index 0d339c8a6c..6450d97c37 100644 --- a/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheConfiguration.java +++ b/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheConfiguration.java @@ -34,17 +34,16 @@ package sonia.scm.cache; //~--- non-JDK imports -------------------------------------------------------- -import com.google.common.base.Objects; - -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; +import com.google.common.base.MoreObjects; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import java.io.Serializable; + +//~--- JDK imports ------------------------------------------------------------ /** * @@ -70,7 +69,7 @@ public class GuavaCacheConfiguration implements Serializable public String toString() { //J- - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("concurrencyLevel", concurrencyLevel) .add("copyStrategy", copyStrategy) .add("expireAfterAccess", expireAfterAccess) diff --git a/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupManager.java b/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupManager.java index f22a5519dc..c3dcb6db8c 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupManager.java +++ b/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupManager.java @@ -42,8 +42,10 @@ import com.google.inject.Inject; import com.google.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.AlreadyExistsException; import sonia.scm.HandlerEventType; import sonia.scm.ManagerDaoAdapter; +import sonia.scm.NotFoundException; import sonia.scm.SCMContextProvider; import sonia.scm.TransformFilter; import sonia.scm.search.SearchRequest; @@ -52,7 +54,12 @@ import sonia.scm.util.CollectionAppender; import sonia.scm.util.Util; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedList; +import java.util.List; //~--- JDK imports ------------------------------------------------------------ @@ -80,10 +87,7 @@ public class DefaultGroupManager extends AbstractGroupManager public DefaultGroupManager(GroupDAO groupDAO) { this.groupDAO = groupDAO; - this.managerDaoAdapter = new ManagerDaoAdapter<>( - groupDAO, - GroupNotFoundException::new, - GroupAlreadyExistsException::new); + this.managerDaoAdapter = new ManagerDaoAdapter<>(groupDAO); } //~--- methods -------------------------------------------------------------- @@ -102,7 +106,7 @@ public class DefaultGroupManager extends AbstractGroupManager } @Override - public Group create(Group group) throws GroupException { + public Group create(Group group) throws AlreadyExistsException { String type = group.getType(); if (Util.isEmpty(type)) { group.setType(groupDAO.getType()); @@ -121,7 +125,7 @@ public class DefaultGroupManager extends AbstractGroupManager } @Override - public void delete(Group group) throws GroupException { + public void delete(Group group) throws NotFoundException { logger.info("delete group {} of type {}", group.getName(), group.getType()); managerDaoAdapter.delete( group, @@ -140,17 +144,8 @@ public class DefaultGroupManager extends AbstractGroupManager @Override public void init(SCMContextProvider context) {} - /** - * Method description - * - * - * @param group - * - * @throws GroupException - * @throws IOException - */ @Override - public void modify(Group group) throws GroupException { + public void modify(Group group) throws NotFoundException { logger.info("modify group {} of type {}", group.getName(), group.getType()); managerDaoAdapter.modify( @@ -164,18 +159,8 @@ public class DefaultGroupManager extends AbstractGroupManager ); } - /** - * Method description - * - * - * @param group - * - * @throws GroupException - * @throws IOException - */ @Override - public void refresh(Group group) throws GroupException - { + public void refresh(Group group) throws NotFoundException { String name = group.getName(); if (logger.isInfoEnabled()) { @@ -187,7 +172,7 @@ public class DefaultGroupManager extends AbstractGroupManager if (fresh == null) { - throw new GroupNotFoundException(group); + throw new NotFoundException("group", group.getId()); } fresh.copyProperties(group); @@ -400,5 +385,5 @@ public class DefaultGroupManager extends AbstractGroupManager /** Field description */ private GroupDAO groupDAO; - private final ManagerDaoAdapter managerDaoAdapter; + private final ManagerDaoAdapter managerDaoAdapter; } diff --git a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java index b9c7a34e0f..02ae67719b 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java @@ -42,10 +42,12 @@ import com.google.inject.Singleton; import org.apache.shiro.concurrent.SubjectAwareExecutorService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.AlreadyExistsException; import sonia.scm.ArgumentIsInvalidException; import sonia.scm.ConfigurationException; import sonia.scm.HandlerEventType; import sonia.scm.ManagerDaoAdapter; +import sonia.scm.NotFoundException; import sonia.scm.SCMContextProvider; import sonia.scm.Type; import sonia.scm.config.ScmConfiguration; @@ -57,7 +59,6 @@ import sonia.scm.util.IOUtil; import sonia.scm.util.Util; import javax.servlet.http.HttpServletRequest; -import java.io.IOException; import java.util.Collection; import java.util.Collections; import java.util.Comparator; @@ -91,7 +92,7 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager { private final Set types; private RepositoryMatcher repositoryMatcher; private NamespaceStrategy namespaceStrategy; - private final ManagerDaoAdapter managerDaoAdapter; + private final ManagerDaoAdapter managerDaoAdapter; @Inject @@ -118,10 +119,7 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager { for (RepositoryHandler handler : handlerSet) { addHandler(contextProvider, handler); } - managerDaoAdapter = new ManagerDaoAdapter<>( - repositoryDAO, - RepositoryNotFoundException::new, - RepositoryAlreadyExistsException::create); + managerDaoAdapter = new ManagerDaoAdapter<>(repositoryDAO); } @@ -135,11 +133,11 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager { } @Override - public Repository create(Repository repository) throws RepositoryException { + public Repository create(Repository repository) throws AlreadyExistsException { return create(repository, true); } - public Repository create(Repository repository, boolean initRepository) throws RepositoryException { + public Repository create(Repository repository, boolean initRepository) throws AlreadyExistsException { repository.setId(keyGenerator.createKey()); repository.setNamespace(namespaceStrategy.createNamespace(repository)); @@ -150,7 +148,11 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager { RepositoryPermissions::create, newRepository -> { if (initRepository) { - getHandler(newRepository).create(newRepository); + try { + getHandler(newRepository).create(newRepository); + } catch (AlreadyExistsException e) { + throw new InternalRepositoryException("directory for repository does already exist", e); + } } fireEvent(HandlerEventType.BEFORE_CREATE, newRepository); }, @@ -160,7 +162,7 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager { } @Override - public void delete(Repository repository) throws RepositoryException { + public void delete(Repository repository) throws NotFoundException { logger.info("delete repository {}/{} of type {}", repository.getNamespace(), repository.getName(), repository.getType()); managerDaoAdapter.delete( repository, @@ -170,17 +172,16 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager { ); } - private void preDelete(Repository toDelete) throws RepositoryException { + private void preDelete(Repository toDelete) { if (configuration.isEnableRepositoryArchive() && !toDelete.isArchived()) { throw new RepositoryIsNotArchivedException(); } fireEvent(HandlerEventType.BEFORE_DELETE, toDelete); - getHandler(toDelete).delete(toDelete); +// getHandler(toDelete).delete(toDelete); } @Override - public void importRepository(Repository repository) - throws RepositoryException, IOException { + public void importRepository(Repository repository) throws AlreadyExistsException { create(repository, false); } @@ -189,7 +190,7 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager { } @Override - public void modify(Repository repository) throws RepositoryException { + public void modify(Repository repository) throws NotFoundException { logger.info("modify repository {}/{} of type {}", repository.getNamespace(), repository.getName(), repository.getType()); managerDaoAdapter.modify( @@ -197,15 +198,18 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager { RepositoryPermissions::modify, notModified -> { fireEvent(HandlerEventType.BEFORE_MODIFY, repository, notModified); - getHandler(repository).modify(repository); + try { + getHandler(repository).modify(repository); + } catch (NotFoundException e) { + throw new IllegalStateException("repository not found though just created", e); + } }, notModified -> fireEvent(HandlerEventType.MODIFY, repository, notModified) ); } @Override - public void refresh(Repository repository) - throws RepositoryException { + public void refresh(Repository repository) throws RepositoryNotFoundException { AssertUtil.assertIsNotNull(repository); RepositoryPermissions.read(repository).check(); @@ -417,15 +421,14 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager { } private RepositoryHandler getHandler(Repository repository) - throws RepositoryException { + { String type = repository.getType(); RepositoryHandler handler = handlerMap.get(type); if (handler == null) { - throw new RepositoryHandlerNotFoundException( - "could not find handler for ".concat(type)); + throw new InternalRepositoryException("could not find handler for " + type); } else if (!handler.isConfigured()) { - throw new RepositoryException("handler is not configured"); + throw new InternalRepositoryException("handler is not configured for type " + type); } return handler; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/HealthChecker.java b/scm-webapp/src/main/java/sonia/scm/repository/HealthChecker.java index 26f674a5b5..81ee37a955 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/HealthChecker.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/HealthChecker.java @@ -36,15 +36,15 @@ package sonia.scm.repository; import com.github.sdorra.ssp.PermissionActionCheck; import com.google.common.collect.ImmutableList; import com.google.inject.Inject; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; +import sonia.scm.ConcurrentModificationException; +import sonia.scm.NotFoundException; import java.util.Set; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra @@ -77,20 +77,7 @@ public final class HealthChecker //~--- methods -------------------------------------------------------------- - /** - * Method description - * - * - * @param id - * - * - * @throws IOException - * @throws RepositoryException - * @throws RepositoryNotFoundException - */ - public void check(String id) - throws RepositoryNotFoundException, RepositoryException, IOException - { + public void check(String id) throws NotFoundException { RepositoryPermissions.healthCheck(id).check(); Repository repository = repositoryManager.get(id); @@ -104,28 +91,13 @@ public final class HealthChecker doCheck(repository); } - /** - * Method description - * - * - * @param repository - * - * @throws IOException - * @throws RepositoryException - */ public void check(Repository repository) - throws RepositoryException, IOException - { + throws NotFoundException, ConcurrentModificationException { RepositoryPermissions.healthCheck(repository).check(); doCheck(repository); } - /** - * Method description - * - * - */ public void checkAll() { logger.debug("check health of all repositories"); @@ -140,7 +112,7 @@ public final class HealthChecker { check(repository); } - catch (RepositoryException | IOException ex) + catch (ConcurrentModificationException | NotFoundException ex) { logger.error("health check ends with exception", ex); } @@ -154,9 +126,7 @@ public final class HealthChecker } } - private void doCheck(Repository repository) - throws RepositoryException, IOException - { + private void doCheck(Repository repository) throws NotFoundException { logger.info("start health check for repository {}", repository.getName()); HealthCheckResult result = HealthCheckResult.healthy(); diff --git a/scm-webapp/src/main/java/sonia/scm/repository/LastModifiedUpdateListener.java b/scm-webapp/src/main/java/sonia/scm/repository/LastModifiedUpdateListener.java index a84324cd60..badcf0c48d 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/LastModifiedUpdateListener.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/LastModifiedUpdateListener.java @@ -38,6 +38,7 @@ import com.google.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.EagerSingleton; +import sonia.scm.NotFoundException; import sonia.scm.plugin.Extension; import sonia.scm.web.security.AdministrationContext; import sonia.scm.web.security.PrivilegedAction; @@ -146,13 +147,10 @@ public final class LastModifiedUpdateListener logger.info("update last modified date of repository {}", dbr.getId()); dbr.setLastModified(System.currentTimeMillis()); - try - { + try { repositoryManager.modify(dbr); - } - catch (RepositoryException ex) - { - logger.error("could not modify repository", ex); + } catch (NotFoundException e) { + logger.error("could not modify repository", e); } } else diff --git a/scm-webapp/src/main/java/sonia/scm/security/ConfigurableLoginAttemptHandler.java b/scm-webapp/src/main/java/sonia/scm/security/ConfigurableLoginAttemptHandler.java index 39c3c64d5d..6472c40eaa 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/ConfigurableLoginAttemptHandler.java +++ b/scm-webapp/src/main/java/sonia/scm/security/ConfigurableLoginAttemptHandler.java @@ -30,12 +30,8 @@ */ package sonia.scm.security; -import com.google.common.base.Objects; +import com.google.common.base.MoreObjects; import com.google.inject.Inject; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.TimeUnit; -import javax.inject.Singleton; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; @@ -44,6 +40,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.config.ScmConfiguration; +import javax.inject.Singleton; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.TimeUnit; + /** * Configurable implementation of {@link LoginAttemptHandler}. * @@ -175,7 +176,7 @@ public class ConfigurableLoginAttemptHandler implements LoginAttemptHandler { @Override public String toString() { - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("counter", counter) .add("lastAttempt", lastAttempt) .toString(); diff --git a/scm-webapp/src/main/java/sonia/scm/security/DefaultAuthorizationCollector.java b/scm-webapp/src/main/java/sonia/scm/security/DefaultAuthorizationCollector.java index d868b81499..af83af978a 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/DefaultAuthorizationCollector.java +++ b/scm-webapp/src/main/java/sonia/scm/security/DefaultAuthorizationCollector.java @@ -36,23 +36,19 @@ package sonia.scm.security; //~--- non-JDK imports -------------------------------------------------------- import com.github.legman.Subscribe; - import com.google.common.base.Objects; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet.Builder; import com.google.inject.Inject; import com.google.inject.Singleton; - import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.SimpleAuthorizationInfo; import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.subject.Subject; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.cache.Cache; import sonia.scm.cache.CacheManager; import sonia.scm.group.GroupNames; @@ -62,11 +58,11 @@ import sonia.scm.repository.RepositoryDAO; import sonia.scm.user.User; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - import java.util.List; import java.util.Set; +//~--- JDK imports ------------------------------------------------------------ + /** * * @author Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/security/SecureKey.java b/scm-webapp/src/main/java/sonia/scm/security/SecureKey.java index f8e12de398..1ab256386a 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/SecureKey.java +++ b/scm-webapp/src/main/java/sonia/scm/security/SecureKey.java @@ -35,12 +35,12 @@ package sonia.scm.security; import com.google.common.base.Objects; -//~--- JDK imports ------------------------------------------------------------ - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; +//~--- JDK imports ------------------------------------------------------------ + /** * Secure key can be used for singing messages and tokens. * diff --git a/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java b/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java index 25f8c61b3b..876b0f094c 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java +++ b/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java @@ -40,9 +40,11 @@ import com.google.inject.Inject; import com.google.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.AlreadyExistsException; import sonia.scm.EagerSingleton; import sonia.scm.HandlerEventType; import sonia.scm.ManagerDaoAdapter; +import sonia.scm.NotFoundException; import sonia.scm.SCMContextProvider; import sonia.scm.TransformFilter; import sonia.scm.search.SearchRequest; @@ -97,10 +99,7 @@ public class DefaultUserManager extends AbstractUserManager public DefaultUserManager(UserDAO userDAO) { this.userDAO = userDAO; - this.managerDaoAdapter = new ManagerDaoAdapter<>( - userDAO, - UserNotFoundException::new, - UserAlreadyExistsException::new); + this.managerDaoAdapter = new ManagerDaoAdapter<>(userDAO); } //~--- methods -------------------------------------------------------------- @@ -139,10 +138,9 @@ public class DefaultUserManager extends AbstractUserManager * @param user * * @throws IOException - * @throws UserException */ @Override - public User create(User user) throws UserException { + public User create(User user) throws AlreadyExistsException { String type = user.getType(); if (Util.isEmpty(type)) { user.setType(userDAO.getType()); @@ -159,7 +157,7 @@ public class DefaultUserManager extends AbstractUserManager } @Override - public void delete(User user) throws UserException { + public void delete(User user) throws NotFoundException { logger.info("delete user {} of type {}", user.getName(), user.getType()); managerDaoAdapter.delete( user, @@ -193,11 +191,9 @@ public class DefaultUserManager extends AbstractUserManager * @param user * * @throws IOException - * @throws UserException */ @Override - public void modify(User user) throws UserException - { + public void modify(User user) throws NotFoundException { logger.info("modify user {} of type {}", user.getName(), user.getType()); managerDaoAdapter.modify( @@ -214,11 +210,9 @@ public class DefaultUserManager extends AbstractUserManager * @param user * * @throws IOException - * @throws UserException */ @Override - public void refresh(User user) throws UserException - { + public void refresh(User user) throws NotFoundException { if (logger.isInfoEnabled()) { logger.info("refresh user {} of type {}", user.getName(), user.getType()); @@ -229,7 +223,7 @@ public class DefaultUserManager extends AbstractUserManager if (fresh == null) { - throw new UserNotFoundException(user); + throw new NotFoundException(); } fresh.copyProperties(user); @@ -455,5 +449,5 @@ public class DefaultUserManager extends AbstractUserManager //~--- fields --------------------------------------------------------------- private final UserDAO userDAO; - private final ManagerDaoAdapter managerDaoAdapter; + private final ManagerDaoAdapter managerDaoAdapter; } diff --git a/scm-webapp/src/test/java/sonia/scm/api/rest/resources/AbstractManagerResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/rest/resources/AbstractManagerResourceTest.java index a98d18b390..41bcac3c6a 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/rest/resources/AbstractManagerResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/rest/resources/AbstractManagerResourceTest.java @@ -24,13 +24,13 @@ import static org.mockito.Mockito.when; public class AbstractManagerResourceTest { @Mock - private Manager manager; + private Manager manager; @Mock private Request request; @Captor private ArgumentCaptor> comparatorCaptor; - private AbstractManagerResource abstractManagerResource; + private AbstractManagerResource abstractManagerResource; @Before public void captureComparator() { @@ -60,7 +60,7 @@ public class AbstractManagerResourceTest { } - private class SimpleManagerResource extends AbstractManagerResource { + private class SimpleManagerResource extends AbstractManagerResource { { disableCache = true; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AuthenticationResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AuthenticationResourceTest.java index 9eea189b72..42428f9f77 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AuthenticationResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AuthenticationResourceTest.java @@ -11,8 +11,6 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; -import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.config.ScmConfiguration; @@ -20,25 +18,16 @@ import sonia.scm.security.AccessToken; import sonia.scm.security.AccessTokenBuilder; import sonia.scm.security.AccessTokenBuilderFactory; import sonia.scm.security.AccessTokenCookieIssuer; -import sonia.scm.user.User; -import sonia.scm.user.UserException; -import sonia.scm.user.UserManager; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.UriInfo; -import java.io.IOException; -import java.net.URI; import java.net.URISyntaxException; import java.util.Date; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; @SubjectAware( configuration = "classpath:sonia/scm/repository/shiro.ini" diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java index dff9e7e99b..6a463b3baa 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java @@ -15,7 +15,6 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import sonia.scm.PageResult; import sonia.scm.group.Group; -import sonia.scm.group.GroupException; import sonia.scm.group.GroupManager; import sonia.scm.web.VndMediaType; @@ -27,7 +26,9 @@ import java.net.URL; import java.util.Collections; import static java.util.Collections.singletonList; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doNothing; @@ -58,7 +59,7 @@ public class GroupRootResourceTest { private ArgumentCaptor groupCaptor = ArgumentCaptor.forClass(Group.class); @Before - public void prepareEnvironment() throws IOException, GroupException { + public void prepareEnvironment() throws Exception { initMocks(this); when(groupManager.create(groupCaptor.capture())).thenAnswer(invocation -> invocation.getArguments()[0]); doNothing().when(groupManager).modify(groupCaptor.capture()); diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MeResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MeResourceTest.java index 56c60098fb..09dd545eb5 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MeResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MeResourceTest.java @@ -2,10 +2,6 @@ package sonia.scm.api.v2.resources; import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; -import com.google.common.io.Resources; -import org.apache.shiro.authc.credential.PasswordService; -import org.apache.shiro.subject.PrincipalCollection; -import org.apache.shiro.subject.Subject; import org.jboss.resteasy.core.Dispatcher; import org.jboss.resteasy.mock.MockDispatcherFactory; import org.jboss.resteasy.mock.MockHttpRequest; @@ -16,26 +12,19 @@ import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; import org.mockito.Mock; -import sonia.scm.PageResult; import sonia.scm.user.User; -import sonia.scm.user.UserException; import sonia.scm.user.UserManager; import sonia.scm.web.VndMediaType; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.UriInfo; -import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; -import java.net.URL; -import static java.util.Collections.singletonList; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; @SubjectAware( @@ -64,7 +53,7 @@ public class MeResourceTest { private ArgumentCaptor userCaptor = ArgumentCaptor.forClass(User.class); @Before - public void prepareEnvironment() throws IOException, UserException { + public void prepareEnvironment() throws Exception { initMocks(this); createDummyUser("trillian"); when(userManager.create(userCaptor.capture())).thenAnswer(invocation -> invocation.getArguments()[0]); diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryRootResourceTest.java index d47b26e5eb..35de1ca80b 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryRootResourceTest.java @@ -16,7 +16,6 @@ import org.mockito.Mock; import sonia.scm.PageResult; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RepositoryIsNotArchivedException; import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.api.RepositoryServiceFactory; @@ -217,7 +216,7 @@ public class RepositoryRootResourceTest { } @Test - public void shouldCreateNewRepositoryInCorrectNamespace() throws URISyntaxException, IOException, RepositoryException { + public void shouldCreateNewRepositoryInCorrectNamespace() throws Exception { when(repositoryManager.create(any())).thenAnswer(invocation -> { Repository repository = (Repository) invocation.getArguments()[0]; repository.setNamespace("otherspace"); diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java index 1eee9b2270..3ebe48ca1f 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java @@ -16,21 +16,24 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import sonia.scm.PageResult; import sonia.scm.user.User; -import sonia.scm.user.UserException; import sonia.scm.user.UserManager; import sonia.scm.web.VndMediaType; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import static java.util.Collections.singletonList; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; @SubjectAware( @@ -59,7 +62,7 @@ public class UserRootResourceTest { private ArgumentCaptor userCaptor = ArgumentCaptor.forClass(User.class); @Before - public void prepareEnvironment() throws UserException { + public void prepareEnvironment() throws Exception { initMocks(this); User dummyUser = createDummyUser("Neo"); when(userManager.create(userCaptor.capture())).thenAnswer(invocation -> invocation.getArguments()[0]); @@ -106,7 +109,7 @@ public class UserRootResourceTest { } @Test - public void shouldCreateNewUserWithEncryptedPassword() throws URISyntaxException, IOException, UserException { + public void shouldCreateNewUserWithEncryptedPassword() throws Exception { URL url = Resources.getResource("sonia/scm/api/v2/user-test-create.json"); byte[] userJson = Resources.toByteArray(url); @@ -126,7 +129,7 @@ public class UserRootResourceTest { } @Test - public void shouldUpdateChangedUserWithEncryptedPassword() throws URISyntaxException, IOException, UserException { + public void shouldUpdateChangedUserWithEncryptedPassword() throws Exception { URL url = Resources.getResource("sonia/scm/api/v2/user-test-update.json"); byte[] userJson = Resources.toByteArray(url); @@ -170,7 +173,7 @@ public class UserRootResourceTest { } @Test - public void shouldDeleteUser() throws URISyntaxException, IOException, UserException { + public void shouldDeleteUser() throws Exception { MockHttpRequest request = MockHttpRequest.delete("/" + UserRootResource.USERS_PATH_V2 + "Neo"); MockHttpResponse response = new MockHttpResponse(); @@ -181,7 +184,7 @@ public class UserRootResourceTest { } @Test - public void shouldFailUpdateForDifferentIds() throws IOException, URISyntaxException, UserException { + public void shouldFailUpdateForDifferentIds() throws Exception { URL url = Resources.getResource("sonia/scm/api/v2/user-test-update.json"); byte[] userJson = Resources.toByteArray(url); createDummyUser("Other"); @@ -199,7 +202,7 @@ public class UserRootResourceTest { } @Test - public void shouldFailUpdateForUnknownEntity() throws IOException, URISyntaxException, UserException { + public void shouldFailUpdateForUnknownEntity() throws Exception { URL url = Resources.getResource("sonia/scm/api/v2/user-test-update.json"); byte[] userJson = Resources.toByteArray(url); when(userManager.get("Neo")).thenReturn(null); diff --git a/scm-webapp/src/test/java/sonia/scm/cache/CacheConfigurationTestLoader.java b/scm-webapp/src/test/java/sonia/scm/cache/CacheConfigurationTestLoader.java index 8efd40465e..24f955f79b 100644 --- a/scm-webapp/src/test/java/sonia/scm/cache/CacheConfigurationTestLoader.java +++ b/scm-webapp/src/test/java/sonia/scm/cache/CacheConfigurationTestLoader.java @@ -34,28 +34,24 @@ package sonia.scm.cache; //~--- non-JDK imports -------------------------------------------------------- -import com.google.common.base.Charsets; import com.google.common.base.Function; import com.google.common.collect.Iterators; import com.google.common.io.ByteSource; -import com.google.common.io.CharSource; import com.google.common.io.Files; import com.google.common.io.Resources; - import org.junit.rules.TemporaryFolder; +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.Iterator; + +import static java.util.Collections.emptyIterator; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; //~--- JDK imports ------------------------------------------------------------ -import java.io.File; -import java.io.IOException; - -import java.net.URL; - -import java.util.Iterator; - /** * * @author Sebastian Sdorra @@ -196,7 +192,7 @@ public class CacheConfigurationTestLoader implements CacheConfigurationLoader if (moduleConfigurations == null) { - urlIterator = Iterators.emptyIterator(); + urlIterator = emptyIterator(); } else { diff --git a/scm-webapp/src/test/java/sonia/scm/repository/DefaultRepositoryManagerTest.java b/scm-webapp/src/test/java/sonia/scm/repository/DefaultRepositoryManagerTest.java index 68cf2087bd..efd3f673b0 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/DefaultRepositoryManagerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/repository/DefaultRepositoryManagerTest.java @@ -43,7 +43,11 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; -import sonia.scm.*; +import sonia.scm.AlreadyExistsException; +import sonia.scm.HandlerEventType; +import sonia.scm.Manager; +import sonia.scm.ManagerTestBase; +import sonia.scm.NotFoundException; import sonia.scm.config.ScmConfiguration; import sonia.scm.event.ScmEventBus; import sonia.scm.repository.api.HookContext; @@ -56,9 +60,15 @@ import sonia.scm.security.KeyGenerator; import sonia.scm.store.ConfigurationStoreFactory; import sonia.scm.store.JAXBConfigurationStoreFactory; -import java.util.*; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; +import java.util.Stack; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.hasProperty; +import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -83,7 +93,7 @@ import static org.mockito.Mockito.when; password = "secret", configuration = "classpath:sonia/scm/repository/shiro.ini" ) -public class DefaultRepositoryManagerTest extends ManagerTestBase { +public class DefaultRepositoryManagerTest extends ManagerTestBase { @Rule public ShiroRule shiro = new ShiroRule(); @@ -96,7 +106,7 @@ public class DefaultRepositoryManagerTest extends ManagerTestBase keys = new Stack<>(); @@ -260,7 +269,7 @@ public class DefaultRepositoryManagerTest extends ManagerTestBaseemptySet()); } - private Repository createRepository(Repository repository) throws RepositoryException { + private Repository createRepository(Repository repository) throws AlreadyExistsException { manager.create(repository); assertNotNull(repository.getId()); assertNotNull(manager.get(repository.getId())); @@ -541,17 +549,16 @@ public class DefaultRepositoryManagerTest extends ManagerTestBase manager, Repository repository) - throws RepositoryException { + private void delete(Manager manager, Repository repository) throws NotFoundException { String id = repository.getId(); diff --git a/scm-webapp/src/test/java/sonia/scm/selenium/page/RepositoriesAddPage.java b/scm-webapp/src/test/java/sonia/scm/selenium/page/RepositoriesAddPage.java index f9f00056ae..a6b6798b7f 100644 --- a/scm-webapp/src/test/java/sonia/scm/selenium/page/RepositoriesAddPage.java +++ b/scm-webapp/src/test/java/sonia/scm/selenium/page/RepositoriesAddPage.java @@ -30,8 +30,7 @@ */ package sonia.scm.selenium.page; -import com.google.common.base.Objects; -import java.util.List; +import com.google.common.base.MoreObjects; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.NotFoundException; @@ -41,6 +40,8 @@ import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.ui.WebDriverWait; import sonia.scm.repository.Repository; +import java.util.List; + /** * Page object for scm-manager's repository creation page. * @@ -130,7 +131,7 @@ public class RepositoriesAddPage extends BasePage { String script = "Sonia.repository.getTypeByName('" + type + "').displayName;"; displayName = (String) ((JavascriptExecutor)driver).executeScript(script); } - return Objects.firstNonNull(displayName, type); + return MoreObjects.firstNonNull(displayName, type); } }