package org.jaxygen.apibrowser.pages;
import org.jaxygen.netservice.html.HTMAnchor;
import org.jaxygen.netservice.html.HTMLElement;
import org.jaxygen.netservice.html.HTMLLabel;
import org.jaxygen.netservice.html.HTMLTable;
import org.jaxygen.netservice.html.HTMLDiv;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import org.jaxygen.annotations.NetAPI;
import org.jaxygen.invoker.ClassRegistry;
import org.jaxygen.security.basic.annotations.UserProfile;
import org.jaxygen.url.UrlQuery;
/**
*
* @author artur
*/
public class ClassesListPage extends Page {
public static final String NAME = "ClassesListPage";
public ClassesListPage(ServletContext context, HttpServletRequest request, String classRegistry, String beansPath) throws ServletException {
super(context, request, classRegistry, beansPath);
append(renderClassesList());
}
/**
* Render full list of classes
*
* @param securityProvider
* @param classFilter
* @param methodFilter
* @param output
* @return
*/
private HTMLElement renderClassesList() {
HTMLElement rc;
if (getRegistry() != null) {
HTMLTable table = new HTMLTable();
table.getHeader().createColumns("className", "methodName", "Description", "Allowed to");
for (Class c : getRegistry().getRegisteredClasses()) {
table.addRows(renderMethodReferences(c));
}
rc = table;
} else {
rc = new HTMLLabel("Please configure servicePath context-param in yout web.xml file. It must point to " + ClassRegistry.class.getCanonicalName() + " interface implementation");
}
return rc;
}
private HTMLTable.Row[] renderMethodReferences(Class clazz) {
List<HTMLTable.Row> rows = new ArrayList<HTMLTable.Row>();
for (Method method : clazz.getMethods()) {
NetAPI netApi = method.getAnnotation(NetAPI.class);
UserProfile userProfile = method.getAnnotation(UserProfile.class);
if (netApi != null) {
final String className = clazz.getCanonicalName();
final String methodName = method.getName();
boolean show = true;
UrlQuery query = new UrlQuery();
query.add("className", className);
query.add("methodName", methodName);
query.add("getForm", className + "." + methodName);
if (show) {
HTMLTable.Row row = new HTMLTable.Row();
row.addColumn(new HTMAnchor("?page=" + ClassMethodsPage.NAME + "&className=" + className, new HTMLLabel(className)));
row.addColumn(new HTMAnchor(browserPath + "?" + query, new HTMLLabel(methodName)));
row.addColumn(new HTMLLabel(netApi.description()));
HTMLDiv allowed = new HTMLDiv();
row.addColumn(allowed);
if (userProfile != null) {
for (String dm : userProfile.name()) {
allowed.append(new HTMLLabel(dm));
}
}
rows.add(row);
}
}
}
return rows.toArray(new HTMLTable.Row[rows.size()]);
}
}