Hi.

I'm new to JCR and wanted to test this case. I ran into the problem that after 
moving the parent node my child reference becomes worthless, because it has 
been removed. Is there a way I can teach my old object (Node d) that it has 
been moved (like calling a refresh, but that doesn't help).

Thanks for any help in understanding this.
Regards, Fabian

        public void testMove() throws Exception {
                assertEquals("true", this.repository
                                
.getDescriptor(Repository.OPTION_VERSIONING_SUPPORTED));

                Node a = root.addNode("a");
                Node b = a.addNode("b");
                Node c = b.addNode("c");
                Node d = c.addNode("d");

                // make the node versionable
                d.addMixin("mix:versionable");
                d.setProperty("test", true);
                session.save();
                // make the original version
                Version beforeMove = d.checkin();
                d.checkout();

                assertEquals("/a/b/c/d", d.getPath());
                assertTrue(d.getProperty("test").getBoolean());

                // move the node
                session.move(d.getPath(), d.getParent().getPath() + "/e");
                // change the property
                d.setProperty("test", false);
                session.save();

                assertEquals("/a/b/c/e", d.getPath());
                assertTrue(!d.getProperty("test").getBoolean());

                d.restore(beforeMove, false);

                // after the restore of the original version the property has 
to be
                // restored, but the path
                // has to stay the same because it is in fact a property of the 
parent
                assertEquals("/a/b/c/e", d.getPath());
                assertTrue(d.getProperty("test").getBoolean());

                // now make the parent versionable
                c.addMixin("mix:versionable");
                session.save();
                // get the version of the parent
                Version beforeMoveParent = c.checkin();
                c.checkout();

                assertEquals("/a/b/c/e", d.getPath());

                // move the node
                session.move(d.getPath(), d.getParent().getPath() + "/f");
                session.save();

                assertEquals("/a/b/c/f", d.getPath());

                String uuid = d.getUUID();

                // restore the original father version
                c.restore(beforeMoveParent, false);

                // in fact, the item doesn't exist in the repository anymore
                try {
                        uuid = d.getUUID();
                        fail();
                } catch (InvalidItemStateException e) {

                }

                // get the only node of c
                NodeIterator iterator = c.getNodes();
                assertTrue(iterator.hasNext());
                Node movedNode = (Node) iterator.next();
                assertTrue(!iterator.hasNext());

                // the nodes are not the same objects anymore
                assertTrue(movedNode != d);
                
                //but have the same uuid
                assertEquals(uuid, movedNode.getUUID());

                //and the path is the old one
                assertEquals("/a/b/c/e", movedNode.getPath());
        } 

-----Ursprüngliche Nachricht-----
Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Im Auftrag von Tobias Bocanegra
Gesendet: Dienstag, 17. Oktober 2006 12:49
An: [email protected]
Betreff: Re: Restoring a node after move

you would need to restore /a/b/c/d since a move modifies the state of the 
parent(s).

regards, toby

On 10/17/06, JavaJ <[EMAIL PROTECTED]> wrote:
>
> Say you have a Node F at: /A/B/D/F with version 1.0, then you decide 
> to move it to /A/B/D/E (basically renaming it to "E") and version it 
> 1.1.  What happens if you restore the Node to version 1.0?  Will it's 
> name be "F" or "E"?
>
>
> --
> View this message in context: 
> http://www.nabble.com/Restoring-a-node-after-move-tf2456196.html#a6846
> 023 Sent from the Jackrabbit - Users mailing list archive at 
> Nabble.com.
>
>


--
-----------------------------------------< [EMAIL PROTECTED] >--- Tobias 
Bocanegra, Day Management AG, Barfuesserplatz 6, CH - 4001 Basel T +41 61 226 
98 98, F +41 61 226 98 97 -----------------------------------------------< 
http://www.day.com >---

Reply via email to