- switch (currentChar(variables.getOffset(), variables.getData())) {
- case RestconfConstants.SLASH:
- prefix = preparedPrefix;
- return getQNameOfDataSchemaNode(prefix, variables);
- case ParserBuilderConstants.Deserializer.COLON:
- prefix = preparedPrefix;
- skipCurrentChar(variables);
- checkValid(
- ParserBuilderConstants.Deserializer.IDENTIFIER_FIRST_CHAR
- .matches(currentChar(variables.getOffset(), variables.getData())),
- "Identifier must start with character from set 'a-zA-Z_'", variables.getData(),
- variables.getOffset());
- localName = nextIdentifierFromNextSequence(ParserBuilderConstants.Deserializer.IDENTIFIER, variables);
-
- if (!allCharsConsumed(variables) && currentChar(
- variables.getOffset(), variables.getData()) == ParserBuilderConstants.Deserializer.EQUAL) {
- return getQNameOfDataSchemaNode(localName, variables);
- } else {
- final Module module = moduleForPrefix(prefix, variables.getSchemaContext());
- Preconditions.checkArgument(module != null, "Failed to lookup prefix %s", prefix);
- return QName.create(module.getQNameModule(), localName);
- }
- case ParserBuilderConstants.Deserializer.EQUAL:
- prefix = preparedPrefix;
- return getQNameOfDataSchemaNode(prefix, variables);
- default:
- throw new IllegalArgumentException("Failed build path.");
- }
- }
-
- private static String nextIdentifierFromNextSequence(final CharMatcher matcher, final MainVarsWrapper variables) {
- final int start = variables.getOffset();
- nextSequenceEnd(matcher, variables);
- return variables.getData().substring(start, variables.getOffset());
- }
-
- private static void nextSequenceEnd(final CharMatcher matcher, final MainVarsWrapper variables) {
- while (!allCharsConsumed(variables)
- && matcher.matches(variables.getData().charAt(variables.getOffset()))) {
- variables.setOffset(variables.getOffset() + 1);
+ final var values = ImmutableMap.<QName, Object>builderWithExpectedSize(keySize);
+ final var tmp = stack.copy();
+ for (int i = 0; i < keySize; ++i) {
+ final QName keyName = keyDef.get(i);
+ final var child = schema.getDataChildByName(keyName);
+ tmp.enterSchemaTree(keyName);
+ values.put(keyName, prepareValueByType(tmp, child, keyValues.get(i)));
+ tmp.exit();