MockHttpServletResponse.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */
  20. package org.openspcoop2.protocol.modipa.utils;

  21. import java.io.IOException;
  22. import java.io.PrintWriter;
  23. import java.util.ArrayList;
  24. import java.util.Collection;
  25. import java.util.HashMap;
  26. import java.util.List;
  27. import java.util.Locale;
  28. import java.util.Map;

  29. import javax.servlet.ServletOutputStream;
  30. import javax.servlet.http.Cookie;
  31. import javax.servlet.http.HttpServletResponse;

  32. /**
  33.  * Classe per simulare una risposta servlet http
  34.  *
  35.  *
  36.  * @author Tommaso Burlon (tommaso.burlon@link.it)
  37.  * @author $Author$
  38.  * @version $Rev$, $Date$
  39.  */
  40. public class MockHttpServletResponse implements HttpServletResponse {

  41.     private String contentType;
  42.     private Long contentLength;
  43.     private Map<String, List<String>> headers = new HashMap<>();
  44.     private int status;
  45.     private Integer bufferSize = 10;
  46.     private String characterEncoding = null;
  47.     private MockServletOutputStream outputStream = new MockServletOutputStream();
  48.     private boolean committed = false;
  49.     private Locale locale = null;
  50.    
  51.     private List<Cookie> cookies = new ArrayList<>();
  52.    
  53.     @Override
  54.     public void flushBuffer() throws IOException {
  55.         this.committed = true;
  56.     }

  57.     @Override
  58.     public int getBufferSize() {
  59.         return this.bufferSize;
  60.     }

  61.     @Override
  62.     public String getCharacterEncoding() {
  63.         return this.characterEncoding;
  64.     }

  65.     @Override
  66.     public String getContentType() {
  67.         return this.contentType;
  68.     }

  69.     @Override
  70.     public Locale getLocale() {
  71.         return this.locale;
  72.     }

  73.     @Override
  74.     public ServletOutputStream getOutputStream() throws IOException {
  75.         return this.outputStream;
  76.     }

  77.     @Override
  78.     public PrintWriter getWriter() throws IOException {
  79.         return new PrintWriter(this.outputStream);
  80.     }

  81.     @Override
  82.     public boolean isCommitted() {
  83.         return this.committed;
  84.     }

  85.     @Override
  86.     public void reset() {
  87.         this.resetBuffer();
  88.         this.headers.clear();
  89.         this.status = 0;
  90.     }

  91.     @Override
  92.     public void resetBuffer() {
  93.         this.outputStream = new MockServletOutputStream();
  94.     }

  95.     @Override
  96.     public void setBufferSize(int arg0) {
  97.         this.bufferSize = arg0;
  98.     }

  99.     @Override
  100.     public void setCharacterEncoding(String arg0) {
  101.         this.characterEncoding = arg0;

  102.     }

  103.     @Override
  104.     public void setContentLength(int arg0) {
  105.         this.contentLength = Long.valueOf(arg0);

  106.     }

  107.     @Override
  108.     public void setContentLengthLong(long arg0) {
  109.         this.contentLength = arg0;

  110.     }

  111.     @Override
  112.     public void setContentType(String arg0) {
  113.         this.contentType = arg0;

  114.     }
  115.    
  116.     public Long getContentLength() {
  117.         return this.contentLength;
  118.     }

  119.     @Override
  120.     public void setLocale(Locale arg0) {
  121.         this.locale = arg0;
  122.     }

  123.     @Override
  124.     public void addCookie(Cookie arg0) {
  125.         this.cookies.add(arg0);
  126.     }

  127.     @Override
  128.     public void addDateHeader(String arg0, long arg1) {
  129.         this.headers.getOrDefault(arg0, new ArrayList<>()).add(String.valueOf(arg1));
  130.     }

  131.     @Override
  132.     public void addHeader(String arg0, String arg1) {
  133.         this.headers.getOrDefault(arg0, new ArrayList<>()).add(arg1);
  134.     }

  135.     @Override
  136.     public void addIntHeader(String arg0, int arg1) {
  137.         this.headers.getOrDefault(arg0, new ArrayList<>()).add(String.valueOf(arg1));

  138.     }

  139.     @Override
  140.     public boolean containsHeader(String arg0) {
  141.         return this.headers.containsKey(arg0);
  142.     }

  143.     @Override
  144.     public String encodeRedirectURL(String arg0) {
  145.         return arg0;
  146.     }

  147.     /**
  148.      * @deprecated
  149.      */
  150.     @Override
  151.     @SuppressWarnings("deprecation")
  152.     @Deprecated(since="3.3")
  153.     public String encodeRedirectUrl(String arg0) {
  154.         return arg0;
  155.     }

  156.     @Override
  157.     public String encodeURL(String arg0) {
  158.         return arg0;
  159.     }

  160.     /**
  161.      * @deprecated
  162.      */
  163.     @Override
  164.     @SuppressWarnings("deprecation")
  165.     @Deprecated(since="3.3")
  166.     public String encodeUrl(String arg0) {
  167.         return arg0;
  168.     }

  169.     @Override
  170.     public String getHeader(String arg0) {
  171.         return String.join(",", this.headers.getOrDefault(arg0, List.of()));
  172.     }

  173.     @Override
  174.     public Collection<String> getHeaderNames() {
  175.         return this.headers.keySet();
  176.     }

  177.     @Override
  178.     public Collection<String> getHeaders(String arg0) {
  179.         return this.headers.getOrDefault(arg0, List.of());
  180.     }

  181.     @Override
  182.     public int getStatus() {
  183.         return this.status;
  184.     }

  185.     @Override
  186.     public void sendError(int code) throws IOException {
  187.         this.status = code;
  188.     }

  189.     @Override
  190.     public void sendError(int code, String arg1) throws IOException {
  191.         this.status = code;
  192.     }

  193.     @Override
  194.     public void sendRedirect(String arg0) throws IOException {
  195.         // ignore
  196.     }

  197.     @Override
  198.     public void setDateHeader(String arg0, long arg1) {
  199.         this.headers.getOrDefault(arg0, new ArrayList<>()).clear();
  200.         this.headers.getOrDefault(arg0, new ArrayList<>()).add(String.valueOf(arg1));
  201.     }

  202.     @Override
  203.     public void setHeader(String arg0, String arg1) {
  204.         List<String> list = new ArrayList<>();
  205.         list.addAll(List.of(arg1.split(",")));
  206.         this.headers.put(arg1, list);
  207.     }

  208.     @Override
  209.     public void setIntHeader(String arg0, int arg1) {
  210.         this.headers.put(arg0, List.of(String.valueOf(arg1)));

  211.     }

  212.     @Override
  213.     public void setStatus(int arg0) {
  214.         this.status = arg0;
  215.     }

  216.     @SuppressWarnings("deprecation")
  217.     @Override
  218.     public void setStatus(int arg0, String arg1) {
  219.         this.status = arg0;
  220.     }

  221. }