X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmdsal-binding-dom-codec%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fdom%2Fcodec%2Fimpl%2FDataObjectCodecContext.java;h=ccaddc55dd71f5fd68384471b99a6ce3f24d715f;hb=refs%2Fchanges%2F04%2F97904%2F3;hp=8e513b9cee14b6476f89da5d694f1ee562cccbce;hpb=73f9223a21ad3c7f42290af10f793723f5d10784;p=mdsal.git diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecContext.java index 8e513b9cee..ccaddc55dd 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecContext.java @@ -36,7 +36,6 @@ import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.Item; import org.opendaylight.yangtools.yang.binding.OpaqueObject; -import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; @@ -48,9 +47,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; -import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode; import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus; -import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -272,62 +269,12 @@ public abstract class DataObjectCodecContext loadChildPrototype(final Class childClass) { - final DataSchemaNode origDef = factory().getRuntimeContext().getSchemaDefinition(childClass); - // Direct instantiation or use in same module in which grouping - // was defined. - DataSchemaNode sameName; - try { - sameName = getSchema().dataChildByName(origDef.getQName()); - } catch (final IllegalArgumentException e) { - LOG.trace("Failed to find schema for {}", origDef, e); - sameName = null; - } - final DataSchemaNode childSchema; - if (sameName != null) { - // Check if it is: - // - exactly same schema node, or - // - instantiated node was added via uses statement and is instantiation of same grouping - if (origDef.equals(sameName) || origDef.equals(getRootOriginalIfPossible(sameName))) { - childSchema = sameName; - } else { - // Node has same name, but clearly is different - childSchema = null; - } - } else { - // We are looking for instantiation via uses in other module - final QName instantiedName = origDef.getQName().bindTo(namespace()); - final DataSchemaNode potential = getSchema().dataChildByName(instantiedName); - // We check if it is really instantiated from same definition as class was derived - if (potential != null && origDef.equals(getRootOriginalIfPossible(potential))) { - childSchema = potential; - } else { - childSchema = null; - } - } - final DataSchemaNode nonNullChild = - childNonNull(childSchema, childClass, "Node %s does not have child named %s", getSchema(), childClass); + final DataSchemaNode nonNullChild = childNonNull( + factory().getRuntimeContext().findChildSchemaDefinition(getSchema(), namespace(), childClass), childClass, + "Node %s does not have child named %s", getSchema(), childClass); return DataContainerCodecPrototype.from(createBindingArg(childClass, nonNullChild), nonNullChild, factory()); } - private static SchemaNode getRootOriginalIfPossible(final SchemaNode data) { - Optional previous = Optional.empty(); - Optional next = getOriginalIfPossible(data); - while (next.isPresent()) { - previous = next; - next = getOriginalIfPossible(next.get()); - } - return previous.orElse(null); - } - - private static Optional getOriginalIfPossible(final SchemaNode node) { - if (node instanceof DerivableSchemaNode) { - @SuppressWarnings("unchecked") - final Optional ret = (Optional) ((DerivableSchemaNode) node).getOriginal(); - return ret; - } - return Optional.empty(); - } - @SuppressWarnings("unchecked") Item createBindingArg(final Class childClass, final DataSchemaNode childSchema) { return Item.of((Class) childClass);