Skip to content
This repository has been archived by the owner on Jul 17, 2024. It is now read-only.

Move compatibility layer to separate package #10

Merged
merged 1 commit into from
Jul 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
192 changes: 192 additions & 0 deletions src/main/java/io/jenkins/servlet/AsyncContextWrapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
package io.jenkins.servlet;

import io.jenkins.servlet.http.HttpServletRequestWrapper;
import io.jenkins.servlet.http.HttpServletResponseWrapper;
import java.util.Objects;
import javax.servlet.AsyncContext;
import javax.servlet.AsyncListener;
import javax.servlet.ServletContext;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AsyncContextWrapper {
public static jakarta.servlet.AsyncContext toJakartaAsyncContext(AsyncContext from) {
Objects.requireNonNull(from);
return new jakarta.servlet.AsyncContext() {
@Override
public jakarta.servlet.ServletRequest getRequest() {
ServletRequest request = from.getRequest();
return request instanceof HttpServletRequest
? HttpServletRequestWrapper.toJakartaHttpServletRequest(((HttpServletRequest) request))
: io.jenkins.servlet.ServletRequestWrapper.toJakartaServletRequest(request);
}

@Override
public jakarta.servlet.ServletResponse getResponse() {
ServletResponse response = from.getResponse();
return response instanceof HttpServletResponse
? HttpServletResponseWrapper.toJakartaHttpServletResponse(((HttpServletResponse) response))
: ServletResponseWrapper.toJakartaServletResponse(response);
}

@Override
public boolean hasOriginalRequestAndResponse() {
return from.hasOriginalRequestAndResponse();
}

@Override
public void dispatch() {
from.dispatch();
}

@Override
public void dispatch(String path) {
from.dispatch(path);
}

@Override
public void dispatch(jakarta.servlet.ServletContext context, String path) {
from.dispatch(ServletContextWrapper.fromJakartServletContext(context), path);
}

@Override
public void complete() {
from.complete();
}

@Override
public void start(Runnable run) {
from.start(run);
}

@Override
public void addListener(jakarta.servlet.AsyncListener listener) {
from.addListener(AsyncListenerWrapper.fromJakartaAsyncListener(listener));
}

@Override
public void addListener(
jakarta.servlet.AsyncListener listener,
jakarta.servlet.ServletRequest servletRequest,
jakarta.servlet.ServletResponse servletResponse) {
from.addListener(
AsyncListenerWrapper.fromJakartaAsyncListener(listener),
servletRequest instanceof jakarta.servlet.http.HttpServletRequest
? HttpServletRequestWrapper.fromJakartaHttpServletRequest(
(jakarta.servlet.http.HttpServletRequest) servletRequest)
: io.jenkins.servlet.ServletRequestWrapper.fromJakartaServletRequest(servletRequest),
servletResponse instanceof jakarta.servlet.http.HttpServletResponse
? HttpServletResponseWrapper.fromJakartaHttpServletResponse(
(jakarta.servlet.http.HttpServletResponse) servletResponse)
: ServletResponseWrapper.fromJakartaServletResponse(servletResponse));
}

@Override
public <T extends jakarta.servlet.AsyncListener> T createListener(Class<T> clazz) {
// TODO implement this
throw new UnsupportedOperationException();
}

@Override
public void setTimeout(long timeout) {
from.setTimeout(timeout);
}

@Override
public long getTimeout() {
return from.getTimeout();
}
};
}

public static AsyncContext fromJakartaAsyncContext(jakarta.servlet.AsyncContext from) {
Objects.requireNonNull(from);
return new AsyncContext() {
@Override
public ServletRequest getRequest() {
jakarta.servlet.ServletRequest request = from.getRequest();
return request instanceof jakarta.servlet.http.HttpServletRequest
? HttpServletRequestWrapper.fromJakartaHttpServletRequest(
(jakarta.servlet.http.HttpServletRequest) request)
: ServletRequestWrapper.fromJakartaServletRequest(request);
}

@Override
public ServletResponse getResponse() {
jakarta.servlet.ServletResponse response = from.getResponse();
return response instanceof jakarta.servlet.http.HttpServletResponse
? HttpServletResponseWrapper.fromJakartaHttpServletResponse(
(jakarta.servlet.http.HttpServletResponse) response)
: ServletResponseWrapper.fromJakartaServletResponse(response);
}

@Override
public boolean hasOriginalRequestAndResponse() {
return from.hasOriginalRequestAndResponse();
}

@Override
public void dispatch() {
from.dispatch();
}

@Override
public void dispatch(String path) {
from.dispatch(path);
}

@Override
public void dispatch(ServletContext context, String path) {
from.dispatch(ServletContextWrapper.toJakartaServletContext(context), path);
}

@Override
public void complete() {
from.complete();
}

@Override
public void start(Runnable run) {
from.start(run);
}

@Override
public void addListener(AsyncListener listener) {
from.addListener(AsyncListenerWrapper.toJakartaAsyncListener(listener));
}

@Override
public void addListener(
AsyncListener listener, ServletRequest servletRequest, ServletResponse servletResponse) {
from.addListener(
AsyncListenerWrapper.toJakartaAsyncListener(listener),
servletRequest instanceof HttpServletRequest
? HttpServletRequestWrapper.toJakartaHttpServletRequest(
((HttpServletRequest) servletRequest))
: io.jenkins.servlet.ServletRequestWrapper.toJakartaServletRequest(servletRequest),
servletResponse instanceof HttpServletResponse
? HttpServletResponseWrapper.toJakartaHttpServletResponse(
((HttpServletResponse) servletResponse))
: ServletResponseWrapper.toJakartaServletResponse(servletResponse));
}

@Override
public <T extends AsyncListener> T createListener(Class<T> clazz) {
// TODO implement this
throw new UnsupportedOperationException();
}

@Override
public void setTimeout(long timeout) {
from.setTimeout(timeout);
}

@Override
public long getTimeout() {
return from.getTimeout();
}
};
}
}
24 changes: 24 additions & 0 deletions src/main/java/io/jenkins/servlet/AsyncEventWrapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package io.jenkins.servlet;

