Add implementation for flat L3 overlay
[groupbasedpolicy.git] / renderers / vpp / src / main / java / org / opendaylight / groupbasedpolicy / renderer / vpp / lisp / event / manager / GbpSubnetEventManager.java
1 /*
2  * Copyright (c) 2017 Cisco Systems. 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.groupbasedpolicy.renderer.vpp.lisp.event.manager;
10
11 import com.google.common.base.Preconditions;
12 import com.google.common.eventbus.Subscribe;
13 import org.opendaylight.groupbasedpolicy.renderer.vpp.event.GbpSubnetEvent;
14 import org.opendaylight.groupbasedpolicy.renderer.vpp.lisp.loopback.LoopbackManager;
15 import org.opendaylight.groupbasedpolicy.renderer.vpp.lisp.mappers.SubnetUuidToGbpSubnetMapper;
16 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.MountedDataBrokerProvider;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.GbpSubnet;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
20
21 import javax.annotation.Nonnull;
22
23 /**
24  * Created by Shakib Ahmed on 5/3/17.
25  */
26 public class GbpSubnetEventManager {
27     private static final Logger LOG = LoggerFactory.getLogger(GbpSubnetEventManager.class);
28
29     private SubnetUuidToGbpSubnetMapper subnetUuidToGbpSubnetInfoMapper;
30     private LoopbackManager loopbackManager;
31
32     public GbpSubnetEventManager(@Nonnull LoopbackManager loopbackManager) {
33         this.loopbackManager = loopbackManager;
34         this.subnetUuidToGbpSubnetInfoMapper = SubnetUuidToGbpSubnetMapper.getInstance();
35     }
36
37     @Subscribe
38     public synchronized void gbpSubnetChanged(GbpSubnetEvent event) {
39         final GbpSubnet oldGbpSubnet = event.getBefore().orNull();
40         final GbpSubnet newGbpSubnet = event.getAfter().orNull();
41
42         LOG.debug("GbpSubnet information updated.\nPrevious: {}\nPresent: {}\n", oldGbpSubnet, newGbpSubnet);
43
44         switch (event.getDtoModificationType()) {
45             case CREATED:
46                 Preconditions.checkNotNull(newGbpSubnet);
47                 processSubnetCreated(newGbpSubnet.getId(), newGbpSubnet);
48                 break;
49             case UPDATED:
50                 Preconditions.checkNotNull(oldGbpSubnet);
51                 Preconditions.checkNotNull(newGbpSubnet);
52                 processSubnetDeleted(oldGbpSubnet.getId());
53                 processSubnetCreated(newGbpSubnet.getId(), newGbpSubnet);
54                 break;
55             case DELETED:
56                 Preconditions.checkNotNull(oldGbpSubnet);
57                 processSubnetDeleted(oldGbpSubnet.getId());
58                 break;
59         }
60     }
61
62     private void processSubnetCreated(String subnetUuid, GbpSubnet subnetInfo) {
63         subnetUuidToGbpSubnetInfoMapper.addSubnetInfo(subnetUuid, subnetInfo);
64     }
65
66     private void processSubnetDeleted(String subnetUuid) {
67         subnetUuidToGbpSubnetInfoMapper.removeSubnetInfo(subnetUuid);
68         loopbackManager.deleteLoopbackIfExists(subnetUuid);
69     }
70 }