1 /*******************************************************************************
2 * ============LICENSE_START==================================================
4 * * ===========================================================================
5 * * Copyright © 2017 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====================================================
20 * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22 ******************************************************************************/
25 package org.onap.dmaap.datarouter.provisioning;
27 import static org.onap.dmaap.datarouter.provisioning.utils.HttpServletUtils.sendResponseError;
29 import java.io.IOException;
30 import java.io.InvalidObjectException;
31 import javax.servlet.http.HttpServletRequest;
32 import javax.servlet.http.HttpServletResponse;
33 import org.json.JSONObject;
35 import org.onap.dmaap.datarouter.provisioning.beans.EventLogRecord;
36 import org.onap.dmaap.datarouter.provisioning.beans.Group;
41 * This servlet handles provisioning for the <groups> which is generated by the provisioning
42 * server to handle the creation and inspection of groups for FEEDS and SUBSCRIPTIONS.
44 * @author Vikram Singh
46 * @version $Id: Group.java,v 1.0 2016/07/19
48 @SuppressWarnings("serial")
49 public class GroupServlet extends ProxyServlet {
51 public static final String MISSING_HEADER_MESSAGE = "Missing " + BEHALF_HEADER + " header.";
54 * DELETE on the <GRUPS> -- not supported.
57 public void doDelete(HttpServletRequest req, HttpServletResponse resp) {
58 String message = "DELETE not allowed for the GROUPS.";
59 EventLogRecord elr = new EventLogRecord(req);
60 elr.setMessage(message);
61 elr.setResult(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
62 eventlogger.error(elr.toString());
63 sendResponseError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, message, eventlogger);
67 * GET on the the list of groups to a feed/sub.
68 * See the <i>Groups Collection Query</i> section in the <b>Provisioning API</b>
69 * document for details on how this method should be invoked.
72 public void doGet(HttpServletRequest req, HttpServletResponse resp) {
73 EventLogRecord elr = new EventLogRecord(req);
74 String message = isAuthorizedForProvisioning(req);
75 if (message != null) {
76 elr.setMessage(message);
77 elr.setResult(HttpServletResponse.SC_FORBIDDEN);
78 eventlogger.error(elr.toString());
79 sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger);
82 if (isProxyServer()) {
83 super.doGet(req, resp);
86 String bhdr = req.getHeader(BEHALF_HEADER);
88 elr.setMessage(MISSING_HEADER_MESSAGE);
89 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
90 eventlogger.error(elr.toString());
91 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, MISSING_HEADER_MESSAGE, eventlogger);
95 int groupid = getIdFromPath(req);
97 message = "Missing or bad group number.";
98 elr.setMessage(message);
99 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
100 eventlogger.error(elr.toString());
101 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, message, eventlogger);
105 Group gup = Group.getGroupById(groupid);
107 elr.setResult(HttpServletResponse.SC_OK);
108 eventlogger.info(elr.toString());
109 resp.setStatus(HttpServletResponse.SC_OK);
110 resp.setContentType(GROUPFULL_CONTENT_TYPE);
112 resp.getOutputStream().print(gup.asJSONObject().toString());
113 } catch (IOException ioe) {
114 eventlogger.error("PROV0121 GroupServlet.doGet: " + ioe.getMessage(), ioe);
120 * PUT on the <GROUPS> -- not supported.
123 public void doPut(HttpServletRequest req, HttpServletResponse resp) {
124 EventLogRecord elr = new EventLogRecord(req);
125 String message = isAuthorizedForProvisioning(req);
126 if (message != null) {
127 elr.setMessage(message);
128 elr.setResult(HttpServletResponse.SC_FORBIDDEN);
129 eventlogger.error(elr.toString());
130 sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger);
133 if (isProxyServer()) {
134 super.doPut(req, resp);
137 String bhdr = req.getHeader(BEHALF_HEADER);
139 elr.setMessage(MISSING_HEADER_MESSAGE);
140 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
141 eventlogger.error(elr.toString());
142 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, MISSING_HEADER_MESSAGE, eventlogger);
145 int groupid = getIdFromPath(req);
147 message = "Missing or bad groupid.";
148 elr.setMessage(message);
149 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
150 eventlogger.error(elr.toString());
151 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, message, eventlogger);
154 Group oldgup = Group.getGroupById(groupid);
155 if (oldgup == null) {
156 message = "Missing or bad group number.";
157 elr.setMessage(message);
158 elr.setResult(HttpServletResponse.SC_NOT_FOUND);
159 eventlogger.error(elr.toString());
160 sendResponseError(resp, HttpServletResponse.SC_NOT_FOUND, message, eventlogger);
164 // check content type is SUB_CONTENT_TYPE, version 1.0
165 ContentHeader ch = getContentHeader(req);
166 String ver = ch.getAttribute("version");
167 if (!ch.getType().equals(GROUP_BASECONTENT_TYPE) || !("1.0".equals(ver) || "2.0".equals(ver))) {
168 message = "Incorrect content-type";
169 elr.setMessage(message);
170 elr.setResult(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);
171 eventlogger.error(elr.toString());
172 sendResponseError(resp, HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE, message, eventlogger);
175 JSONObject jo = getJSONfromInput(req);
178 elr.setMessage(message);
179 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
180 eventlogger.error(elr.toString());
181 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, message, eventlogger);
184 if (intlogger.isDebugEnabled()) {
185 intlogger.debug(jo.toString());
190 } catch (InvalidObjectException e) {
191 message = e.getMessage();
192 elr.setMessage(message);
193 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
194 eventlogger.error(elr.toString(), e);
195 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, message, eventlogger);
198 gup.setGroupid(oldgup.getGroupid());
199 Group gb2 = Group.getGroupMatching(gup, oldgup.getGroupid());
201 eventlogger.warn("PROV0011 Creating a duplicate Group: " + gup.getName());
202 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
203 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST,"Duplicate Group:" + gup.getName(), eventlogger);
207 // Update Groups table entries
210 elr.setResult(HttpServletResponse.SC_OK);
211 eventlogger.info(elr.toString());
212 resp.setStatus(HttpServletResponse.SC_OK);
213 resp.setContentType(GROUPFULL_CONTENT_TYPE);
215 resp.getOutputStream().print(gup.asJSONObject().toString());
216 } catch (IOException ioe) {
217 eventlogger.error("PROV0122 GroupServlet.doPut: " + ioe.getMessage(), ioe);
219 provisioningDataChanged();
221 // Something went wrong with the UPDATE
222 elr.setResult(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
223 eventlogger.error(elr.toString());
224 sendResponseError(resp, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, DB_PROBLEM_MSG, eventlogger);
229 * POST on the <groups> -- create a new GROUPS to a feed.
230 * See the <i>Creating a GROUPS</i> section in the <b>Provisioning API</b>
231 * document for details on how this method should be invoked.
234 public void doPost(HttpServletRequest req, HttpServletResponse resp) {
235 EventLogRecord elr = new EventLogRecord(req);
236 String message = isAuthorizedForProvisioning(req);
237 if (message != null) {
238 elr.setMessage(message);
239 elr.setResult(HttpServletResponse.SC_FORBIDDEN);
240 eventlogger.error(elr.toString());
241 sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger);
244 if (isProxyServer()) {
245 super.doPost(req, resp);
248 String bhdr = req.getHeader(BEHALF_HEADER);
250 elr.setMessage(MISSING_HEADER_MESSAGE);
251 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
252 eventlogger.error(elr.toString());
253 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, MISSING_HEADER_MESSAGE, eventlogger);
257 // check content type is SUB_CONTENT_TYPE, version 1.0
258 ContentHeader ch = getContentHeader(req);
259 String ver = ch.getAttribute("version");
260 if (!ch.getType().equals(GROUP_BASECONTENT_TYPE) || !(ver.equals("1.0") || ver.equals("2.0"))) {
261 intlogger.debug("Content-type is: " + req.getHeader("Content-Type"));
262 message = "Incorrect content-type";
263 elr.setMessage(message);
264 elr.setResult(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);
265 eventlogger.error(elr.toString());
266 sendResponseError(resp, HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE, message, eventlogger);
269 JSONObject jo = getJSONfromInput(req);
272 elr.setMessage(message);
273 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
274 eventlogger.error(elr.toString());
275 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, message, eventlogger);
278 if (intlogger.isDebugEnabled()) {
279 intlogger.debug(jo.toString());
285 } catch (InvalidObjectException e) {
286 message = e.getMessage();
287 elr.setMessage(message);
288 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
289 eventlogger.error(elr.toString(), e);
290 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, message, eventlogger);
294 // Check if this group already exists; not an error (yet), just warn
295 Group gb2 = Group.getGroupMatching(gup);
297 eventlogger.warn("PROV0011 Creating a duplicate Group: " + gup.getName());
298 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
299 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST,"Duplicate Group:" + gup.getName(), eventlogger);
303 // Create GROUPS table entries
306 elr.setResult(HttpServletResponse.SC_CREATED);
307 eventlogger.info(elr.toString());
308 resp.setStatus(HttpServletResponse.SC_CREATED);
309 resp.setContentType(GROUPFULL_CONTENT_TYPE);
311 resp.getOutputStream().print(gup.asJSONObject().toString());
312 } catch (IOException ioe) {
313 eventlogger.error("PROV0122 GroupServlet.doPost: " + ioe.getMessage(), ioe);
315 provisioningDataChanged();
317 // Something went wrong with the INSERT
318 elr.setResult(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
319 eventlogger.error(elr.toString());
320 sendResponseError(resp, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, DB_PROBLEM_MSG, eventlogger);