Refactoring of cisco-xr-driver and impl modules.
[unimgr.git] / cisco-xr-driver / src / main / java / org / opendaylight / unimgr / mef / nrp / cisco / xr / l2vpn / driver / L2vpnBridgeDriverBuilder.java
1 /*
2  * Copyright (c) 2016 Cisco Systems Inc 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
9 package org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.driver;
10
11 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
12 import org.opendaylight.controller.md.sal.binding.api.MountPointService;
13 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
14 import org.opendaylight.unimgr.mef.nrp.api.ActivationDriver;
15 import org.opendaylight.unimgr.mef.nrp.api.ActivationDriverBuilder;
16 import org.opendaylight.unimgr.utils.CapabilitiesService;
17 import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.activator.L2vpnBridgeActivator;
18 import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.forwarding.constructs.ForwardingConstruct;
19 import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
20
21 import java.util.Optional;
22
23 import static org.opendaylight.unimgr.utils.CapabilitiesService.Capability.Mode.AND;
24 import static org.opendaylight.unimgr.utils.CapabilitiesService.NodeContext.NodeCapability.*;
25
26 /**
27  * Provides drivers for binding two ports on the same node.
28  * @author bartosz.michalik@amartus.com
29  */
30 public class L2vpnBridgeDriverBuilder implements ActivationDriverBuilder {
31
32     private final DataBroker dataBroker;
33
34     private L2vpnBridgeActivator activator;
35
36     private static final String GROUP_NAME = "local";
37
38     public L2vpnBridgeDriverBuilder(DataBroker dataBroker, MountPointService mountPointService) {
39         this.dataBroker = dataBroker;
40         activator = new L2vpnBridgeActivator(dataBroker, mountPointService);
41     }
42
43     @Override
44     public Optional<ActivationDriver> driverFor(FcPort port, BuilderContext _ctx) {
45         return Optional.empty();
46     }
47
48     @Override
49     public Optional<ActivationDriver> driverFor(FcPort aPort, FcPort zPort, BuilderContext context) {
50         CapabilitiesService capabilitiesService = new CapabilitiesService(dataBroker);
51
52         if (capabilitiesService.nodeByPort(aPort).isSupporting(AND, NETCONF, NETCONF_CISCO_IOX_IFMGR, NETCONF_CISCO_IOX_L2VPN) &&
53             capabilitiesService.nodeByPort(zPort).isSupporting(AND, NETCONF, NETCONF_CISCO_IOX_IFMGR, NETCONF_CISCO_IOX_L2VPN)) {
54                 return Optional.of(getDriver());
55         }
56
57         return Optional.empty();
58     }
59
60     protected ActivationDriver getDriver() {
61         final ActivationDriver driver = new ActivationDriver() {
62             public FcPort aEnd;
63             public FcPort zEnd;
64
65             @Override
66             public void commit() {
67                 //ignore for the moment
68             }
69
70             @Override
71             public void rollback() {
72                 //ignore for the moment
73             }
74
75             @Override
76             public void initialize(FcPort from, FcPort to, ForwardingConstruct ctx) {
77                 this.zEnd = to;
78                 this.aEnd = from;
79             }
80
81             @Override
82             public void activate() throws TransactionCommitFailedException {
83                 long mtu = 1500;
84
85                 String aEndNodeName = aEnd.getNode().getValue();
86                 activator.activate(aEndNodeName, GROUP_NAME, GROUP_NAME, aEnd, zEnd, mtu);
87             }
88
89             @Override
90             public void deactivate() throws TransactionCommitFailedException {
91                 long mtu = 1500;
92
93                 String aEndNodeName = aEnd.getNode().getValue();
94                 activator.deactivate(aEndNodeName, GROUP_NAME, GROUP_NAME, aEnd, zEnd, mtu);
95             }
96
97             @Override
98             public int priority() {
99                 return 0;
100             }
101         };
102         return driver;
103     }
104 }