public JsonOverlay<V> build() { ReferenceManager refMgr = modelMember != null ? modelMember.refMgr : new ReferenceManager(); @SuppressWarnings("unchecked") JsonOverlay<V> castResult = (JsonOverlay<V>) factory.create(JsonOverlay._jsonObject(), null, refMgr); return castResult; } }
private Reference getMapReference(String key) { @SuppressWarnings("unchecked") MapOverlay<V> mapOverlay = (MapOverlay<V>) overlay; return getReference(mapOverlay._getOverlay(key)); }
public ReferenceManager(URL rootUrl, JsonLoader loader) { this.registry = new ReferenceRegistry(loader); this.docUrl = rootUrl != null ? normalize(rootUrl, true) : null; if (docUrl != null) { registry.registerManager(docUrl, this); } }
/* package */ JsonNode _toJson(SerializationOptions options) { if (_isReference()) { if (!options.isFollowRefs() || refOverlay._getReference().isInvalid()) { ObjectNode obj = _jsonObject(); obj.put("$ref", refOverlay._getReference().getRefString()); return obj; } else { return refOverlay.getOverlay()._toJson(options); } } else { return _toJsonInternal(options); } }
@Override protected JsonNode _toJsonInternal(SerializationOptions options) { JsonNode obj = _jsonMissing(); for (PropertyLocator child : childOrder) { JsonNode childJson = children.get(child.getName())._toJson(options.minus(Option.KEEP_ONE_EMPTY)); if (!childJson.isMissingNode()) { obj = _injectChild(obj, childJson, child.getPointer()); } } JsonNode result = _fixJson(obj); return result.size() > 0 || options.isKeepThisEmpty() ? result : _jsonMissing(); }
public ReferenceManager getManagerFor(URL url) { URL normalized = normalize(url, true); ReferenceManager manager = registry.getManager(normalized); if (manager == null) { manager = new ReferenceManager(normalized, registry); registry.registerManager(normalized, manager); } return manager; }
/* package */ V _get(boolean elaborate) { if (_isValidRef()) { return refOverlay._get(elaborate); } else if (_isReference()) { return null; } else { if (elaborate) { _ensureElaborated(); } return value; } }
/* package */ JsonOverlay<?> _getRoot() { if (_isValidRef()) { return refOverlay.getOverlay()._getRoot(); } else { JsonOverlay<?> result = this; while (result._getParent() != null) { result = result._getParent(); } return result; } }
private JsonOverlay<V> thisOrRefTarget() { if (refOverlay == null || refOverlay._getReference().isInvalid()) { return this; } else { return refOverlay.getOverlay(); } }
public Reference getReference(String refString) { try { URL url = new URL(docUrl, refString); String fragment = url.getRef(); ReferenceManager manager = getManagerFor(url); return new Reference(refString, fragment, normalize(url, false).toString(), manager); } catch (MalformedURLException e) { return new Reference(refString, new ResolutionException(null, e), null); } }
private Reference getListReference(int index) { @SuppressWarnings("unchecked") ListOverlay<V> listOverlay = (ListOverlay<V>) overlay; return getReference(listOverlay._getOverlay(index)); }
private Reference getPropertyReference(String name) { PropertiesOverlay<V> propsOverlay = (PropertiesOverlay<V>) overlay; return getReference(propsOverlay._getOverlay(name)); }
public Overlay<V> getReferenceOverlay() { RefOverlay<V> refOverlay = overlay._getRefOverlay(); return refOverlay != null ? new Overlay<V>(refOverlay.getOverlay()) : null; }
public JsonOverlay<V> create(V value, JsonOverlay<?> parent, ReferenceManager refMgr) { JsonOverlay<V> overlay = _create(value, parent, refMgr); overlay._elaborate(true); return overlay; }
public V _get(boolean elaborate) { getOverlay(); return target != null ? target._get(elaborate) : null; }