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 / L2vpnXconnectDriverBuilder.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.L2vpnXconnectActivator;
18 import org.opendaylight.unimgr.mef.nrp.common.FixedServiceNaming;
19 import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.forwarding.constructs.ForwardingConstruct;
20 import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
21
22 import java.util.Optional;
23
24 import static org.opendaylight.unimgr.utils.CapabilitiesService.NodeContext.NodeCapability.NETCONF;
25 import static org.opendaylight.unimgr.utils.CapabilitiesService.Capability.Mode.AND;
26 import static org.opendaylight.unimgr.utils.CapabilitiesService.NodeContext.NodeCapability.NETCONF_CISCO_IOX_IFMGR;
27 import static org.opendaylight.unimgr.utils.CapabilitiesService.NodeContext.NodeCapability.NETCONF_CISCO_IOX_L2VPN;
28
29 /**
30  * Xconnect builder
31  * @author bartosz.michalik@amartus.com
32  */
33 public class L2vpnXconnectDriverBuilder implements ActivationDriverBuilder {
34
35     private final DataBroker dataBroker;
36
37     private final FixedServiceNaming namingProvider;
38
39     private L2vpnXconnectActivator xconnectActivator;
40
41     public L2vpnXconnectDriverBuilder(DataBroker dataBroker, MountPointService mountPointService) {
42         this.dataBroker = dataBroker;
43         xconnectActivator = new L2vpnXconnectActivator(dataBroker, mountPointService);
44         namingProvider = new FixedServiceNaming();
45     }
46
47     @Override
48     public Optional<ActivationDriver> driverFor(FcPort port, BuilderContext _ctx) {
49         if (new CapabilitiesService(dataBroker).nodeByPort(port).isSupporting(AND, NETCONF, NETCONF_CISCO_IOX_IFMGR, NETCONF_CISCO_IOX_L2VPN)) {
50             return Optional.of(getDriver());
51         }
52
53         return Optional.empty();
54     }
55
56     @Override
57     public Optional<ActivationDriver> driverFor(FcPort aPort, FcPort zPort, BuilderContext context) {
58         return Optional.empty();
59     }
60
61     protected ActivationDriver getDriver() {
62         final ActivationDriver driver = new ActivationDriver() {
63             public ForwardingConstruct ctx;
64             public FcPort aEnd;
65             public FcPort zEnd;
66
67             @Override
68             public void commit() {
69                 //ignore for the moment
70             }
71
72             @Override
73             public void rollback() {
74                 //ignore for the moment
75             }
76
77             @Override
78             public void initialize(FcPort from, FcPort to, ForwardingConstruct ctx) {
79                 this.zEnd = to;
80                 this.aEnd = from;
81                 this.ctx = ctx;
82             }
83
84             @Override
85             public void activate() throws TransactionCommitFailedException {
86                 String id = ctx.getUuid();
87                 long mtu = 1500;
88                 String outerName = namingProvider.getOuterName(id);
89                 String innerName = namingProvider.getInnerName(id);
90
91                 String aEndNodeName = aEnd.getNode().getValue();
92                 xconnectActivator.activate(aEndNodeName, outerName, innerName, aEnd, zEnd, mtu);
93
94             }
95
96             @Override
97             public void deactivate() throws TransactionCommitFailedException {
98                 String id = ctx.getUuid();
99                 long mtu = 1500;
100                 String outerName = namingProvider.getOuterName(id);
101                 String innerName = namingProvider.getInnerName(id);
102
103                 String aEndNodeName = aEnd.getNode().getValue();
104                 xconnectActivator.deactivate(aEndNodeName, outerName, innerName, aEnd, zEnd, mtu);
105             }
106
107             @Override
108             public int priority() {
109                 return 0;
110             }
111         };
112
113         return driver;
114     }
115 }