Re: [xwiki-devs] [xwiki-notifications] r25212 - platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/doc
On Nov 19, 2009, at 1:48 PM, vmassol (SVN) wrote:
Author: vmassol Date: 2009-11-19 13:48:06 +0100 (Thu, 19 Nov 2009) New Revision: 25212
Modified: platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/doc/ XWikiDocument.java Log: [misc] web --> space
ouch, I committed too much.... -Vincent
Modified: platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/ doc/XWikiDocument.java =================================================================== --- platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/doc/ XWikiDocument.java 2009-11-19 11:51:51 UTC (rev 25211) +++ platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/doc/ XWikiDocument.java 2009-11-19 12:48:06 UTC (rev 25212) @@ -447,13 +447,13 @@ * Constructor that specifies the full document identifier: wiki name, space name, document name. * * @param wiki The wiki this document belongs to. - * @param web The space this document belongs to. + * @param space The space this document belongs to. * @param name The name of the document. */ - public XWikiDocument(String wiki, String web, String name) + public XWikiDocument(String wiki, String space, String name) { setDatabase(wiki); - setSpace(web); + setSpace(space);
int i1 = name.indexOf("."); if (i1 == -1) { @@ -4166,8 +4166,9 @@ }
/** - * Rename the current document and all the backlinks leading to it. See - * {@link #rename(String, java.util.List, com.xpn.xwiki.XWikiContext)} for more details. + * Rename the current document and all the backlinks leading to it. The parent field in all documents which list + * the renamed document as their parent is also renamed. + * See {@link #rename(String, java.util.List, java.util.List, com.xpn.xwiki.XWikiContext)} for more details. * * @param newDocumentName the new document name. If the space is not specified then defaults to the current space. * @param context the ubiquitous XWiki Context @@ -4187,9 +4188,11 @@ * <li>[Page?param=1]</li> * <li>[currentwiki:Page]</li> * <li>[CurrentSpace.Page]</li> + * <li>[currentwiki:CurrentSpace.Page]</li> * </ul> * <p> - * Note: links without a space are renamed with the space added. + * Note: links without a space are renamed with the space added and all documents having the renamed document as + * their parent have their parent field set to "currentwiki:CurrentSpace.Page". * </p> * * @param newDocumentName the new document name. If the space is not specified then defaults to the current space. @@ -4228,43 +4231,57 @@ return; }
+ // Grab the XWiki object, it gets used a few times. + com.xpn.xwiki.XWiki xwiki = context.getWiki(); + // Step 1: Copy the document and all its translations under a new name - context.getWiki().copyDocument(getFullName(), newDocumentName, false, context); + xwiki.copyDocument(getFullName(), newDocumentName, false, context);
- // Step 2: For each backlink to rename, parse the backlink document and replace the links - // with the new name. - // Note: we ignore invalid links here. Invalid links should be shown to the user so - // that they fix them but the rename feature ignores them. + // Step 2: For each child document, update parent. + List<String> childDocumentNames = getChildren(context); + if(childDocumentNames != null){ + // Note: We're adding the fully qualified document name (i.e. including the wiki name). + String newParent = newDocName.getWiki() + ":" + newDocName.getSpace() + "." + newDocName.getPage(); + + for (String childDocumentName : childDocumentNames) { + XWikiDocument childDocument = xwiki.getDocument(childDocumentName, context); + childDocument.setParent(newParent); + xwiki.saveDocument(childDocument, context.getMessageTool().get("core.comment.renameParent", + Arrays.asList(new String[] {newDocumentName})), true, context); + } + } + + // Step 3: For each backlink to rename, parse the backlink document and replace the links with the new name. + // Note: we ignore invalid links here. Invalid links should be shown to the user so that they fix them but the + // rename feature ignores them. DocumentParser documentParser = new DocumentParser();
for (String backlinkDocumentName : backlinkDocumentNames) { - XWikiDocument backlinkDocument = context.getWiki().getDocument(backlinkDocumentName, context); + XWikiDocument backlinkDocument = xwiki.getDocument(backlinkDocumentName, context);
if (backlinkDocument.is10Syntax()) { // Note: Here we cannot do a simple search/replace as there are several ways to point // to the same document. For example [Page], [Page? param=1], [currentwiki:Page], // [CurrentSpace.Page] all point to the same document. Thus we have to parse the links // to recognize them and do the replace. - ReplacementResultCollection result = - documentParser.parseLinksAndReplace(backlinkDocument.getContent(), oldLink, newLink, linkHandler, - getSpace()); + ReplacementResultCollection result = documentParser.parseLinksAndReplace( + backlinkDocument.getContent(), oldLink, newLink, linkHandler, getSpace());
backlinkDocument.setContent((String) result.getModifiedContent()); } else { backlinkDocument.refactorDocumentLinks(oldDocName, newDocName, context); }
- context.getWiki().saveDocument(backlinkDocument, - context.getMessageTool().get("core.comment.renameLink", Arrays.asList(new String[] {newDocumentName})), - true, context); + xwiki.saveDocument(backlinkDocument, context.getMessageTool().get("core.comment.renameLink", + Arrays.asList(new String[] {newDocumentName})), true, context); }
- // Step 3: Delete the old document - context.getWiki().deleteDocument(this, context); + // Step 4: Delete the old document + xwiki.deleteDocument(this, context);
- // Step 4: 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(context.getWiki().getDocument(newDocumentName, context)); + // Step 5: 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(newDocumentName, context)); }
private void refactorDocumentLinks(DocumentName oldDocumentName, DocumentName newDocumentName, XWikiContext context)
participants (1)
-
Vincent Massol