From f2b876a2c15b7c965f6a2ec82355be19703de47e Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 3 Apr 2011 11:16:40 +0200 Subject: [PATCH] improve ChangesetViewer api --- .../scm/repository/RepositoryHandler.java | 5 ++- .../scm/repository/RepositoryManager.java | 13 +++++++ .../rest/resources/RepositoryResource.java | 34 +++++++------------ .../repository/xml/XmlRepositoryManager.java | 21 ++++++++++++ 4 files changed, 51 insertions(+), 22 deletions(-) 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 4e11e8ac9d..e92bdd9acf 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryHandler.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryHandler.java @@ -69,6 +69,9 @@ public interface RepositoryHandler * * @param repository * @return null if ChangesetViewer is not supported + * + * @throws RepositoryException */ - public ChangesetViewer getChangesetViewer(Repository repository); + public ChangesetViewer getChangesetViewer(Repository repository) + throws RepositoryException; } 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 fb52a1a65a..ee0621b7b7 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryManager.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryManager.java @@ -63,6 +63,19 @@ public interface RepositoryManager */ public Repository get(String type, String name); + /** + * Method description + * + * + * + * @param repository + * @return null if ChangesetViewer is not supported + * + * @throws RepositoryException + */ + public ChangesetViewer getChangesetViewer(Repository repository) + throws RepositoryException; + /** * Method description * 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 35c4daaa6c..81fc735c5e 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 @@ -120,6 +120,8 @@ public class RepositoryResource * @param max * * @return + * + * @throws RepositoryException */ @GET @Path("{id}/changesets") @@ -127,41 +129,31 @@ public class RepositoryResource public Response getChangesets(@PathParam("id") String id, @QueryParam("changeset") String startId, @DefaultValue("25") @QueryParam("max") int max) + throws RepositoryException { Response response = null; Repository repository = repositoryManager.get(id); if (repository != null) { - RepositoryHandler handler = - repositoryManager.getHandler(repository.getType()); + ChangesetViewer changesetViewer = + repositoryManager.getChangesetViewer(repository); - if (handler != null) + if (changesetViewer != null) { - ChangesetViewer changesetViewer = - handler.getChangesetViewer(repository); + List changesets = null; - if (changesetViewer != null) + if (Util.isNotEmpty(startId)) { - List changesets = null; - - if (Util.isNotEmpty(startId)) - { - changesets = changesetViewer.getChangesets(startId, max); - } - else - { - changesets = changesetViewer.getLastChangesets(max); - } - - response = - Response.ok(new GenericEntity>(changesets) {} - ).build(); + changesets = changesetViewer.getChangesets(startId, max); } else { - response = Response.status(Response.Status.NOT_FOUND).build(); + changesets = changesetViewer.getLastChangesets(max); } + + response = Response.ok(new GenericEntity>(changesets) {} + ).build(); } else { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java b/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java index 2eb4ff7cee..415c141d20 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java @@ -47,6 +47,7 @@ import sonia.scm.HandlerEvent; import sonia.scm.SCMContextProvider; import sonia.scm.Type; import sonia.scm.repository.AbstractRepositoryManager; +import sonia.scm.repository.ChangesetViewer; import sonia.scm.repository.PermissionType; import sonia.scm.repository.PermissionUtil; import sonia.scm.repository.Repository; @@ -393,6 +394,26 @@ public class XmlRepositoryManager extends AbstractRepositoryManager return repositories; } + /** + * Method description + * + * + * @param repository + * + * @return + * + * @throws RepositoryException + */ + @Override + public ChangesetViewer getChangesetViewer(Repository repository) + throws RepositoryException + { + AssertUtil.assertIsNotNull(repository); + isReader(repository); + + return getHandler(repository).getChangesetViewer(repository); + } + /** * Method description *