added blame support to client api

This commit is contained in:
Sebastian Sdorra
2011-09-22 20:00:31 +02:00
parent 1126a1be1a
commit 979167a497
4 changed files with 124 additions and 15 deletions

View File

@@ -33,6 +33,10 @@
package sonia.scm.client;
//~--- non-JDK imports --------------------------------------------------------
import sonia.scm.repository.BlameLine;
//~--- JDK imports ------------------------------------------------------------
import java.io.IOException;
@@ -48,6 +52,17 @@ import java.util.List;
public interface ClientRepositoryBrowser
{
/**
* Method description
*
*
* @param revision
* @param path
*
* @return
*/
public List<BlameLine> getBlameLines(String revision, String path);
/**
* Method description
*

View File

@@ -35,6 +35,7 @@ package sonia.scm.client;
//~--- non-JDK imports --------------------------------------------------------
import sonia.scm.repository.BlameLine;
import sonia.scm.repository.FileObject;
//~--- JDK imports ------------------------------------------------------------
@@ -70,6 +71,17 @@ public class FileObjectWrapper
//~--- get methods ----------------------------------------------------------
/**
* Method description
*
*
* @return
*/
public List<BlameLine> getBlameLines()
{
return repositoryBrowser.getBlameLines(revision, getPath());
}
/**
* Method description
*

View File

@@ -79,6 +79,9 @@ public class ScmUrlProvider
/** Field description */
public static final String URLPART_USERS = "users";
/** Field description */
public static final String URLPATTERN_BLAME = "repositories/{0}/blame";
/** Field description */
public static final String URLPATTERN_BROWSE = "repositories/{0}/browse";
@@ -153,6 +156,24 @@ public class ScmUrlProvider
return baseUrl;
}
/**
* Method description
*
*
* @param repositoryId
* @param path
* @param revision
*
* @return
*/
public String getBlameUrl(String repositoryId, String path, String revision)
{
String url = MessageFormat.format(getResourceUrl(URLPATTERN_BLAME),
repositoryId);
return appendParameter(url, path, revision);
}
/**
* Method description
*
@@ -215,20 +236,8 @@ public class ScmUrlProvider
{
String url = MessageFormat.format(getResourceUrl(URLPATTERN_BROWSE),
repositoryId);
String s = "?";
if (Util.isNotEmpty(path))
{
url = url.concat(s).concat("path=").concat(path);
s = "&";
}
if (Util.isNotEmpty(revision))
{
url = url.concat(s).concat("revision=").concat(revision);
}
return url;
return appendParameter(url, path, revision);
}
/**
@@ -391,6 +400,36 @@ public class ScmUrlProvider
this.extension = extension;
}
//~--- methods --------------------------------------------------------------
/**
* Method description
*
*
* @param url
* @param path
* @param revision
*
* @return
*/
private String appendParameter(String url, String path, String revision)
{
String s = "?";
if (Util.isNotEmpty(path))
{
url = url.concat(s).concat("path=").concat(path);
s = "&";
}
if (Util.isNotEmpty(revision))
{
url = url.concat(s).concat("revision=").concat(revision);
}
return url;
}
//~--- fields ---------------------------------------------------------------
/** Field description */

View File

@@ -35,6 +35,8 @@ package sonia.scm.client;
//~--- non-JDK imports --------------------------------------------------------
import sonia.scm.repository.BlameLine;
import sonia.scm.repository.BlameResult;
import sonia.scm.repository.BrowserResult;
import sonia.scm.repository.FileObject;
import sonia.scm.repository.Repository;
@@ -75,6 +77,47 @@ public class JerseyClientRepositoryBrowser implements ClientRepositoryBrowser
//~--- get methods ----------------------------------------------------------
/**
* Method description
*
*
* @param revision
* @param path
*
* @return
*/
@Override
public List<BlameLine> getBlameLines(String revision, String path)
{
List<BlameLine> blameLines = null;
String url =
session.getUrlProvider().getBlameUrl(repository.getId(), path,
revision);
WebResource resource = session.getClient().resource(url);
ClientResponse response = null;
try
{
response = resource.get(ClientResponse.class);
if (response.getStatus() != ScmClientException.SC_NOTFOUND)
{
ClientUtil.checkResponse(response, 200);
BlameResult result = response.getEntity(BlameResult.class);
AssertUtil.assertIsNotNull(result);
blameLines = result.getBlameLines();
}
}
finally
{
ClientUtil.close(response);
}
return blameLines;
}
/**
* Method description
*
@@ -91,8 +134,8 @@ public class JerseyClientRepositoryBrowser implements ClientRepositoryBrowser
{
InputStream input = null;
String url =
session.getUrlProvider().getRepositoryContentUrl(repository.getId(), path,
revision);
session.getUrlProvider().getRepositoryContentUrl(repository.getId(),
path, revision);
WebResource resource = session.getClient().resource(url);
ClientResponse response = null;