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%2FAbstractBindingNormalizedNodeCacheHolder.java;h=d900d4e8c816085899631f4567fd296f0e3f8680;hb=172f47ef9f3c164359da032e5768ebb12f3feb14;hp=fa5dc674aa32e3eea6ce4d7d4d4c08e74cd956dd;hpb=dc51015f64da8ca865df08fcf452d24eecccc62c;p=mdsal.git diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AbstractBindingNormalizedNodeCacheHolder.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AbstractBindingNormalizedNodeCacheHolder.java index fa5dc674aa..d900d4e8c8 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AbstractBindingNormalizedNodeCacheHolder.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AbstractBindingNormalizedNodeCacheHolder.java @@ -7,40 +7,50 @@ */ package org.opendaylight.mdsal.binding.dom.codec.impl; -import com.google.common.base.Preconditions; +import static java.util.Objects.requireNonNull; + import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import java.util.Set; -import org.opendaylight.yangtools.yang.binding.DataObject; +import com.google.common.collect.ImmutableSet; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingObjectCodecTreeNode; +import org.opendaylight.mdsal.binding.dom.codec.impl.LeafNodeCodecContext.OfTypeObject; +import org.opendaylight.yangtools.yang.binding.BindingObject; /** * Abstract Holder of Binding to Normalized Node caches indexed by {@link DataContainerCodecContext} to which cache is * associated. */ abstract class AbstractBindingNormalizedNodeCacheHolder { - - private final Set> cachedValues; - private final LoadingCache, BindingNormalizedNodeCache> caches = CacheBuilder - .newBuilder().build(new CacheLoader, BindingNormalizedNodeCache>() { + @SuppressWarnings("rawtypes") + private final LoadingCache caches = CacheBuilder + .newBuilder().build(new CacheLoader() { @Override - public BindingNormalizedNodeCache load(final DataContainerCodecContext key) { - return new BindingNormalizedNodeCache(AbstractBindingNormalizedNodeCacheHolder.this, key); + public AbstractBindingNormalizedNodeCache load(final NodeCodecContext key) { + if (key instanceof DataContainerCodecContext) { + return new DataObjectNormalizedNodeCache(AbstractBindingNormalizedNodeCacheHolder.this, + (DataContainerCodecContext) key); + } else if (key instanceof OfTypeObject) { + return new TypeObjectNormalizedNodeCache<>((OfTypeObject)key); + } else { + throw new IllegalStateException("Unhandled context " + key); + } } }); - protected AbstractBindingNormalizedNodeCacheHolder(final Set> cacheSpec) { - cachedValues = Preconditions.checkNotNull(cacheSpec); + private final ImmutableSet> cacheSpec; + + AbstractBindingNormalizedNodeCacheHolder(final ImmutableSet> cacheSpec) { + this.cacheSpec = requireNonNull(cacheSpec); } - BindingNormalizedNodeCache getCachingSerializer(final DataContainerCodecContext childCtx) { - if (isCached(childCtx.getBindingClass())) { - return caches.getUnchecked(childCtx); - } - return null; + @SuppressWarnings("unchecked") + > + AbstractBindingNormalizedNodeCache getCachingSerializer(final C childCtx) { + return isCached(childCtx.getBindingClass()) ? caches.getUnchecked(childCtx) : null; } - boolean isCached(final Class type) { - return cachedValues.contains(type); + final boolean isCached(final Class type) { + return cacheSpec.contains(type); } }