package org.webpieces.webserver.impl; import java.util.List; import java.util.concurrent.CompletableFuture; import org.webpieces.ctx.api.Current; import org.webpieces.ctx.api.OverwritePlatformResponse; import org.webpieces.data.api.DataWrapper; import org.webpieces.httpcommon.api.RequestId; import org.webpieces.httpcommon.api.ResponseId; import org.webpieces.httpcommon.api.ResponseSender; import org.webpieces.httpparser.api.dto.HttpRequest; import org.webpieces.httpparser.api.dto.HttpResponse; public class ResponseOverrideSender { private ResponseSender responseSender; public ResponseOverrideSender(ResponseSender responseSender) { this.responseSender = responseSender; } @Override public String toString() { return "ResponseOverrideSender [responseSender=" + responseSender + "]"; } public CompletableFuture<ResponseId> sendResponse(HttpResponse response, HttpRequest request, RequestId requestId, boolean isComplete) { //in some exceptional cases like incoming cookies failing to parse, there will be no context HttpResponse finalResp = response; if(Current.isContextSet()) { List<OverwritePlatformResponse> callbacks = Current.getContext().getCallbacks(); for(OverwritePlatformResponse callback : callbacks) { finalResp = (HttpResponse)callback.modifyOrReplace(finalResp); } } return responseSender.sendResponse(finalResp, request, requestId, isComplete); } public CompletableFuture<Void> close() { return responseSender.close(); } public CompletableFuture<Void> sendData(DataWrapper data, ResponseId responseId, boolean isComplete) { return responseSender.sendData(data, responseId, isComplete); } }