diff --git a/inspector-vc/src/main/java/org/oneedtech/inspect/vc/probe/ContextPropertyProbe.java b/inspector-vc/src/main/java/org/oneedtech/inspect/vc/probe/ContextPropertyProbe.java index 53143af..91fbb66 100644 --- a/inspector-vc/src/main/java/org/oneedtech/inspect/vc/probe/ContextPropertyProbe.java +++ b/inspector-vc/src/main/java/org/oneedtech/inspect/vc/probe/ContextPropertyProbe.java @@ -1,14 +1,18 @@ package org.oneedtech.inspect.vc.probe; +import static org.oneedtech.inspect.vc.Credential.Type.*; + import static org.oneedtech.inspect.util.code.Defensives.checkNotNull; import java.util.List; import java.util.Map; +import java.util.Set; import org.oneedtech.inspect.core.probe.Probe; import org.oneedtech.inspect.core.probe.RunContext; import org.oneedtech.inspect.core.report.ReportItems; import org.oneedtech.inspect.vc.Credential; + import org.oneedtech.inspect.vc.util.JsonNodeUtil; import com.fasterxml.jackson.databind.JsonNode; @@ -33,31 +37,33 @@ public class ContextPropertyProbe extends Probe { ArrayNode contextNode = (ArrayNode) root.get("@context"); if (contextNode == null) { - return fatal("No @context property", ctx); - } - - List expected = values.get(type); - if(expected == null) { - return fatal(type.name() + " not recognized", ctx); + return fatal("No @context property", ctx); } + + List expected = values.get(values.keySet() + .stream() + .filter(s->s.contains(type)) + .findFirst() + .orElseThrow(()-> new IllegalArgumentException(type.name() + " not recognized"))); List given = JsonNodeUtil.asStringList(contextNode); int pos = 0; - for(String uri : expected) { - if((given.size() < pos+1) || !given.get(pos).equals(uri)) { - return error("missing required @context uri " + uri + " at position " + (pos+1), ctx); + for (String uri : expected) { + if ((given.size() < pos + 1) || !given.get(pos).equals(uri)) { + return error("missing required @context uri " + uri + " at position " + (pos + 1), ctx); } pos++; } - + return success(ctx); } - private final static Map> values = new ImmutableMap.Builder>() - .put(Credential.Type.OpenBadgeCredential, - List.of("https://www.w3.org/2018/credentials/v1", - "https://imsglobal.github.io/openbadges-specification/context.json")) //TODO will change (https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld) - .build(); - + private final static Map, List> values = new ImmutableMap.Builder, List>() + .put(Set.of(OpenBadgeCredential, AchievementCredential, EndorsementCredential), + List.of("https://www.w3.org/2018/credentials/v1", + "https://imsglobal.github.io/openbadges-specification/context.json")) // TODO will change + // (https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld) + .build(); + public static final String ID = ContextPropertyProbe.class.getSimpleName(); }