2 * Copyright © 2017 AT&T and others. All rights reserved.
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
8 package org.opendaylight.transportpce.renderer.provisiondevice.tasks;
10 import java.util.ArrayList;
11 import java.util.Collection;
12 import java.util.HashMap;
13 import java.util.List;
15 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
16 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.RendererRollbackInput;
17 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.RendererRollbackInputBuilder;
18 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.RendererRollbackOutput;
19 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev210618.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;
25 public class DeviceRenderingRollbackTask extends RollbackTask {
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;
32 public DeviceRenderingRollbackTask(String id, boolean isRollbackNecessary, List<NodeInterface> renderedInterfaces,
33 DeviceRendererService rendererService) {
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);
48 public boolean isRollbackNecessary() {
49 return isRollbackNecessary;
53 public Void call() throws Exception {
54 RendererRollbackInput rollbackInput = new RendererRollbackInputBuilder()
55 .setNodeInterface(this.renderedInterfaces)
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()));
62 LOG.info("Device rollback of {} successful.", this.getId());
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()));
73 return String.join(System.lineSeparator(), failedRollbackNodes);