Skip to content

Commit 4b1792b

Browse files
committed
Limit the memento headers to first, last, prev, next, timemap, timegate
Resolves #402
1 parent 1fe3e69 commit 4b1792b

File tree

8 files changed

+331
-64
lines changed

8 files changed

+331
-64
lines changed

components/test/src/main/java/org/trellisldp/test/MementoBinaryTests.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public interface MementoBinaryTests extends MementoResourceTests {
4545
default Map<String, String> getMementos() {
4646
final Map<String, String> mementos = new HashMap<>();
4747
try (final Response res = target(getBinaryLocation()).request().head()) {
48-
getLinks(res).stream().filter(link -> link.getRel().equals("memento"))
48+
getLinks(res).stream().filter(link -> link.getRels().contains("memento"))
4949
.filter(l -> l.getParams().containsKey("datetime"))
5050
.forEach(link -> mementos.put(link.getUri().toString(), link.getParams().get("datetime")));
5151
}
@@ -61,10 +61,10 @@ default void testCanonicalHeader() {
6161
getMementos().forEach((memento, date) -> {
6262
try (final Response res = target(memento).request().head()) {
6363
assertEquals(SUCCESSFUL, res.getStatusInfo().getFamily(), "Check for a valid response");
64-
assertTrue(getLinks(res).stream().filter(link -> link.getRel().equals("canonical"))
64+
assertTrue(getLinks(res).stream().filter(link -> link.getRels().contains("canonical"))
6565
.anyMatch(link -> link.getUri().toString().equals(memento)),
6666
"Check for a rel=canonical Link header");
67-
assertTrue(getLinks(res).stream().filter(link -> link.getRel().equals("describedby"))
67+
assertTrue(getLinks(res).stream().filter(link -> link.getRels().contains("describedby"))
6868
.anyMatch(link -> link.getUri().toString().equals(memento + "&ext=description")),
6969
"Check for a rel=describedby Link header");
7070
}
@@ -84,10 +84,10 @@ default void testCanonicalHeaderDescriptions() {
8484
}
8585
try (final Response res = target(description).request().accept("text/turtle").head()) {
8686
assertEquals(SUCCESSFUL, res.getStatusInfo().getFamily(), "Check for a valid response");
87-
assertTrue(getLinks(res).stream().filter(link -> link.getRel().equals("canonical"))
87+
assertTrue(getLinks(res).stream().filter(link -> link.getRels().contains("canonical"))
8888
.anyMatch(link -> link.getUri().toString().equals(memento + "&ext=description")),
8989
"Check for a rel=canonical Link header");
90-
assertTrue(getLinks(res).stream().filter(link -> link.getRel().equals("describes"))
90+
assertTrue(getLinks(res).stream().filter(link -> link.getRels().contains("describes"))
9191
.anyMatch(link -> link.getUri().toString().equals(memento)),
9292
"Check for a rel=describes Link header");
9393
}
@@ -108,12 +108,12 @@ default void testMementoContent() {
108108
responses.put(memento, readEntityAsString(res.getEntity()));
109109
}
110110
});
111-
assertEquals(3L, responses.size(), "Check for 3 mementos");
111+
assertEquals(2L, responses.size(), "Check for 2 mementos");
112112
responses.forEach((response, content) ->
113113
assertTrue(content.startsWith("This is a text file."), "Check the binary content of the mementos"));
114-
assertEquals(3L, responses.values().size(), "Check the number of Memento responses");
114+
assertEquals(2L, responses.values().size(), "Check the number of Memento responses");
115115
final Set<String> values = new HashSet<>(responses.values());
116-
assertEquals(3L, values.size(), "Check the number of distinct Memento responses");
116+
assertEquals(2L, values.size(), "Check the number of distinct Memento responses");
117117
}
118118

119119
/**

components/test/src/main/java/org/trellisldp/test/MementoResourceTests.java

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -58,22 +58,22 @@ public interface MementoResourceTests extends MementoCommonTests {
5858
default Map<String, String> getMementos() {
5959
final Map<String, String> mementos = new HashMap<>();
6060
try (final Response res = target(getResourceLocation()).request().get()) {
61-
getLinks(res).stream().filter(link -> link.getRel().equals("memento"))
61+
getLinks(res).stream().filter(link -> link.getRels().contains("memento"))
6262
.filter(l -> l.getParams().containsKey("datetime"))
6363
.forEach(link -> mementos.put(link.getUri().toString(), link.getParams().get("datetime")));
6464
}
6565
return mementos;
6666
}
6767

6868
/**
69-
* Test the presence of three mementos.
69+
* Test the presence of two memento links.
7070
*/
7171
@Test
72-
@DisplayName("Test the presence of three mementos")
72+
@DisplayName("Test the presence of two memento links")
7373
default void testMementosWereFound() {
7474
final Map<String, String> mementos = getMementos();
7575
assertFalse(mementos.isEmpty(), "Check that mementos were found");
76-
assertEquals(3, mementos.size(), "Check that 3 mementos were found");
76+
assertEquals(2, mementos.size(), "Check that 2 mementos were found");
7777
}
7878

7979
/**
@@ -165,7 +165,7 @@ default void testMementoContent() {
165165

166166
final IRI subject = rdf.createIRI(getResourceLocation());
167167
final List<IRI> urls = mementos.keySet().stream().sorted().map(rdf::createIRI).collect(toList());
168-
assertEquals(3L, urls.size(), "Check that three mementos were found");
168+
assertEquals(2L, urls.size(), "Check that two mementos were found");
169169
assertTrue(dataset.getGraph(urls.get(0)).isPresent(), "Check that the first graph is present");
170170
dataset.getGraph(urls.get(0)).ifPresent(g -> {
171171
assertTrue(g.contains(subject, type, SKOS.Concept), "Check for a skos:Concept type");
@@ -176,20 +176,8 @@ default void testMementoContent() {
176176
assertEquals(3L, g.size(), "Check for three triples");
177177
});
178178

179-
assertTrue(dataset.getGraph(urls.get(1)).isPresent(), "Check that the second graph is present");
179+
assertTrue(dataset.getGraph(urls.get(1)).isPresent(), "Check that the last graph is present");
180180
dataset.getGraph(urls.get(1)).ifPresent(g -> {
181-
assertTrue(g.contains(subject, type, SKOS.Concept), "Check for a skos:Concept type");
182-
assertTrue(g.contains(subject, SKOS.prefLabel, rdf.createLiteral("Resource Name", "eng")),
183-
"Check for a skos:prefLabel property");
184-
assertTrue(g.contains(subject, DC.subject, rdf.createIRI("http://example.org/subject/1")),
185-
"Check for a dc:subject property");
186-
assertTrue(g.contains(subject, DC.title, rdf.createLiteral("Title")),
187-
"Check for a dc:title property");
188-
assertEquals(4L, g.size(), "Check for four triples");
189-
});
190-
191-
assertTrue(dataset.getGraph(urls.get(2)).isPresent(), "Check that the third graph is present");
192-
dataset.getGraph(urls.get(2)).ifPresent(g -> {
193181
assertTrue(g.contains(subject, type, SKOS.Concept), "Check for a skos:Concept type");
194182
assertTrue(g.contains(subject, SKOS.prefLabel, rdf.createLiteral("Resource Name", "eng")),
195183
"Check for a skos:prefLabel property");

core/http/src/main/java/org/trellisldp/http/core/TimemapGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,6 @@ default Stream<Triple> asRdf(String identifier, List<Link> mementos) {
101101
* @return true if this is a valid link; false otherwise
102102
*/
103103
default boolean isMementoLink(Link link) {
104-
return MEMENTO.equals(link.getRel()) && link.getParams().containsKey(DATETIME);
104+
return link.getRels().contains(MEMENTO) && link.getParams().containsKey(DATETIME);
105105
}
106106
}

core/http/src/main/java/org/trellisldp/http/impl/GetHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,8 @@ public ResponseBuilder addMementoHeaders(final ResponseBuilder builder, final So
257257
// Only show memento links for the user-managed graph (not ACL)
258258
if (!ACL.equals(getRequest().getExt())) {
259259
builder.link(getIdentifier(), "original timegate")
260-
.links(MementoResource.getMementoLinks(getIdentifier(), mementos)
260+
.links(MementoResource.getMementoHeaders(getIdentifier(), mementos, isMemento ?
261+
getResource().getModified() : null)
261262
.map(link -> MementoResource.filterLinkParams(link, !includeMementoDates))
262263
.toArray(Link[]::new));
263264
}

0 commit comments

Comments
 (0)