package fitnesse.wiki;
import static fitnesse.wiki.PageData.*;
public enum PageType {
SUITE("Suite") {
@Override
public boolean validForPageName(String pageName) {
return (pageName.startsWith(toString())
&& !pageName.equals(SUITE_SETUP_NAME) && !pageName.equals(SUITE_TEARDOWN_NAME))
|| pageName.endsWith(toString()) || pageName.endsWith("Examples");
}
},
TEST("Test") {
@Override
public boolean validForPageName(String pageName) {
return pageName.startsWith(toString())
|| pageName.endsWith(toString())
|| (pageName.startsWith("Example") && !pageName
.startsWith("Examples")) || pageName.endsWith("Example");
}
},
STATIC("Static") {
@Override
public boolean validForPageName(String pageName) {
return true;
}
};
public static PageType fromString(String typeDescriptor) {
for (PageType type: PageType.values()) {
if (type.description.equalsIgnoreCase(typeDescriptor)) {
return type;
}
}
throw new IllegalArgumentException("unknown page type descriptor: " + typeDescriptor);
}
public static PageType fromWikiPage(WikiPage page) {
PageData data = page.getData();
if (data.hasAttribute(SUITE.toString())) {
return SUITE;
}
if (data.hasAttribute(TEST.toString())) {
return TEST;
}
return STATIC;
}
public static PageType getPageTypeForPageName(String pageName) {
for (PageType type: values()) {
if (type.validForPageName(pageName))
return type;
}
return STATIC;
}
public static String [] valuesAsString(){
PageType [] ee = PageType.values();
String [] stringArray = new String [ee.length];
for (int i = 0; i < ee.length; i++) {
stringArray[i] = ee[i].toString();
}
return stringArray;
}
private String description;
PageType(String description) {
this.description = description;
}
@Override
public String toString() {
return description;
}
public abstract boolean validForPageName(String pageName);
}