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

blocks.service.BlockContext Maven / Gradle / Ivy

package blocks.service;

import akka.actor.typed.javadsl.ActorContext;
import akka.http.javadsl.Http;
import akka.http.javadsl.server.Route;

import java.time.Clock;
import java.time.Instant;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;

public class BlockContext {
    public final ActorContext context;
    public final Http http;
    public final Route route;
    public final String env;
    public final ServiceConfig config;
    public final Instant startInstant;
    public final Clock clock;
    public final Set> blockRefs;
    private final Function, Block> blockFetchFunction;

    public BlockContext(final ActorContext context, final Http http, final Route route, final String env, final ServiceConfig config, final Instant startInstant, final Clock clock, final Set> blockRefs, Function, Block> blockFetchFunction) {
        this.context = context;
        this.http = http;
        this.route = route;
        this.env = env;
        this.config = config;
        this.startInstant = startInstant;
        this.clock = clock;
        this.blockRefs = blockRefs;
        this.blockFetchFunction = blockFetchFunction;
    }

    @SuppressWarnings("unchecked")
    public  Block getBlock(BlockRef key) {
        return (Block) blockFetchFunction.apply(key);
    }

    @SuppressWarnings("unchecked")
    public  B getBlockOutput(BlockRef key) {
        Block block = blockFetchFunction.apply(key);
        if (block == null) {
            throw new IllegalStateException("Missing block " + key.key + " (" + key.type.getType() + "). Have you forgotten to add the block instance to list of blocks?");
        }
        Optional blockOutput = (Optional) block.getBlockOutput();
        if (blockOutput.isEmpty()) {
            throw new IllegalStateException("Missing output of " + key.key + " " + key.type.getType());
        }
        return blockOutput.get();
    }
}