001/*
002 * Copyright 2015 Aroma Tech.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 
018package tech.aroma.application.service;
019
020
021import com.google.inject.AbstractModule;
022import com.google.inject.Provides;
023import decorice.DecoratorModule;
024import java.util.concurrent.ExecutorService;
025import java.util.concurrent.Executors;
026import java.util.function.Function;
027import org.slf4j.Logger;
028import org.slf4j.LoggerFactory;
029import tech.aroma.thrift.application.service.ApplicationService;
030import tech.aroma.thrift.authentication.ApplicationToken;
031import tech.aroma.thrift.authentication.AuthenticationToken;
032import tech.aroma.thrift.functions.TokenFunctions;
033
034/**
035 *
036 * @author SirWellington
037 */
038public final class ModuleApplicationService extends AbstractModule
039{
040    private final static Logger LOG = LoggerFactory.getLogger(ModuleApplicationService.class);
041
042    @Override
043    protected void configure()
044    {
045        install(new ServiceModule());
046        
047        bind(ExecutorService.class).toInstance(Executors.newWorkStealingPool(10));
048    }
049    
050    @Provides
051    Function<AuthenticationToken, ApplicationToken> provideTokenMapper()
052    {
053        return TokenFunctions.authTokenToAppTokenFunction();
054    }
055    
056    private static class ServiceModule extends DecoratorModule
057    {
058        {
059            bind(ApplicationService.Iface.class)
060                .to(ApplicationServiceBase.class)
061                .decoratedBy(AuthenticationLayer.class);
062        }
063    }
064    
065}