use new repository service api for repository rest resource

This commit is contained in:
Sebastian Sdorra
2012-06-16 14:12:58 +02:00
parent c5789e8691
commit 8d6d7d1b44
3 changed files with 120 additions and 110 deletions

View File

@@ -39,9 +39,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import sonia.scm.repository.PathNotFoundException; import sonia.scm.repository.PathNotFoundException;
import sonia.scm.repository.RepositoryBrowser;
import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RepositoryException;
import sonia.scm.repository.RevisionNotFoundException; import sonia.scm.repository.RevisionNotFoundException;
import sonia.scm.repository.api.CatCommandBuilder;
//~--- JDK imports ------------------------------------------------------------ //~--- JDK imports ------------------------------------------------------------
@@ -71,13 +71,13 @@ public class BrowserStreamingOutput implements StreamingOutput
* *
* @param browser * @param browser
* @param revision * @param revision
*
* @param builder
* @param path * @param path
*/ */
public BrowserStreamingOutput(RepositoryBrowser browser, String revision, public BrowserStreamingOutput(CatCommandBuilder builder, String path)
String path)
{ {
this.browser = browser; this.builder = builder;
this.revision = revision;
this.path = path; this.path = path;
} }
@@ -98,7 +98,7 @@ public class BrowserStreamingOutput implements StreamingOutput
{ {
try try
{ {
browser.getContent(revision, path, output); builder.retriveContent(output, path);
} }
catch (PathNotFoundException ex) catch (PathNotFoundException ex)
{ {
@@ -130,11 +130,8 @@ public class BrowserStreamingOutput implements StreamingOutput
//~--- fields --------------------------------------------------------------- //~--- fields ---------------------------------------------------------------
/** Field description */ /** Field description */
private RepositoryBrowser browser; private CatCommandBuilder builder;
/** Field description */ /** Field description */
private String path; private String path;
/** Field description */
private String revision;
} }

View File

@@ -38,10 +38,10 @@ package sonia.scm.api.rest.resources;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import sonia.scm.repository.DiffViewer;
import sonia.scm.repository.PathNotFoundException; import sonia.scm.repository.PathNotFoundException;
import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RepositoryException;
import sonia.scm.repository.RevisionNotFoundException; import sonia.scm.repository.RevisionNotFoundException;
import sonia.scm.repository.api.DiffCommandBuilder;
//~--- JDK imports ------------------------------------------------------------ //~--- JDK imports ------------------------------------------------------------
@@ -69,16 +69,11 @@ public class DiffStreamingOutput implements StreamingOutput
* Constructs ... * Constructs ...
* *
* *
* @param diffViewer * @param builder
* @param revision
* @param path
*/ */
public DiffStreamingOutput(DiffViewer diffViewer, String revision, public DiffStreamingOutput(DiffCommandBuilder builder)
String path)
{ {
this.diffViewer = diffViewer; this.builder = builder;
this.revision = revision;
this.path = path;
} }
//~--- methods -------------------------------------------------------------- //~--- methods --------------------------------------------------------------
@@ -98,7 +93,7 @@ public class DiffStreamingOutput implements StreamingOutput
{ {
try try
{ {
diffViewer.getDiff(revision, path, output); builder.retriveContent(output);
} }
catch (PathNotFoundException ex) catch (PathNotFoundException ex)
{ {
@@ -130,11 +125,5 @@ public class DiffStreamingOutput implements StreamingOutput
//~--- fields --------------------------------------------------------------- //~--- fields ---------------------------------------------------------------
/** Field description */ /** Field description */
private DiffViewer diffViewer; private DiffCommandBuilder builder;
/** Field description */
private String path;
/** Field description */
private String revision;
} }

View File

@@ -35,6 +35,7 @@ package sonia.scm.api.rest.resources;
//~--- non-JDK imports -------------------------------------------------------- //~--- non-JDK imports --------------------------------------------------------
import com.google.common.base.Strings;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Provider; import com.google.inject.Provider;
import com.google.inject.Singleton; import com.google.inject.Singleton;
@@ -45,30 +46,30 @@ import org.codehaus.enunciate.modules.jersey.ExternallyManagedLifecycle;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import sonia.scm.NotSupportedFeatuerException;
import sonia.scm.config.ScmConfiguration; import sonia.scm.config.ScmConfiguration;
import sonia.scm.repository.BlameResult; import sonia.scm.repository.BlameResult;
import sonia.scm.repository.BlameViewerUtil;
import sonia.scm.repository.BrowserResult; import sonia.scm.repository.BrowserResult;
import sonia.scm.repository.Changeset; import sonia.scm.repository.Changeset;
import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.ChangesetPagingResult;
import sonia.scm.repository.ChangesetViewerUtil;
import sonia.scm.repository.DiffViewer;
import sonia.scm.repository.Permission; import sonia.scm.repository.Permission;
import sonia.scm.repository.PermissionType; import sonia.scm.repository.PermissionType;
import sonia.scm.repository.PermissionUtil; import sonia.scm.repository.PermissionUtil;
import sonia.scm.repository.Repository; import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryBrowser;
import sonia.scm.repository.RepositoryBrowserUtil;
import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RepositoryException;
import sonia.scm.repository.RepositoryHandler;
import sonia.scm.repository.RepositoryIsNotArchivedException; import sonia.scm.repository.RepositoryIsNotArchivedException;
import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryManager;
import sonia.scm.repository.RepositoryNotFoundException; import sonia.scm.repository.RepositoryNotFoundException;
import sonia.scm.repository.RepositoryUtil; import sonia.scm.repository.RepositoryUtil;
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.LogCommandBuilder;
import sonia.scm.repository.api.RepositoryService;
import sonia.scm.repository.api.RepositoryServiceFactory;
import sonia.scm.security.ScmSecurityException; import sonia.scm.security.ScmSecurityException;
import sonia.scm.util.AssertUtil; import sonia.scm.util.AssertUtil;
import sonia.scm.util.HttpUtil;
import sonia.scm.util.Util; import sonia.scm.util.Util;
import sonia.scm.web.security.WebSecurityContext; import sonia.scm.web.security.WebSecurityContext;
@@ -125,6 +126,7 @@ public class RepositoryResource
* @param configuration * @param configuration
* @param repositoryManager * @param repositoryManager
* @param securityContextProvider * @param securityContextProvider
* @param servicefactory
* @param changesetViewerUtil * @param changesetViewerUtil
* @param repositoryBrowserUtil * @param repositoryBrowserUtil
* @param blameViewerUtil * @param blameViewerUtil
@@ -133,17 +135,13 @@ public class RepositoryResource
public RepositoryResource( public RepositoryResource(
ScmConfiguration configuration, RepositoryManager repositoryManager, ScmConfiguration configuration, RepositoryManager repositoryManager,
Provider<WebSecurityContext> securityContextProvider, Provider<WebSecurityContext> securityContextProvider,
ChangesetViewerUtil changesetViewerUtil, RepositoryServiceFactory servicefactory)
RepositoryBrowserUtil repositoryBrowserUtil,
BlameViewerUtil blameViewerUtil)
{ {
super(repositoryManager); super(repositoryManager);
this.configuration = configuration; this.configuration = configuration;
this.repositoryManager = repositoryManager; this.repositoryManager = repositoryManager;
this.servicefactory = servicefactory;
this.securityContextProvider = securityContextProvider; this.securityContextProvider = securityContextProvider;
this.changesetViewerUtil = changesetViewerUtil;
this.repositoryBrowserUtil = repositoryBrowserUtil;
this.blameViewerUtil = blameViewerUtil;
setDisableCache(false); setDisableCache(false);
} }
@@ -354,8 +352,15 @@ public class RepositoryResource
{ {
AssertUtil.assertIsNotNull(path); AssertUtil.assertIsNotNull(path);
BlameResult blamePagingResult = blameViewerUtil.getBlame(id, revision, RepositoryService service = servicefactory.create(id);
path); BlameCommandBuilder builder = service.getBlameCommand();
if (!Strings.isNullOrEmpty(revision))
{
builder.setRevision(revision);
}
BlameResult blamePagingResult = builder.getBlameResult(path);
if (blamePagingResult != null) if (blamePagingResult != null)
{ {
@@ -374,7 +379,7 @@ public class RepositoryResource
{ {
response = Response.status(Response.Status.NOT_FOUND).build(); response = Response.status(Response.Status.NOT_FOUND).build();
} }
catch (NotSupportedFeatuerException ex) catch (CommandNotSupportedException ex)
{ {
response = Response.status(Response.Status.BAD_REQUEST).build(); response = Response.status(Response.Status.BAD_REQUEST).build();
} }
@@ -416,8 +421,20 @@ public class RepositoryResource
try try
{ {
BrowserResult result = repositoryBrowserUtil.getResult(id, revision, RepositoryService service = servicefactory.create(id);
path); BrowseCommandBuilder builder = service.getBrowseCommand();
if (!Strings.isNullOrEmpty(revision))
{
builder.setRevision(revision);
}
if (!Strings.isNullOrEmpty(path))
{
builder.setPath(path);
}
BrowserResult result = builder.getBrowserResult();
if (result != null) if (result != null)
{ {
@@ -432,7 +449,7 @@ public class RepositoryResource
{ {
response = Response.status(Response.Status.NOT_FOUND).build(); response = Response.status(Response.Status.NOT_FOUND).build();
} }
catch (NotSupportedFeatuerException ex) catch (CommandNotSupportedException ex)
{ {
response = Response.status(Response.Status.BAD_REQUEST).build(); response = Response.status(Response.Status.BAD_REQUEST).build();
} }
@@ -513,7 +530,8 @@ public class RepositoryResource
{ {
try try
{ {
Changeset changeset = changesetViewerUtil.getChangeset(id, revision); RepositoryService service = servicefactory.create(id);
Changeset changeset = service.getLogCommand().getChangeset(revision);
if (changeset != null) if (changeset != null)
{ {
@@ -528,7 +546,7 @@ public class RepositoryResource
{ {
response = Response.status(Response.Status.NOT_FOUND).build(); response = Response.status(Response.Status.NOT_FOUND).build();
} }
catch (NotSupportedFeatuerException ex) catch (CommandNotSupportedException ex)
{ {
response = Response.status(Response.Status.BAD_REQUEST).build(); response = Response.status(Response.Status.BAD_REQUEST).build();
} }
@@ -585,17 +603,22 @@ public class RepositoryResource
try try
{ {
ChangesetPagingResult changesets = null; ChangesetPagingResult changesets = null;
RepositoryService service = servicefactory.create(id);
LogCommandBuilder builder = service.getLogCommand();
if (Util.isEmpty(path)) if (!Strings.isNullOrEmpty(path))
{ {
changesets = changesetViewerUtil.getChangesets(id, start, limit); builder.setPath(path);
} }
else
if (!Strings.isNullOrEmpty(revision))
{ {
changesets = changesetViewerUtil.getChangesets(id, path, revision, builder.setStartChangeset(revision);
start, limit);
} }
changesets =
builder.setPagingStart(start).setPagingLimit(limit).getChangesets();
if (changesets != null) if (changesets != null)
{ {
response = Response.ok(changesets).build(); response = Response.ok(changesets).build();
@@ -609,7 +632,7 @@ public class RepositoryResource
{ {
response = Response.status(Response.Status.NOT_FOUND).build(); response = Response.status(Response.Status.NOT_FOUND).build();
} }
catch (NotSupportedFeatuerException ex) catch (CommandNotSupportedException ex)
{ {
response = Response.status(Response.Status.BAD_REQUEST).build(); response = Response.status(Response.Status.BAD_REQUEST).build();
} }
@@ -645,38 +668,38 @@ public class RepositoryResource
{ {
Response response = null; Response response = null;
StreamingOutput output = null; StreamingOutput output = null;
Repository repository = repositoryManager.get(id);
if (repository != null)
{
try try
{ {
RepositoryBrowser browser = RepositoryService service = servicefactory.create(id);
repositoryManager.getRepositoryBrowser(repository); CatCommandBuilder builder = service.getCatCommand();
if (browser != null) if (!Strings.isNullOrEmpty(revision))
{ {
output = new BrowserStreamingOutput(browser, revision, path); builder.setRevision(revision);
}
String contentDispositionName = output = new BrowserStreamingOutput(builder, path);
getContentDispositionNameFromPath(path);
String contentDispositionName = getContentDispositionNameFromPath(path);
response = Response.ok(output).header("Content-Disposition", response = Response.ok(output).header("Content-Disposition",
contentDispositionName).build(); contentDispositionName).build();
} }
else if (logger.isWarnEnabled()) catch (RepositoryNotFoundException ex)
{ {
logger.warn("could not find repository browser for respository {}", logger.warn("could not find repository browser for respository {}", id);
repository.getId());
response = Response.status(Response.Status.NOT_FOUND).build(); response = Response.status(Response.Status.NOT_FOUND).build();
} }
catch (CommandNotSupportedException ex)
{
response = Response.status(Response.Status.BAD_REQUEST).build();
} }
catch (Exception ex) catch (Exception ex)
{ {
logger.error("could not retrive content", ex); logger.error("could not retrive content", ex);
response = createErrorResonse(ex); response = createErrorResonse(ex);
} }
}
return response; return response;
} }
@@ -718,32 +741,39 @@ public class RepositoryResource
try try
{ {
Repository repository = repositoryManager.get(id); RepositoryService service = servicefactory.create(id);
DiffCommandBuilder builder = service.getDiffCommand();
if (repository != null) if (!Strings.isNullOrEmpty(revision))
{ {
DiffViewer diffViewer = repositoryManager.getDiffViewer(repository); builder.setRevision(revision);
}
if (diffViewer != null) if (!Strings.isNullOrEmpty(path))
{ {
String name = builder.setPath(path);
repository.getName().concat("-").concat(revision).concat(".diff"); }
String name = service.getRepository().getName().concat("-").concat(
revision).concat(".diff");
String contentDispositionName = getContentDispositionName(name); String contentDispositionName = getContentDispositionName(name);
response = Response.ok(new DiffStreamingOutput(diffViewer, revision, response = Response.ok(new DiffStreamingOutput(builder)).header(
path)).header("Content-Disposition", "Content-Disposition", contentDispositionName).build();
contentDispositionName).build();
}
else
{
response = Response.status(Response.Status.NOT_FOUND).build();
}
}
} }
catch (RepositoryNotFoundException ex) catch (RepositoryNotFoundException ex)
{ {
response = Response.status(Response.Status.NOT_FOUND).build(); response = Response.status(Response.Status.NOT_FOUND).build();
} }
catch (CommandNotSupportedException ex)
{
response = Response.status(Response.Status.BAD_REQUEST).build();
}
catch (Exception ex)
{
logger.error("could not create diff", ex);
response = createErrorResonse(ex);
}
return response; return response;
} }
@@ -909,21 +939,15 @@ public class RepositoryResource
//~--- fields --------------------------------------------------------------- //~--- fields ---------------------------------------------------------------
/** Field description */
private BlameViewerUtil blameViewerUtil;
/** Field description */
private ChangesetViewerUtil changesetViewerUtil;
/** Field description */ /** Field description */
private ScmConfiguration configuration; private ScmConfiguration configuration;
/** Field description */
private RepositoryBrowserUtil repositoryBrowserUtil;
/** Field description */ /** Field description */
private RepositoryManager repositoryManager; private RepositoryManager repositoryManager;
/** Field description */ /** Field description */
private Provider<WebSecurityContext> securityContextProvider; private Provider<WebSecurityContext> securityContextProvider;
/** Field description */
private RepositoryServiceFactory servicefactory;
} }