* ================================================================================
* Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
* ================================================================================
+ * Modifications Copyright (C) 2018 IBM.
+ * ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
import java.util.logging.Logger;
import javax.validation.Valid;
import javax.ws.rs.core.Response;
+import org.onap.ccsdk.apps.ms.neng.core.exceptions.NengException;
import org.onap.ccsdk.apps.ms.neng.core.resource.model.HelloWorld;
import org.onap.ccsdk.apps.ms.neng.core.resource.model.NameGenRequest;
import org.onap.ccsdk.apps.ms.neng.core.resource.model.NameGenResponse;
import org.onap.ccsdk.apps.ms.neng.persistence.entity.PolicyDetails;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import org.springframework.transaction.CannotCreateTransactionException;
import org.springframework.web.bind.annotation.RequestBody;
/**
*/
@Component
public class RestServiceImpl implements RestService {
- private static Logger log = Logger.getLogger(RestServiceImpl.class.getName());
+
+ private static final Logger log = Logger.getLogger(RestServiceImpl.class.getName());
+ private static final String INTERNAL_ERROR_MSG = "Internal error occurred while processing the request: ";
+ private static final String JDBC_CONNECTION_ERROR_MSG = "Error during JDBC transaction creation: ";
+ private static final String ERROR="error";
+ private static final String ERROR_500="err-0500";
+ private static final int MAX_RETRY = 5;
+ private int retry = 0;
@Autowired SpringService service;
public Response generateNetworkElementName(@RequestBody @Valid NameGenRequest request) {
log.info("Received request: " + request.toString());
try {
- NameGenResponse resp = service.genNetworkElementName(request);
- return Response.ok().entity(resp).build();
+ NameGenResponse resp = service.generateOrUpdateName(request);
+ return buildResponse(resp);
+ } catch (NengException e) {
+ log.warning(e.getMessage());
+ return handleException("NELGEN-0003", e.getMessage());
+ } catch (CannotCreateTransactionException e) {
+ log.warning(e.getMessage());
+ return handleJDBCConnectionException(request, e);
} catch (Exception e) {
log.warning(e.getMessage());
- return Response.status(500).entity("{ \"error\": \"" + e.getMessage() + "\" }").build();
+ return handleException(ERROR_500, INTERNAL_ERROR_MSG);
}
}
@Override
public Response releaseNetworkElementName(NameGenRequest request) {
NameGenResponse resp;
+ Map<String, Object> response = new HashMap<>();
try {
resp = service.releaseNetworkElementName(request);
- return Response.ok().entity(resp).build();
+ return buildResponse(resp);
+ } catch (NengException e) {
+ log.warning(e.getMessage());
+ response.put(ERROR, buildErrorResponse("NELGEN-0002", e.getMessage()));
+ return buildErrorResponse(response);
} catch (Exception e) {
log.warning(e.getMessage());
- return Response.status(500).entity("{ \"error\": \"" + e.getMessage() + "\" }").build();
+ response.put(ERROR, buildErrorResponse(ERROR_500, INTERNAL_ERROR_MSG));
+ return buildErrorResponse(response);
}
}
* API to add a naming policy to the database cache in this micro-service.
*/
@Override
- public Map<String, Object> addPolicyToDb(Object request) throws Exception {
- Map<String, Object> respMap = new HashMap<>();
+ public Response addPolicyToDb(Object request) throws Exception {
+ Map<String, Object> response = new HashMap<>();
try {
service.addPolicy(request);
- respMap.put("status", "Policy added successfully");
+ response.put("status", "Policy added successfully");
+ return buildResponse(response);
} catch (Exception e) {
log.warning(e.getMessage());
- respMap.put("status", "Failed");
+ response.put(ERROR, buildErrorResponse(ERROR_500, e.getMessage()));
+ return buildErrorResponse(response);
}
- return respMap;
+ }
+
+ private Response handleException(String statusCode, String statusMessage) {
+ Map<String, Object> response = new HashMap<>();
+ response.put(ERROR, buildErrorResponse(statusCode, statusMessage));
+
+ return buildErrorResponse(response);
+ }
+
+ private Response handleJDBCConnectionException(NameGenRequest request, CannotCreateTransactionException e) {
+ retry += 1;
+ if (retry <= MAX_RETRY) {
+ log.info("Try to generate network element name again! Attempt: " + retry);
+ Response response = generateNetworkElementName(request);
+ if (response.getStatus() != 200) {
+ retry = 0;
+ }
+ return response;
+ } else {
+ retry = 0;
+ return handleException(ERROR_500, JDBC_CONNECTION_ERROR_MSG + e.getMessage());
+ }
+ }
+
+ private Response buildResponse(Object response) {
+ return Response.ok().entity(response).build();
+ }
+
+ private Response buildErrorResponse(Map<String, Object> response) {
+ return Response.status(500).entity(response).build();
+ }
+
+ private Map<String,Object> buildErrorResponse(String errorCode, String message) {
+ Map<String,Object> error = new HashMap<>();
+ error.put("errorId", errorCode);
+ error.put("message", message);
+ return error;
}
}