*/
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;
import java.util.AbstractMap.SimpleImmutableEntry;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
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;
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;
private static final Map<String, Method> BUILDER_SETTERS = new HashMap<>();
+ private static final ImmutableMap<Class<?>, Function<String, Object>> UINT_FACTORIES =
+ ImmutableMap.<Class<?>, Function<String, Object>>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();
* Processes a property defined on the DataStoreProperties interface.
*/
@SuppressWarnings("checkstyle:IllegalCatch")
- private static void processDataStoreProperty(final String name, final Class<?> propertyType, Method readMethod) {
- Preconditions.checkArgument(BUILDER_SETTERS.containsKey(name), String.format(
+ private static void processDataStoreProperty(final String name, final Class<?> propertyType,
+ final Method readMethod) {
+ 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));
// constructors but the one we want has the bean ConstructorProperties annotation.
for (final Constructor<?> ctor: propertyType.getConstructors()) {
final ConstructorProperties ctorPropsAnnotation = ctor.getAnnotation(ConstructorProperties.class);
- if (ctor.getParameterTypes().length == 1 && ctorPropsAnnotation != null) {
+ if (ctor.getParameterCount() == 1 && ctorPropsAnnotation != null) {
findYangTypeGetter(propertyType, ctorPropsAnnotation.value()[0]);
CONSTRUCTORS.put(propertyType, ctor);
break;
// Sort the property keys by putting the names prefixed with the data store type last. This
// is done so data store specific settings are applied after global settings.
final ArrayList<String> keys = new ArrayList<>(inKeys);
- Collections.sort(keys, (key1, key2) -> key1.startsWith(dataStoreTypePrefix) ? 1 :
- key2.startsWith(dataStoreTypePrefix) ? -1 : key1.compareTo(key2));
+ keys.sort((key1, key2) -> key1.startsWith(dataStoreTypePrefix) ? 1 :
+ key2.startsWith(dataStoreTypePrefix) ? -1 : key1.compareTo(key2));
return keys;
}
}
final Constructor<?> ctor = CONSTRUCTORS.get(toType);
-
- LOG.trace("Found {}", ctor);
-
if (ctor == null) {
+ if (fromValue instanceof String) {
+ final Function<String, Object> 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.