Skip to content

Commit b4ead82

Browse files
committed
Add tests and javadocs
1 parent fb0fdcb commit b4ead82

File tree

4 files changed

+372
-122
lines changed

4 files changed

+372
-122
lines changed

access-grant/src/main/java/com/inrupt/client/accessgrant/AccessGrantClient.java

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -357,45 +357,25 @@ public CompletionStage<AccessCredentialVerification> verify(final AccessCredenti
357357
*/
358358
public <T extends AccessCredential> CompletionStage<CredentialResult<T>> query(final CredentialFilter<T> filter) {
359359
final Class<T> clazz = filter.getCredentialType();
360-
final String type;
361360
final Set<String> supportedTypes;
362361
if (AccessGrant.class.isAssignableFrom(clazz)) {
363-
type = SOLID_ACCESS_GRANT;
364362
supportedTypes = ACCESS_GRANT_TYPES;
365363
} else if (AccessRequest.class.isAssignableFrom(clazz)) {
366-
type = SOLID_ACCESS_REQUEST;
367364
supportedTypes = ACCESS_REQUEST_TYPES;
368365
} else if (AccessDenial.class.isAssignableFrom(clazz)) {
369-
type = SOLID_ACCESS_DENIAL;
370366
supportedTypes = ACCESS_DENIAL_TYPES;
371367
} else {
372368
throw new AccessGrantException("Unsupported type " + clazz + " in query request");
373369
}
374370

375371
return v1Metadata().thenCompose(metadata -> {
376-
final List<T> responses = new ArrayList<>();
377-
// check that query endpoint is nonnull
378-
final URIBuilder query = URIBuilder.newBuilder(metadata.queryEndpoint)
379-
.queryParam("type", type)
380-
.queryParam("pageSize", Integer.toString(filter.getPageSize()));
381-
382-
filter.getFromAgent().map(URI::toString).ifPresent(a -> query.queryParam("fromAgent", a));
383-
filter.getToAgent().map(URI::toString).ifPresent(a -> query.queryParam("toAgent", a));
384-
filter.getStatus().map(CredentialFilter.CredentialStatus::getValue)
385-
.ifPresent(s -> query.queryParam("status", s));
386-
filter.getResource().map(URI::toString).ifPresent(r -> query.queryParam("resource", r));
387-
filter.getPurpose().map(URI::toString).ifPresent(p -> query.queryParam("purpose", p));
388-
filter.getIssuedWithin().map(CredentialFilter.CredentialDuration::name)
389-
.ifPresent(d -> query.queryParam("issuedWithin", d));
390-
filter.getRevokedWithin().map(CredentialFilter.CredentialDuration::name)
391-
.ifPresent(d -> query.queryParam("revokedWithin", d));
392-
filter.getPage().ifPresent(p -> query.queryParam("page", p));
393-
394-
final Request req = Request.newBuilder(query.build()).GET().build();
372+
// TODO check that query endpoint is nonnull
373+
final Request req = Request.newBuilder(filter.asURI(metadata.queryEndpoint)).GET().build();
395374
return client.send(req, Response.BodyHandlers.ofInputStream()).thenApply(response -> {
396375
try (final InputStream input = response.body()) {
397376
if (isSuccess(response.statusCode())) {
398-
final Map<String, URI> links = processFilterResponseHeaders(response.headers());
377+
final Map<String, CredentialFilter<T>> links = processFilterResponseHeaders(response.headers(),
378+
filter);
399379
final List<T> items = processFilterResponseBody(input, supportedTypes, clazz);
400380
return new CredentialResult<>(items, links.get("first"), links.get("prev"),
401381
links.get("next"), links.get("last"));
@@ -411,22 +391,38 @@ public <T extends AccessCredential> CompletionStage<CredentialResult<T>> query(f
411391
});
412392
}
413393

414-
Map<String, URI> processFilterResponseHeaders(final Headers headers) {
415-
final Map<String, URI> links = new HashMap<>();
394+
<T extends AccessCredential> Map<String, CredentialFilter<T>> processFilterResponseHeaders(final Headers headers,
395+
final CredentialFilter<T> filter) {
396+
final Map<String, CredentialFilter<T>> links = new HashMap<>();
416397
final List<String> linkHeaders = headers.allValues("Link");
417398
if (!linkHeaders.isEmpty()) {
418399
Headers.Link.parse(linkHeaders.toArray(linkHeaders.toArray(new String[0])))
419400
.forEach(link -> {
420401
final String rel = link.getParameter("rel");
421402
final URI uri = link.getUri();
422403
if (rel != null && uri != null) {
423-
links.put(rel, uri);
404+
final String page = getPageQueryParam(uri);
405+
links.put(rel, CredentialFilter.newBuilder(filter).page(page)
406+
.build(filter.getCredentialType()));
424407
}
425408
});
426409
}
427410
return links;
428411
}
429412

413+
static String getPageQueryParam(final URI uri) {
414+
final String params = uri.getQuery();
415+
if (params != null) {
416+
for (final String param : params.split("&")) {
417+
final String parts[] = param.split("=", 2);
418+
if (parts.length == 2 && "page".equals(parts[0])) {
419+
return parts[1];
420+
}
421+
}
422+
}
423+
return null;
424+
}
425+
430426
@SuppressWarnings("unchecked")
431427
<T extends AccessCredential> List<T> processFilterResponseBody(final InputStream input,
432428
final Set<String> validTypes, final Class<T> clazz) throws IOException {

0 commit comments

Comments
 (0)