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

Commit

Permalink
Move compatibility layer to separate package (#10)
Browse files Browse the repository at this point in the history
  • Loading branch information
basil committed Jul 9, 2024
1 parent fc1f8d7 commit 3a2de87
Show file tree
Hide file tree
Showing 75 changed files with 5,584 additions and 5,403 deletions.
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

0 comments on commit 3a2de87

Please sign in to comment.