2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright (C) 2018 IBM.
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.onap.ccsdk.apps.ms.neng.core.service.rs;
25 import java.util.HashMap;
27 import java.util.logging.Logger;
28 import javax.validation.Valid;
29 import javax.ws.rs.core.Response;
30 import org.onap.ccsdk.apps.ms.neng.core.exceptions.NengException;
31 import org.onap.ccsdk.apps.ms.neng.core.resource.model.HelloWorld;
32 import org.onap.ccsdk.apps.ms.neng.core.resource.model.NameGenRequest;
33 import org.onap.ccsdk.apps.ms.neng.core.resource.model.NameGenResponse;
34 import org.onap.ccsdk.apps.ms.neng.core.service.SpringService;
35 import org.onap.ccsdk.apps.ms.neng.persistence.entity.PolicyDetails;
36 import org.springframework.beans.factory.annotation.Autowired;
37 import org.springframework.stereotype.Component;
38 import org.springframework.transaction.CannotCreateTransactionException;
39 import org.springframework.web.bind.annotation.RequestBody;
42 * Implementation of the REST-style interface/API to this micro-service.
45 public class RestServiceImpl implements RestService {
47 private static final Logger log = Logger.getLogger(RestServiceImpl.class.getName());
48 private static final String INTERNAL_ERROR_MSG = "Internal error occurred while processing the request: ";
49 private static final String JDBC_CONNECTION_ERROR_MSG = "Error during JDBC transaction creation: ";
50 private static final String ERROR="error";
51 private static final String ERROR_500="err-0500";
52 private static final int MAX_RETRY = 5;
53 private int retry = 0;
55 @Autowired SpringService service;
58 * Heart-beat/ping API.
61 public Response getQuickHello(String name) {
63 HelloWorld hw = service.getQuickHello(name);
64 return Response.ok().entity(hw).build();
68 * Name generation API.
71 public Response generateNetworkElementName(@RequestBody @Valid NameGenRequest request) {
72 log.info("Received request: " + request.toString());
74 NameGenResponse resp = service.generateOrUpdateName(request);
75 return buildResponse(resp);
76 } catch (NengException e) {
77 log.warning(e.getMessage());
78 return handleException("NELGEN-0003", e.getMessage());
79 } catch (CannotCreateTransactionException e) {
80 log.warning(e.getMessage());
81 return handleJDBCConnectionException(request, e);
82 } catch (Exception e) {
83 log.warning(e.getMessage());
84 return handleException(ERROR_500, INTERNAL_ERROR_MSG);
92 public Response releaseNetworkElementName(NameGenRequest request) {
94 Map<String, Object> response = new HashMap<>();
96 resp = service.releaseNetworkElementName(request);
97 return buildResponse(resp);
98 } catch (NengException e) {
99 log.warning(e.getMessage());
100 response.put(ERROR, buildErrorResponse("NELGEN-0002", e.getMessage()));
101 return buildErrorResponse(response);
102 } catch (Exception e) {
103 log.warning(e.getMessage());
104 response.put(ERROR, buildErrorResponse(ERROR_500, INTERNAL_ERROR_MSG));
105 return buildErrorResponse(response);
110 * API to return naming policy cached in this micro-service.
113 public Response getPolicyResponse(String policyName) throws Exception {
114 log.info("get-policy: " + policyName);
116 PolicyDetails policyDetails = service.getPolicyDetails(policyName);
117 return Response.ok().entity(policyDetails.getPolicyResponse()).build();
121 * API to add a naming policy to the database cache in this micro-service.
124 public Response addPolicyToDb(Object request) throws Exception {
125 Map<String, Object> response = new HashMap<>();
127 service.addPolicy(request);
128 response.put("status", "Policy added successfully");
129 return buildResponse(response);
130 } catch (Exception e) {
131 log.warning(e.getMessage());
132 response.put(ERROR, buildErrorResponse(ERROR_500, e.getMessage()));
133 return buildErrorResponse(response);
137 private Response handleException(String statusCode, String statusMessage) {
138 Map<String, Object> response = new HashMap<>();
139 response.put(ERROR, buildErrorResponse(statusCode, statusMessage));
141 return buildErrorResponse(response);
144 private Response handleJDBCConnectionException(NameGenRequest request, CannotCreateTransactionException e) {
146 if (retry <= MAX_RETRY) {
147 log.info("Try to generate network element name again! Attempt: " + retry);
148 Response response = generateNetworkElementName(request);
149 if (response.getStatus() != 200) {
155 return handleException(ERROR_500, JDBC_CONNECTION_ERROR_MSG + e.getMessage());
159 private Response buildResponse(Object response) {
160 return Response.ok().entity(response).build();
163 private Response buildErrorResponse(Map<String, Object> response) {
164 return Response.status(500).entity(response).build();
167 private Map<String,Object> buildErrorResponse(String errorCode, String message) {
168 Map<String,Object> error = new HashMap<>();
169 error.put("errorId", errorCode);
170 error.put("message", message);