Add source and changeset links to branch

This commit is contained in:
René Pfeuffer
2018-08-08 17:13:24 +02:00
parent a5ddea31c7
commit 1c93551e5c
8 changed files with 91 additions and 40 deletions

View File

@@ -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.
* *

View File

@@ -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());
} }
} }

View File

@@ -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
@Inject
public ChangesetRootResource(Provider<ChangesetCollectionResource> changesetCollectionResource) {
this.changesetCollectionResource = changesetCollectionResource;
}
@Path("") @Path("")
public ChangesetCollectionResource getChangesetCollectionResource() { public Response getAll(@DefaultValue("0") @QueryParam("page") int page,
return changesetCollectionResource.get(); @DefaultValue("10") @QueryParam("pageSize") int pageSize,
@QueryParam("sortBy") String sortBy,
@DefaultValue("false") @QueryParam("desc") boolean desc) {
throw new UnsupportedOperationException();
}
@GET
@Path("{revision}")
public Response get() {
throw new UnsupportedOperationException();
} }
} }

View File

@@ -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());
} }
} }

View File

@@ -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();
} }
} }

View File

@@ -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
@Inject
public SourceRootResource(Provider<SourceCollectionResource> sourceCollectionResource) {
this.sourceCollectionResource = sourceCollectionResource;
}
@Path("") @Path("")
public SourceCollectionResource getSourceCollectionResource() { public Response getAll(@DefaultValue("0") @QueryParam("page") int page,
return sourceCollectionResource.get(); @DefaultValue("10") @QueryParam("pageSize") int pageSize,
@QueryParam("sortBy") String sortBy,
@DefaultValue("false") @QueryParam("desc") boolean desc) {
throw new UnsupportedOperationException();
}
@GET
@Path("{revision}")
public Response get() {
throw new UnsupportedOperationException();
} }
} }

View File

@@ -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));

View File

@@ -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);
} }