aboutsummaryrefslogtreecommitdiffstats
path: root/appc-sequence-generator/appc-sequence-generator-bundle/src/main/java/org/onap/appc/seqgen/impl/RestartSequenceGenerator.java
blob: 83ed9627dcf2c6f6727bcf2f67983fa9a10c61db (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
/*-
 * ============LICENSE_START=======================================================
 * ONAP : APPC
 * ================================================================================
 * Copyright (C) 2017-2018 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.
 *
 * ============LICENSE_END=========================================================
 */

package org.onap.appc.seqgen.impl;

import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
import org.onap.appc.domainmodel.Vserver;
import org.onap.appc.exceptions.APPCException;
import org.onap.appc.seqgen.SequenceGenerator;
import org.onap.appc.seqgen.objects.ActionIdentifier;
import org.onap.appc.seqgen.objects.Constants;
import org.onap.appc.seqgen.objects.Response;
import org.onap.appc.seqgen.objects.SequenceGeneratorInput;
import org.onap.appc.seqgen.objects.Transaction;;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

public class RestartSequenceGenerator implements SequenceGenerator{
    private static final EELFLogger logger = EELFManager.getInstance().getLogger(RestartSequenceGenerator.class);

    @Override
    public List<Transaction> generateSequence(SequenceGeneratorInput input) throws APPCException {
            logger.info("Generating sequence without dependency model");
            return generateSequenceWithOutDependency(input);
    }

    private List<Transaction> generateSequenceWithOutDependency(SequenceGeneratorInput input) {
        List<Transaction> transactionList = new LinkedList<>();
        Integer transactionId = 1;
        List<Vserver> vservers = input.getInventoryModel().getVnf().getVservers();
        List<Integer> transactionIds = new LinkedList<>();
            for (Vserver vm : vservers) {
                Transaction transactionStop = new Transaction();
                transactionStop.setTransactionId(transactionId);
                transactionIds.add(transactionId++);
                transactionStop.setAction(Constants.Action.STOP.getActionType());
                transactionStop.setActionLevel(Constants.ActionLevel.VM.getAction());
                ActionIdentifier actionIdentifier = new ActionIdentifier();
                actionIdentifier.setvServerId(vm.getId());
                transactionStop.setActionIdentifier(actionIdentifier);
                transactionStop.setPayload(input.getRequestInfo().getPayload());
                if (vservers.size()>1) {
                    Response failureResponse = new Response();
                    failureResponse.setResponseMessage(Constants.ResponseMessage.FAILURE.getResponse());
                    Map<String,String> failureAction = new HashMap<>();
                    if(!checkLastVM(vservers,vm.getId()))
                    {
                        failureAction.put(Constants.ResponseAction.JUMP.getAction(), String.valueOf(transactionId+1));
                        failureResponse.setResponseAction(failureAction);
                        transactionStop.addResponse(failureResponse);
                    }
                }
                transactionList.add(transactionStop);
                Transaction transactionStart = new Transaction();
                transactionStart.setTransactionId(transactionId);
                transactionIds.add(transactionId++);
                transactionStart.setAction(Constants.Action.START.getActionType());
                transactionStart.setActionLevel(Constants.ActionLevel.VM.getAction());
                ActionIdentifier actionIdentifierStart = new ActionIdentifier();
                actionIdentifierStart.setvServerId(vm.getId());
                transactionStart.setActionIdentifier(actionIdentifierStart);
                transactionStart.setPayload(input.getRequestInfo().getPayload());
                if (vservers.size()>1) {
                    Response failureResponse = new Response();
                    failureResponse.setResponseMessage(Constants.ResponseMessage.FAILURE.getResponse());
                    Map<String,String> failureAction = new HashMap<>();
                    if(!checkLastVM(vservers,vm.getId()))
                    {
                        failureAction.put(Constants.ResponseAction.JUMP.getAction(),transactionId.toString());
                        failureResponse.setResponseAction(failureAction);
                        transactionStart.addResponse(failureResponse);
                    }
                }
                transactionList.add(transactionStart);
            }
        return transactionList;
    }

    private boolean checkLastVM(List<Vserver> vservers, String  vmId){
        Vserver vm= vservers.get(vservers.size()-1);
        return vm.getId().equals(vmId);
    }
}