Mass whitespace changes (Style Warnings)
[aaf/authz.git] / auth / auth-core / src / main / java / org / onap / aaf / auth / rserv / RServlet.java
1 /**
2  * ============LICENSE_START====================================================
3  * org.onap.aaf
4  * ===========================================================================
5  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
6  * ===========================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END====================================================
19  *
20  */
21
22 package org.onap.aaf.auth.rserv;
23
24 import java.io.IOException;
25 import java.util.List;
26
27 import javax.servlet.Servlet;
28 import javax.servlet.ServletConfig;
29 import javax.servlet.ServletException;
30 import javax.servlet.ServletRequest;
31 import javax.servlet.ServletResponse;
32 import javax.servlet.http.HttpServletRequest;
33 import javax.servlet.http.HttpServletResponse;
34
35 import org.onap.aaf.misc.env.Env;
36 import org.onap.aaf.misc.env.TimeTaken;
37 import org.onap.aaf.misc.env.Trans;
38
39 public abstract class RServlet<TRANS extends Trans> implements Servlet {
40     private Routes<TRANS> routes = new Routes<TRANS>();
41
42     private ServletConfig config;
43
44     @Override
45     public void init(ServletConfig config) throws ServletException {
46         this.config = config;
47     }
48
49     @Override
50     public ServletConfig getServletConfig() {
51         return config;
52     }
53
54     public void route(Env env, HttpMethods meth, String path, HttpCode<TRANS, ?> code, String ... moreTypes) {
55         Route<TRANS> r = routes.findOrCreate(meth,path);
56         r.add(code,moreTypes);
57         env.init().log(r.report(code),code);
58     }
59     
60     @Override
61     public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
62         HttpServletRequest request = (HttpServletRequest)req;
63         HttpServletResponse response = (HttpServletResponse)res;
64         
65         @SuppressWarnings("unchecked")
66         TRANS trans = (TRANS)req.getAttribute(TransFilter.TRANS_TAG);
67         if (trans==null) {
68             response.setStatus(404); // Not Found, because it didn't go through TransFilter
69             return;
70         }
71         
72         Route<TRANS> route;
73         HttpCode<TRANS,?> code=null;
74         String ct = req.getContentType();
75         TimeTaken tt = trans.start("Resolve to Code", Env.SUB);
76         try {
77             // routes have multiple code sets.  This object picks the best code set
78             // based on Accept or Content-Type
79             CodeSetter<TRANS> codesetter = new CodeSetter<TRANS>(trans,request,response);
80             // Find declared route
81             route = routes.derive(request, codesetter);
82             if (route==null) {
83                 String method = request.getMethod();
84                 trans.checkpoint("No Route matches "+ method + ' ' + request.getPathInfo());
85                 response.setStatus(404); // Not Found
86             } else {
87                 // Find best Code in Route based on "Accepts (Get) or Content-Type" (if exists)
88                 code = codesetter.code();// route.getCode(trans, request, response);
89             }
90         } finally {
91             tt.done();
92         }
93         
94         if (route!=null && code!=null) {
95             StringBuilder sb = new StringBuilder(72);
96             sb.append(route.auditText);
97             sb.append(',');
98             sb.append(code.desc());
99             if (ct!=null) {
100                 sb.append(", ContentType: ");
101                 sb.append(ct);
102             }
103             tt = trans.start(sb.toString(),Env.SUB);
104             try {
105                 /*obj = */
106                 code.handle(trans, request, response);
107                 response.flushBuffer();
108             } catch (ServletException e) {
109                 trans.error().log(e);
110                 throw e;
111             } catch (Exception e) {
112                 trans.error().log(e,request.getMethod(),request.getPathInfo());
113                 throw new ServletException(e);
114             } finally {
115                 tt.done();
116             }
117         }
118     }
119     
120     @Override
121     public String getServletInfo() {
122         return "RServlet for Jetty";
123     }
124
125     @Override
126     public void destroy() {
127     }
128
129     public String applicationJSON(Class<?> cls, String version) {
130         StringBuilder sb = new StringBuilder();
131         sb.append("application/");
132         sb.append(cls.getSimpleName());
133         sb.append("+json");
134         sb.append(";charset=utf-8");
135         sb.append(";version=");
136         sb.append(version);
137         return sb.toString();
138     }
139
140     public String applicationXML(Class<?> cls, String version) {
141         StringBuilder sb = new StringBuilder();
142         sb.append("application/");
143         sb.append(cls.getSimpleName());
144         sb.append("+xml");
145         sb.append(";charset=utf-8");
146         sb.append(";version=");
147         sb.append(version);
148         return sb.toString();
149     }
150
151     public List<RouteReport> routeReport() {
152         return routes.routeReport();
153     }
154 }