re base code
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / impl / instance / ComponentInstanceChangeOperationOrchestrator.java
1 package org.openecomp.sdc.be.components.impl.instance;
2
3 import org.openecomp.sdc.be.dao.api.ActionStatus;
4 import org.openecomp.sdc.be.model.Component;
5 import org.openecomp.sdc.be.model.ComponentInstance;
6 import org.openecomp.sdc.common.log.wrappers.Logger;
7
8 import java.util.Iterator;
9 import java.util.List;
10 import java.util.function.Function;
11
12 @org.springframework.stereotype.Component
13 public class ComponentInstanceChangeOperationOrchestrator {
14
15     private static final Logger log = Logger.getLogger(ComponentInstanceChangeOperationOrchestrator.class);
16     private final List<OnComponentInstanceChangeOperation> onInstanceChangeOperations;
17
18     public ComponentInstanceChangeOperationOrchestrator(List<OnComponentInstanceChangeOperation> onInstanceChangeOperations) {
19         this.onInstanceChangeOperations = onInstanceChangeOperations;
20     }
21
22     public ActionStatus doPostChangeVersionOperations(Component container, ComponentInstance prevVersion, ComponentInstance newVersion) {
23         log.debug("#doPostChangeVersionOperations - starting post change version operations for component {}. from instance {} to instance {}", container.getUniqueId(), prevVersion.getUniqueId(), newVersion.getUniqueId());
24         Function<OnComponentInstanceChangeOperation, ActionStatus> instanceChangeTaskRunner = operation -> operation.onChangeVersion(container, prevVersion, newVersion);
25         return doOnChangeInstanceOperations(instanceChangeTaskRunner);
26     }
27
28     public ActionStatus doOnDeleteInstanceOperations(Component container, String deletedInstanceId) {
29         log.debug("#doPostChangeVersionOperations - starting on delete instance operations for component {} and instance {}.", container.getUniqueId(), deletedInstanceId);
30         Function<OnComponentInstanceChangeOperation, ActionStatus> instanceChangeTaskRunner = operation -> operation.onDelete(container, deletedInstanceId);
31         return doOnChangeInstanceOperations(instanceChangeTaskRunner);
32     }
33
34     private ActionStatus doOnChangeInstanceOperations(Function<OnComponentInstanceChangeOperation, ActionStatus> instanceChangeTaskRunner) {
35         ActionStatus onDeleteInstanceResult = ActionStatus.OK;
36         Iterator<OnComponentInstanceChangeOperation> onDeleteInstIter = onInstanceChangeOperations.iterator();
37         while(onDeleteInstIter.hasNext() && onDeleteInstanceResult == ActionStatus.OK) {
38             onDeleteInstanceResult = instanceChangeTaskRunner.apply(onDeleteInstIter.next());
39         }
40         return onDeleteInstanceResult;
41     }
42
43 }