use of org.opencastproject.runtimeinfo.rest.RestDocData in project opencast by opencast.
the class Activator method writeServiceDocumentation.
private void writeServiceDocumentation(final String docPath, HttpServletRequest req, HttpServletResponse resp) throws IOException {
ServiceReference reference = null;
for (ServiceReference ref : getRestEndpointServices()) {
String alias = (String) ref.getProperty(SERVICE_PATH_PROPERTY);
if (docPath.equalsIgnoreCase(alias)) {
reference = ref;
break;
}
}
final StringBuilder docs = new StringBuilder();
if (reference == null) {
docs.append("REST docs unavailable for ");
docs.append(docPath);
} else {
final Object restService = bundleContext.getService(reference);
findRestAnnotation(restService.getClass()).fold(new Option.Match<RestService, Void>() {
@Override
public Void some(RestService annotation) {
globalMacro.put("SERVICE_CLASS_SIMPLE_NAME", restService.getClass().getSimpleName());
RestDocData data = new RestDocData(annotation.name(), annotation.title(), docPath, annotation.notes(), restService, globalMacro);
data.setAbstract(annotation.abstractText());
for (Method m : restService.getClass().getMethods()) {
RestQuery rq = (RestQuery) m.getAnnotation(RestQuery.class);
String httpMethodString = null;
for (Annotation a : m.getAnnotations()) {
HttpMethod httpMethod = (HttpMethod) a.annotationType().getAnnotation(HttpMethod.class);
if (httpMethod != null) {
httpMethodString = httpMethod.value();
}
}
Produces produces = (Produces) m.getAnnotation(Produces.class);
Path path = (Path) m.getAnnotation(Path.class);
Class<?> returnType = m.getReturnType();
if ((rq != null) && (httpMethodString != null) && (path != null)) {
data.addEndpoint(rq, returnType, produces, httpMethodString, path);
}
}
String template = DocUtil.loadTemplate("/ui/restdocs/template.xhtml");
docs.append(DocUtil.generate(data, template));
return null;
}
@Override
public Void none() {
docs.append("No documentation has been found for ").append(restService.getClass().getSimpleName());
return null;
}
});
}
resp.setContentType("text/html");
resp.getWriter().write(docs.toString());
}
Aggregations