From 79ebf9b5a49699cda5b141d8fb1e055794e4c62e Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 29 Nov 2017 12:00:02 +0100 Subject: [PATCH] #671 - Polishing. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduced Link.hasRel(…) and use that to filter link lookups in ResourceSupport. --- .../org/springframework/hateoas/Link.java | 13 ++++++++++ .../hateoas/ResourceSupport.java | 4 ++-- .../springframework/hateoas/LinkUnitTest.java | 24 +++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/hateoas/Link.java b/src/main/java/org/springframework/hateoas/Link.java index dde6fac6..388708b8 100755 --- a/src/main/java/org/springframework/hateoas/Link.java +++ b/src/main/java/org/springframework/hateoas/Link.java @@ -168,6 +168,19 @@ public class Link implements Serializable { return new Link(getUriTemplate().expand(arguments).toString(), getRel()); } + /** + * Returns whether the current {@link Link} has the given link relation. + * + * @param rel must not be {@literal null} or empty. + * @return + */ + public boolean hasRel(String rel) { + + Assert.hasText(rel, "Link relation must not be null or empty!"); + + return this.rel.equals(rel); + } + private UriTemplate getUriTemplate() { if (template == null) { diff --git a/src/main/java/org/springframework/hateoas/ResourceSupport.java b/src/main/java/org/springframework/hateoas/ResourceSupport.java index 22835a70..16c50cdc 100755 --- a/src/main/java/org/springframework/hateoas/ResourceSupport.java +++ b/src/main/java/org/springframework/hateoas/ResourceSupport.java @@ -126,7 +126,7 @@ public class ResourceSupport implements Identifiable { public Optional getLink(String rel) { return links.stream() // - .filter(link -> link.getRel().equals(rel)) // + .filter(link -> link.hasRel(rel)) // .findFirst(); } @@ -151,7 +151,7 @@ public class ResourceSupport implements Identifiable { public List getLinks(String rel) { return links.stream() // - .filter(link -> link.getRel().equals(rel)) // + .filter(link -> link.hasRel(rel)) // .collect(Collectors.toList()); } diff --git a/src/test/java/org/springframework/hateoas/LinkUnitTest.java b/src/test/java/org/springframework/hateoas/LinkUnitTest.java index fdf37869..41df6b07 100755 --- a/src/test/java/org/springframework/hateoas/LinkUnitTest.java +++ b/src/test/java/org/springframework/hateoas/LinkUnitTest.java @@ -223,4 +223,28 @@ public class LinkUnitTest { assertThat(Link.valueOf("; rel=\"http://acme.com/rels/foo-bar\"").getRel()) // .isEqualTo("http://acme.com/rels/foo-bar"); } + + /** + * @see #671 + */ + @Test + public void exposesLinkRelation() { + + Link link = new Link("/", "foo"); + + assertThat(link.hasRel("foo")).isTrue(); + assertThat(link.hasRel("bar")).isFalse(); + } + + /** + * @see #671 + */ + @Test + public void rejectsInvalidRelationsOnHasRel() { + + Link link = new Link("/"); + + assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> link.hasRel(null)); + assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> link.hasRel("")); + } }