### Eclipse Workspace Patch 1.0 #P xwiki-core Index: src/main/java/com/xpn/xwiki/doc/XWikiDocument.java =================================================================== --- src/main/java/com/xpn/xwiki/doc/XWikiDocument.java (revision 32302) +++ src/main/java/com/xpn/xwiki/doc/XWikiDocument.java (working copy) @@ -5670,12 +5670,49 @@ xwiki.saveDocument(backlinkDocument, saveMessage, true, context); } - // Step 4: Delete the old document + // Step 4 : Refactor the links contained int the document + XWikiDocument newDocument = xwiki.getDocument(newDocumentReference, context); + XDOM newDocumentXDOM = newDocument.getXDOM(); + List linkBlockList = newDocumentXDOM.getChildrenByType(LinkBlock.class, true); + XWikiDocument currentDoc = context.getDoc();// taken so that we can restore context + + try { + boolean modified = false; + for (LinkBlock linkBlock : linkBlockList) { + ResourceReference linkReference = linkBlock.getReference(); + if (linkReference.getType().equals(ResourceType.DOCUMENT)) { + context.setDoc(this); + DocumentReference currentLinkReference = + this.currentDocumentReferenceResolver.resolve(linkReference.getReference()); + + context.setDoc(newDocument); + DocumentReference newLinkReference = + this.currentDocumentReferenceResolver.resolve(linkReference.getReference()); + + if (!newLinkReference.equals(currentLinkReference)) { + modified = true; + linkReference.setReference(this.compactWikiEntityReferenceSerializer + .serialize(currentLinkReference)); + } + } + } + // set new content and save document if needed + if (modified) { + newDocument.setContent(newDocumentXDOM); + xwiki.saveDocument(newDocument, context); + } + } finally { + // restore state of context + context.setDoc(currentDoc); + } + + + // Step 5: Delete the old document xwiki.deleteDocument(this, context); - // Step 5: The current document needs to point to the renamed document as otherwise it's pointing to an + // Step 6: The current document needs to point to the renamed document as otherwise it's pointing to an // invalid XWikiDocument object as it's been deleted... - clone(xwiki.getDocument(newDocumentReference, context)); + clone(newDocument); } /**