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

com.dexmatech.styx.core.ApiPipeline Maven / Gradle / Ivy

There is a newer version: 1.0.22
Show newest version
package com.dexmatech.styx.core;

import com.dexmatech.styx.core.http.HttpRequest;
import com.dexmatech.styx.core.http.HttpResponse;
import com.dexmatech.styx.core.pipeline.HttpRequestReplyPipeline;
import com.dexmatech.styx.core.pipeline.routable.PipelineRequestRouterDefaultImpl;
import com.dexmatech.styx.core.pipeline.routable.RoutablePipeline;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;

/**
 * Created by aortiz on 9/08/16.
 */
@Slf4j
@Getter
@AllArgsConstructor(access = AccessLevel.PACKAGE)
public abstract class ApiPipeline {

	public static SinglePipelineBuilder singlePipeline() {
		return new SinglePipelineBuilder();
	}

	public static MultiPipelineBuilder multiPipeline() {
		return new MultiPipelineBuilder();
	}

	public static class SinglePipelineBuilder {

		private HttpRequestReplyPipeline pipeline;

		public SinglePipelineBuilder using(HttpRequestReplyPipeline pipeline) {
			this.pipeline = pipeline;
			return this;
		}

		public ApiPipeline build() {
			ApiSinglePipeline apiSinglePipeline = new ApiSinglePipeline(pipeline);
			log.info("[PIPELINE] Single pipeline handling all incoming requests was successfully created");
			return apiSinglePipeline;
		}
	}

	public static class MultiPipelineBuilder {

		private List routablePipelines;

		public MultiPipelineBuilder addPipeline(RoutablePipeline pipeline) {
			if (this.routablePipelines == null) {
				this.routablePipelines = new ArrayList<>();
			}
			this.routablePipelines.add(pipeline);
			return this;
		}

		public ApiPipeline build() {
			ApiMultiPipeline apiMultiPipeline = new ApiMultiPipeline(PipelineRequestRouterDefaultImpl.from(routablePipelines));
			routablePipelines.forEach(
					p -> log.info(String.format("[PIPELINE] '%s' all incoming requests was successfully created", p))
			);
			return apiMultiPipeline;
		}
	}

	public abstract CompletableFuture reply(final HttpRequest request);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy