All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.charlemaznable.bunny.rabbit.guice.loader.CalculatePluginLoaderImpl Maven / Gradle / Ivy

Go to download

Bunny rabbits will skip hand-in-hand with baby lambs across sunny green meadows.

There is a newer version: 2023.0.4
Show newest version
package com.github.charlemaznable.bunny.rabbit.guice.loader;

import com.github.charlemaznable.bunny.plugin.CalculatePlugin;
import com.github.charlemaznable.bunny.rabbit.core.common.CalculatePluginLoader;
import com.github.charlemaznable.bunny.rabbit.mapper.PluginNameMapper;
import com.github.charlemaznable.core.lang.LoadingCachee;
import com.google.common.cache.LoadingCache;
import com.google.inject.Injector;
import lombok.val;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

import static com.github.charlemaznable.bunny.rabbit.core.common.BunnyError.CALCULATE_FAILED;
import static com.github.charlemaznable.configservice.ConfigFactory.getConfig;
import static com.github.charlemaznable.core.lang.Condition.checkNotNull;
import static com.github.charlemaznable.core.lang.Condition.nullThen;
import static com.google.common.cache.CacheLoader.from;
import static com.google.inject.Key.get;
import static com.google.inject.name.Names.named;

public final class CalculatePluginLoaderImpl implements CalculatePluginLoader {

    private final Injector injector;
    private final PluginNameMapper pluginNameMapper;
    private final LoadingCache cache
            = LoadingCachee.simpleCache(from(this::loadCalculatePlugin));

    public CalculatePluginLoaderImpl(Injector injector,
                                     @Nullable PluginNameMapper pluginNameMapper) {
        this.injector = checkNotNull(injector);
        this.pluginNameMapper = nullThen(pluginNameMapper,
                () -> getConfig(PluginNameMapper.class));
    }

    @Nonnull
    @Override
    public CalculatePlugin load(String serveName) {
        return LoadingCachee.get(cache, serveName);
    }

    private CalculatePlugin loadCalculatePlugin(String serveName) {
        val pluginName = pluginNameMapper.calculatePluginName(serveName);
        try {
            return checkNotNull(injector.getInstance(
                    get(CalculatePlugin.class, named(pluginName))));
        } catch (Exception e) {
            throw CALCULATE_FAILED.exception(pluginName + " Plugin Not Found");
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy