X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FDatastoreContextIntrospector.java;h=f22a98a3cc2d8e990540b76d77e03e830ce6ca2e;hb=0175a376323f6c916b5a4340a27751ebef22fc83;hp=579e096af77572393ad1e1f0d07439cd16b60210;hpb=4dab19f89e79f43d3b270072f7260128788804ff;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContextIntrospector.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContextIntrospector.java index 579e096af7..f22a98a3cc 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContextIntrospector.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContextIntrospector.java @@ -7,7 +7,8 @@ */ package org.opendaylight.controller.cluster.datastore; -import com.google.common.base.Preconditions; +import static com.google.common.base.Preconditions.checkArgument; + import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.primitives.Primitives; @@ -28,9 +29,10 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import javax.annotation.concurrent.GuardedBy; +import java.util.function.Function; import org.apache.commons.lang3.StringUtils; import org.apache.commons.text.WordUtils; +import org.checkerframework.checker.lock.qual.GuardedBy; import org.opendaylight.controller.cluster.datastore.DatastoreContext.Builder; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; @@ -38,6 +40,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controll import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.distributed.datastore.provider.rev140612.DataStorePropertiesContainer; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Uint16; +import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.Uint64; +import org.opendaylight.yangtools.yang.common.Uint8; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -58,6 +64,14 @@ public class DatastoreContextIntrospector { private static final Map BUILDER_SETTERS = new HashMap<>(); + private static final ImmutableMap, Function> UINT_FACTORIES = + ImmutableMap., Function>builder() + .put(Uint8.class, Uint8::valueOf) + .put(Uint16.class, Uint16::valueOf) + .put(Uint32.class, Uint32::valueOf) + .put(Uint64.class, Uint64::valueOf) + .build(); + static { try { introspectDatastoreContextBuilder(); @@ -134,9 +148,9 @@ public class DatastoreContextIntrospector { @SuppressWarnings("checkstyle:IllegalCatch") private static void processDataStoreProperty(final String name, final Class propertyType, final Method readMethod) { - Preconditions.checkArgument(BUILDER_SETTERS.containsKey(name), String.format( + checkArgument(BUILDER_SETTERS.containsKey(name), "DataStoreProperties property \"%s\" does not have corresponding setter in DatastoreContext.Builder", - name)); + name); try { processPropertyType(propertyType); DATA_STORE_PROP_INFO.put(name, new SimpleImmutableEntry<>(propertyType, readMethod)); @@ -392,13 +406,18 @@ public class DatastoreContextIntrospector { } final Constructor ctor = CONSTRUCTORS.get(toType); - - LOG.trace("Found {}", ctor); - if (ctor == null) { + if (fromValue instanceof String) { + final Function factory = UINT_FACTORIES.get(toType); + if (factory != null) { + return factory.apply((String) fromValue); + } + } + throw new IllegalArgumentException(String.format("Constructor not found for type %s", toType)); } + LOG.trace("Found {}", ctor); Object value = fromValue; // Once we find a constructor that takes the original type as an argument, we're done recursing.