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

com.progressoft.brix.domino.api.server.request.DefaultRequestExecutor Maven / Gradle / Ivy

The newest version!
package com.progressoft.brix.domino.api.server.request;

import com.progressoft.brix.domino.api.server.context.ExecutionContext;
import com.progressoft.brix.domino.api.server.entrypoint.ServerEntryPointContext;
import com.progressoft.brix.domino.api.server.handler.HandlersRepository;
import com.progressoft.brix.domino.api.server.handler.RequestHandler;
import com.progressoft.brix.domino.api.server.interceptor.GlobalRequestInterceptor;
import com.progressoft.brix.domino.api.server.interceptor.InterceptorsRepository;
import com.progressoft.brix.domino.api.server.interceptor.RequestInterceptor;

import java.util.Collection;

public class DefaultRequestExecutor implements RequestExecutor {

    private final HandlersRepository handlersRepository;
    private final InterceptorsRepository interceptorsRepository;

    public DefaultRequestExecutor(HandlersRepository handlersRepository,
                                  InterceptorsRepository interceptorsRepository) {
        this.handlersRepository = handlersRepository;
        this.interceptorsRepository = interceptorsRepository;
    }

    @Override
    public void executeRequest(ExecutionContext executionContext, ServerEntryPointContext context) {
        RequestHandler handler = handlersRepository.findHandler(executionContext.getRequestPath());
        callInterceptors(handler, executionContext, context);
        handler.handleRequest(executionContext);
    }

    private void callInterceptors(RequestHandler handler, RequestContext requestContext, ServerEntryPointContext context) {
        getInterceptors(handler, context).forEach(i -> i.intercept(requestContext, context));
        getGlobalInterceptors(context).forEach(i -> i.intercept(requestContext, context));
    }

    private Collection getInterceptors(RequestHandler handler, ServerEntryPointContext context) {
        return interceptorsRepository.findInterceptors(handler.getClass().getCanonicalName(), context.getClass().getCanonicalName());
    }

    private Collection getGlobalInterceptors(ServerEntryPointContext context) {
        return interceptorsRepository.findGlobalInterceptors(context.getClass().getCanonicalName());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy