aboutsummaryrefslogtreecommitdiffstats
path: root/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/onap/appc/requesthandler/impl/RequestValidatorImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/onap/appc/requesthandler/impl/RequestValidatorImpl.java')
-rw-r--r--appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/onap/appc/requesthandler/impl/RequestValidatorImpl.java477
1 files changed, 423 insertions, 54 deletions
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/onap/appc/requesthandler/impl/RequestValidatorImpl.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/onap/appc/requesthandler/impl/RequestValidatorImpl.java
index 8724adc59..933cff28c 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/onap/appc/requesthandler/impl/RequestValidatorImpl.java
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/onap/appc/requesthandler/impl/RequestValidatorImpl.java
@@ -25,108 +25,477 @@
package org.onap.appc.requesthandler.impl;
import com.att.eelf.i18n.EELFResourceManager;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import jline.internal.Log;
+
+import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.ObjectUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.http.HttpResponse;
+import org.json.JSONObject;
+import org.onap.appc.domainmodel.lcm.Flags;
+import org.onap.appc.domainmodel.lcm.RequestContext;
import org.onap.appc.domainmodel.lcm.RuntimeContext;
+import org.onap.appc.domainmodel.lcm.TransactionRecord;
import org.onap.appc.domainmodel.lcm.VNFContext;
import org.onap.appc.domainmodel.lcm.VNFOperation;
-import org.onap.appc.executor.UnstableVNFException;
+import org.onap.appc.exceptions.APPCException;
+import org.onap.appc.executor.objects.LCMCommandStatus;
+import org.onap.appc.executor.objects.Params;
import org.onap.appc.i18n.Msg;
-import org.onap.appc.lifecyclemanager.LifecycleManager;
-import org.onap.appc.lifecyclemanager.objects.LifecycleException;
-import org.onap.appc.lifecyclemanager.objects.NoTransitionDefinedException;
+import org.onap.appc.lockmanager.api.LockException;
+import org.onap.appc.lockmanager.api.LockManager;
import org.onap.appc.logging.LoggingConstants;
import org.onap.appc.logging.LoggingUtils;
-import org.onap.appc.requesthandler.LCMStateManager;
-import org.onap.appc.requesthandler.exceptions.*;
-import org.onap.appc.workingstatemanager.WorkingStateManager;
+import org.onap.appc.requesthandler.exceptions.DGWorkflowNotFoundException;
+import org.onap.appc.requesthandler.exceptions.LCMOperationsDisabledException;
+import org.onap.appc.requesthandler.exceptions.MissingVNFDataInAAIException;
+import org.onap.appc.requesthandler.exceptions.RequestValidationException;
+import org.onap.appc.requesthandler.exceptions.VNFNotFoundException;
+import org.onap.appc.requesthandler.exceptions.WorkflowNotFoundException;
+import org.onap.appc.requesthandler.model.ActionIdentifierModel;
+import org.onap.appc.requesthandler.model.Input;
+import org.onap.appc.requesthandler.model.Request;
+import org.onap.appc.requesthandler.model.RequestData;
+import org.onap.appc.requesthandler.model.RequestModel;
+import org.onap.appc.requesthandler.model.ScopeOverlapModel;
+import org.onap.appc.rest.client.RestClientInvoker;
+import org.onap.appc.validationpolicy.RequestValidationPolicy;
+import org.onap.appc.validationpolicy.executors.RuleExecutor;
+import org.onap.appc.validationpolicy.objects.RuleResult;
+import org.onap.appc.workflow.WorkFlowManager;
+import org.onap.appc.workflow.objects.WorkflowExistsOutput;
+import org.onap.appc.workflow.objects.WorkflowRequest;
+import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
+import org.onap.ccsdk.sli.core.sli.SvcLogicResource;
+import org.onap.ccsdk.sli.adaptors.aai.AAIService;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.ServiceReference;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+import java.util.stream.Collectors;
public class RequestValidatorImpl extends AbstractRequestValidatorImpl {
- private WorkingStateManager workingStateManager;
- private LCMStateManager lcmStateManager;
+ private WorkFlowManager workflowManager;
+ private LockManager lockManager;
+ private AAIService aaiService;
+ private RequestValidationPolicy requestValidationPolicy;
+ private RestClientInvoker client;
+ private String path;
+
+ static final String SCOPE_OVERLAP_ENDPOINT = "appc.LCM.scopeOverlap.endpoint";
+ static final String ODL_USER = "appc.LCM.provider.user";
+ static final String ODL_PASS = "appc.LCM.provider.pass";
+
+ public void initialize() throws APPCException {
+ logger.info("Initializing RequestValidatorImpl.");
+ String endpoint = null;
+ String user = null;
+ String pass =null;
+ Properties properties = configuration.getProperties();
+ if (properties != null) {
+ endpoint = properties.getProperty(SCOPE_OVERLAP_ENDPOINT);
+ user = properties.getProperty(ODL_USER);
+ pass = properties.getProperty(ODL_PASS);
+ }
+ if (endpoint == null) {
+ String message = "End point is not defined for scope over lap service in appc.properties.";
+ logger.error(message);
+ // TODO throw following exception (and remove the "return") when
+ // entry in appc.properties file is made for scope overlap service
+ // endpoint
+ // and remove @Ignore in unit tests:
+ // testInitializeWithNullConfigProps,
+ // testInitializeWithoutEndpointProp
+ // throw new APPCException(message);
+ return;
+ }
+
+ try {
+ URL url = new URL(endpoint);
+ client = new RestClientInvoker(url);
+ client.setAuthentication(user, pass);
+ path = url.getPath();
+
+ } catch (MalformedURLException e) {
+ String message = "Invalid endpoint " + endpoint;
+ logger.error(message, e);
+ // TODO throw following exception when entry in appc.properties file
+ // is made for scope overlap service endpoint
+ // and remove @Ignore in unit test:
+ // testInitializeWithMalFormatEndpoint
+ // throw new APPCException(message);
+ }
+ }
+
+ private void getAAIservice() {
+ BundleContext bctx = FrameworkUtil.getBundle(AAIService.class).getBundleContext();
+ // Get AAIadapter reference
+ ServiceReference sref = bctx.getServiceReference(AAIService.class.getName());
+ if (sref != null) {
+ logger.info("AAIService from bundlecontext");
+ aaiService = (AAIService) bctx.getService(sref);
+
+ } else {
+ logger.error("Cannot find service reference for org.onap.ccsdk.sli.adaptors.aai.AAIService");
+
+ }
+ }
- public void setLifecyclemanager(LifecycleManager lifecyclemanager) {
- this.lifecyclemanager = lifecyclemanager;
+ public void setLockManager(LockManager lockManager) {
+ this.lockManager = lockManager;
}
- public void setWorkingStateManager(WorkingStateManager workingStateManager) {
- this.workingStateManager = workingStateManager;
+ public void setClient(RestClientInvoker client) {
+ this.client = client;
}
- public void setLcmStateManager(LCMStateManager lcmStateManager) {
- this.lcmStateManager = lcmStateManager;
+ public void setWorkflowManager(WorkFlowManager workflowManager) {
+ this.workflowManager = workflowManager;
}
- public RequestValidatorImpl() {
+ public void setRequestValidationPolicy(RequestValidationPolicy requestValidationPolicy) {
+ this.requestValidationPolicy = requestValidationPolicy;
}
- @Override
- public void validateRequest(RuntimeContext runtimeContext)
- throws VNFNotFoundException, RequestExpiredException, UnstableVNFException, InvalidInputException,
- DuplicateRequestException, NoTransitionDefinedException, LifecycleException, WorkflowNotFoundException,
- DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
- if (logger.isTraceEnabled()){
- logger.trace("Entering to validateRequest with RequestHandlerInput = "+ ObjectUtils.toString(runtimeContext));
+ public void validateRequest(RuntimeContext runtimeContext) throws Exception {
+ if (logger.isTraceEnabled()) {
+ logger.trace(
+ "Entering to validateRequest with RequestHandlerInput = " + ObjectUtils.toString(runtimeContext));
}
- if(!lcmStateManager.isLCMOperationEnabled()) {
- LoggingUtils.logErrorMessage(
- LoggingConstants.TargetNames.REQUEST_VALIDATOR,
- EELFResourceManager.format(Msg.LCM_OPERATIONS_DISABLED),
- this.getClass().getCanonicalName());
+ if (!lcmStateManager.isLCMOperationEnabled()) {
+ LoggingUtils.logErrorMessage(LoggingConstants.TargetNames.REQUEST_VALIDATOR,
+ EELFResourceManager.format(Msg.LCM_OPERATIONS_DISABLED), this.getClass().getCanonicalName());
throw new LCMOperationsDisabledException("APPC LCM operations have been administratively disabled");
}
getAAIservice();
- validateInput(runtimeContext.getRequestContext());
- checkVNFWorkingState(runtimeContext);
+ validateInput(runtimeContext);
String vnfId = runtimeContext.getRequestContext().getActionIdentifiers().getVnfId();
VNFContext vnfContext = queryAAI(vnfId);
runtimeContext.setVnfContext(vnfContext);
+ runtimeContext.getTransactionRecord().setTargetType(vnfContext.getType());
- queryLCM(runtimeContext.getVnfContext().getStatus(), runtimeContext.getRequestContext().getAction());
VNFOperation operation = runtimeContext.getRequestContext().getAction();
- if(!operation.isBuiltIn()) {
- // for built-in operations skip WF presence check
- queryWFM(vnfContext, runtimeContext.getRequestContext());
+ if (operation.isBuiltIn()) {
+ return;
+ }
+
+ validateVNFLock(runtimeContext);
+ checkWorkflowExists(vnfContext, runtimeContext.getRequestContext());
+
+ if (runtimeContext.getRequestContext().getCommonHeader().getFlags().isForce()) {
+ return;
+ }
+
+ List<TransactionRecord> inProgressTransactions = transactionRecorder
+ .getInProgressRequests(runtimeContext.getTransactionRecord());
+ logger.debug("In progress requests " + inProgressTransactions.toString());
+
+ Long exclusiveRequestCount = inProgressTransactions.stream()
+ .filter(record -> record.getMode().equals(Flags.Mode.EXCLUSIVE.name())).count();
+ if (exclusiveRequestCount > 0) {
+ String message = "Request rejected - Existing request in progress with exclusive mode for VNF: " + vnfId;
+ throw new RequestValidationException(message, LCMCommandStatus.EXLCUSIVE_REQUEST_IN_PROGRESS,
+ (new Params()).addParam("errorMsg", message));
+ }
+
+ Boolean scopeOverLap = checkScopeOverLap(runtimeContext.getRequestContext(), inProgressTransactions);
+ logger.debug("Scope overlap " + scopeOverLap);
+ if (scopeOverLap) {
+ List<VNFOperation> inProgressActions = inProgressTransactions.stream().map(TransactionRecord::getOperation)
+ .collect(Collectors.toList());
+
+ RuleExecutor ruleExecutor = requestValidationPolicy.getInProgressRuleExecutor();
+ RuleResult result = ruleExecutor.executeRule(operation.name(), inProgressActions);
+ logger.debug("Policy validation result " + result);
+ if (RuleResult.REJECT == result) {
+ String message = "Request rejected as per the request validation policy";
+ throw new RequestValidationException(message, LCMCommandStatus.POLICY_VALIDATION_FAILURE,
+ (new Params()).addParam("errorMsg", message));
+ }
}
}
+ private void validateVNFLock(RuntimeContext runtimeContext) throws LockException {
+ String vnfId = runtimeContext.getRequestContext().getActionIdentifiers().getVnfId();
+ String lockOwner = lockManager.getLockOwner(vnfId);
+ logger.debug("Current lock owner is " + lockOwner + " for vnf " + vnfId);
+ if (lockOwner != null
+ && !lockOwner.equals(runtimeContext.getRequestContext().getCommonHeader().getRequestId())) {
+ String message = new StringBuilder("VNF : ").append(vnfId).append(" is locked by request id :")
+ .append(lockOwner).toString();
+ throw new LockException(message);
+ }
+ }
- private String queryLCM(String orchestrationStatus, VNFOperation action) throws LifecycleException, NoTransitionDefinedException {
- if (logger.isTraceEnabled()) {
- logger.trace("Entering to queryLCM with Orchestration Status = "+ ObjectUtils.toString(orchestrationStatus)+
- ", command = "+ ObjectUtils.toString(action));
+ /*
+ * Do not remove this method, this is actual method for invoking scope
+ * overlap service When the service becomes available, its dummy
+ * implementation should be removed and this implementation should be used.
+ */
+ private Boolean checkScopeOverLap(RequestContext requestContext, List<TransactionRecord> inProgressTransactions)
+ throws APPCException {
+ Boolean scopeOverlap = null;
+ try {
+ JsonNode inputJSON = convertToJsonInput(requestContext, inProgressTransactions);
+ logger.debug("Input to scope overlap service " + inputJSON.toString());
+ HttpResponse response = client.doPost(path, inputJSON.toString());
+ int httpCode = response.getStatusLine().getStatusCode();
+ if (httpCode < 200 || httpCode >= 300) {
+ logger.debug("http error code " + httpCode);
+ throw new APPCException("Exception occurred on invoking check scope overlap api");
+ }
+ String respBody = IOUtils.toString(response.getEntity().getContent());
+ logger.debug("response body " + respBody);
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode outputJSON = mapper.readTree(respBody);
+ scopeOverlap = readScopeOverlap(outputJSON);
+ } catch (IOException e) {
+ String message = "Error accessing check scope overlap service";
+ logger.error(message, e);
+ throw new APPCException(message);
}
+ return scopeOverlap;
+ }
- String nextState = lifecyclemanager.getNextState(null, orchestrationStatus, action.name());
- if (logger.isDebugEnabled()) {
- logger.trace("Exiting from queryLCM with (LCMResponse = "+ ObjectUtils.toString(nextState)+")");
+ private Boolean readScopeOverlap(JsonNode outputJSON) throws APPCException {
+ logger.debug("Response JSON " + outputJSON.toString());
+ String message = "Error reading response JSON from scope overlap service ";
+ JsonNode outputNode = outputJSON.get("output");
+ JsonNode statusNode = outputNode.get("status");
+ if (statusNode == null) {
+ throw new APPCException(message);
}
- return nextState;
+
+ if (null == statusNode.get("message"))
+ throw new APPCException(message + "Status message is null.");
+ String responseStatusMessage = statusNode.get("message").textValue();
+
+ if (null == statusNode.get("code"))
+ throw new APPCException(message + "Status code is null.");
+ String code = statusNode.get("code").textValue();
+
+ JsonNode responseInfoNode = outputNode.get("response-info");
+ JsonNode blockNode = responseInfoNode.get("block");
+ String requestOverlapValue = null;
+
+ if (null != blockNode)
+ requestOverlapValue = blockNode.textValue();
+
+ logger.debug("Response JSON " + requestOverlapValue);
+
+ if (code.equals("400")) {
+ if(null==requestOverlapValue)
+ throw new APPCException("Response code is 400 but requestOverlapValue is null ");
+ if (requestOverlapValue.contains("true")) {
+ return Boolean.TRUE;
+ } else if (requestOverlapValue.contains("false")) {
+ return Boolean.FALSE;
+ } else {
+ throw new APPCException(
+ message + "requestOverlap value is other than True and False, it is " + requestOverlapValue);
+ }
+ } else if (code.equals("401")) {
+ throw new APPCException(message + responseStatusMessage);
+ } else {
+ throw new APPCException(message + "Status code is neither 400 nor 401, it is " + code);
+ }
+
}
+ private JsonNode convertToJsonInput(RequestContext requestContext, List<TransactionRecord> inProgressTransactions) {
+ ObjectMapper objectMapper = new ObjectMapper();
+ ScopeOverlapModel scopeOverlapModel = getScopeOverlapModel(requestContext, inProgressTransactions);
+ // Added for change in interface for action level
+
+ JsonNode jsonObject = objectMapper.valueToTree(scopeOverlapModel);
- private void checkVNFWorkingState(RuntimeContext runtimeContext) throws UnstableVNFException {
+ return jsonObject;
+ }
- if (logger.isTraceEnabled()) {
- logger.trace("Entering to checkVNFWorkingState with RequestHandlerInput = "+ ObjectUtils.toString(runtimeContext.getRequestContext()));
+ public ScopeOverlapModel getScopeOverlapModel(RequestContext requestContext,
+ List<TransactionRecord> inProgressTransactions) {
+ ScopeOverlapModel scopeOverlapModel = new ScopeOverlapModel();
+ RequestData requestData = new RequestData();
+
+ List<RequestModel> inProgressRequests = new ArrayList<>();
+ RequestModel requestModel = new RequestModel();
+ ActionIdentifierModel actionIdentifierModel = extractActionIdentifierModel(requestContext);
+ requestModel.setAction(requestContext.getAction().toString());
+ requestModel.setActionIdentifier(actionIdentifierModel);
+
+ if (requestModel.getActionIdentifier().getVnfId() != null) {
+ requestData.setVnfID(requestModel.getActionIdentifier().getVnfId());
}
- boolean forceFlag = runtimeContext.getRequestContext().getCommonHeader().getFlags() != null && runtimeContext.getRequestContext().getCommonHeader().getFlags().isForce();
- String vnfId = runtimeContext.getRequestContext().getActionIdentifiers().getVnfId();
- if (logger.isDebugEnabled()) {
- logger.debug("forceFlag = " + forceFlag);
+ if (requestModel.getActionIdentifier().getVnfcName() != null
+ || requestModel.getActionIdentifier().getVfModuleId() != null
+ || requestModel.getActionIdentifier().getVserverId() != null) {
+
+ requestModel.getActionIdentifier().setVnfId(null);
}
- boolean isVNFStable = workingStateManager.isVNFStable(vnfId);
- if (!isVNFStable && !forceFlag) {
- if (logger.isDebugEnabled()) {
- logger.debug("VNF is not stable for VNF ID = " + vnfId);
+
+ requestData.setCurrentRequest(requestModel);
+
+ for (TransactionRecord record : inProgressTransactions) {
+ RequestModel request = new RequestModel();
+ ActionIdentifierModel actionIdentifier = new ActionIdentifierModel();
+
+ actionIdentifier.setServiceInstanceId(record.getServiceInstanceId());
+ actionIdentifier.setVnfId(record.getTargetId());
+ actionIdentifier.setVnfcName(record.getVnfcName());
+ actionIdentifier.setVfModuleId(record.getVfModuleId());
+ actionIdentifier.setVserverId(record.getVserverId());
+
+ request.setAction(record.getOperation().name());
+ request.setActionIdentifier(actionIdentifier);
+ if (request.getActionIdentifier().getVnfcName() != null
+ || request.getActionIdentifier().getVfModuleId() != null
+ || request.getActionIdentifier().getVserverId() != null) {
+
+ request.getActionIdentifier().setVnfId(null);
+ }
+ inProgressRequests.add(request);
+ }
+
+ requestData.setInProgressRequests(inProgressRequests);
+
+ Request request = new Request();
+
+ Date date = new Date();
+ request.setRequestID("RequestId-ScopeOverlap " + date.toString());
+ request.setAction("isScopeOverlap");
+ ObjectMapper objectMapper = new ObjectMapper();
+ JsonNode json = objectMapper.valueToTree(requestData);
+ request.setRequestData(json.toString());
+ Input input = new Input();
+ input.setRequest(request);
+ scopeOverlapModel.setInput(input);
+
+ return scopeOverlapModel;
+ }
+
+ private ActionIdentifierModel extractActionIdentifierModel(RequestContext requestContext) {
+ ActionIdentifierModel actionIdentifierModel = new ActionIdentifierModel();
+ actionIdentifierModel.setServiceInstanceId(requestContext.getActionIdentifiers().getServiceInstanceId());
+ actionIdentifierModel.setVnfId(requestContext.getActionIdentifiers().getVnfId());
+ actionIdentifierModel.setVnfcName(requestContext.getActionIdentifiers().getVnfcName());
+ actionIdentifierModel.setVfModuleId(requestContext.getActionIdentifiers().getVfModuleId());
+ actionIdentifierModel.setVserverId(requestContext.getActionIdentifiers().getVserverId());
+ return actionIdentifierModel;
+ }
+
+ private VNFContext queryAAI(String vnfId) throws VNFNotFoundException, MissingVNFDataInAAIException {
+ SvcLogicContext ctx = new SvcLogicContext();
+ ctx = getVnfdata(vnfId, "vnf", ctx);
+
+ VNFContext vnfContext = new VNFContext();
+ populateVnfContext(vnfContext, ctx);
+
+ return vnfContext;
+ }
+
+ private SvcLogicContext getVnfdata(String vnf_id, String prefix, SvcLogicContext ctx) throws VNFNotFoundException {
+ if (logger.isTraceEnabled()) {
+ logger.trace("Entering to getVnfdata with vnfid = " + ObjectUtils.toString(vnf_id) + ", prefix = "
+ + ObjectUtils.toString(prefix) + ", SvcLogicContext" + ObjectUtils.toString(ctx));
+ }
+ String key = "vnf-id = '" + vnf_id + "'";
+ logger.debug("inside getVnfdata=== " + key);
+ try {
+ Date beginTimestamp = new Date();
+ SvcLogicResource.QueryStatus response = aaiService.query("generic-vnf", false, null, key, prefix, null,
+ ctx);
+ Date endTimestamp = new Date();
+ String status = SvcLogicResource.QueryStatus.SUCCESS.equals(response)
+ ? LoggingConstants.StatusCodes.COMPLETE : LoggingConstants.StatusCodes.ERROR;
+ LoggingUtils.logMetricsMessage(beginTimestamp.toInstant(), endTimestamp.toInstant(),
+ LoggingConstants.TargetNames.AAI, LoggingConstants.TargetServiceNames.AAIServiceNames.QUERY, status,
+ "", response.name(), this.getClass().getCanonicalName());
+ if (SvcLogicResource.QueryStatus.NOT_FOUND.equals(response)) {
+ throw new VNFNotFoundException("VNF not found for vnf_id = " + vnf_id, vnf_id);
+ } else if (SvcLogicResource.QueryStatus.FAILURE.equals(response)) {
+ throw new RuntimeException("Error Querying AAI with vnfID = " + vnf_id);
}
- throw new UnstableVNFException("VNF is not stable for vnfID = " + vnfId);
+ logger.info("AAIResponse: " + response.toString());
+ } catch (SvcLogicException e) {
+
+ LoggingUtils.logErrorMessage(LoggingConstants.TargetServiceNames.AAIServiceNames.GET_VNF_DATA,
+ "Error in getVnfdata" + e, this.getClass().getCanonicalName());
+
+ throw new RuntimeException(e);
}
+ if (logger.isTraceEnabled()) {
+ logger.trace("Exiting from getVnfdata with (SvcLogicContext = " + ObjectUtils.toString(ctx) + ")");
+ }
+ return ctx;
+ }
+ private void populateVnfContext(VNFContext vnfContext, SvcLogicContext ctx) throws MissingVNFDataInAAIException {
+ String vnfType = ctx.getAttribute("vnf.vnf-type");
+ if (StringUtils.isEmpty(vnfType)) {
+ throw new MissingVNFDataInAAIException("vnf-type", ctx.getAttribute("vnf.vnf-id"));
+ }
+ vnfContext.setType(vnfType);
+ vnfContext.setId(ctx.getAttribute("vnf.vnf-id"));
}
+ private void checkWorkflowExists(VNFContext vnfContext, RequestContext requestContext)
+ throws WorkflowNotFoundException, DGWorkflowNotFoundException {
+ WorkflowExistsOutput workflowExistsOutput = workflowManager
+ .workflowExists(getWorkflowQueryParams(vnfContext, requestContext));
+ if (!workflowExistsOutput.isMappingExist()) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("WorkflowManager : Workflow mapping not found for vnfType = " + vnfContext.getType()
+ + ", version = " + vnfContext.getVersion() + ", command = "
+ + requestContext.getAction().name());
+ }
+ LoggingUtils.logErrorMessage(LoggingConstants.TargetNames.WORKFLOW_MANAGER, EELFResourceManager
+ .format(Msg.APPC_WORKFLOW_NOT_FOUND, vnfContext.getType(), requestContext.getAction().name()),
+ this.getClass().getCanonicalName());
+ throw new WorkflowNotFoundException(
+ "Workflow mapping not found for vnfType = " + vnfContext.getType() + ", command = "
+ + requestContext.getAction().name(),
+ vnfContext.getType(), requestContext.getAction().name());
+ }
+ if (!workflowExistsOutput.isDgExist()) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("WorkflowManager : DG Workflow not found for vnfType = " + vnfContext.getType()
+ + ", version = " + vnfContext.getVersion() + ", command = " + requestContext.getAction().name()
+ + " " + workflowExistsOutput);
+ }
+ LoggingUtils.logErrorMessage(LoggingConstants.TargetNames.WORKFLOW_MANAGER, EELFResourceManager
+ .format(Msg.APPC_WORKFLOW_NOT_FOUND, vnfContext.getType(), requestContext.getAction().name()),
+ this.getClass().getCanonicalName());
+ throw new DGWorkflowNotFoundException(
+ "Workflow not found for vnfType = " + vnfContext.getType() + ", command = "
+ + requestContext.getAction().name(),
+ workflowExistsOutput.getWorkflowModule(), workflowExistsOutput.getWorkflowName(),
+ workflowExistsOutput.getWorkflowVersion(), vnfContext.getType(), requestContext.getAction().name());
+ }
+ }
+ private WorkflowRequest getWorkflowQueryParams(VNFContext vnfContext, RequestContext requestContext) {
+ WorkflowRequest workflowRequest = new WorkflowRequest();
+ workflowRequest.setVnfContext(vnfContext);
+ workflowRequest.setRequestContext(requestContext);
+ if (logger.isTraceEnabled()) {
+ logger.trace("Exiting from getWorkflowQueryParams with (WorkflowRequest = "
+ + ObjectUtils.toString(workflowRequest) + ")");
+ }
+ return workflowRequest;
+ }
}