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=1e2d2b17f0b1846ab9272f6683f2a0f00cd1c070;hpb=f0f107f9b889b728be457cf84289b53386d7d301;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 1e2d2b17f0..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 @@ -9,9 +9,12 @@ package org.opendaylight.controller.md.sal.binding.impl; import com.google.common.base.Function; import com.google.common.base.Optional; -import java.util.AbstractMap.SimpleEntry; + 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; @@ -20,19 +23,16 @@ 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; import org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class BindingToNormalizedNodeCodec implements SchemaContextListener,AutoCloseable { - private static final Logger LOG = LoggerFactory.getLogger(BindingToNormalizedNodeCodec.class); - private final BindingIndependentMappingService bindingToLegacy; private final BindingNormalizedNodeCodecRegistry codecRegistry; private DataNormalizer legacyToNormalized; @@ -46,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()); } @@ -72,36 +71,39 @@ 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(); } } - - private static final Entry, DataObject> toBindingEntry( - final org.opendaylight.yangtools.yang.binding.InstanceIdentifier key, - final DataObject value) { - return new SimpleEntry, DataObject>( - key, value); - } - public DataNormalizer getDataNormalizer() { 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(); } @@ -123,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()) { @@ -142,7 +144,7 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener,AutoC } @Override - public void close() throws Exception { + public void close() { // NOOP Intentionally } }