2 * ============LICENSE_START====================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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====================================================
22 package org.onap.aaf.auth.rserv;
24 import java.io.IOException;
25 import java.util.List;
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;
35 import org.onap.aaf.misc.env.Env;
36 import org.onap.aaf.misc.env.TimeTaken;
37 import org.onap.aaf.misc.env.Trans;
39 public abstract class RServlet<TRANS extends Trans> implements Servlet {
40 private Routes<TRANS> routes = new Routes<TRANS>();
42 private ServletConfig config;
45 public void init(ServletConfig config) throws ServletException {
50 public ServletConfig getServletConfig() {
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);
61 public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
62 HttpServletRequest request = (HttpServletRequest)req;
63 HttpServletResponse response = (HttpServletResponse)res;
65 @SuppressWarnings("unchecked")
66 TRANS trans = (TRANS)req.getAttribute(TransFilter.TRANS_TAG);
68 response.setStatus(404); // Not Found, because it didn't go through TransFilter
73 HttpCode<TRANS,?> code=null;
74 String ct = req.getContentType();
75 TimeTaken tt = trans.start("Resolve to Code", Env.SUB);
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);
83 String method = request.getMethod();
84 trans.checkpoint("No Route matches "+ method + ' ' + request.getPathInfo());
85 response.setStatus(404); // Not Found
87 // Find best Code in Route based on "Accepts (Get) or Content-Type" (if exists)
88 code = codesetter.code();// route.getCode(trans, request, response);
94 if(route!=null && code!=null) {
95 StringBuilder sb = new StringBuilder(72);
96 sb.append(route.auditText);
98 sb.append(code.desc());
100 sb.append(", ContentType: ");
103 tt = trans.start(sb.toString(),Env.SUB);
106 code.handle(trans, request, response);
107 response.flushBuffer();
108 } catch (ServletException e) {
109 trans.error().log(e);
111 } catch (Exception e) {
112 trans.error().log(e,request.getMethod(),request.getPathInfo());
113 throw new ServletException(e);
121 public String getServletInfo() {
122 return "RServlet for Jetty";
126 public void destroy() {
129 public String applicationJSON(Class<?> cls, String version) {
130 StringBuilder sb = new StringBuilder();
131 sb.append("application/");
132 sb.append(cls.getSimpleName());
134 sb.append(";charset=utf-8");
135 sb.append(";version=");
137 return sb.toString();
140 public String applicationXML(Class<?> cls, String version) {
141 StringBuilder sb = new StringBuilder();
142 sb.append("application/");
143 sb.append(cls.getSimpleName());
145 sb.append(";charset=utf-8");
146 sb.append(";version=");
148 return sb.toString();
151 public List<RouteReport> routeReport() {
152 return routes.routeReport();