com.aipo.container.gadgets.AipoGadgetsGuiceModule.java Source code

Java tutorial

Introduction

Here is the source code for com.aipo.container.gadgets.AipoGadgetsGuiceModule.java

Source

/*
 * Aipo is a groupware program developed by Aimluck,Inc.
 * Copyright (C) 2004-2015 Aimluck,Inc.
 * http://www.aipo.com
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.aipo.container.gadgets;

import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;

import org.apache.commons.lang.StringUtils;
import org.apache.shindig.gadgets.DefaultGuiceModule;
import org.apache.shindig.gadgets.LockedDomainService;
import org.apache.shindig.gadgets.config.ConfigContributor;
import org.apache.shindig.gadgets.config.CoreUtilConfigContributor;
import org.apache.shindig.gadgets.config.OsapiServicesConfigContributor;
import org.apache.shindig.gadgets.config.ShindigAuthConfigContributor;
import org.apache.shindig.gadgets.config.XhrwrapperConfigContributor;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.InvalidationHandler;
import org.apache.shindig.gadgets.preload.PreloadModule;
import org.apache.shindig.gadgets.render.RenderModule;
import org.apache.shindig.gadgets.render.RpcServiceLookup;
import org.apache.shindig.gadgets.servlet.GadgetsHandler;
import org.apache.shindig.gadgets.servlet.HttpRequestHandler;
import org.apache.shindig.gadgets.servlet.JsonRpcHandler;
import org.apache.shindig.gadgets.templates.TemplateModule;
import org.apache.shindig.gadgets.variables.SubstituterModule;

import com.aipo.container.gadgets.parse.AipoParseModule;
import com.aipo.container.gadgets.render.AipoRpcServiceLookup;
import com.aipo.container.gadgets.rewrite.AipoRewriteModule;
import com.aipo.container.gadgets.servlet.AipoJsonRpcHandler;
import com.aipo.container.gadgets.uri.AipoUriModule;
import com.google.common.collect.ImmutableList;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Scopes;
import com.google.inject.Singleton;
import com.google.inject.multibindings.MapBinder;
import com.google.inject.multibindings.Multibinder;
import com.google.inject.name.Named;
import com.google.inject.name.Names;

/**
 * @see DefaultGuiceModule
 */
public class AipoGadgetsGuiceModule extends AbstractModule {

    /** {@inheritDoc} */
    @Override
    protected void configure() {

        bind(LockedDomainService.class).to(AipoHashLockedDomainService.class).in(Scopes.SINGLETON);
        bind(JsonRpcHandler.class).to(AipoJsonRpcHandler.class);
        bind(RpcServiceLookup.class).to(AipoRpcServiceLookup.class);

        final ExecutorService service = Executors.newCachedThreadPool(DAEMON_THREAD_FACTORY);
        bind(ExecutorService.class).toInstance(service);
        bind(ExecutorService.class).annotatedWith(Names.named("shindig.concat.executor")).toInstance(service);

        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                service.shutdownNow();
            }
        });

        install(new AipoParseModule());
        install(new PreloadModule());
        install(new RenderModule());
        install(new AipoRewriteModule());
        install(new SubstituterModule());
        install(new TemplateModule());
        install(new AipoUriModule());

        // bind(Long.class).annotatedWith(Names.named("org.apache.shindig.serviceExpirationDurationMinutes")).toInstance(60l);

        // We perform static injection on HttpResponse for cache TTLs.
        requestStaticInjection(HttpResponse.class);

        registerGadgetHandlers();
        registerConfigContributors();
        registerFeatureHandlers();
    }

    /**
     * Sets up multibinding for rpc handlers
     */
    protected void registerGadgetHandlers() {
        Multibinder<Object> handlerBinder = Multibinder.newSetBinder(binder(), Object.class,
                Names.named("org.apache.shindig.handlers"));
        handlerBinder.addBinding().to(InvalidationHandler.class);
        handlerBinder.addBinding().to(HttpRequestHandler.class);
        handlerBinder.addBinding().to(GadgetsHandler.class);
    }

    protected void registerConfigContributors() {
        MapBinder<String, ConfigContributor> configBinder = MapBinder.newMapBinder(binder(), String.class,
                ConfigContributor.class);
        configBinder.addBinding("core.util").to(CoreUtilConfigContributor.class);
        configBinder.addBinding("osapi").to(OsapiServicesConfigContributor.class);
        configBinder.addBinding("shindig.auth").to(ShindigAuthConfigContributor.class);
        configBinder.addBinding("shindig.xhrwrapper").to(XhrwrapperConfigContributor.class);

    }

    /**
     * Sets up the multibinding for extended feature resources
     */
    protected void registerFeatureHandlers() {
        /* Multibinder<String> featureBinder = */
        Multibinder.newSetBinder(binder(), String.class, Names.named("org.apache.shindig.features-extended"));
    }

    /**
     * Merges the features provided in shindig.properties with the extended
     * features from multibinding
     * 
     * @param features
     *          Comma separated string from shindig.properties key
     *          'shindig.features.default'
     * @param extended
     *          Set of paths/resources from plugins
     * @return the merged, list of all features to load.
     */
    @Provides
    @Singleton
    @Named("org.apache.shindig.features")
    protected List<String> defaultFeatures(@Named("shindig.features.default") String features,
            @Named("org.apache.shindig.features-extended") Set<String> extended) {
        return ImmutableList.<String>builder().addAll(extended).add(StringUtils.split(features, ',')).build();
    }

    public static final ThreadFactory DAEMON_THREAD_FACTORY = new ThreadFactory() {
        private final ThreadFactory factory = Executors.defaultThreadFactory();

        @Override
        public Thread newThread(Runnable r) {
            Thread t = factory.newThread(r);
            t.setDaemon(true);
            return t;
        }
    };
}