Package org.fluxtream.core.api

Source Code of org.fluxtream.core.api.SwaggerBootstrapServlet

package org.fluxtream.core.api;

        import com.wordnik.swagger.config.ConfigFactory;
        import com.wordnik.swagger.config.ScannerFactory;
        import com.wordnik.swagger.jaxrs.config.DefaultJaxrsScanner;
        import com.wordnik.swagger.jaxrs.config.WebXMLReader;
        import com.wordnik.swagger.jaxrs.listing.ApiListingCache;
        import com.wordnik.swagger.jersey.JerseyApiReader;
        import com.wordnik.swagger.model.ApiInfo;
        import com.wordnik.swagger.reader.ClassReaders;
        import org.fluxtream.core.Configuration;
        import org.springframework.web.context.WebApplicationContext;
        import org.springframework.web.context.support.WebApplicationContextUtils;
        import scala.collection.Iterator;
        import scala.collection.JavaConversions;
        import scala.collection.immutable.List;

        import javax.servlet.ServletConfig;
        import javax.servlet.ServletException;
        import javax.servlet.http.HttpServlet;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        import javax.ws.rs.core.Application;
        import java.io.IOException;
        import java.util.ArrayList;

/**
* User: candide
* Date: 20/04/14
* Time: 23:00
*/
public class SwaggerBootstrapServlet extends HttpServlet {

    public void init(final ServletConfig config) throws ServletException {
        super.init(config);
        ConfigFactory.setConfig(new WebXMLReader(config));
        reload();
    }

    private void reload() {
        System.out.println("ApplicationContext started, setting up REST API info");
        WebApplicationContext webContext = WebApplicationContextUtils.getWebApplicationContext(getServletContext());

        Configuration env = webContext.getBean(Configuration.class);
        final DefaultJaxrsScanner jaxrsScanner = new DefaultJaxrsScanner(){

            @Override
            public List<Class<?>> classesFromContext(Application app, ServletConfig sc) {
                final List<Class<?>> classes = super.classesFromContext(app, sc);
                return filterClasses(classes);
            }

            private List<Class<?>> filterClasses(final List<Class<?>> classes) {
                final Iterator<Class<?>> eachClass = classes.iterator();
                final ArrayList<Class<?>> filteredClasses = new ArrayList<Class<?>>();
                while(eachClass.hasNext()) {
                    Class clazz = eachClass.next();
//                    if (clazz.getName().indexOf("fluxtream")!=-1)
//                        continue;
                    filteredClasses.add(clazz);
                }
                return JavaConversions.asScalaBuffer(filteredClasses).toList();
            }

            @Override
            public List<Class<?>> classes() {
                final List<Class<?>> classes = super.classes();
                return filterClasses(classes);
            }
        };
        ScannerFactory.setScanner(jaxrsScanner);
        ClassReaders.setReader(new JerseyApiReader());
        String docsBaseURL = env.get("docsHomeBaseUrl")!=null
                           ? env.get("docsHomeBaseUrl")
                           : env.get("homeBaseUrl");
        ApiInfo apiInfo = new ApiInfo(
                "Fluxtream Public REST API",
                "",
                String.format("%shtml/privacyPolicy.html", docsBaseURL),
                "info@fluxtream.org",
                "Apache 2.0",
                "http://www.apache.org/licences/LICENSE-2.0.html"
        );
        ConfigFactory.config().setBasePath(docsBaseURL+"api");
        ConfigFactory.config().setApiInfo(apiInfo);
        ConfigFactory.config().setApiVersion("v1");
        env.reload();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        reload();
        com.wordnik.swagger.jersey.listing.ApiListingCache.invalidateCache();
        ApiListingCache.invalidateCache();
        resp.getWriter().write("oauth config reloaded - cache invalidated twice");
    }
}
TOP

Related Classes of org.fluxtream.core.api.SwaggerBootstrapServlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.