import java.lang.invoke.MethodHandles;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
+import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
import org.opendaylight.yangtools.concepts.Codec;
import org.opendaylight.yangtools.yang.binding.Identifier;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.IdentifiableItem;
*
* We do not have to perform a sort if the source collection has less than two
* elements.
-
+ *
* We always perform an ImmutableList.copyOf(), as that will turn into a no-op
* if the source is already immutable. It will also produce optimized implementations
* for empty and singleton collections.
final List<QName> sortedKeys;
if (unsortedKeys.size() > 1) {
final List<QName> tmp = new ArrayList<>(unsortedKeys);
- tmp.sort((q1, q2) -> q1.getLocalName().compareToIgnoreCase(q2.getLocalName()));
+ // This is not terribly efficient but gets the job done
+ tmp.sort(Comparator.comparing(qname -> BindingMapping.getPropertyName(qname.getLocalName())));
sortedKeys = tmp;
} else {
sortedKeys = unsortedKeys;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import com.google.common.collect.ImmutableMap;
import org.junit.Test;
+import org.opendaylight.yang.gen.v1.mdsal._355.norev.OspfStatLsdbBrief;
+import org.opendaylight.yang.gen.v1.mdsal._355.norev.OspfStatLsdbBriefKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.TreeComplexUsesAugment;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.TreeLeafOnlyAugment;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.Top;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.two.level.list.TopLevelList;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.two.level.list.TopLevelListKey;
+import org.opendaylight.yangtools.yang.binding.Identifier;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
public class InstanceIdentifierTest extends AbstractBindingCodecTest {
assertTrue(((AugmentationIdentifier) leafOnlyLastArg).getPossibleChildNames().contains(SIMPLE_VALUE_QNAME));
}
+ @Test
+ public void testCamelCaseKeys() {
+ final InstanceIdentifier<?> result = registry.fromYangInstanceIdentifier(YangInstanceIdentifier.create(
+ NodeIdentifier.create(OspfStatLsdbBrief.QNAME),
+ new NodeIdentifierWithPredicates(OspfStatLsdbBrief.QNAME, ImmutableMap.of(
+ QName.create(OspfStatLsdbBrief.QNAME, "AreaIndex"), 1,
+ QName.create(OspfStatLsdbBrief.QNAME, "LsaType"), (short) 2,
+ QName.create(OspfStatLsdbBrief.QNAME, "LsId"), 3,
+ QName.create(OspfStatLsdbBrief.QNAME, "AdvRtr"), "foo"))));
+ assertTrue(result instanceof KeyedInstanceIdentifier);
+ final Identifier<?> key = ((KeyedInstanceIdentifier<?, ?>) result).getKey();
+ assertEquals(new OspfStatLsdbBriefKey("foo", 1, 3, (short)2), key);
+ }
}