Merge "Refactor a few renderer RPCs"
[transportpce.git] / networkmodel / src / main / java / org / opendaylight / transportpce / networkmodel / listeners / PortMappingListener.java
1 /*
2  * Copyright © 2021 Orange.  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.networkmodel.listeners;
9
10 import java.util.LinkedList;
11 import java.util.List;
12 import org.eclipse.jdt.annotation.NonNull;
13 import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
14 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
15 import org.opendaylight.mdsal.binding.api.DataTreeModification;
16 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
17 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
18 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
19 import org.opendaylight.yangtools.yang.binding.DataObjectStep;
20 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
21
22 public class PortMappingListener implements DataTreeChangeListener<Mapping> {
23
24     private final NetworkModelService networkModelService;
25
26     public PortMappingListener(NetworkModelService networkModelService) {
27         this.networkModelService = networkModelService;
28     }
29
30     @Override
31     public void onDataTreeChanged(@NonNull List<DataTreeModification<Mapping>> changes) {
32         for (DataTreeModification<Mapping> change : changes) {
33             Mapping oldMapping = change.getRootNode().dataBefore();
34             if (oldMapping == null) {
35                 continue;
36             }
37             Mapping newMapping = change.getRootNode().dataAfter();
38             if (newMapping == null) {
39                 continue;
40             }
41             if (oldMapping.getPortAdminState().equals(newMapping.getPortAdminState())
42                     && oldMapping.getPortOperState().equals(newMapping.getPortOperState())) {
43                 return;
44             }
45             networkModelService.updateOpenRoadmTopologies(
46                 getNodeIdFromMappingDataTreeIdentifier(change.getRootPath()),
47                 newMapping);
48         }
49     }
50
51     protected String getNodeIdFromMappingDataTreeIdentifier(DataTreeIdentifier<Mapping> dataTreeIdentifier) {
52         LinkedList<DataObjectStep<?>> path = new LinkedList<>();
53         dataTreeIdentifier.path().getPathArguments().forEach(p -> path.add(p));
54         path.removeLast();
55         InstanceIdentifier<Nodes> portMappingNodeID = InstanceIdentifier.unsafeOf(path);
56         return InstanceIdentifier.keyOf(portMappingNodeID).getNodeId();
57     }
58 }