X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-binding-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fbinding%2Fimpl%2FBindingToNormalizedNodeCodec.java;h=a973e677394dfef51d456043567e3511986b6762;hb=de65a21905e4bed93d250007ac053bec48a5f35a;hp=9ad35fcdda85347de6a7680c4f91dabbeed8e2a7;hpb=56f33d52dd1de461e54f718960c43d96d37a963a;p=controller.git diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java index 9ad35fcdda..a973e67739 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java @@ -9,10 +9,9 @@ package org.opendaylight.controller.md.sal.binding.impl; import com.google.common.base.Function; import com.google.common.base.Optional; - import java.util.Iterator; import java.util.Map.Entry; - +import javax.annotation.Nonnull; import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationException; import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationOperation; import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizer; @@ -21,6 +20,7 @@ import org.opendaylight.yangtools.sal.binding.generator.impl.GeneratedClassLoadi import org.opendaylight.yangtools.sal.binding.generator.util.BindingRuntimeContext; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.codec.BindingIndependentMappingService; @@ -43,20 +43,19 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener,AutoC } - public org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier toNormalized( - final InstanceIdentifier binding) { + public YangInstanceIdentifier toNormalized(final InstanceIdentifier binding) { return codecRegistry.toYangInstanceIdentifier(binding); } @SuppressWarnings({ "unchecked", "rawtypes" }) - public Entry> toNormalizedNode( + public Entry> toNormalizedNode( final InstanceIdentifier bindingPath, final DataObject bindingObject) { return codecRegistry.toNormalizedNode((InstanceIdentifier) bindingPath, bindingObject); } - public Entry> toNormalizedNode( - final Entry, DataObject> binding) { + public Entry> toNormalizedNode( + final Entry, DataObject> binding) { return toNormalizedNode(binding.getKey(),binding.getValue()); } @@ -69,11 +68,10 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener,AutoC * augmentation. * */ - public Optional> toBinding( - final org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier normalized) + public Optional> toBinding(final YangInstanceIdentifier normalized) throws DeserializationException { try { - return Optional.>of(codecRegistry.fromYangInstanceIdentifier(normalized)); + return Optional.>fromNullable(codecRegistry.fromYangInstanceIdentifier(normalized)); } catch (IllegalArgumentException e) { return Optional.absent(); } @@ -83,14 +81,26 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener,AutoC return legacyToNormalized; } - @SuppressWarnings("unchecked") - public Optional, DataObject>> toBinding( - final Entry> normalized) + public Optional, DataObject>> toBinding( + final @Nonnull Entry> normalized) throws DeserializationException { try { - @SuppressWarnings("rawtypes") - Entry binding = codecRegistry.fromNormalizedNode(normalized.getKey(), normalized.getValue()); - return Optional., DataObject>>fromNullable(binding); + /* + * This cast is required, due to generics behaviour in openjdk / oracle javac + * + * InstanceIdentifier has definition InstanceIdentifier, + * this means '?' is always  . Eclipse compiler + * is able to determine this relationship and treats + * Entry,DataObject> and Entry + * as assignable. However openjdk / oracle javac treats this two types + * as incompatible and issues a compile error. + * + * It is safe to loose generic information and cast it to other generic signature. + * + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + final Entry, DataObject> binding = (Entry) codecRegistry.fromNormalizedNode(normalized.getKey(), normalized.getValue()); + return Optional.fromNullable(binding); } catch (IllegalArgumentException e) { return Optional.absent(); } @@ -112,7 +122,7 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener,AutoC * @param path DOM Path * @return Node with defaults set on. */ - public NormalizedNode getDefaultNodeFor(final org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier path) { + public NormalizedNode getDefaultNodeFor(final YangInstanceIdentifier path) { Iterator iterator = path.getPathArguments().iterator(); DataNormalizationOperation currentOp = legacyToNormalized.getRootOperation(); while (iterator.hasNext()) { @@ -130,8 +140,12 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener,AutoC return bindingToLegacy; } + public BindingNormalizedNodeCodecRegistry getCodecRegistry() { + return codecRegistry; + } + @Override - public void close() throws Exception { + public void close() { // NOOP Intentionally } }