public void resolveScope(String topUrlString) throws MalformedURLException { inScopeUrlStrings.clear(); inScopeUrlStrings.add(topUrlString); topRef = new Reference(topUrlString, modelVersion); URL topUrl = topRef.getUrl(); for (URL additionalUrl : getAdditionalFileUrls()) { URL resolved = new URL(topUrl, additionalUrl.toString()); inScopeUrlStrings.add(resolved.toString()); } }
public List<URL> getAdditionalFileUrls() { List<URL> results = Lists.newArrayList(); for (String urlString : getAdditionalFileStrings()) { results.add(new Reference(fixFile(urlString), topRef, modelVersion).getUrl()); } return results; }
public Reference(String refString, Reference context, Integer modelVersion) { this.refString = refString; this.modelVersion = modelVersion; String[] refParts = refString.split("#", 2); if (refParts.length > 1) { this.fragment = maybeDecodeFragment(refParts[1]); if (!fragment.startsWith("/")) { throw new IllegalArgumentException("JSON Pointer must start with '/'"); } } try { if (context == null) { this.url = new URL(refParts[0]).toURI().normalize().toURL(); } else if (context.isValid()) { this.url = new URL(context.getUrl(), refParts[0]); } else { this.isValid = false; this.invalidReason = "Invalid resolution context"; } this.urlString = url != null ? url.toString() : ""; } catch (MalformedURLException | URISyntaxException e) { this.isValid = false; this.invalidReason = e.getMessage(); this.urlString = refParts[0]; } setObjectRefInfo(); }
public Optional<JsonNode> getModelObject(Reference ref) { if (ref.isModelObjectRef()) { String urlString = cacheUrl(ref.getUrl()); Content content = contentItems.get(urlString); if (content != null) { return content.getObject(ref.getSection(), ref.getObjectName()); } } return Optional.empty(); }