package fitnesse.revisioncontrol.responders;
import fitnesse.html.HtmlTableListingBuilder;
import fitnesse.html.HtmlTag;
import fitnesse.revisioncontrol.OperationStatus;
import fitnesse.revisioncontrol.Results;
import fitnesse.revisioncontrol.RevisionControlException;
import static fitnesse.revisioncontrol.RevisionControlOperation.ADD;
import fitnesse.revisioncontrol.State;
import fitnesse.revisioncontrol.wiki.RevisionControlledFileSystemPage;
import fitnesse.wiki.FileSystemPage;
import fitnesse.wiki.WikiPage;
public class AddResponder extends RevisionControlResponder {
public AddResponder() {
super(ADD);
}
@Override
protected void beforeOperation(FileSystemPage page) {
verifyParentIsUnderVersionControl(page);
}
private void verifyParentIsUnderVersionControl(FileSystemPage page) {
final WikiPage parent = page.getParent();
if (page == parent)
return;
final RevisionControlledFileSystemPage parentPage = (RevisionControlledFileSystemPage) parent;
final State parentState = parentPage.getState();
if (parentState == null || !parentState.isUnderRevisionControl())
throw new RevisionControlException("A page is being added, but its parent is not under revision control");
else
verifyParentIsUnderVersionControl(parentPage);
}
@Override
protected void performOperation(RevisionControlledFileSystemPage page, HtmlTag tag) {
Results results = page.execute(ADD);
makeResultsHtml(results, tag);
}
private void makeResultsHtml(Results results, HtmlTag tag) {
if (results.getStatus() == OperationStatus.NOTHING_TO_DO) {
tag.add("Nothing to add to revision control");
} else {
HtmlTableListingBuilder table = new RevisionControlDetailsTableBuilder(results, rootPagePath);
tag.add(table.getTable());
}
}
}