mirror of
https://github.com/scm-manager/scm-manager.git
synced 2026-01-19 05:52:11 +01:00
extends LinkEnricher api to append link arrays to the response
This commit is contained in:
@@ -15,4 +15,33 @@ public interface LinkAppender {
|
||||
* @param href link uri
|
||||
*/
|
||||
void appendOne(String rel, String href);
|
||||
|
||||
/**
|
||||
* Returns a builder which is able to append an array of links to the resource.
|
||||
*
|
||||
* @param rel name of link relation
|
||||
* @return multi link builder
|
||||
*/
|
||||
LinkArrayBuilder arrayBuilder(String rel);
|
||||
|
||||
|
||||
/**
|
||||
* Builder for link arrays.
|
||||
*/
|
||||
interface LinkArrayBuilder {
|
||||
|
||||
/**
|
||||
* Append an link to the array.
|
||||
*
|
||||
* @param name name of link
|
||||
* @param href link target
|
||||
* @return {@code this}
|
||||
*/
|
||||
LinkArrayBuilder append(String name, String href);
|
||||
|
||||
/**
|
||||
* Builds the array and appends the it to the json response.
|
||||
*/
|
||||
void build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,9 @@ package sonia.scm.api.v2.resources;
|
||||
import de.otto.edison.hal.Link;
|
||||
import de.otto.edison.hal.Links;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
class EdisonLinkAppender implements LinkAppender {
|
||||
|
||||
private final Links.Builder builder;
|
||||
@@ -15,4 +18,32 @@ class EdisonLinkAppender implements LinkAppender {
|
||||
public void appendOne(String rel, String href) {
|
||||
builder.single(Link.link(rel, href));
|
||||
}
|
||||
|
||||
@Override
|
||||
public LinkArrayBuilder arrayBuilder(String rel) {
|
||||
return new EdisonLinkArrayBuilder(builder, rel);
|
||||
}
|
||||
|
||||
private static class EdisonLinkArrayBuilder implements LinkArrayBuilder {
|
||||
|
||||
private final Links.Builder builder;
|
||||
private final String rel;
|
||||
private final List<Link> linkArray = new ArrayList<>();
|
||||
|
||||
private EdisonLinkArrayBuilder(Links.Builder builder, String rel) {
|
||||
this.builder = builder;
|
||||
this.rel = rel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LinkArrayBuilder append(String name, String href) {
|
||||
linkArray.add(Link.linkBuilder(rel, href).withName(name).build());
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build() {
|
||||
builder.array(linkArray);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
package sonia.scm.api.v2.resources;
|
||||
|
||||
import de.otto.edison.hal.Link;
|
||||
import de.otto.edison.hal.Links;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static de.otto.edison.hal.Links.linkingTo;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class EdisonLinkAppenderTest {
|
||||
|
||||
private Links.Builder builder;
|
||||
private EdisonLinkAppender appender;
|
||||
|
||||
@BeforeEach
|
||||
void prepare() {
|
||||
builder = linkingTo();
|
||||
appender = new EdisonLinkAppender(builder);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldAppendOneLink() {
|
||||
appender.appendOne("self", "https://scm.hitchhiker.com");
|
||||
|
||||
Links links = builder.build();
|
||||
assertThat(links.getLinkBy("self").get().getHref()).isEqualTo("https://scm.hitchhiker.com");
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldAppendMultipleLinks() {
|
||||
appender.arrayBuilder("items")
|
||||
.append("one", "http://one")
|
||||
.append("two", "http://two")
|
||||
.build();
|
||||
|
||||
List<Link> items = builder.build().getLinksBy("items");
|
||||
assertThat(items).hasSize(2);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user