//
// Preconditions: "from" page must exist, and "to" page must not yet exist.
//
WikiEngine engine = context.getEngine();
WikiPage fromPage = engine.getPage( renameFrom );
if( fromPage == null )
{
throw new WikiException("No such page "+renameFrom);
}
WikiPage toPage = engine.getPage( renameToClean );
if( toPage != null )
{
throw new WikiException( "Page already exists " + renameToClean );
}
//
// Options
//
m_camelCase = TextUtil.getBooleanProperty( engine.getWikiProperties(),
JSPWikiMarkupParser.PROP_CAMELCASELINKS,
m_camelCase );
Set<String> referrers = getReferencesToChange( fromPage, engine );
//
// Do the actual rename by changing from the frompage to the topage, including
// all of the attachments
//
// Remove references to attachments under old name
@SuppressWarnings( "unchecked" )
Collection<Attachment> attachmentsOldName = engine.getAttachmentManager().listAttachments( fromPage );
for (Attachment att:attachmentsOldName)
{
WikiPage fromAttPage = engine.getPage( att.getName() );
engine.getReferenceManager().pageRemoved( fromAttPage );
}
engine.getPageManager().getProvider().movePage( renameFrom, renameToClean );
if( engine.getAttachmentManager().attachmentsEnabled() )
{
engine.getAttachmentManager().getCurrentProvider().moveAttachmentsForPage( renameFrom, renameToClean );
}
//
// Add a comment to the page notifying what changed. This adds a new revision
// to the repo with no actual change.
//
toPage = engine.getPage( renameToClean );
if( toPage == null ) throw new InternalWikiException("Rename seems to have failed for some strange reason - please check logs!");
toPage.setAttribute( WikiPage.CHANGENOTE, fromPage.getName() + " ==> " + toPage.getName() );
toPage.setAuthor( context.getCurrentUser().getName() );
engine.getPageManager().putPageText( toPage, engine.getPureText( toPage ) );
//
// Update the references
//
engine.getReferenceManager().pageRemoved( fromPage );
engine.updateReferences( toPage );
//
// Update referrers
//
if( changeReferrers )
{
updateReferrers( context, fromPage, toPage, referrers );
}
//
// re-index the page including its attachments
//
engine.getSearchManager().reindexPage(toPage);
@SuppressWarnings( "unchecked" )
Collection<Attachment> attachmentsNewName = engine.getAttachmentManager().listAttachments( toPage );
for (Attachment att:attachmentsNewName)
{
WikiPage toAttPage = engine.getPage( att.getName() );
// add reference to attachment under new page name
engine.updateReferences( toAttPage );
engine.getSearchManager().reindexPage(att);
}