Package io.fathom.cloud.server

Source Code of io.fathom.cloud.server.OpenstackServerServletModule

package io.fathom.cloud.server;

import io.fathom.cloud.jaxrs.JaxrsServletModule;
import io.fathom.cloud.server.auth.TokenAuthFilter;

import java.util.HashMap;
import java.util.Map;

import org.apache.wink.common.internal.registry.InjectableFactory;
import org.apache.wink.guice.InjectedRestServlet;
import org.apache.wink.server.internal.registry.ServerInjectableFactory;
import org.eclipse.jetty.servlets.GzipFilter;

import com.fathomdb.Configuration;
import com.fathomdb.extensions.Extensions;
import com.fathomdb.extensions.HttpConfiguration;
import com.google.inject.Scopes;
import com.google.inject.binder.AnnotatedBindingBuilder;
import com.google.inject.persist.PersistFilter;

public class OpenstackServerServletModule extends JaxrsServletModule {
    // extends JerseyServletModule {
    private final Extensions extensions;
    private final Configuration configuration;

    public OpenstackServerServletModule(Configuration configuration, Extensions extensions) {
        this.configuration = configuration;
        this.extensions = extensions;
    }

    @Override
    protected void configureServlets() {
        extensions.addHttpExtensions(new HttpConfiguration() {
            @Override
            public FilterKeyBindingBuilder filter(String urlPattern) {
                return OpenstackServerServletModule.this.filter(urlPattern);
            }

            @Override
            public ServletKeyBindingBuilder serve(String urlPattern) {
                return OpenstackServerServletModule.this.serve(urlPattern);
            }

            @Override
            public <T> AnnotatedBindingBuilder<T> bind(Class<T> clazz) {
                return OpenstackServerServletModule.this.bind(clazz);
            }
        });

        bind(Extensions.class).toInstance(extensions);

        if (configuration.lookup("http.cors.enabled", false)) {
            throw new UnsupportedOperationException();
            // bind(CORSFilter.class).asEagerSingleton();
            // filter("/api/*").through(CORSFilter.class);
        }

        boolean USE_GZIP = true;
        if (USE_GZIP) {
            bind(GzipFilter.class).in(Scopes.SINGLETON);

            Map<String, String> params = new HashMap<String, String>();
            params.put("mimeType",
                    "text/html,text/plain,text/xml,application/xhtml+xml,text/css,application/javascript,image/svg+xml,application/json");
            filter("/*").through(GzipFilter.class, params);
        }

        // boolean ENABLE_EC2 = false;
        // if (ENABLE_EC2) {
        // bind(Ec2Endpoint.class);
        // }
        // boolean ENABLE_S3 = false;
        // if (ENABLE_S3) {
        // bind(S3Resource.class);
        // }
        //
        // if (ENABLE_S3 || ENABLE_EC2) {
        // filter("/*").through(AwsFilter.class);
        // }

        // // Configure Jackson for JSON output
        // {
        // ObjectMapper objectMapper = new ObjectMapper();
        // // Include always because horizon etc are really fussy
        // // objectMapper.setSerializationInclusion(Include.NON_NULL);
        // objectMapper.setSerializationInclusion(Include.ALWAYS);
        //
        // // Use JAXB annotations
        // AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
        // objectMapper = objectMapper.setAnnotationIntrospector(introspector);
        //
        // objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        //
        // objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SZ"));
        //
        // JacksonJsonProvider jacksonJsonProvider = new JacksonJsonProvider(objectMapper);
        // bind(JacksonJsonProvider.class).toInstance(jacksonJsonProvider);
        // }

        bind(GsonObjectMessageBodyHandler.class);
        bind(GsonMessageBodyReaderWriter.class);

        // filter("/api/*").through(CORSFilter.class);

        // filter("/api/*").through(AuthenticationFilter.class);

        // {
        // Map<String, String> params = new HashMap<String, String>();
        // bind(DefaultServlet.class).in(Scopes.SINGLETON);
        //
        // params.put("dirAllowed", "false");
        // params.put("gzip", "true");
        //
        // URL urlStatic = getClass().getResource("/webapp");
        // params.put("resourceBase", urlStatic.toString());
        //
        // serve("/static/*").with(DefaultServlet.class, params);
        // }

        filter("/*").through(TokenAuthFilter.class);

        filter("/*").through(PersistFilter.class);

        // {
        // bind(JerseyBridgeRequestFilter.class);
        //
        // Map<String, String> params = new HashMap<String, String>();
        // params.put(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS,
        // JerseyBridgeRequestFilter.class.getName());
        // // GZIPContentEncodingFilter.class.getName()
        // // + "," + StripExtensionFilter.class.getName() + "," +
        // // MetadataFilter.class.getName());
        // // if (USE_GZIP) {
        // // params.put(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS,
        // // GZIPContentEncodingFilter.class.getName());
        // // }
        //
        // serve("/*").with(GuiceContainer.class, params);
        // }

        {
            Map<String, String> params = new HashMap<String, String>();
            // params.put(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS,
            // JerseyBridgeRequestFilter.class.getName());
            // GZIPContentEncodingFilter.class.getName()
            // + "," + StripExtensionFilter.class.getName() + "," +
            // MetadataFilter.class.getName());
            // if (USE_GZIP) {
            // params.put(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS,
            // GZIPContentEncodingFilter.class.getName());
            // }

            // params.put(GuiceRestServlet.DEPLOYMENT_CONF_PARAM,
            // InjectorDeploymentConfiguration.class.getName());
            // bind(GuiceRestServlet.class).asEagerSingleton();
            // serve("/*").with(GuiceRestServlet.class, params);

            // TODO: WHY???
            InjectableFactory.setInstance(new ServerInjectableFactory());

            serve("/*").with(InjectedRestServlet.class, params);
        }

        // {
        //
        // Map<String, String> params = new HashMap<String, String>();
        // // params.put(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS,
        // // GZIPContentEncodingFilter.class.getName()
        // // + "," + StripExtensionFilter.class.getName() + "," +
        // // MetadataFilter.class.getName());
        // // if (USE_GZIP) {
        // // params.put(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS,
        // // GZIPContentEncodingFilter.class.getName());
        // // }
        //
        // bind(HttpServletDispatcher.class).in(Scopes.SINGLETON);
        //
        // serve("/*").with(HttpServletDispatcher.class, params);
        // }
    }
}
TOP

Related Classes of io.fathom.cloud.server.OpenstackServerServletModule

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.