package fitnesse;
import fitnesse.wiki.WikiPage;
import fitnesse.wiki.FileSystemPage;
import util.DiskFileSystem;
import util.FileSystem;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Properties;
public class WikiPageFactory {
private Class<?> wikiPageClass = FileSystemPage.class;
private FileSystem fileSystem;
public WikiPageFactory() {
this(new DiskFileSystem());
}
public WikiPageFactory(FileSystem fileSystem) {
this.fileSystem = fileSystem;
}
public WikiPage makeRootPage(String rootPath, String rootPageName, ComponentFactory componentFactory) throws Exception {
try {
Constructor<?> constructorMethod = wikiPageClass.getConstructor(String.class, String.class, FileSystem.class, ComponentFactory.class);
return (WikiPage) constructorMethod.newInstance(rootPath, rootPageName, fileSystem, componentFactory);
} catch (NoSuchMethodException e) {
Method makeRootMethod = wikiPageClass.getMethod("makeRoot", Properties.class);
return (WikiPage) makeRootMethod.invoke(wikiPageClass, componentFactory.getProperties());
}
}
public Class<?> getWikiPageClass() {
return wikiPageClass;
}
public void setWikiPageClass(Class<?> wikiPageClass) {
this.wikiPageClass = wikiPageClass;
}
}