import java.util.Objects;
import javax.servlet.AsyncEvent;

public class AsyncEventWrapper {
public static jakarta.servlet.AsyncEvent toJakartaServletHttpAsyncEvent(AsyncEvent from) {
Objects.requireNonNull(from);
return new jakarta.servlet.AsyncEvent(
AsyncContextWrapper.toJakartaAsyncContext(from.getAsyncContext()),
io.jenkins.servlet.ServletRequestWrapper.toJakartaServletRequest(from.getSuppliedRequest()),
ServletResponseWrapper.toJakartaServletResponse(from.getSuppliedResponse()),
from.getThrowable());
}

public static AsyncEvent fromJakartaServletHttpAsyncEvent(jakarta.servlet.AsyncEvent from) {
Objects.requireNonNull(from);
return new AsyncEvent(
AsyncContextWrapper.fromJakartaAsyncContext(from.getAsyncContext()),
ServletRequestWrapper.fromJakartaServletRequest(from.getSuppliedRequest()),
ServletResponseWrapper.fromJakartaServletResponse(from.getSuppliedResponse()),
from.getThrowable());
}
}
60 changes: 60 additions & 0 deletions src/main/java/io/jenkins/servlet/AsyncListenerWrapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package io.jenkins.servlet;

import java.io.IOException;
import java.util.Objects;
import javax.servlet.AsyncEvent;
import javax.servlet.AsyncListener;

public class AsyncListenerWrapper {
public static jakarta.servlet.AsyncListener toJakartaAsyncListener(AsyncListener from) {
Objects.requireNonNull(from);
return new jakarta.servlet.AsyncListener() {

@Override
public void onComplete(jakarta.servlet.AsyncEvent event) throws IOException {
from.onComplete(AsyncEventWrapper.fromJakartaServletHttpAsyncEvent(event));
}

@Override
public void onTimeout(jakarta.servlet.AsyncEvent event) throws IOException {
from.onTimeout(AsyncEventWrapper.fromJakartaServletHttpAsyncEvent(event));
}

@Override
public void onError(jakarta.servlet.AsyncEvent event) throws IOException {
from.onError(AsyncEventWrapper.fromJakartaServletHttpAsyncEvent(event));
}

@Override
public void onStartAsync(jakarta.servlet.AsyncEvent event) throws IOException {
from.onStartAsync(AsyncEventWrapper.fromJakartaServletHttpAsyncEvent(event));
}
};
}

public static AsyncListener fromJakartaAsyncListener(jakarta.servlet.AsyncListener from) {
Objects.requireNonNull(from);
return new AsyncListener() {

@Override
public void onComplete(AsyncEvent event) throws IOException {
from.onComplete(AsyncEventWrapper.toJakartaServletHttpAsyncEvent(event));
}

@Override
public void onTimeout(AsyncEvent event) throws IOException {
from.onTimeout(AsyncEventWrapper.toJakartaServletHttpAsyncEvent(event));
}

@Override
public void onError(AsyncEvent event) throws IOException {
from.onError(AsyncEventWrapper.toJakartaServletHttpAsyncEvent(event));
}

@Override
public void onStartAsync(AsyncEvent event) throws IOException {
from.onStartAsync(AsyncEventWrapper.toJakartaServletHttpAsyncEvent(event));
}
};
}
}
42 changes: 42 additions & 0 deletions src/main/java/io/jenkins/servlet/DispatcherTypeWrapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package io.jenkins.servlet;

