summaryrefslogtreecommitdiffstats
path: root/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/impl/RequestValidatorImpl.java
blob: 8e0947e66e61d8184163c34db50c9586588e94d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*-
 * ============LICENSE_START=======================================================
 * ONAP : APPC
 * ================================================================================
 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 * ================================================================================
 * Copyright (C) 2017 Amdocs
 * =============================================================================
 * 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.
 * 
 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
 * ============LICENSE_END=========================================================
 */

package org.openecomp.appc.requesthandler.impl;

import com.att.eelf.i18n.EELFResourceManager;
import org.apache.commons.lang.ObjectUtils;
import org.openecomp.appc.domainmodel.lcm.RuntimeContext;
import org.openecomp.appc.domainmodel.lcm.VNFContext;
import org.openecomp.appc.domainmodel.lcm.VNFOperation;
import org.openecomp.appc.executor.UnstableVNFException;
import org.openecomp.appc.i18n.Msg;
import org.openecomp.appc.lifecyclemanager.LifecycleManager;
import org.openecomp.appc.lifecyclemanager.objects.LifecycleException;
import org.openecomp.appc.lifecyclemanager.objects.NoTransitionDefinedException;
import org.openecomp.appc.logging.LoggingConstants;
import org.openecomp.appc.logging.LoggingUtils;
import org.openecomp.appc.requesthandler.LCMStateManager;
import org.openecomp.appc.requesthandler.exceptions.*;
import org.openecomp.appc.workingstatemanager.WorkingStateManager;


public class RequestValidatorImpl extends AbstractRequestValidatorImpl {

    private WorkingStateManager workingStateManager;
    private LCMStateManager lcmStateManager;

    public void setLifecyclemanager(LifecycleManager lifecyclemanager) {
        this.lifecyclemanager = lifecyclemanager;
    }

    public void setWorkingStateManager(WorkingStateManager workingStateManager) {
        this.workingStateManager = workingStateManager;
    }

    public void setLcmStateManager(LCMStateManager lcmStateManager) {
        this.lcmStateManager = lcmStateManager;
    }

    public RequestValidatorImpl() {
    }

    @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));
        }
        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);
        String vnfId = runtimeContext.getRequestContext().getActionIdentifiers().getVnfId();
        VNFContext vnfContext = queryAAI(vnfId);
        runtimeContext.setVnfContext(vnfContext);

        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());
        }
    }


    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));
        }

        String nextState = lifecyclemanager.getNextState(null, orchestrationStatus, action.name());
        if (logger.isDebugEnabled()) {
            logger.trace("Exiting from queryLCM with (LCMResponse = "+ ObjectUtils.toString(nextState)+")");
        }
        return nextState;
    }


    private void checkVNFWorkingState(RuntimeContext runtimeContext) throws UnstableVNFException {

        if (logger.isTraceEnabled()) {
            logger.trace("Entering to checkVNFWorkingState with RequestHandlerInput = "+ ObjectUtils.toString(runtimeContext.getRequestContext()));
        }
        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);
        }
        boolean isVNFStable = workingStateManager.isVNFStable(vnfId);
        if (!isVNFStable && !forceFlag) {
            if (logger.isDebugEnabled()) {
                logger.debug("VNF is not stable for VNF ID = " + vnfId);
            }
            throw new UnstableVNFException("VNF is not stable for vnfID = " + vnfId);
        }

    }


}