93d6c51846a7ab5818a1976b11fcf7cac9f191a4
[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.List;
12 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
13 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev170228.RendererRollbackInput;
14 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev170228.RendererRollbackInputBuilder;
15 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev170228.RendererRollbackOutput;
16 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev170228.renderer.rollback.output.FailedToRollback;
17 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.node.interfaces.NodeInterface;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
20
21 public class DeviceRenderingRollbackTask extends RollbackTask {
22
23     private static final Logger LOG = LoggerFactory.getLogger(DeviceRenderingRollbackTask.class);
24     private final boolean isRollbackNecessary;
25     private final DeviceRendererService rendererService;
26     private final List<NodeInterface> renderedInterfaces;
27
28     public DeviceRenderingRollbackTask(String id, boolean isRollbackNecessary, List<NodeInterface> renderedInterfaces,
29             DeviceRendererService rendererService) {
30         super(id);
31         this.isRollbackNecessary = isRollbackNecessary;
32         this.rendererService = rendererService;
33         this.renderedInterfaces = renderedInterfaces;
34     }
35
36     @Override
37     public boolean isRollbackNecessary() {
38         return isRollbackNecessary;
39     }
40
41     @Override
42     public Void call() throws Exception {
43         RendererRollbackInput rollbackInput = new RendererRollbackInputBuilder()
44                 .setNodeInterface(this.renderedInterfaces)
45                 .build();
46         RendererRollbackOutput rollbackOutput = this.rendererService.rendererRollback(rollbackInput);
47         if (! rollbackOutput.isSuccess()) {
48             LOG.warn("Device rendering rollback of {} was not successful! Failed rollback on {}.", this.getId(),
49                     createErrorMessage(rollbackOutput.getFailedToRollback()));
50         } else {
51             LOG.info("Device rollback of {} successful.", this.getId());
52         }
53         return null;
54     }
55
56     private String createErrorMessage(List<FailedToRollback> failedRollbacks) {
57         List<String> failedRollbackNodes = new ArrayList<>();
58         failedRollbacks.forEach(failedRollback -> {
59             String nodeId = failedRollback.getNodeId();
60             failedRollbackNodes.add(nodeId + ": " + String.join(", ", failedRollback.getInterface()));
61         });
62         return String.join(System.lineSeparator(), failedRollbackNodes);
63     }
64
65 }