Robert Varga [Thu, 22 Nov 2018 22:32:00 +0000 (23:32 +0100)]
Improve ListEntryNodeDataWithSchema
ImmutableMapTemplate allows us to more efficiently instantiate
NodeIdentifierPredicates, as it takes care of ordering of keys
while maintaining an efficient internal representations.
It furthermore provides a keySet() method, which is useful for
quickly checking if a leaf is part of key definition -- unlike
ListSchemaNode.getKeyDefinition(), which is a List and therefore
must be linearly searched.
It also allows us to skip HashMap allocation for unkeyed lists,
clearly showing that the class should be split into two.
JIRA: YANGTOOLS-917
Change-Id: If2d7bbbc5c4fe1ca96097f374f4313aabb411908
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
e31b3dc700002b19d92ecc68463ab2711d8af99c)
Robert Varga [Thu, 22 Nov 2018 17:43:42 +0000 (18:43 +0100)]
Add ImmutableMapTemplate
We have couple some hot paths where we know the keySet of an immutable
map we want to instantiate. For these, using
ImmutableOffsetMap.*copyOf() is wasteful, as it performs unnecessary
cache looks and map lookups.
ImmutableMapTemplate can be used to amortize these preparatory steps,
so that an ImmutableOffsetMap (or SharedSingletonMap) can efficiently
be produced by either transforming values of some other map, or by
supplying values in the correct order.
Since we are in the area, improve documentation and @NonNull
annotations of both ImmutableOffsetMap and SharedSingletonMap.
JIRA: YANGTOOLS-917
Change-Id: I8e7808b9bfe751885b842715f7e0346c0e7485b2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
048042bd88cc9b1f481c018363c331bca83e4e1f)
Robert Varga [Thu, 22 Nov 2018 20:33:32 +0000 (21:33 +0100)]
Speed up UnorderedMapMixinContextNode
NodeIdentifierWithPredicates recognizes ImmutableMap, make sure
we remain on the faster path of it.
Change-Id: I95d745d6e7ba54dcdb422fac19256112a21f413f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
6116391d4f24cac829f8cead8ee4426c5a0ad2bf)
Robert Varga [Thu, 22 Nov 2018 21:42:02 +0000 (22:42 +0100)]
Retrofit SchemaContextProvider
Since we already have a getSchemaContext() method, we can
get it documented and widely available for free.
Change-Id: Ib5aaa3d1d503a000a997beaee3d31002755e5998
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
5227b0accfa016d76d32ddad414cce1c62585664)
Robert Varga [Thu, 22 Nov 2018 21:34:12 +0000 (22:34 +0100)]
Make InMemoryDataTreeSnapshot implement SchemaContextProvider
Note DataTreeSnapshot's duplication of getSchemaContext(), which
is indicative of a coupling to yang.model.api. This is fine for now,
as this coupling already exists through xpath interfaces, but it
needs to be revisited and cleaned by either removing the method,
or making it a non-default (and inherited from SchemaContextProvider).
Change-Id: If335f178e9e086b8b5185044a06d4296f81b2a74
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
ccdb5a655b07693eedbe96d4d5215ff52cbfd671)
Robert Varga [Thu, 22 Nov 2018 21:19:24 +0000 (22:19 +0100)]
Refactor XMLStreamWriterUtils
This refactors XMLStreamWriterUtils, so that it can be a proper
SchemaContextProvider. This allows us to propagate this property
through SchemaAwareXMLStreamNormalizedNodeStreamWriter the same
way.
Change-Id: Ibe0832e76d3e66ca27f8d345f7fd6f890b92f35e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
9c73f586bfae63818e0ded04dd8282d4c7c8e468)
Robert Varga [Thu, 22 Nov 2018 21:13:46 +0000 (22:13 +0100)]
Reuse writer field from parent
Writer is a duplicate field, which is already available as
getParent(). Remove the field and use the getter.
Change-Id: I1d5dd866512479268e32affb0ded301fadb5cb11
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 15 Nov 2018 14:31:25 +0000 (15:31 +0100)]
Document Identifiable interface contract
Somehow this core interface went undocumented, fix that and also
clarify it's companion Identifier contract.
Change-Id: I009ed90e548770b46d636e5e41c07877642682d5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
89ddc0a57c389ff3feb403cbd0bd5709f01a8e14)
Robert Varga [Thu, 15 Nov 2018 14:38:30 +0000 (15:38 +0100)]
Cleanup Immutable documentation
This is a simple formatting update, with small rewording to use
better language.
Change-Id: I51848c3a956c7251bad98418cac40ea0ffa943c2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
c636aeaa87c46fdea600299f193f2cbf72c3f6ca)
Robert Varga [Thu, 8 Nov 2018 10:28:29 +0000 (11:28 +0100)]
Add OptionalBoolean.ofOptional()
This adds a simple utility method to create symmetry with
fromOptional(). Also cache TRUE/FALSE optionals, so accesses
get a bit faster.
Change-Id: Ife95d26f9b58e6859991d544eda52d0094302c30
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
520eb808fe7c2fba015be566f25f7ecf689cdf9f)
Robert Varga [Tue, 13 Nov 2018 07:27:59 +0000 (08:27 +0100)]
Properly propagate BuildContext
YangToSourcesProcessor was not properly propagating BuildContext,
fix that.
JIRA: YANGTOOLS-915
Change-Id: Id4f28fe640bbd4d4ed065b9aa62f0becb2db43ec
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
4bdd0b2f66433d7586a1eb32636bdab8a1d4361c)
Robert Varga [Sun, 4 Nov 2018 20:24:28 +0000 (21:24 +0100)]
Tolerate empty instance identifier in ImmutableNodes.fromInstanceId()
If the user specifies an empty InstanceIdentifier, we fail with an
undocumented NoSuchElementException. Make sure we properly handle
this case by returning a container which matches SchemaContext.NAME.
JIRA: YANGTOOLS-914
Change-Id: I0b503d3bed99d73d88e037d35979c503215f3b52
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 24 Oct 2018 21:12:02 +0000 (23:12 +0200)]
Limit the TCCL when instantiating UntrustedXML
JAXP newInstance() methods can end up going through ServiceLoader
with TCCL as its ClassLoader, which means our constants may end up
pointing to a ClassLoader beyond our normal visibility.
This means we can end up picking up a different factory depending
on where we are called from and also can mean the TCCL cannot be
garbage-collected.
Force the TCCL to be the ClassLoader holding UntrustedXML, thus
establishing tight coupling between JAXP implementation discovery
mechanism and UntrustedXML.
JIRA: CONTROLLER-1867
Change-Id: Icacb0e193c7360c73bd07bc5c815bf803ca9ac44
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 23 Oct 2018 08:33:54 +0000 (10:33 +0200)]
Remove unneeded jaxb-related exclusions
odlparent-3.1.4 contains proper feature exclusion and also
proper dependecyManagement declaration of jaxb-api, remove them
from here.
Change-Id: I6c04bb424da7bb413169fbf2eb54f7b387246a61
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 22 Oct 2018 11:53:33 +0000 (13:53 +0200)]
Add CopyHistory.toString()
This method makes for easier debugging, add it.
Change-Id: Ib25dc0414dce2ddacecaedafb14b2e0d42e3d50d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Fri, 19 Oct 2018 13:12:19 +0000 (15:12 +0200)]
Bump versions to 2.0.13-SNAPSHOT
This starts the next development iteration.
Change-Id: I415dd6cb7730e2cd18bab96d69e33eb1bc9e4797
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Fri, 19 Oct 2018 13:58:15 +0000 (15:58 +0200)]
Bump yang-xpath versions to 0.1.12-SNAPSHOT
This bump was missed previously, fix that up.
Change-Id: Ia5aa358097b989e80cdfdf4b47f8b0b2ce29cc2d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Stephen Kitt [Fri, 19 Oct 2018 11:10:58 +0000 (13:10 +0200)]
Bump to odlparent 3.1.4
This upgrades to the released version.
Change-Id: I8514dde60713ab8480ebb00bb74eac1f838f049a
Signed-off-by: Stephen Kitt <skitt@redhat.com>
Stephen Kitt [Thu, 11 Oct 2018 11:12:57 +0000 (13:12 +0200)]
Bump to odlparent 3.1.4-SNAPSHOT
This bumps our use of odlparent to 3.1.4-SNAPSHOT in anticipation
of a full release.
Change-Id: I8d03ed7321520e9580beb400534d20215d34edd5
Signed-off-by: Stephen Kitt <skitt@redhat.com>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 15 Oct 2018 15:26:39 +0000 (17:26 +0200)]
Attach error listeners to lexers
We currently disconnect parser from standard output, but lexer
may incur errors as well, hence we should do the same dance to
lexers, too.
Change-Id: Ib901cb1fbdba05c721aeba5d60a5e8bda5f48087
JIRA: YANGTOOLS-905
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
b88d8bcfa64908ccd2b64462dc6b66bb3c69a47c)
Robert Varga [Sat, 11 Aug 2018 00:10:23 +0000 (02:10 +0200)]
Improve IfFeaturePredicateVisitor
We need to detect parser errors and not print them to stderr,
create an abstract class with the validation functionality
and use it when parsing an if-feature argument.
Change-Id: I63ad241bcfeeda7cb05f1472f593167d5ce08404
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
41cd74eff8a48f5437e76990319c97fd7bdd5df2)
Robert Varga [Sun, 14 Oct 2018 00:56:21 +0000 (02:56 +0200)]
Exclude javax.xml.stream dependency
This dependency is satisfied by the JDK, hence we do not need to
pull it in.
Change-Id: I440114204f064239e3e25215e53fe67981ddf6d7
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
a2c8f1405a44b41ccb17ec801beeaa78420336c5)
Stephen Kitt [Thu, 11 Oct 2018 11:14:14 +0000 (13:14 +0200)]
Update .gitreview to track the v2.0.x branch
Change-Id: Ibcc3381eb2349a91b088de186e8f497280e08a53
Signed-off-by: Stephen Kitt <skitt@redhat.com>
Robert Varga [Tue, 9 Oct 2018 11:26:15 +0000 (13:26 +0200)]
jaxb-api should be scope=compile
Keeping scope=provided breaks downstream tests with JDK9+,
hence we need to rework the dependencies to make sure we always
pull jaxb-api, but we also need to exclude it from odl-yangtools-data
feature, because it is provided by Karaf.
Change-Id: Id09281c89a74c3d6c780179dfa21ced545318ba1
JIRA: YANGTOOLS-906
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
eeb3076563314a67ccbe2d083dede2051d12e060)
Robert Varga [Tue, 2 Oct 2018 18:17:10 +0000 (20:17 +0200)]
Cleanup ScannedDependencyTest
Rather than messing with test resources set them up properly
in the project so that we can rely on them being present.
Also make sure we clean up our resources correctly.
Change-Id: Idb1b8a8d87293a255582f7120cdb0e47f7278080
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 1 Oct 2018 19:01:01 +0000 (21:01 +0200)]
Add NoOp{Listener,Object}Registration
As it turns out, there are use cases for registration which do
nothing in their close() method. Add utility classes to support
those use cases. Also update javadocs a bit.
Change-Id: Ife196f26229cf54173e9b9046ece22bd0138c2ea
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 24 Sep 2018 16:01:36 +0000 (18:01 +0200)]
Add jaxb-api dependency
For JDK11 we need an explicit scope=provided dependency on
jaxb-api.
JIRA: YANGTOOLS-906
Change-Id: Ifee829a5cd04561f6124ff03b772db2f5d12f04e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
aa676c9045ce081687f814607e977a0609c77bc5)
Robert Varga [Wed, 19 Sep 2018 10:48:17 +0000 (12:48 +0200)]
Do not clutter logs with a thrown exception
SourceException is an unchecked exception which we handle at a higher
layer. The logging statement does not add anything useful, so let's
remove it.
Change-Id: I8a4654b44469a2193996d1d90e982d01a1a62bf3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 19 Sep 2018 10:46:46 +0000 (12:46 +0200)]
Fix TypedefEffectiveStatementImpl double-checked load
We really need a volatile read here to make things alright, make
the field volatile.
Change-Id: Id04917a04f9f1fdba6ded2c773571d90106e877f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 19 Sep 2018 10:45:59 +0000 (12:45 +0200)]
Remove unneeded interface declaration
DataNodeContainer is already specified by superclass, no need to
repeat that declaration.
Change-Id: I9a409662d87b02ec9b4abcba88c90bccf684829a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 19 Sep 2018 10:45:03 +0000 (12:45 +0200)]
Remove unneeded check
brk is known to be different from -1, hence we can use it directly
rather than using a temporary variable.
Change-Id: If089baa50b8e7b15d8ab03a8e09f7d6d6d0ea7e6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 17 Sep 2018 08:29:51 +0000 (10:29 +0200)]
Bump versions to 2.0.12 release cycle
This bumps versions to next development release.
Change-Id: I427f07c850593195e9479a957984d5a71fef1864
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 12 Sep 2018 09:31:27 +0000 (11:31 +0200)]
Fix logging template
Logger template is missing a placeholder, add it.
Change-Id: Ib1068bc4e122affc69e408da87378230607b7408
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
cac1831a621574716e403afe7997360308758fa6)
Marek Gradzki [Tue, 14 Aug 2018 08:05:37 +0000 (10:05 +0200)]
Consider AugmentationNodes when direct descendant is not found
With previous refactors it is quite easy to arrive at a simple
solution to take augmentations into account. This also
This includes a unit test from upstream based on afi-safi-name
with bgp-openconfig-extensions.
JIRA: YANGTOOLS-892
Change-Id: I237ed2c6cbed458a2109a48b468a30650f103a48
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
e4777b6feff804cdcf633c28d4b654b0e885dbd1)
Robert Varga [Mon, 10 Sep 2018 15:19:51 +0000 (17:19 +0200)]
Eliminate LeafRefValidation.forEachChoice()
As it turns out the two call sites can share more code. Introduce
processChildNode(), inlining forEachChoice() and its surrounding
lookup logic.
JIRA: YANGTOOLS-892
Change-Id: I2091abcd579ce1d48a628c3bdea9b4514b050e29
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 10 Sep 2018 10:02:20 +0000 (12:02 +0200)]
Split up LeafRefValidation.validateNodeData()
Turn this method into a dispatch and move logic into dedicated
methods. This makes it easier to follow the code flow and eliminate
duplicates.
JIRA: YANGTOOLS-892
Change-Id: I840fa0d2e8c7ea86efa05c1afea825e85d890837
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
3d22aba92422b08413d95b372ac11a2b26296a01)
Robert Varga [Mon, 10 Sep 2018 09:43:07 +0000 (11:43 +0200)]
Minor code cleanups
- static private method
- reduce use of ChoiceSchemaNode.getCaseNodeByName()
- QNameWithPredicateBuilder(QName)
Change-Id: I9cf97ba4c6ef667e39212f511e17bb18b4002bc3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
ef795628f150556ddc8c93b865d1c3c0b9b0109c)
Robert Varga [Mon, 10 Sep 2018 08:36:12 +0000 (10:36 +0200)]
Use Iterables.filter() instead of FluentIterable
This removes allocation of one instance of FluentIterable, reducing
the amount of garbage we produce.
Change-Id: I93953f1263426f7fff20e579e56f82506fb423d4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
ca61467e9c4e802584a1475da15c01cc5ea8e83a)
Robert Varga [Fri, 7 Sep 2018 10:22:25 +0000 (12:22 +0200)]
Rename LeafRefValidatation to LeafRefValidation
This is a naming typo which went unnoticed for quite some time,
rename the implementation class and instantiate a proxy for
compatibility.
JIRA: YANGTOOLS-892
Change-Id: I3ec77d7df41942502394047e9e13007c6693d3af
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
2d5b39317c3c5db3fa9c4c258175340d3e347c38)
Robert Varga [Fri, 7 Sep 2018 09:14:48 +0000 (11:14 +0200)]
Rework choice iteration in LeafRefValidatation
Rather than extracting ChoiceNodes into a temporary list, use
a consumer which will be invoked for each of them.
JIRA: YANGTOOLS-892
Change-Id: I0956bed6e446c1ee4bf44c88fcc361abe8a508e5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
4a29fdd9dadf755ff6b3b6e34e9ff43c22a6b765)
Robert Varga [Fri, 7 Sep 2018 09:07:09 +0000 (11:07 +0200)]
Cleanup map iteration in LeafRefValidatation
We have two codepaths for non-filtered and filtered map entry case,
which end up iterating over map entries. Rewrite the code in terms
of an optionally-filtered stream, reducing code duplication.
JIRA: YANGTOOLS-892
Change-Id: I3ca37edb66373cc5ab4632210980cd4a467fd198
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Fri, 7 Sep 2018 08:36:20 +0000 (10:36 +0200)]
Rework path LeafRefValidatation path tracking
Rather than using a plain iterable sourced from LeafRefPath.getPathFromRoot(),
maintain a Deque sourced via getPathTowardsRoot(). This eliminates the need
for Iterables.skip() as well as not forcing getPathFromRoot() being initialized.
Change-Id: I23c054a63b2c0ceed24fcf48d2636508ee13d568
JIRA: YANGTOOLS-892
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 5 Sep 2018 22:15:47 +0000 (00:15 +0200)]
Pass down predicates instead of the entire predicate node
Since we are not using the rest of the data, it is much simpler
to just pass down predicates. It also reduces confusion as to
what state we are propagating.
Change-Id: If790fcc2a8d023cb863d09162b25d644b0dd4638
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
e8ecfb6f906dfd7e7bff791abf0b601eb71766a8)
Robert Varga [Wed, 5 Sep 2018 21:39:18 +0000 (23:39 +0200)]
Do not validate non-existent roots
If we have no data there is no point to validate anything, and
having the root value as an invariant makes code a lot simpler.
JIRA: YANGTOOLS-892
Change-Id: Ifd68b09c03d90c8881381809047e59f3fe92682b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
d2e80009970418f4755854f0918c5d80afb21a34)
Robert Varga [Wed, 5 Sep 2018 21:24:30 +0000 (23:24 +0200)]
Add LeafRefValidatation.computeValues()
This separates out the heavy-weight value computation, simplifying
callers a bit.
JIRA: YANGTOOLS-892
Change-Id: I218659f830aec822f80decd3622c9890df832379
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
dd1f03b367b7fcec4d3a0a10bc81d4126d7c88f4)
Robert Varga [Wed, 5 Sep 2018 20:12:02 +0000 (22:12 +0200)]
Eliminate leafRefTargetNodeDataLog()
Now that we captured invariants, we can proceed to turn
leafRefTargetNodeDataLog() into a simpler lambda form.
JIRA: YANGTOOLS-892
Change-Id: I4644d0f3bc31f9f9cb3643e8443159522f14ccaa
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
86e7fb7d83ea73633b4e50bfbe95ded122b69a85)
Robert Varga [Wed, 5 Sep 2018 19:33:55 +0000 (21:33 +0200)]
Untangle result processing logic.
leafRefTargetNodeDataLog() is needlessly complex, where it is called
with 3 different sets of arguments from validateLeafRefTargetNodeData()
only.
Inline two of those callers, reducing nesting significantly and
making the code flow more obvious.
Change-Id: I68205d58677e2392989a5fc064a986f5c1716666
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
a538bafb5db59101206a5d1fd2a1d31e79c08de0)
Robert Varga [Wed, 5 Sep 2018 18:15:00 +0000 (20:15 +0200)]
Move LeafRefPath creation from fast path
LeafRefValidation is the fast path and LeafRefPath we are creating
is in an invariant. Cache it in LeafRefContext as needed.
JIRA: YANGTOOLS-892
Change-Id: I40ef136630b7cdacca84b2f08a9e0491daa03c14
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
4b7393b11151722f44c19236684c661cf5f8edd0)
Robert Varga [Wed, 5 Sep 2018 17:39:45 +0000 (19:39 +0200)]
Cleanup leafref path parsing
We have a String on input and LeafRefPathParserImpl uses ANTLR's
CharStreams -- hence it makes no sense to bounce input through
an InputStream.
Remove this atrocity, eliminating an IOException/IllegalStateException
error path in process.
JIRA: YANGTOOLS-892
Change-Id: I78eadf30da6a1e64621ca4c14dfa13e84524b591
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
23b7ff7e2e39e0d520e249ae5b256746acef5abd)
Robert Varga [Wed, 5 Sep 2018 17:28:16 +0000 (19:28 +0200)]
Cleanup LeafRefContext(Tree)Builder
These are package-private classes, make them final, eliminate
unneeded methods and improve code formatting.
JIRA: YANGTOOLS-892
Change-Id: I8a4925a665b1bcac7abd8088719e80f53229bafe
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
d76c8ce876f2609dd9775eb58cfd2ee012b27ad9)
Robert Varga [Wed, 5 Sep 2018 15:19:49 +0000 (17:19 +0200)]
Do not leak Optional in QNameWithPredicateImpl.toString()
The toString() method blindly appends the revision, leading to
Optional[] being present in the result. Fix the method to look
at the returned version and append the query only when it is
present -- just like QName does.
Change-Id: I47dcdaa3c7ca7b3bfaf34898f76b10dfb2ddbe00
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
1951860b7c0ae2a74735a138b3227e09fd718745)
Robert Varga [Wed, 5 Sep 2018 15:46:13 +0000 (17:46 +0200)]
Cleanup LeafRefPath
Remove commented-out code and cleanup javadocs.
Change-Id: I7d6d62bd091191d3ab914a5767eaf4a2ab7830b4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
8f950a793a451558a137b4057b9680fccf408752)
Robert Varga [Wed, 5 Sep 2018 10:53:46 +0000 (12:53 +0200)]
Consider namespace in namesakes
XML (unlike JSON) has explicit namespaces which we need to take
into consideration when determining whether two elements have the
same name.
JIRA: YANGTOOLS-900
Change-Id: I0d53bee5d18d211343c094941985bd3f0b6a8776
Signed-off-by: Isabel Lloret <illoret@indra.es>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Stephen Kitt [Wed, 29 Aug 2018 16:38:57 +0000 (18:38 +0200)]
Clean various constructs
* Remove intern() on constant strings.
* Avoid some casts by changing test instance types.
* Remove a number of unnecessary type specifiers and casts.
* Remove an unnecessary return.
* Use StringBuilder::append()'s substring parameters instead of a
separate String::substring().
Change-Id: Iaaa206d233fbc43ed1bed2d651c549643e6e7697
Signed-off-by: Stephen Kitt <skitt@redhat.com>
(cherry picked from commit
a993ec185764e9f07b7f1c6751bad8f63f6eecc7)
Robert Varga [Fri, 10 Aug 2018 10:57:10 +0000 (12:57 +0200)]
Loosen RpcResultBuilder argument
withRpcErrors can accept a collection of any RpcError subclasses,
express that in the API contract.
Change-Id: I8f302874cb509474e3a974e3b4730338984eda78
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
5bdf2e72626b1cd8c9e98a984e9fc28465d72454)
Robert Varga [Thu, 12 Jul 2018 09:26:35 +0000 (11:26 +0200)]
Do not use SchemaNodeIdentifierBuildNamespace prerequisites
Incremental lookups on ChildSchemaNodeNamespace allow us to react
to childen being created, hence we do not have an assumption that
the target node must be instantiated by someone else (like eager
instantiation).
This will also allow us better recovery if the target node is not
going to appear due to being disabled by if-feature.
JIRA: YANGTOOLS-694
Change-Id: Ibc05e18037bb85d42ed7123293e7f83f896aad5d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
509988128ed9d5fe314a14906114f53778200e47)
Robert Varga [Wed, 8 Aug 2018 15:54:06 +0000 (17:54 +0200)]
Add NamespaceBehaviour.toString()
A toString() method aids debugging immensely, define some basic
implementations.
Change-Id: I69c6b0027d81ae3a7c6a9304129feef6453e2f1f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
02833cf71885aa15743e44e20f4202269c59de3e)
Robert Varga [Mon, 27 Aug 2018 15:05:09 +0000 (17:05 +0200)]
Omit empty attributes in toString()
Do not emit attributes when they are empty, which brings
the verbosity down quite a bit -- as this is typically the case.
Change-Id: Icb2fa7abb02e9714fed640ec07af1623056a73db
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
032751054483c095a91eb3bf820b133a6b256dc5)
Robert Varga [Mon, 27 Aug 2018 09:23:09 +0000 (11:23 +0200)]
Optimize ImmutableNodes.fromInstanceId()
We are doing a single pass over the YangInstanceIdentifier, hence
we can simply iterate over the nodes, without creating another
YangInstanceIdentifier at each step.
Also cleanup method visibility, mark methods final and merge some
common codepaths.
JIRA: YANGTOOLS-897
Change-Id: I7bd599436dd16f943bae71f3adce289164be25c2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
38c0fcab1667af91ef8ee0fc1e4b1cd9075f031a)
Robert Varga [Thu, 16 Aug 2018 12:30:11 +0000 (14:30 +0200)]
Fix unique argument parser
Unique argument can use horizontal tabs and line-breaks as separators
in addition to spaces. Deal with them instead of rejecting input.
Change-Id: I5fb6137b9b73c5c844a05cc59fb9261868834a24
JIRA: YANGTOOLS-893
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
68de00c780737c1844f7d045d6f1ecfd0e83f957)
Robert Varga [Mon, 6 Aug 2018 14:32:51 +0000 (16:32 +0200)]
Fix yang-data-jaxen dependencies
We should depend on yang-data-impl for testing only.
Change-Id: Ib7028a1e44f504c08fe5a41707e2089d7d770f27
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
720fcde7315091a4f867b4aa132b77257d96c9c9)
Robert Varga [Mon, 6 Aug 2018 13:49:42 +0000 (15:49 +0200)]
Bump versions to 2.0.11-SNAPSHOT
This bumps version to next release development.
Change-Id: Ibdef02162752fd1f1cd87fcdbc95e07a83f7f04f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Jakub Tóth [Mon, 6 Aug 2018 11:43:58 +0000 (13:43 +0200)]
Allows to find child of Operation definition (RPC, Action)
Change-Id: Ie1048ed6d294a507cc90c65ded7dbfb6d8c6018f
Signed-off-by: Jakub Tóth <jakub.toth@pantheon.tech>
Robert Varga [Fri, 3 Aug 2018 18:23:46 +0000 (20:23 +0200)]
Make sure we mark phase modification
Once we resolve the target we need to paint it, so it does not
complete before our modification has had a chance to run.
JIRA: YANGTOOLS-859
Change-Id: I8b29a8eef4d01f8c02d13d759061e93c379029e5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Fri, 3 Aug 2018 18:32:07 +0000 (20:32 +0200)]
Migrate @Nullable annotation
Migrating the annotation fixes an eclipse warning.
Change-Id: I8a07c05e4bf0b61c5dfa2b0ba1d15bb0a7ae89e8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Fri, 3 Aug 2018 09:58:08 +0000 (11:58 +0200)]
Centralize AugmentationIdentifier instantiation
We have duplicate code all over the place, centralize this in
DataSchemaContextNode.
Change-Id: Icb79740b3a113d0383d583403d48e9a5f427eb66
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Fri, 3 Aug 2018 09:34:53 +0000 (11:34 +0200)]
Remove duplicate instantiation of EffectiveAugmentationSchema
We have four independent call sites, doing the same thing. Unify
all the callers behind EffectiveAugmentationSchema.create().
Change-Id: Ib4e4202cd64cff15d35cf275afbba7c00f853121
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 30 Apr 2018 19:22:19 +0000 (21:22 +0200)]
Move search methods to NormalizedNodeContext
When we know we have a NormalizedNodeContext we can forgo bouncing
through the navigator to get a target node context. This simplifies
things a bit when we want to implement more complex logic.
This is not exactly extensible way of operation, but we know we will
only be evaluating on our context.
Change-Id: Ib8bea239f3193c54d3eacab903c75f9d43aee4e2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 9 May 2018 18:54:22 +0000 (20:54 +0200)]
Add yang-xpath-impl
This adds an antlr-based XPath parser, which results in
yang-xpath-api expressions.
The grammar file (xpath.g4) is taken from
https://github.com/antlr/grammars-v4/blob/master/xpath/xpath.g4
at commit
a3ff48932b0168d93d184a988fa40723b60f6c27.
JIRA: YANGTOOLS-877
Change-Id: Ic7cfdb2d8d132577840f910786f72ed75b17c79e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Marek Gradzki [Mon, 30 Jul 2018 06:45:29 +0000 (08:45 +0200)]
Fix LeafRefContext for relative refs defined in external grouping
LeafRefPathParserListenerImpl builds LeafRefPath
using namespace of the module which contains leafref definition.
While it is valid approach for absolute paths with prefix (YANGTOOLS-749),
it cannot be used with groupings, because they are bound to namespace
when contents of the grouping is added to the schema tree.
This patch fixes the relative path case
by using the module which uses leafref.
JIRA: YANGTOOLS-891
Change-Id: Ia903138f80c437937374eb7d3460fdbe8b2a97c2
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
Robert Varga [Fri, 27 Apr 2018 20:46:32 +0000 (22:46 +0200)]
Jaxen binding should use DataSchemaContextTree
Context tree is a simple structure which allows traversal of nodes
in the order of NormalizedNodes in a strictly-forward way.
This allows us to not muck with SchemaContext when we need to look
up our SchemaNode, as it is readily available.
Change-Id: Ic6c67c1e064ffe74433debd4f1a63e24a8571791
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Fri, 4 May 2018 21:46:12 +0000 (23:46 +0200)]
Add yang-xpath-api
This patch adds the basic model of a YANG-extended XPath 1.0
expression.
JIRA: YANGTOOLS-877
Change-Id: Id5f619e6acd956b7b43f9faba75f34051e3dc509
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 1 Aug 2018 12:40:43 +0000 (14:40 +0200)]
Update toString() encapsulation
Since we do not know the contents/format of toString() return,
make sure we bracket it.
Change-Id: Id552bb59bf3beb62548d5860ab9abe2db062bf80
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 1 Aug 2018 10:31:22 +0000 (12:31 +0200)]
Propagate delegate.toString() as symbolic name
With use of delegated ByteSources we are losing location of the
source, as there is no symbolic name being filled in.
Change-Id: Ie53207ca3af13de49a8b45d11b78ebb828145e66
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 31 Jul 2018 13:21:19 +0000 (15:21 +0200)]
Rework identifier path subscription
Rather than creating multiple prerequisites, define the logic
inside a dedicated class, which gets reused.
JIRA: YANGTOOLS-859
Change-Id: I25259bd4571bc684b0f25d9d058efd5ff1d7798b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Stephen Kitt [Tue, 31 Jul 2018 09:29:37 +0000 (11:29 +0200)]
Avoid depending on immutables.value at runtime
Change-Id: I7e4ffea6b51523341e46380c3754d788f676a664
Signed-off-by: Stephen Kitt <skitt@redhat.com>
Robert Varga [Mon, 30 Jul 2018 22:23:52 +0000 (00:23 +0200)]
Introduce map-related ImmutableNodes operations
These will come in handy for creating empty lists.
JIRA: YANGTOOLS-585
Change-Id: I3173baa03d540196caf50312652dba1876b8b1b9
Signed-off-by: Maros Marsalek <mmarsale@cisco.com>
Signed-off-by: Igor Foltin <ifoltin@cisco.com>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 30 Jul 2018 05:21:55 +0000 (07:21 +0200)]
Expand CompatUtils to handle leaf-lists
The rules outlined in compatLeafType are applicable to leaf-lists,
too. Allow leaf-list types to be queried by adding a TypedDataSchemaNode
variant as compatType().
Change-Id: Ia6a3e4cf198069137c470008fde934de64b96996
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sat, 28 Jul 2018 08:26:56 +0000 (10:26 +0200)]
Update CursorAwareDataTree{Modification,Snapshot} API
Create an explicit openCursor() method and return Optional instead
of a Nullable.
Change-Id: I6a9f11726f85acb86e6aaf30b7ede12b8420da37
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 24 Jul 2018 08:07:28 +0000 (10:07 +0200)]
Bump versions for next version
Bumps versions to 2.0.10/1.0.10-SNAPSHOT.
Change-Id: I8ff720c54951498aa81dc3dc6f10fe40a039e23c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Marek Gradzki [Tue, 17 Jul 2018 12:09:23 +0000 (14:09 +0200)]
Fix LeafRefValidatation for refs defined in augmentations
LeafRefValidatation.validateNodeData traverses
children of a NormalizedNode
that contain leafrefs or are leafrefs' targets.
Information about referencing nodes and nodes being referenced
is stored in LeafRefContext under QName key.
But AugmentationNode has no QName, so validation was failing
with UnsupportedOperationException.
As a fix, validateNodeData is recursively invoked on AugmentationNode,
to fall into DataContainerNode case.
JIRA: YANGTOOLS-821
Change-Id: I5de7c814f0abe0aec31cced24ea09692bd63a584
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
Stephen Kitt [Thu, 19 Jul 2018 12:56:35 +0000 (14:56 +0200)]
Bump to odlparent 3.1.3
Change-Id: I9bdc0215beda398b989bce092df37f3a84f9105a
Signed-off-by: Stephen Kitt <skitt@redhat.com>
Robert Varga [Mon, 16 Jul 2018 16:42:21 +0000 (18:42 +0200)]
Bump to next development version
This bumps artifacts 2.0.9/1.0.9-SNAPSHOT.
Change-Id: Ifb1d79ee70e02545b025d2929af7eead9f8958f3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 16 Jul 2018 08:04:04 +0000 (10:04 +0200)]
Refactor YangFunctionContext
This fixes code duplication, making sonar happy.
Change-Id: I068b46d654d8f8df378fda7434eb97fba6b8e92f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 16 Jul 2018 08:47:32 +0000 (10:47 +0200)]
Add AbstractEffectiveOperationContainerSchemaNode
InputEffectiveStatementImpl and OutputEffectiveStatementImpl are
pretty much exactly the same, add a common superclass to hold their
implementation.
Change-Id: I1b7b174a006da8430f233a1ac43591cdf6563912
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 16 Jul 2018 08:35:38 +0000 (10:35 +0200)]
Introduce AbstractEffectiveOperationDefinition
RpcEffectiveStatementImpl and ActionEffectiveStatementImpl share
most of their implementation, extract it into a common class --
AbstractEffectiveOperationDefinition
Change-Id: I8ef70d065a0f5c667843613a2df939ce4a5fb5b3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sun, 15 Jul 2018 23:51:59 +0000 (01:51 +0200)]
DeclaredStatements can contain default implementations
This eliminates code duplication in implementations, hence is useful
to centralize as a default method.
Change-Id: Icbb1c23018d0104d2e86cb309063b6f924b35337
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sun, 15 Jul 2018 23:38:16 +0000 (01:38 +0200)]
Add ConfigStatementContainerDeclaredStatement
The missing link between ConfigContainerStatement and DeclaredStatement
is filled in, providing a default implementation getConfig().
Change-Id: Icc9c65b0d74bcb0a8a8d1db13514c3ffca86038d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sun, 15 Jul 2018 23:17:09 +0000 (01:17 +0200)]
Add DeclaredStatement utility methods
Effective and Declared statements should share utility methods,
hence update DeclaredStatement to include them.
Change-Id: Ifb9a2b4aedd41ef93c02995e99dc51897dc57db1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Michal Cmarada [Wed, 11 Jul 2018 15:18:59 +0000 (17:18 +0200)]
YANGTOOLS-890 - Fix XML parser bug
When model contains list which has the same name as its
encapsulating parent container it leads to
IllegalStateException: Attributes can be extracted only
from START_ELEMENT. This is caused by list not beeing
processed correctly and one additional empty list item
is created. To fix this it is necessary to end the loop
when end list element is reached.
Change-Id: I0d6f6ec356e503fcfc941f18d9133ea0c9cebc6c
Signed-off-by: Michal Cmarada <michal.cmarada@pantheon.tech>
Dana Kutenicsova [Fri, 13 Jul 2018 13:26:58 +0000 (15:26 +0200)]
Fix inappropriate warning.
Change-Id: Ib6545ec0ab3911050f9b8f34f81f240620b2f0ea
Signed-off-by: Dana Kutenicsova <dkutenicsova@frinx.io>
Robert Varga [Wed, 11 Jul 2018 21:48:29 +0000 (23:48 +0200)]
Add ObjectRegistry
This is a cleaned-up version of ListenerRegistry, providing a simple
API.
Change-Id: Ic98c702523530db746449d50e6d910cb278261a4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 12 Jul 2018 11:50:22 +0000 (13:50 +0200)]
Remove CPD-reported copy&paste
This refactors methods to have a common utility, keeping CPD happy.
Change-Id: I94e003a8d06fb7047ddfc51ae12c78b348334de6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 12 Jul 2018 09:14:45 +0000 (11:14 +0200)]
Add support for incremental Prerequisites
We really need a method which would allow us to follow a path,
hooking incrementally to each of the elements as they appear.
This patch adds the mechanics to support that lookup, rendering
SchemaNodeIdentifierBuildNamespace largely superfluous, as we
can perform equivalent lookups on ChildSchemaNodeNamespace.
JIRA: YANGTOOLS-859
Change-Id: I7dae9559555ee6ddc95faf1f874cebac9f915c1b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 11 Jul 2018 22:40:08 +0000 (00:40 +0200)]
Add AbstractDelegator.toString()
It is useful to provide a baseline identification, add the bits
needed.
Change-Id: I5d1c0e324672d150cf13a5de1a20f3aaa7d7dea4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 11 Jul 2018 20:31:26 +0000 (22:31 +0200)]
Update ListenerRegistry implementation
ListenerRegistry needs some usability improvements in the future,
as well as it can be written with better GC behavior.
Change-Id: Ibcef7af65816a0f084b8614718bade64a3f0f11d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 11 Jul 2018 18:10:34 +0000 (20:10 +0200)]
Document Delegator and AbstractDelegator
Document Delegator.getDelegate() and add an abstract base class
for implementations.
Change-Id: I36426d1862b786fc5413baed7d6ded1fd3f5d4e5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 10 Jul 2018 11:19:21 +0000 (13:19 +0200)]
Reduce sonar code smells
In an effort to get Sonar cleaned up, remove valid code smells
reported by it.
Change-Id: I4fc293fbc29c786699c247648b7c0af68044bded
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 9 Jul 2018 16:45:25 +0000 (18:45 +0200)]
Update ModuleActionBuilder and StmtContext documentation
This patch clarifies the API contract around reactor primitives,
so it is clearer as to what the arguments and methods mean.
JIRA: YANGTOOLS-859
Change-Id: I8c4eed7c43dc217547cce57855768b342a698b90
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 9 Jul 2018 16:34:28 +0000 (18:34 +0200)]
Limit namespace lookps of import prefixes
Namespace definitions of ImpPrefixToNamespace, ImportPrefixToModuleCtx
and ImportPrefixToSemVerSourceIdentifier are wrong in that they include
search within other imported modules.
This is overreaching and results in false-positive lookups on these
namespaces -- i.e. even prefixes which are not declared in the local
source are lookup up successfully if a matching definition is found
in any of the modules which are imported by local module.
JIRA: YANGTOOLS-889
Change-Id: I28adefef4651a15b191915d7d50d5359d78cb9fe
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>