--- /dev/null
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.mdsal.binding.dom.adapter.test;
+
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Collections;
+import javassist.ClassPool;
+import org.junit.Test;
+import org.opendaylight.mdsal.binding.dom.adapter.BindingToNormalizedNodeCodec;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeNode;
+import org.opendaylight.yang.gen.v1.urn.yang.foo.rev160101.BooleanContainer;
+import org.opendaylight.yang.gen.v1.urn.yang.foo.rev160101.BooleanContainerBuilder;
+import org.opendaylight.yang.gen.v1.urn.yang.foo.rev160101._boolean.container.BooleanListBuilder;
+import org.opendaylight.yang.gen.v1.urn.yang.foo.rev160101._boolean.container.BooleanListIntBuilder;
+import org.opendaylight.yang.gen.v1.urn.yang.foo.rev160101._boolean.container.BooleanListIntKey;
+import org.opendaylight.yang.gen.v1.urn.yang.foo.rev160101._boolean.container.BooleanListKey;
+import org.opendaylight.yangtools.binding.data.codec.gen.impl.StreamWriterGenerator;
+import org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.yangtools.sal.binding.generator.impl.GeneratedClassLoadingStrategy;
+import org.opendaylight.yangtools.sal.binding.generator.impl.ModuleInfoBackedContext;
+import org.opendaylight.yangtools.sal.binding.generator.util.JavassistUtils;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+
+public class Bug5845booleanKeyTest extends AbstractDataBrokerTest {
+
+ @Test
+ public void testBug5845() throws Exception {
+ final BindingToNormalizedNodeCodec mappingService = new BindingToNormalizedNodeCodec(GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(),
+ new BindingNormalizedNodeCodecRegistry(StreamWriterGenerator.create(JavassistUtils.forClassPool(ClassPool.getDefault()))));
+ final ModuleInfoBackedContext moduleInfoBackedContext = ModuleInfoBackedContext.create();
+ moduleInfoBackedContext.registerModuleInfo(BindingReflections.getModuleInfo(BooleanContainer.class));
+ mappingService.onGlobalContextUpdated(moduleInfoBackedContext.tryToCreateSchemaContext().get());
+
+ final BooleanContainer booleanContainer = new BooleanContainerBuilder().setBooleanList(Collections
+ .singletonList(new BooleanListBuilder()
+ .setKey(new BooleanListKey(true, true))
+ .setBooleanLeaf1(true)
+ .setBooleanLeaf2(true)
+ .build()))
+ .build();
+
+ final BooleanContainer booleanContainerInt = new BooleanContainerBuilder().setBooleanListInt(Collections
+ .singletonList(new BooleanListIntBuilder()
+ .setKey(new BooleanListIntKey((byte) 1))
+ .setBooleanLeafInt((byte) 1)
+ .build()))
+ .build();
+
+ final BindingCodecTree codecContext = mappingService.getCodecFactory().getCodecContext();
+ final BindingCodecTreeNode<BooleanContainer> subtreeCodec = codecContext.getSubtreeCodec(InstanceIdentifier.create(BooleanContainer.class));
+ final NormalizedNode<?, ?> serializedInt = subtreeCodec.serialize(booleanContainerInt);
+ assertNotNull(serializedInt);
+ final NormalizedNode<?, ?> serialized = subtreeCodec.serialize(booleanContainer);
+ assertNotNull(serialized);
+ }
+}
\ No newline at end of file
final class BindingCodecContext implements CodecContextFactory, BindingCodecTree, Immutable {
private static final Logger LOG = LoggerFactory.getLogger(BindingCodecContext.class);
- static final String GETTER_PREFIX = "get";
private final Codec<YangInstanceIdentifier, InstanceIdentifier<?>> instanceIdentifierCodec;
private final Codec<QName, Class<?>> identityCodec;
return getLeafNodesUsingReflection(parentClass, getterToLeafSchema);
}
- private String getGetterName(final QName qName, TypeDefinition<?> typeDef) {
+ private static String getGetterName(final QName qName, TypeDefinition<?> typeDef) {
final String suffix = BindingMapping.getGetterSuffix(qName);
while (typeDef.getBaseType() != null) {
typeDef = typeDef.getBaseType();
if (typeDef instanceof BooleanTypeDefinition || typeDef instanceof EmptyTypeDefinition) {
return "is" + suffix;
}
- return GETTER_PREFIX + suffix;
+ return "get" + suffix;
}
private ImmutableMap<String, LeafNodeCodecContext<?>> getLeafNodesUsingReflection(final Class<?> parentClass,
private final DataSchemaNode schema;
private final Object defaultObject;
- public LeafNodeCodecContext(final DataSchemaNode schema, final Codec<Object, Object> codec, final Method getter,
- final SchemaContext schemaContext) {
+ LeafNodeCodecContext(final DataSchemaNode schema, final Codec<Object, Object> codec, final Method getter,
+ final SchemaContext schemaContext) {
this.yangIdentifier = new YangInstanceIdentifier.NodeIdentifier(schema.getQName());
this.valueCodec = Preconditions.checkNotNull(codec);
this.getter = getter;
private static Object domValueFromString(final Codec<Object, Object> codec, final TypeDefinition<?> type,
Object defaultValue) {
- TypeDefinitionAwareCodec typeDefAwareCodec = TypeDefinitionAwareCodec.from(type);
+ TypeDefinitionAwareCodec<?, ?> typeDefAwareCodec = TypeDefinitionAwareCodec.from(type);
if (typeDefAwareCodec != null) {
Object castedDefaultValue = typeDefAwareCodec.deserialize((String) defaultValue);
return codec.deserialize(castedDefaultValue);
}
@Override
- public Object getSchema() {
+ public DataSchemaNode getSchema() {
return schema;
}
import java.lang.invoke.MethodHandles.Lookup;
import java.lang.invoke.MethodType;
import org.opendaylight.yangtools.concepts.Codec;
-import org.opendaylight.yangtools.yang.binding.BindingMapping;
final class ValueContext {
private static final Lookup LOOKUP = MethodHandles.publicLookup();
private final String getterName;
ValueContext(final Class<?> identifier, final LeafNodeCodecContext <?>leaf) {
- getterName = BindingCodecContext.GETTER_PREFIX + BindingMapping.getClassName(leaf.getDomPathArgument().getNodeType());
+ getterName = leaf.getGetter().getName();
try {
getter = LOOKUP.unreflect(identifier.getMethod(getterName)).asType(OBJECT_METHOD);
} catch (IllegalAccessException | NoSuchMethodException | SecurityException e) {