// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the CPL Common Public License version 1.0.
package fitnesse.components;
import fitnesse.wiki.WikiPage;
import fitnesse.wiki.WikiWordReference;
import fitnesse.wikitext.parser.*;
public class PageReferenceRenamer extends ReferenceRenamer {
private WikiPage subjectPage;
private String newName;
public PageReferenceRenamer(WikiPage root, WikiPage subjectPage, String newName) {
super(root);
this.subjectPage = subjectPage;
this.newName = newName;
}
public boolean visit(Symbol node) {
try {
if (node.isType(WikiWord.symbolType)) {
new WikiWordReference(currentPage, node.getContent()).wikiWordRenamePageIfReferenced(node, subjectPage, newName);
}
else if (node.isType(Alias.symbolType)) {
String aliasReference = node.childAt(1).childAt(0).getContent();
if (new WikiWordPath().findLength(aliasReference) > 0) {
new WikiWordReference(currentPage, aliasReference).wikiWordRenamePageIfReferenced(node.childAt(1).childAt(0), subjectPage, newName);
}
}
}
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return true;
}
public boolean visitChildren(Symbol node) {
return !node.isType(Alias.symbolType);
}
}