/*-
* ============LICENSE_START=======================================================
* ONAP - SO
* ================================================================================
* Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
* ================================================================================
* 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
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============LICENSE_END=========================================================
*/
package org.openecomp.mso.adapters.vfc;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import org.openecomp.mso.adapters.vfc.exceptions.ApplicationException;
import org.openecomp.mso.adapters.vfc.model.NSResourceInputParameter;
import org.openecomp.mso.adapters.vfc.model.NsOperationKey;
import org.openecomp.mso.adapters.vfc.model.RestfulResponse;
import org.openecomp.mso.adapters.vfc.util.JsonUtil;
import org.openecomp.mso.adapters.vfc.util.RestfulUtil;
import org.openecomp.mso.adapters.vfc.util.ValidateUtil;
import org.openecomp.mso.logger.MsoLogger;
/**
* The rest class for VF-c Adapter
*
*
*
*
* @author
* @version ONAP Amsterdam Release 2017-08-28
*/
@Path("/vfcadapter/v1")
public class VfcAdapterRest {
private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA);
private final VfcManager driverMgr = new VfcManager();
public VfcAdapterRest() {
}
/**
* Create a NS
*
*
* @param servletReq the http request
* @return
* @since ONAP Amsterdam Release
*/
@POST
@Path("/ns")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response createNfvoNs(HttpServletRequest servletReq) {
// Step 1: get parameters from request for current node
try {
String body = RestfulUtil.getRequestBody(servletReq);
ValidateUtil.assertObjectNotNull(body);
LOGGER.debug("body from request is {}" + body);
NSResourceInputParameter nsInput = JsonUtil.unMarshal(body, NSResourceInputParameter.class);
RestfulResponse rsp = driverMgr.createNs(nsInput);
return buildResponse(rsp);
} catch(ApplicationException e) {
return e.buildErrorResponse();
}
}
/**
* Delete NS instance
*
* @param servletReq http request
* @return response
* @since ONAP Amsterdam Release
*/
@DELETE
@Path("/ns/{nsInstanceId}")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response deleteNfvoNs(HttpServletRequest servletReq, @PathParam("nsInstanceId") String nsInstanceId) {
try {
// Step 1: get parameters from request for current node
String body = RestfulUtil.getRequestBody(servletReq);
ValidateUtil.assertObjectNotNull(body);
LOGGER.debug("body from request is {}" + body);
NsOperationKey nsOperationKey = JsonUtil.unMarshal(body, NsOperationKey.class);
RestfulResponse rsp = driverMgr.deleteNs(nsOperationKey, nsInstanceId);
return buildResponse(rsp);
} catch(ApplicationException e) {
return e.buildErrorResponse();
}
}
/**
* Query Operation job status
*
*
* @param servletReq The Http Request
* @param jobId The job id
* @return
* @since ONAP Amsterdam Release
*/
@POST
@Path("/jobs/{jobId}")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response queryNfvoJobStatus(HttpServletRequest servletReq, @PathParam("jobId") String jobId) {
try {
ValidateUtil.assertObjectNotNull(jobId);
String body = RestfulUtil.getRequestBody(servletReq);
ValidateUtil.assertObjectNotNull(body);
LOGGER.debug("body from request is {}" + body);
NsOperationKey nsOperationKey = JsonUtil.unMarshal(body, NsOperationKey.class);
RestfulResponse rsp = driverMgr.getNsProgress(nsOperationKey, jobId);
return buildResponse(rsp);
} catch(ApplicationException e) {
return e.buildErrorResponse();
}
}
/**
* Instantiate NS instance
*
*
* @param servletReq The http request
* @param nsInstanceId The NS instance id
* @return
* @since ONAP Amsterdam Release
*/
@POST
@Path("/ns/{nsInstanceId}/instantiate")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response instantiateNfvoNs(HttpServletRequest servletReq, @PathParam("nsInstanceId") String nsInstanceId) {
String body = RestfulUtil.getRequestBody(servletReq);
try {
ValidateUtil.assertObjectNotNull(body);
LOGGER.debug("body from request is {}" + body);
NSResourceInputParameter nsInput = JsonUtil.unMarshal(body, NSResourceInputParameter.class);
RestfulResponse rsp = driverMgr.instantiateNs(nsInstanceId, nsInput);
return buildResponse(rsp);
} catch(ApplicationException e) {
return e.buildErrorResponse();
}
}
/**
* Terminate NS instance
*
*
* @param servletReq The http request
* @param nsInstanceId The NS instance id
* @return
* @since ONAP Amsterdam Release
*/
@POST
@Path("/ns/{nsInstanceId}/terminate")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response terminateNfvoNs(HttpServletRequest servletReq, @PathParam("nsInstanceId") String nsInstanceId) {
try {
ValidateUtil.assertObjectNotNull(nsInstanceId);
String body = RestfulUtil.getRequestBody(servletReq);
ValidateUtil.assertObjectNotNull(body);
LOGGER.debug("body from request is {}" + body);
NsOperationKey nsOperationKey = JsonUtil.unMarshal(body, NsOperationKey.class);
RestfulResponse rsp = driverMgr.terminateNs(nsOperationKey, nsInstanceId);
return buildResponse(rsp);
} catch(ApplicationException e) {
return e.buildErrorResponse();
}
}
/**
* build response from restful response
*
*
* @param rsp general response object
* @return
* @since ONAP Amsterdam Release
*/
private Response buildResponse(RestfulResponse rsp) {
ResponseBuilder rspBuilder = Response.status(rsp.getStatus());
rspBuilder.entity(rsp.getResponseContent());
return rspBuilder.build();
}
}