DRY out common functions between servlets H2MigrationServlet and AutoAdjustCachesServlet had two static methods in common candidate to be DRY-ed out. Introduce a new utility class HttpServletOps that allows to centralise some common utility methods to be reused across classes. Change-Id: I1a74cf972ca31f9e1b2b2cccdf1c806e17f458bb
diff --git a/src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/AutoAdjustCachesServlet.java b/src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/AutoAdjustCachesServlet.java index 47f0a4d..b217b0e 100644 --- a/src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/AutoAdjustCachesServlet.java +++ b/src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/AutoAdjustCachesServlet.java
@@ -14,8 +14,8 @@ package com.googlesource.gerrit.modules.cache.chroniclemap; -import static org.apache.http.HttpHeaders.ACCEPT; -import static org.eclipse.jgit.util.HttpSupport.TEXT_PLAIN; +import static com.googlesource.gerrit.modules.cache.chroniclemap.HttpServletOps.checkAcceptHeader; +import static com.googlesource.gerrit.modules.cache.chroniclemap.HttpServletOps.setResponse; import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.restapi.AuthException; @@ -24,8 +24,6 @@ import com.google.inject.Provider; import com.google.inject.Singleton; import java.io.IOException; -import java.io.PrintWriter; -import java.util.Arrays; import java.util.Optional; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; @@ -49,11 +47,7 @@ @Override protected void doPut(HttpServletRequest req, HttpServletResponse rsp) throws IOException { AutoAdjustCaches autoAdjustCachesEngine = autoAdjustCachesProvider.get(); - if (hasInvalidAcceptHeader(req)) { - setResponse( - rsp, - HttpServletResponse.SC_BAD_REQUEST, - "No advertised 'Accept' headers can be honoured. 'text/plain' should be provided in the request 'Accept' header."); + if (!checkAcceptHeader(req, rsp)) { return; } @@ -82,17 +76,4 @@ return; } } - - private static void setResponse(HttpServletResponse httpResponse, int statusCode, String value) - throws IOException { - httpResponse.setContentType(TEXT_PLAIN); - httpResponse.setStatus(statusCode); - PrintWriter writer = httpResponse.getWriter(); - writer.print(value); - } - - private static boolean hasInvalidAcceptHeader(HttpServletRequest req) { - return req.getHeader(ACCEPT) != null - && !Arrays.asList("text/plain", "text/*", "*/*").contains(req.getHeader(ACCEPT)); - } }
diff --git a/src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/H2MigrationServlet.java b/src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/H2MigrationServlet.java index 63cf659..f35f0ee 100644 --- a/src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/H2MigrationServlet.java +++ b/src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/H2MigrationServlet.java
@@ -17,8 +17,8 @@ import static com.googlesource.gerrit.modules.cache.chroniclemap.H2CacheCommand.H2_SUFFIX; import static com.googlesource.gerrit.modules.cache.chroniclemap.H2CacheCommand.getStats; import static com.googlesource.gerrit.modules.cache.chroniclemap.H2CacheCommand.jdbcUrl; -import static org.apache.http.HttpHeaders.ACCEPT; -import static org.eclipse.jgit.util.HttpSupport.TEXT_PLAIN; +import static com.googlesource.gerrit.modules.cache.chroniclemap.HttpServletOps.checkAcceptHeader; +import static com.googlesource.gerrit.modules.cache.chroniclemap.HttpServletOps.setResponse; import com.google.common.flogger.FluentLogger; import com.google.gerrit.entities.Account; @@ -51,14 +51,12 @@ import com.google.inject.name.Named; import java.io.File; import java.io.IOException; -import java.io.PrintWriter; import java.nio.file.Files; import java.nio.file.Path; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Timestamp; -import java.util.Arrays; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -138,11 +136,7 @@ @Override protected void doPut(HttpServletRequest req, HttpServletResponse rsp) throws IOException { - if (hasInvalidAcceptHeader(req)) { - setResponse( - rsp, - HttpServletResponse.SC_BAD_REQUEST, - "No advertised 'Accept' headers can be honoured. 'text/plain' should be provided in the request 'Accept' header."); + if (!checkAcceptHeader(req, rsp)) { return; } @@ -341,19 +335,6 @@ return typeLiteral.getRawType().getSimpleName().equals("String"); } - private void setResponse(HttpServletResponse httpResponse, int statusCode, String value) - throws IOException { - httpResponse.setContentType(TEXT_PLAIN); - httpResponse.setStatus(statusCode); - PrintWriter writer = httpResponse.getWriter(); - writer.print(value); - } - - private boolean hasInvalidAcceptHeader(HttpServletRequest req) { - return req.getHeader(ACCEPT) != null - && !Arrays.asList("text/plain", "text/*", "*/*").contains(req.getHeader(ACCEPT)); - } - private static void copyExistingCacheSettingsToConfig( Config outputConfig, ChronicleMapCacheConfig cacheConfig) { String cacheName = cacheConfig.getConfigKey();
diff --git a/src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/HttpServletOps.java b/src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/HttpServletOps.java new file mode 100644 index 0000000..dec758c --- /dev/null +++ b/src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/HttpServletOps.java
@@ -0,0 +1,49 @@ +// Copyright (C) 2021 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.googlesource.gerrit.modules.cache.chroniclemap; + +import static org.apache.http.HttpHeaders.ACCEPT; +import static org.eclipse.jgit.util.HttpSupport.TEXT_PLAIN; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Arrays; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +class HttpServletOps { + + static boolean checkAcceptHeader(HttpServletRequest req, HttpServletResponse rsp) + throws IOException { + if (req.getHeader(ACCEPT) != null + && !Arrays.asList("text/plain", "text/*", "*/*").contains(req.getHeader(ACCEPT))) { + setResponse( + rsp, + HttpServletResponse.SC_BAD_REQUEST, + "No advertised 'Accept' headers can be honoured. 'text/plain' should be provided in the request 'Accept' header."); + return false; + } + + return true; + } + + static void setResponse(HttpServletResponse httpResponse, int statusCode, String value) + throws IOException { + httpResponse.setContentType(TEXT_PLAIN); + httpResponse.setStatus(statusCode); + PrintWriter writer = httpResponse.getWriter(); + writer.print(value); + } +}