package fitnesse.wiki;
/**
* Base implementation for most types of wiki pages.
*/
public abstract class BaseWikiPage implements WikiPage {
protected final String name;
protected final WikiPage parent;
public BaseWikiPage(String name, WikiPage parent) {
this.name = name;
this.parent = parent;
}
@Override
public String getName() {
return name;
}
@Override
public boolean hasChildPage(final String pageName) {
return getChildPage(pageName) != null;
}
@Override
public PageCrawler getPageCrawler() {
return new PageCrawlerImpl(this);
}
@Override
public WikiPage getParent() {
return parent == null ? this : parent;
}
@Override
public boolean isRoot() {
return parent == null || parent == this;
}
@Override
public void remove() {
WikiPage parent = getParent();
if (parent != this) {
parent.removeChildPage(getName());
}
}
@Override
public String toString() {
return this.getClass().getName() + ": " + name;
}
@Override
public int compareTo(WikiPage other) {
try {
WikiPagePath path1 = getPageCrawler().getFullPath();
WikiPagePath path2 = other.getPageCrawler().getFullPath();
return path1.compareTo(path2);
}
catch (Exception e) {
return 0;
}
}
@Override
public boolean equals(Object other) {
if (this == other)
return true;
if (!(other instanceof WikiPage))
return false;
try {
WikiPagePath path1 = getPageCrawler().getFullPath();
WikiPagePath path2 = ((WikiPage) other).getPageCrawler().getFullPath();
return path1.equals(path2);
} catch (Exception e) {
return false;
}
}
@Override
public int hashCode() {
try {
return getPageCrawler().getFullPath().hashCode();
} catch (Exception e) {
return 0;
}
}
}