import java.util.Objects;
import javax.servlet.DispatcherType;

public class DispatcherTypeWrapper {
public static jakarta.servlet.DispatcherType toJakartaDispatcherType(DispatcherType from) {
Objects.requireNonNull(from);
switch (from) {
case FORWARD:
return jakarta.servlet.DispatcherType.FORWARD;
case INCLUDE:
return jakarta.servlet.DispatcherType.INCLUDE;
case REQUEST:
return jakarta.servlet.DispatcherType.REQUEST;
case ASYNC:
return jakarta.servlet.DispatcherType.ASYNC;
case ERROR:
return jakarta.servlet.DispatcherType.ERROR;
default:
throw new IllegalArgumentException("Unknown DispatcherType: " + from);
}
}

public static DispatcherType fromJakartaDispatcherType(jakarta.servlet.DispatcherType from) {
Objects.requireNonNull(from);
switch (from) {
case FORWARD:
return DispatcherType.FORWARD;
case INCLUDE:
return DispatcherType.INCLUDE;
case REQUEST:
return DispatcherType.REQUEST;
case ASYNC:
return DispatcherType.ASYNC;
case ERROR:
return DispatcherType.ERROR;
default:
throw new IllegalArgumentException("Unknown DispatcherType: " + from);
}
}
}
67 changes: 67 additions & 0 deletions src/main/java/io/jenkins/servlet/FilterChainWrapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package io.jenkins.servlet;

import io.jenkins.servlet.http.HttpServletRequestWrapper;
import io.jenkins.servlet.http.HttpServletResponseWrapper;
import java.io.IOException;
import java.util.Objects;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FilterChainWrapper {
public static jakarta.servlet.FilterChain toJakartaFilterChain(FilterChain from) {
Objects.requireNonNull(from);
return new jakarta.servlet.FilterChain() {
@Override
public void doFilter(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response)
throws IOException, jakarta.servlet.ServletException {
try {
if (request instanceof jakarta.servlet.http.HttpServletRequest
&& response instanceof jakarta.servlet.http.HttpServletResponse) {
jakarta.servlet.http.HttpServletRequest httpRequest =
(jakarta.servlet.http.HttpServletRequest) request;
jakarta.servlet.http.HttpServletResponse httpResponse =
(jakarta.servlet.http.HttpServletResponse) response;
from.doFilter(
HttpServletRequestWrapper.fromJakartaHttpServletRequest(httpRequest),
HttpServletResponseWrapper.fromJakartaHttpServletResponse(httpResponse));
} else {
from.doFilter(
ServletRequestWrapper.fromJakartaServletRequest(request),
ServletResponseWrapper.fromJakartaServletResponse(response));
}
} catch (ServletException e) {
throw ServletExceptionWrapper.toJakartaServletException(e);
}
}
};
}

public static FilterChain fromJakartaFilterChain(jakarta.servlet.FilterChain from) {
Objects.requireNonNull(from);
return new FilterChain() {
@Override
public void doFilter(ServletRequest request, ServletResponse response)
throws IOException, ServletException {
try {
if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
from.doFilter(
HttpServletRequestWrapper.toJakartaHttpServletRequest(httpRequest),
HttpServletResponseWrapper.toJakartaHttpServletResponse(httpResponse));
} else {
from.doFilter(
io.jenkins.servlet.ServletRequestWrapper.toJakartaServletRequest(request),
ServletResponseWrapper.toJakartaServletResponse(response));
}
} catch (jakarta.servlet.ServletException e) {
throw ServletExceptionWrapper.fromJakartaServletException(e);
}
}
};
}
}
Loading