Fixed UT and cleaned up code.
[ovsdb.git] / openstack / net-virt-providers / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / providers / NetvirtProvidersConfigImpl.java
1 /*
2  * Copyright (c) 2016 Red Hat, 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 package org.opendaylight.ovsdb.openstack.netvirt.providers;
9
10 import java.util.Map;
11 import java.util.concurrent.ExecutorService;
12 import java.util.concurrent.Executors;
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
14 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
15 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
16 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
17 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
18 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
19 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbInventoryListener;
20 import org.opendaylight.ovsdb.utils.mdsal.utils.MdsalUtils;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.providers.config.rev160109.*;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
23 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
24 import org.opendaylight.yangtools.concepts.ListenerRegistration;
25 import org.opendaylight.yangtools.yang.binding.DataObject;
26 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
27 import org.osgi.framework.BundleContext;
28 import org.osgi.framework.ServiceReference;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31
32 public class NetvirtProvidersConfigImpl implements AutoCloseable, ConfigInterface, DataChangeListener {
33     private static final Logger LOG = LoggerFactory.getLogger(NetvirtProvidersConfigImpl.class);
34     private final DataBroker dataBroker;
35     private final ListenerRegistration<DataChangeListener> registration;
36     private final ExecutorService executorService = Executors.newFixedThreadPool(1);
37     private final MdsalUtils mdsalUtils;
38
39     public NetvirtProvidersConfigImpl(final DataBroker dataBroker, final short tableOffset) {
40         this.dataBroker = dataBroker;
41         mdsalUtils = new MdsalUtils(dataBroker);
42
43         InstanceIdentifier<NetvirtProvidersConfig> path =
44                 InstanceIdentifier.builder(NetvirtProvidersConfig.class).build();
45         registration = dataBroker.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, path, this,
46                 AsyncDataBroker.DataChangeScope.SUBTREE);
47
48         NetvirtProvidersConfigBuilder netvirtProvidersConfigBuilder = new NetvirtProvidersConfigBuilder();
49         NetvirtProvidersConfig netvirtProvidersConfig =
50                 mdsalUtils.read(LogicalDatastoreType.CONFIGURATION, path);
51         if (netvirtProvidersConfig != null) {
52             netvirtProvidersConfigBuilder = new NetvirtProvidersConfigBuilder(netvirtProvidersConfig);
53         }
54         if (netvirtProvidersConfigBuilder.getTableOffset() == null) {
55             netvirtProvidersConfigBuilder.setTableOffset(tableOffset);
56         }
57         boolean result = mdsalUtils.merge(LogicalDatastoreType.CONFIGURATION, path,
58                 netvirtProvidersConfigBuilder.build());
59
60         LOG.info("NetvirtProvidersConfigImpl: dataBroker= {}, registration= {}, tableOffset= {}, result= {}",
61                 dataBroker, registration, tableOffset, result);
62     }
63
64     @Override
65     public void close() throws Exception {
66         registration.close();
67         executorService.shutdown();
68     }
69
70     @Override
71     public void onDataChanged(final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> asyncDataChangeEvent) {
72         executorService.submit(new Runnable() {
73
74             @Override
75             public void run() {
76                 LOG.info("onDataChanged: {}", asyncDataChangeEvent);
77                 processConfigCreate(asyncDataChangeEvent);
78                 processConfigUpdate(asyncDataChangeEvent);
79             }
80         });
81     }
82
83     private void processConfigCreate(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
84         for (Map.Entry<InstanceIdentifier<?>, DataObject> entry : changes.getCreatedData().entrySet()) {
85             if (entry.getValue() instanceof NetvirtProvidersConfig) {
86                 NetvirtProvidersConfig netvirtProvidersConfig = (NetvirtProvidersConfig) entry.getValue();
87                 applyConfig(netvirtProvidersConfig);
88             }
89         }
90     }
91
92     private void processConfigUpdate(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
93         for (Map.Entry<InstanceIdentifier<?>, DataObject> entry : changes.getUpdatedData().entrySet()) {
94             if (entry.getValue() instanceof NetvirtProvidersConfig) {
95                 LOG.info("processConfigUpdate: {}", entry);
96                 NetvirtProvidersConfig netvirtProvidersConfig = (NetvirtProvidersConfig) entry.getValue();
97                 applyConfig(netvirtProvidersConfig);
98             }
99         }
100     }
101
102     private void applyConfig(NetvirtProvidersConfig netvirtProvidersConfig) {
103         LOG.info("processConfigUpdate: {}", netvirtProvidersConfig);
104         if (netvirtProvidersConfig.getTableOffset() != null) {
105             NetvirtProvidersProvider.setTableOffset(netvirtProvidersConfig.getTableOffset());
106         }
107     }
108
109     @Override
110     public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
111
112     }
113
114     @Override
115     public void setDependencies(Object impl) {
116
117     }
118 }