41c71a45b84ab81f31fbca5867b1da20447fec00
[ccsdk/apps.git] / services / src / main / java / org / onap / ccsdk / apps / filters / ContentTypeFilter.java
1 package org.onap.ccsdk.apps.filters;
2
3 import java.io.IOException;
4 import java.util.Collections;
5 import java.util.Enumeration;
6 import java.util.LinkedList;
7 import java.util.List;
8
9 import javax.servlet.Filter;
10 import javax.servlet.FilterChain;
11 import javax.servlet.ServletException;
12 import javax.servlet.ServletRequest;
13 import javax.servlet.ServletResponse;
14 import javax.servlet.http.HttpServletRequest;
15 import javax.servlet.http.HttpServletRequestWrapper;
16
17 import org.springframework.core.Ordered;
18 import org.springframework.core.annotation.Order;
19 import org.springframework.stereotype.Component;
20
21 @Component
22 @Order(Ordered.HIGHEST_PRECEDENCE)
23 public class ContentTypeFilter implements Filter {
24
25     String DEFAULT_CONTENT_TYPE = "application/json";
26
27     @Override
28     public void doFilter(ServletRequest httpReq, ServletResponse httpResp, FilterChain chain)
29             throws IOException, ServletException {
30                 String defaultContentType = System.getProperty("ccsdk.defaults.content-type", DEFAULT_CONTENT_TYPE);
31
32                 chain.doFilter(new DefaultContentTypeHttpRequest((HttpServletRequest) httpReq, defaultContentType), httpResp);
33
34     }
35
36     private class DefaultContentTypeHttpRequest extends HttpServletRequestWrapper {
37         HttpServletRequest httpRequest;
38         String defaultContentType;
39         boolean hasContentType;
40
41         List<String> headerNames; 
42
43         public DefaultContentTypeHttpRequest(HttpServletRequest httpRequest, String defaultContentType) {
44             super(httpRequest);
45             this.httpRequest = httpRequest;
46             this.defaultContentType = defaultContentType;
47             headerNames = new LinkedList<String>();
48             Enumeration<String> headerNameEnum = httpRequest.getHeaderNames();
49             hasContentType = false;
50             while (headerNameEnum.hasMoreElements()) {
51                 String curHeaderName = headerNameEnum.nextElement();
52                 if ("Content-Type".equalsIgnoreCase(curHeaderName)) {
53                     hasContentType = true;
54                 }
55                 headerNames.add(curHeaderName);
56             }
57             if (!hasContentType) {
58                 headerNames.add("Content-Type");
59             }
60
61         }
62
63         @Override
64         public String getHeader(String name) {
65             if (name.equalsIgnoreCase("Content-Type")) {
66                 return getContentType();
67             } else {
68                 return super.getHeader(name);
69             }
70         }
71
72         @Override
73         public Enumeration<String> getHeaderNames() {
74             return(Collections.enumeration(headerNames));
75         }
76
77         @Override
78         public String getContentType() {
79             if (hasContentType) {
80                 return super.getContentType();
81             } else {
82                 return defaultContentType;
83             }
84         }
85         
86     }
87     
88     
89 }