Merge from ECOMP's repository
[vid.git] / vid-app-common / src / main / java / org / onap / vid / job / command / BaseInProgressStatusCommand.java
1 package org.onap.vid.job.command;
2
3 import com.google.common.collect.ImmutableMap;
4 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
5 import org.onap.vid.job.*;
6 import org.onap.vid.job.impl.JobSharedData;
7 import org.onap.vid.mso.RestMsoImplementation;
8 import org.onap.vid.mso.RestObject;
9 import org.onap.vid.mso.rest.AsyncRequestStatus;
10 import org.onap.vid.services.AsyncInstantiationBusinessLogic;
11 import org.togglz.core.manager.FeatureManager;
12
13 import javax.inject.Inject;
14 import java.util.Map;
15
16 public abstract class BaseInProgressStatusCommand extends BaseInstantiationCommand implements JobCommand {
17     private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(BaseInProgressStatusCommand.class);
18
19     @Inject
20     protected AsyncInstantiationBusinessLogic asyncInstantiationBL;
21
22     @Inject
23     protected JobsBrokerService jobsBrokerService;
24
25     @Inject
26     protected JobAdapter jobAdapter;
27
28     @Inject
29     protected RestMsoImplementation restMso;
30
31     @Inject
32     protected FeatureManager featureManager;
33
34     @Inject
35     protected InProgressStatusService inProgressStatusService;
36
37
38     protected String requestId;
39
40     protected String instanceId;
41
42
43     @Override
44     public NextCommand call() {
45
46         try {
47             Job.JobStatus jobStatus =  inProgressStatusService.call(getExpiryChecker(), getSharedData(), requestId);
48             return processJobStatus(jobStatus);
49         } catch (javax.ws.rs.ProcessingException e) {
50             // Retry when we can't connect MSO during getStatus
51             LOGGER.error(EELFLoggerDelegate.errorLogger, "Cannot get orchestration status for {}, will retry: {}", requestId, e, e);
52             return new NextCommand(Job.JobStatus.IN_PROGRESS, this);
53         } catch (InProgressStatusService.BadResponseFromMso e) {
54             return handleFailedMsoResponse(e.getMsoResponse());
55         }
56         catch (RuntimeException e) {
57             LOGGER.error(EELFLoggerDelegate.errorLogger, "Cannot get orchestration status for {}, stopping: {}", requestId, e, e);
58             return new NextCommand(Job.JobStatus.STOPPED, this);
59         }
60     }
61
62     protected abstract ExpiryChecker getExpiryChecker();
63
64     abstract NextCommand processJobStatus(Job.JobStatus jobStatus);
65
66     private NextCommand handleFailedMsoResponse(RestObject<AsyncRequestStatus> msoResponse) {
67         inProgressStatusService.handleFailedMsoResponse(getSharedData().getJobUuid(), requestId, msoResponse);
68         return new NextCommand(Job.JobStatus.IN_PROGRESS, this);
69     }
70
71     @Override
72     public BaseInProgressStatusCommand init(JobSharedData sharedData, Map<String, Object> commandData) {
73         return init(sharedData, (String) commandData.get("requestId"), (String) commandData.get("instanceId"));
74     }
75
76
77     protected BaseInProgressStatusCommand init(JobSharedData sharedData,
78                                                String requestId,
79                                                String instanceId) {
80         init(sharedData);
81         this.requestId = requestId;
82         this.instanceId = instanceId;
83         return this;
84     }
85
86     @Override
87     public Map<String, Object> getData() {
88         return ImmutableMap.of(
89             "requestId", requestId,
90             "instanceId", instanceId
91         );
92     }
93
94
95 }