verifyException(assertThrows(UniqueValidationFailedException.class,
() -> writeMap(inMemoryDataTree, true)),
"(foo?revision=2016-05-17)task[{(foo?revision=2016-05-17)task-id=",
- "}] violates unique constraint on [l2, l1] of ",
+ "}] violates unique constraint on [l1, l2] of ",
"(foo?revision=2016-05-17)my-leaf-1",
"(foo?revision=2016-05-17)my-leaf-2]");
verifyException(assertThrows(UniqueConstraintException.class,
() -> writeMapEntry(inMemoryDataTree, "4", "l1", "l2", "l30")),
"(foo?revision=2016-05-17)task[{(foo?revision=2016-05-17)task-id=",
- "}] violates unique constraint on [l2, l1] of ",
+ "}] violates unique constraint on [l1, l2] of ",
"(foo?revision=2016-05-17)my-leaf-1",
"(foo?revision=2016-05-17)my-leaf-2");
}
verifyException(assertThrows(UniqueConstraintException.class,
() -> writeMapEntry(inMemoryDataTree, "5", "l3", "l4", "l7")),
"(foo?revision=2016-05-17)task[{(foo?revision=2016-05-17)task-id=",
- "}] violates unique constraint on [l4, l3] of ",
+ "}] violates unique constraint on [l3, l4] of ",
"(foo?revision=2016-05-17)my-leaf-1",
"(foo?revision=2016-05-17)my-leaf-2");
removeMapEntry(inMemoryDataTree, taskEntryKey("3"));
verifyException(assertThrows(UniqueConstraintException.class,
() -> writeMapEntry(inMemoryDataTree, "6", "l3", "l4", "l11")),
"(foo?revision=2016-05-17)task[{(foo?revision=2016-05-17)task-id=",
- "}] violates unique constraint on [l4, l3] of ",
+ "}] violates unique constraint on [l3, l4] of ",
"(foo?revision=2016-05-17)my-leaf-1",
"(foo?revision=2016-05-17)my-leaf-2");
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.util.Collection;
-import java.util.HashSet;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant;
import org.opendaylight.yangtools.yang.model.api.stmt.UniqueEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement;
private static ImmutableSet<Descendant> parseUniqueConstraintArgument(final StmtContext<?, ?, ?> ctx,
final String argumentValue) {
// deal with 'line-break' rule, which is either "\n" or "\r\n", but not "\r"
- final String nocrlf = CRLF_PATTERN.matcher(argumentValue).replaceAll("\n");
-
- final var uniqueConstraintNodes = new HashSet<Descendant>();
- for (var uniqueArgToken : SEP_SPLITTER.split(nocrlf)) {
- final var nodeIdentifier = ArgumentUtils.nodeIdentifierFromPath(ctx, uniqueArgToken);
- SourceException.throwIf(nodeIdentifier instanceof Absolute, ctx,
- "Unique statement argument '%s' contains schema node identifier '%s' which is not in the descendant "
- + "node identifier form.", argumentValue, uniqueArgToken);
- uniqueConstraintNodes.add((Descendant) nodeIdentifier);
- }
- return ImmutableSet.copyOf(uniqueConstraintNodes);
+ return SEP_SPLITTER.splitToStream(CRLF_PATTERN.matcher(argumentValue).replaceAll("\n"))
+ .map(uniqueArgToken -> {
+ if (!(ArgumentUtils.nodeIdentifierFromPath(ctx, uniqueArgToken) instanceof Descendant descendant)) {
+ throw new SourceException(ctx, "Unique statement argument '%s' contains schema node identifier '%s'"
+ + " which is not in the descendant node identifier form.", argumentValue, uniqueArgToken);
+ }
+ return descendant;
+ })
+ .collect(ImmutableSet.toImmutableSet());
}
/**