Manage ODU4 services over multiple OTU4
[transportpce.git] / renderer / src / main / java / org / opendaylight / transportpce / renderer / provisiondevice / tasks / DeviceRenderingRollbackTask.java
1 /*
2  * Copyright © 2017 AT&T and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.transportpce.renderer.provisiondevice.tasks;
9
10 import java.util.ArrayList;
11 import java.util.Collection;
12 import java.util.HashMap;
13 import java.util.List;
14 import java.util.Map;
15 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
16 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInput;
17 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInputBuilder;
18 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackOutput;
19 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.renderer.rollback.output.FailedToRollback;
20 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.node.interfaces.NodeInterface;
21 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.node.interfaces.NodeInterfaceKey;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
24
25 public class DeviceRenderingRollbackTask extends RollbackTask {
26
27     private static final Logger LOG = LoggerFactory.getLogger(DeviceRenderingRollbackTask.class);
28     private final boolean isRollbackNecessary;
29     private final DeviceRendererService rendererService;
30     private final Map<NodeInterfaceKey,NodeInterface> renderedInterfaces;
31
32     public DeviceRenderingRollbackTask(String id, boolean isRollbackNecessary, List<NodeInterface> renderedInterfaces,
33             DeviceRendererService rendererService) {
34         super(id);
35         this.isRollbackNecessary = isRollbackNecessary;
36         this.rendererService = rendererService;
37         this.renderedInterfaces = new HashMap<>();
38         if (renderedInterfaces != null) {
39             for (NodeInterface nodeInterface : renderedInterfaces) {
40                 if (nodeInterface != null) {
41                     this.renderedInterfaces.put(nodeInterface.key(), nodeInterface);
42                 }
43             }
44         }
45     }
46
47     @Override
48     public boolean isRollbackNecessary() {
49         return isRollbackNecessary;
50     }
51
52     @Override
53     public Void call() throws Exception {
54         RendererRollbackInput rollbackInput = new RendererRollbackInputBuilder()
55                 .setNodeInterface(this.renderedInterfaces)
56                 .build();
57         RendererRollbackOutput rollbackOutput = this.rendererService.rendererRollback(rollbackInput);
58         if (! rollbackOutput.getSuccess()) {
59             LOG.warn("Device rendering rollback of {} was not successful! Failed rollback on {}.", this.getId(),
60                     createErrorMessage(rollbackOutput.nonnullFailedToRollback().values()));
61         } else {
62             LOG.info("Device rollback of {} successful.", this.getId());
63         }
64         return null;
65     }
66
67     private String createErrorMessage(Collection<FailedToRollback> failedRollbacks) {
68         List<String> failedRollbackNodes = new ArrayList<>();
69         failedRollbacks.forEach(failedRollback -> {
70             String nodeId = failedRollback.getNodeId();
71             failedRollbackNodes.add(nodeId + ": " + String.join(", ", failedRollback.getInterface()));
72         });
73         return String.join(System.lineSeparator(), failedRollbackNodes);
74     }
75
76 }