public V _get(boolean elaborate) { getOverlay(); return target != null ? target._get(elaborate) : null; }
/* package */ boolean _isPresent() { return (_isValidRef() ? refOverlay.getOverlay() : this).present; }
/* package */ JsonOverlay<?> _getParent(boolean followRef) { return (followRef && _isValidRef() ? refOverlay.getOverlay() : this).parent; }
private JsonOverlay<V> thisOrRefTarget() { if (refOverlay == null || refOverlay._getReference().isInvalid()) { return this; } else { return refOverlay.getOverlay(); } }
public Overlay<V> getReferenceOverlay() { RefOverlay<V> refOverlay = overlay._getRefOverlay(); return refOverlay != null ? new Overlay<V>(refOverlay.getOverlay()) : null; }
protected Class<?> _getModelType() { return _isValidRef() ? refOverlay.getOverlay()._getModelType() : null; }
/* package */ JsonOverlay<?> _getModel() { if (_isValidRef()) { return refOverlay.getOverlay()._getModel(); } else { JsonOverlay<?> modelPart = this._getModelType() != null ? this : null; JsonOverlay<?> result = this; while (result._getParent() != null) { result = result._getParent(); modelPart = modelPart == null && result._getModelType() != null ? result : null; } return modelPart != null && modelPart._getModelType().isAssignableFrom(result.getClass()) ? result : null; } }
/* package */ JsonOverlay<?> _getRoot() { if (_isValidRef()) { return refOverlay.getOverlay()._getRoot(); } else { JsonOverlay<?> result = this; while (result._getParent() != null) { result = result._getParent(); } return result; } }
/* package */String _getJsonReference(boolean forRef) { if (creatingRef != null) { return creatingRef.getNormalizedRef(); } if (_isReference() && refOverlay._getReference().isValid() && !forRef) { return refOverlay.getOverlay()._getJsonReference(false); } if (parent != null) { String ref = parent._getJsonReference(); return ref + (ref.contains("#") ? "" : "#") + "/" + pathInParent; } else { return "#"; } }
/* 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); } }
Reference reference = refMgr.getReference(json); RefOverlay<V> refOverlay = new RefOverlay<V>(reference, null, this, refMgr); overlay = refOverlay.getOverlay(); if (overlay == null) { overlay = _create((V) null, parent, refMgr);