mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-11 16:05:44 +01:00
Add source and changeset links to branch
This commit is contained in:
@@ -76,6 +76,12 @@ public class BranchRootResource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Path("{branch}/changesets/")
|
||||||
|
@GET
|
||||||
|
public Response history(@PathParam("namespace") String namespace, @PathParam("name") String name, @PathParam("branch") String branchName) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the branches for a repository.
|
* Returns the branches for a repository.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import sonia.scm.repository.NamespaceAndName;
|
|||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import static de.otto.edison.hal.Link.linkBuilder;
|
||||||
import static de.otto.edison.hal.Links.linkingTo;
|
import static de.otto.edison.hal.Links.linkingTo;
|
||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
@@ -24,7 +25,11 @@ public abstract class BranchToBranchDtoMapper {
|
|||||||
|
|
||||||
@AfterMapping
|
@AfterMapping
|
||||||
void appendLinks(@MappingTarget BranchDto target, @Context NamespaceAndName namespaceAndName) {
|
void appendLinks(@MappingTarget BranchDto target, @Context NamespaceAndName namespaceAndName) {
|
||||||
Links.Builder linksBuilder = linkingTo().self(resourceLinks.branch().self(namespaceAndName, target.getName()));
|
Links.Builder linksBuilder = linkingTo()
|
||||||
|
.self(resourceLinks.branch().self(namespaceAndName, target.getName()))
|
||||||
|
.single(linkBuilder("history", resourceLinks.branch().history(namespaceAndName, target.getName())).build())
|
||||||
|
.single(linkBuilder("changeset", resourceLinks.changeset().changeset(namespaceAndName.getNamespace(), namespaceAndName.getName(), target.getRevision())).build())
|
||||||
|
.single(linkBuilder("source", resourceLinks.source().source(namespaceAndName.getNamespace(), namespaceAndName.getName(), target.getRevision())).build());
|
||||||
target.add(linksBuilder.build());
|
target.add(linksBuilder.build());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,25 @@
|
|||||||
package sonia.scm.api.v2.resources;
|
package sonia.scm.api.v2.resources;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.ws.rs.DefaultValue;
|
||||||
import javax.inject.Provider;
|
import javax.ws.rs.GET;
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
|
import javax.ws.rs.QueryParam;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
public class ChangesetRootResource {
|
public class ChangesetRootResource {
|
||||||
|
|
||||||
private final Provider<ChangesetCollectionResource> changesetCollectionResource;
|
@GET
|
||||||
|
@Path("")
|
||||||
@Inject
|
public Response getAll(@DefaultValue("0") @QueryParam("page") int page,
|
||||||
public ChangesetRootResource(Provider<ChangesetCollectionResource> changesetCollectionResource) {
|
@DefaultValue("10") @QueryParam("pageSize") int pageSize,
|
||||||
this.changesetCollectionResource = changesetCollectionResource;
|
@QueryParam("sortBy") String sortBy,
|
||||||
|
@DefaultValue("false") @QueryParam("desc") boolean desc) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Path("")
|
@GET
|
||||||
public ChangesetCollectionResource getChangesetCollectionResource() {
|
@Path("{revision}")
|
||||||
return changesetCollectionResource.get();
|
public Response get() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ public abstract class RepositoryToRepositoryDtoMapper extends BaseMapper<Reposit
|
|||||||
}
|
}
|
||||||
linksBuilder.single(link("tags", resourceLinks.tagCollection().self(target.getNamespace(), target.getName())));
|
linksBuilder.single(link("tags", resourceLinks.tagCollection().self(target.getNamespace(), target.getName())));
|
||||||
linksBuilder.single(link("branches", resourceLinks.branchCollection().self(target.getNamespace(), target.getName())));
|
linksBuilder.single(link("branches", resourceLinks.branchCollection().self(target.getNamespace(), target.getName())));
|
||||||
linksBuilder.single(link("changesets", resourceLinks.changesetCollection().self(target.getNamespace(), target.getName())));
|
linksBuilder.single(link("changesets", resourceLinks.changeset().self(target.getNamespace(), target.getName())));
|
||||||
linksBuilder.single(link("sources", resourceLinks.sourceCollection().self(target.getNamespace(), target.getName())));
|
linksBuilder.single(link("sources", resourceLinks.source().self(target.getNamespace(), target.getName())));
|
||||||
target.add(linksBuilder.build());
|
target.add(linksBuilder.build());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -237,6 +237,10 @@ class ResourceLinks {
|
|||||||
String self(NamespaceAndName namespaceAndName, String branch) {
|
String self(NamespaceAndName namespaceAndName, String branch) {
|
||||||
return branchLinkBuilder.method("getRepositoryResource").parameters(namespaceAndName.getNamespace(), namespaceAndName.getName()).method("branches").parameters().method("get").parameters(branch).href();
|
return branchLinkBuilder.method("getRepositoryResource").parameters(namespaceAndName.getNamespace(), namespaceAndName.getName()).method("branches").parameters().method("get").parameters(branch).href();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String history(NamespaceAndName namespaceAndName, String branch) {
|
||||||
|
return branchLinkBuilder.method("getRepositoryResource").parameters(namespaceAndName.getNamespace(), namespaceAndName.getName()).method("branches").parameters().method("history").parameters(branch).href();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public BranchCollectionLinks branchCollection() {
|
public BranchCollectionLinks branchCollection() {
|
||||||
@@ -255,35 +259,43 @@ class ResourceLinks {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChangesetCollectionLinks changesetCollection() {
|
public ChangesetLinks changeset() {
|
||||||
return new ChangesetCollectionLinks(uriInfoStore.get());
|
return new ChangesetLinks(uriInfoStore.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
static class ChangesetCollectionLinks {
|
static class ChangesetLinks {
|
||||||
private final LinkBuilder changesetLinkBuilder;
|
private final LinkBuilder changesetLinkBuilder;
|
||||||
|
|
||||||
ChangesetCollectionLinks(UriInfo uriInfo) {
|
ChangesetLinks(UriInfo uriInfo) {
|
||||||
changesetLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, ChangesetRootResource.class, ChangesetCollectionResource.class);
|
changesetLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, ChangesetRootResource.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
String self(String namespace, String name) {
|
String self(String namespace, String name) {
|
||||||
return changesetLinkBuilder.method("getRepositoryResource").parameters(namespace, name).method("changesets").parameters().method("getChangesetCollectionResource").parameters().method("getAll").parameters().href();
|
return changesetLinkBuilder.method("getRepositoryResource").parameters(namespace, name).method("changesets").parameters().method("getAll").parameters().href();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String changeset(String namespace, String name, String revision) {
|
||||||
|
return changesetLinkBuilder.method("getRepositoryResource").parameters(namespace, name).method("changesets").parameters().method("get").parameters(revision).href();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public SourceCollectionLinks sourceCollection() {
|
public SourceLinks source() {
|
||||||
return new SourceCollectionLinks(uriInfoStore.get());
|
return new SourceLinks(uriInfoStore.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
static class SourceCollectionLinks {
|
static class SourceLinks {
|
||||||
private final LinkBuilder sourceLinkBuilder;
|
private final LinkBuilder sourceLinkBuilder;
|
||||||
|
|
||||||
SourceCollectionLinks(UriInfo uriInfo) {
|
SourceLinks(UriInfo uriInfo) {
|
||||||
sourceLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, SourceRootResource.class, SourceCollectionResource.class);
|
sourceLinkBuilder = new LinkBuilder(uriInfo, RepositoryRootResource.class, RepositoryResource.class, SourceRootResource.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
String self(String namespace, String name) {
|
String self(String namespace, String name) {
|
||||||
return sourceLinkBuilder.method("getRepositoryResource").parameters(namespace, name).method("sources").parameters().method("getSourceCollectionResource").parameters().method("getAll").parameters().href();
|
return sourceLinkBuilder.method("getRepositoryResource").parameters(namespace, name).method("sources").parameters().method("getAll").parameters().href();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String source(String namespace, String name, String revision) {
|
||||||
|
return sourceLinkBuilder.method("getRepositoryResource").parameters(namespace, name).method("sources").parameters().method("get").parameters(revision).href();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,20 +1,25 @@
|
|||||||
package sonia.scm.api.v2.resources;
|
package sonia.scm.api.v2.resources;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.ws.rs.DefaultValue;
|
||||||
import javax.inject.Provider;
|
import javax.ws.rs.GET;
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
|
import javax.ws.rs.QueryParam;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
public class SourceRootResource {
|
public class SourceRootResource {
|
||||||
|
|
||||||
private final Provider<SourceCollectionResource> sourceCollectionResource;
|
@GET
|
||||||
|
@Path("")
|
||||||
@Inject
|
public Response getAll(@DefaultValue("0") @QueryParam("page") int page,
|
||||||
public SourceRootResource(Provider<SourceCollectionResource> sourceCollectionResource) {
|
@DefaultValue("10") @QueryParam("pageSize") int pageSize,
|
||||||
this.sourceCollectionResource = sourceCollectionResource;
|
@QueryParam("sortBy") String sortBy,
|
||||||
|
@DefaultValue("false") @QueryParam("desc") boolean desc) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Path("")
|
@GET
|
||||||
public SourceCollectionResource getSourceCollectionResource() {
|
@Path("{revision}")
|
||||||
return sourceCollectionResource.get();
|
public Response get() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ public class ResourceLinksMock {
|
|||||||
when(resourceLinks.repositoryCollection()).thenReturn(new ResourceLinks.RepositoryCollectionLinks(uriInfo));
|
when(resourceLinks.repositoryCollection()).thenReturn(new ResourceLinks.RepositoryCollectionLinks(uriInfo));
|
||||||
when(resourceLinks.tagCollection()).thenReturn(new ResourceLinks.TagCollectionLinks(uriInfo));
|
when(resourceLinks.tagCollection()).thenReturn(new ResourceLinks.TagCollectionLinks(uriInfo));
|
||||||
when(resourceLinks.branchCollection()).thenReturn(new ResourceLinks.BranchCollectionLinks(uriInfo));
|
when(resourceLinks.branchCollection()).thenReturn(new ResourceLinks.BranchCollectionLinks(uriInfo));
|
||||||
when(resourceLinks.changesetCollection()).thenReturn(new ResourceLinks.ChangesetCollectionLinks(uriInfo));
|
when(resourceLinks.changeset()).thenReturn(new ResourceLinks.ChangesetLinks(uriInfo));
|
||||||
when(resourceLinks.sourceCollection()).thenReturn(new ResourceLinks.SourceCollectionLinks(uriInfo));
|
when(resourceLinks.source()).thenReturn(new ResourceLinks.SourceLinks(uriInfo));
|
||||||
when(resourceLinks.permissionCollection()).thenReturn(new ResourceLinks.PermissionCollectionLinks(uriInfo));
|
when(resourceLinks.permissionCollection()).thenReturn(new ResourceLinks.PermissionCollectionLinks(uriInfo));
|
||||||
when(resourceLinks.config()).thenReturn(new ResourceLinks.ConfigLinks(uriInfo));
|
when(resourceLinks.config()).thenReturn(new ResourceLinks.ConfigLinks(uriInfo));
|
||||||
when(resourceLinks.branch()).thenReturn(new ResourceLinks.BranchLinks(uriInfo));
|
when(resourceLinks.branch()).thenReturn(new ResourceLinks.BranchLinks(uriInfo));
|
||||||
|
|||||||
@@ -121,21 +121,39 @@ public class ResourceLinksTest {
|
|||||||
assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/name/branches/master", url);
|
assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/name/branches/master", url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldCreateCorrectBranchHiostoryUrl() {
|
||||||
|
String url = resourceLinks.branch().history(new NamespaceAndName("space", "name"), "master");
|
||||||
|
assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/name/branches/master/changesets/", url);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldCreateCorrectBranchChangesetUrl() {
|
||||||
|
String url = resourceLinks.changeset().changeset("space", "name", "revision");
|
||||||
|
assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/name/changesets/revision", url);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldCreateCorrectBranchSourceUrl() {
|
||||||
|
String url = resourceLinks.source().source("space", "name", "revision");
|
||||||
|
assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/name/sources/revision", url);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldCreateCorrectChangesetCollectionUrl() {
|
public void shouldCreateCorrectChangesetCollectionUrl() {
|
||||||
String url = resourceLinks.changesetCollection().self("space", "repo");
|
String url = resourceLinks.changeset().self("space", "repo");
|
||||||
assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo/changesets/", url);
|
assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo/changesets/", url);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldCreateCorrectSourceCollectionUrl() {
|
public void shouldCreateCorrectSourceCollectionUrl() {
|
||||||
String url = resourceLinks.sourceCollection().self("space", "repo");
|
String url = resourceLinks.source().self("space", "repo");
|
||||||
assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo/sources/", url);
|
assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo/sources/", url);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldCreateCorrectPermissionCollectionUrl() {
|
public void shouldCreateCorrectPermissionCollectionUrl() {
|
||||||
String url = resourceLinks.sourceCollection().self("space", "repo");
|
String url = resourceLinks.source().self("space", "repo");
|
||||||
assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo/sources/", url);
|
assertEquals(BASE_URL + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo/sources/", url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user