summaryrefslogtreecommitdiffstats
path: root/appc-oam/appc-oam-bundle/src/main/java/org/openecomp/appc/oam/processor/OamStopProcessor.java
blob: 8710e0f085e88ec84b7630744d5c39eebe91f8ef (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
/*-
 * ============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.onap.appc.oam.processor;

import com.att.eelf.configuration.EELFLogger;
import org.onap.appc.exceptions.APPCException;
import org.onap.appc.i18n.Msg;
import org.onap.appc.oam.AppcOam;
import org.onap.appc.oam.util.AsyncTaskHelper;
import org.onap.appc.oam.util.ConfigurationHelper;
import org.onap.appc.oam.util.OperationHelper;
import org.onap.appc.oam.util.StateHelper;
import org.onap.appc.statemachine.impl.readers.AppcOamStates;

/**
 * Processor to handle stop OAM API.
 */
public class OamStopProcessor extends BaseProcessor {
    /**
     * Constructor
     *
     * @param eelfLogger          for logging
     * @param configurationHelper for property reading
     * @param stateHelper         for APP-C OAM state checking
     * @param asyncTaskHelper     for scheduling async task
     * @param operationHelper     for operational helper
     */
    public OamStopProcessor(EELFLogger eelfLogger,
                            ConfigurationHelper configurationHelper,
                            StateHelper stateHelper,
                            AsyncTaskHelper asyncTaskHelper,
                            OperationHelper operationHelper) {
        super(eelfLogger, configurationHelper, stateHelper, asyncTaskHelper, operationHelper);

        rpc = AppcOam.RPC.stop;
        auditMsg = Msg.OAM_OPERATION_STOPPING;
    }


    @Override
    protected void scheduleAsyncTask() {
        runnable = new MyRunnable(this);
        super.scheduleAsyncTask();
    }

    /**
     * This runnable does the async handling for the stop REST API. And it will be scheduled to run one time.
     *
     * <p>This runnable will the following operations: <br>
     *     - do APP-C OAM bundle stop and then refresh through BundlerHelper<br>
     * <p>Once above operations are done, the runnale will <br>
     *     - post message through operatonHelper <br>
     *     - set APP-C OAM state to started <br>
     *     - audit log the state <br>
     */
    class MyRunnable  extends BaseActionRunnable {

        MyRunnable(BaseProcessor parent) {
            super(parent);
            actionName = "OAM Stop";
            auditMsg = Msg.OAM_OPERATION_STOPPED;
            finalState = AppcOamStates.Stopped;
        }

        /**
         * Do stop action, include stop bundle .
         * @return true if action is successful, false when aciton is failed.
         */
        @Override
        boolean doAction() {
            logDebug(String.format("Executing %s task", actionName));

            try {
                boolean isBundleOperationCompleted = bundleHelper.bundleOperations(
                    rpc, bundleNameToFuture, myParent.asyncTaskHelper, this);
                if (isBundleOperationCompleted) {
                    return true;
                }

                setAbortStatus();
            } catch (APPCException e) {
                setErrorStatus(e);
                stateHelper.setState(AppcOamStates.Error);
            }
            return false;
        }

        /**
         * Final handling
         * @param setState boolean to indicate if set OAM state or not
         */
        @Override
        void postDoAction(boolean setState) {
            postAction(setState ? finalState : null);
            super.postDoAction(setState);
        }
    }
}