hi ian here is my take on it:
- the ImmutableTree is just a tiny wrapper around the regular non-secured Nodestate for the sake of allowing to make use of the hierarchy operations that are missing in the NodeState interface. those immutable (read-only) trees are meant to be used for oak internal low-level usages where keeping track of the parent and the path is required although the operations are meant to be performed on the un-secured NodeState, which usually requires access to hidden items as well. - the MutableTree is that actual implementation of the Tree interface that is exposed when operating on the Oak API s.str. This one *must never* expose the hidden items. hope that helps angela On 03/06/15 12:50, "Ian Boston" <[email protected]> wrote: >Hi, > >I am confused how hidden trees work in MutableTree and ImmutableTree. > >The ImmutableTreeTesttestHiddenExists asserts that a hidden node from an >ImmutableTree will return true() to exists, and yet the same node from a >MuttableTree is hard coded to return false to exists(). > > >Is this correct ? If so, why ? > > >Some checks I added to the test to investigate are below. > >assume I have a node ':hidden' which I believe has been committed to the >NodeStore in use. > >--------- check1 ---------------------- > > NodeState testNode2 = store.getRoot().getChildNode(":hidden"); > boolean testNode2Exists = testNode2.exists(); > > >testNode2 is a DocumentNodeState "{ path: '/:hidden', rev: >'r14db8ebf37d-0-1', properties: '{}' }" >testNode2Exists == true > > >--------- check2 ---------------------- > > Tree mutableTree = session.getLatestRoot().getTree("/"); > Tree hiddenTree = mutableTree.getChild(":hidden"); > boolean hiddenTreeExists = hiddenTree.exists(); > >hiddenTree is a HiddenTree "/:hidden: {}" >hiddenTreeExists == false > >hiddenTree is a HiddenTree because mutableTree.getChild looks at the name >and hard codes a HiddenTree for anything beginning with ':' > > >----------- check3 -------------------- > > ImmutableTree immutable = new ImmutableTree(state); > ImmutableTree hiddenChild = immutable.getChild(":hidden"); > boolean childExists = hiddenChild.exists(); >hiddenChild is an ImmutableTree, >childExists == true > >The unit test does: > > @Test > public void testHiddenExists() { > ImmutableTree hidden = immutable.getChild(":hidden"); > assertTrue(hidden.exists()); > } > >BTW: I the modified NodeStore I am working on, check3 childExists returns >false, failing the test, hence the question. I would like to understand >why >the test is correct so I can find the bug in my code. > > >Best Regards >Ian
