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=d7314e5362873b0db2e3fa6a2a20b93f527725d2;hb=78fec1c1c5a3720bd48d1044703824626f08b5d9;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..d7314e5362 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 @@ -13,6 +13,8 @@ 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 +23,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 +46,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 +71,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 +84,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 +125,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()) { @@ -131,7 +144,7 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener,AutoC } @Override - public void close() throws Exception { + public void close() { // NOOP Intentionally } }