Search in sources :

Example 1 with RestDocData

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());
}
Also used : Path(javax.ws.rs.Path) RestDocData(org.opencastproject.runtimeinfo.rest.RestDocData) HttpMethod(javax.ws.rs.HttpMethod) Method(java.lang.reflect.Method) Annotation(java.lang.annotation.Annotation) ServiceReference(org.osgi.framework.ServiceReference) Produces(javax.ws.rs.Produces) RestQuery(org.opencastproject.util.doc.rest.RestQuery) Option(org.opencastproject.util.data.Option) RestService(org.opencastproject.util.doc.rest.RestService) HttpMethod(javax.ws.rs.HttpMethod)

Aggregations

Annotation (java.lang.annotation.Annotation)1 Method (java.lang.reflect.Method)1 HttpMethod (javax.ws.rs.HttpMethod)1 Path (javax.ws.rs.Path)1 Produces (javax.ws.rs.Produces)1 RestDocData (org.opencastproject.runtimeinfo.rest.RestDocData)1 Option (org.opencastproject.util.data.Option)1 RestQuery (org.opencastproject.util.doc.rest.RestQuery)1 RestService (org.opencastproject.util.doc.rest.RestService)1 ServiceReference (org.osgi.framework.ServiceReference)1