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%2FBindingCodecContext.java;h=5c03da48c655cba6974272ee4929aa9bf3c530f2;hb=2d6a0b57921b934540c6c198d3351b58e354f98d;hp=ff51f42affe92ae5766aebbcce5f6a8f92047d33;hpb=ecdcdb340457ded6898193197e88ea33c84d58ae;p=mdsal.git diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java index ff51f42aff..5c03da48c6 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java @@ -34,7 +34,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Optional; import java.util.ServiceLoader; -import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import javax.inject.Inject; import javax.inject.Singleton; @@ -59,6 +58,7 @@ import org.opendaylight.yangtools.concepts.IllegalArgumentCodec; import org.opendaylight.yangtools.concepts.Immutable; import org.opendaylight.yangtools.util.ClassLoaderUtils; import org.opendaylight.yangtools.yang.binding.Action; +import org.opendaylight.yangtools.yang.binding.BaseNotification; import org.opendaylight.yangtools.yang.binding.DataContainer; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.Identifiable; @@ -434,7 +434,7 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri } // FIXME: MDSAL-670: this is right for most situations, but we must never return NOOP_CODEC for // valueType=Object.class - return ValueTypeCodec.NOOP_CODEC; + return SchemaUnawareCodec.NOOP_CODEC; } @SuppressWarnings("checkstyle:illegalCatch") @@ -442,15 +442,13 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri private IllegalArgumentCodec getCodecForBindingClass(final Class valueType, final TypeDefinition typeDef) { if (typeDef instanceof IdentityrefTypeDefinition) { - return ValueTypeCodec.encapsulatedValueCodecFor(valueType, typeDef, identityCodec); + return new CompositeValueCodec(valueType, identityCodec); } else if (typeDef instanceof InstanceIdentifierTypeDefinition) { - return ValueTypeCodec.encapsulatedValueCodecFor(valueType, typeDef, instanceIdentifierCodec); + return new CompositeValueCodec(valueType, instanceIdentifierCodec); } else if (typeDef instanceof UnionTypeDefinition) { - final Callable unionLoader = UnionTypeCodec.loader(valueType, (UnionTypeDefinition) typeDef, - this); try { - return unionLoader.call(); - } catch (final Exception e) { + return UnionTypeCodec.of(valueType, (UnionTypeDefinition) typeDef, this); + } catch (Exception e) { throw new IllegalStateException("Unable to load codec for " + valueType, e); } } else if (typeDef instanceof LeafrefTypeDefinition) { @@ -466,7 +464,7 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri } return getCodec(valueType, def); } - return ValueTypeCodec.getCodecFor(valueType, typeDef); + return SchemaUnawareCodec.of(valueType, typeDef); } @Override @@ -484,8 +482,13 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri return IdentifiableItemCodec.of(type.statement(), identifier, listClz, valueCtx); } - @SuppressWarnings("unchecked") @Override + public BindingDataObjectCodecTreeNode streamChild(final Class childClass) { + return root.streamChild(childClass); + } + + @Override + @SuppressWarnings("unchecked") public BindingDataObjectCodecTreeNode getSubtreeCodec(final InstanceIdentifier path) { // TODO Do we need defensive check here? return (BindingDataObjectCodecTreeNode) getCodecContextNode(path, null); @@ -550,21 +553,20 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri } final DataObject lazyObj = codec.deserialize(data); - final InstanceIdentifier bindingPath = InstanceIdentifier.create(builder); + final InstanceIdentifier bindingPath = InstanceIdentifier.unsafeOf(builder); return Map.entry(bindingPath, lazyObj); } @Override - public Notification fromNormalizedNodeNotification(final Absolute path, final ContainerNode data) { + public BaseNotification fromNormalizedNodeNotification(final Absolute path, final ContainerNode data) { return getNotificationContext(path).deserialize(data); } @Override - public Notification fromNormalizedNodeNotification(final Absolute path, final ContainerNode data, + public BaseNotification fromNormalizedNodeNotification(final Absolute path, final ContainerNode data, final Instant eventInstant) { return eventInstant == null ? fromNormalizedNodeNotification(path, data) : getNotificationContext(path).deserialize(data, eventInstant); - } @Override @@ -586,13 +588,24 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri @Override @SuppressFBWarnings("BC_UNCONFIRMED_CAST") - public ContainerNode toNormalizedNodeNotification(@NonNull final Notification data) { + public ContainerNode toNormalizedNodeNotification(final Notification data) { // FIXME: Should the cast to DataObject be necessary? return serializeDataObject((DataObject) data, (ctx, iface, domWriter) -> ctx.newNotificationWriter( (Class>) iface.asSubclass(Notification.class), domWriter)); } + @Override + public ContainerNode toNormalizedNodeNotification(final Absolute path, final BaseNotification data) { + checkArgument(data instanceof DataObject, "Unexpected data %s", data); + @SuppressWarnings("rawtypes") + final NotificationCodecContext notifContext = getNotificationContext(path); + @SuppressWarnings("unchecked") + final var result = notifContext.serialize((DataObject) data); + verify(result instanceof ContainerNode, "Unexpected result %s from %s", result, data); + return (ContainerNode) result; + } + @Override @SuppressFBWarnings("BC_UNCONFIRMED_CAST") public ContainerNode toNormalizedNodeRpcData(final DataContainer data) {