Modified scm section.
[unimgr.git] / impl / src / main / java / org / opendaylight / vcpe / impl / VcpeDataChangeListener.java
1 /*
2  * Copyright (c) 2015 CableLabs 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.vcpe.impl;
9
10 import java.util.ArrayList;
11 import java.util.HashMap;
12 import java.util.List;
13 import java.util.Map;
14
15 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
16 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
17 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
18 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
19 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
20 import org.opendaylight.vcpe.api.IVcpeDataChangeListener;
21 import org.opendaylight.vcpe.command.Command;
22 import org.opendaylight.vcpe.command.EvcCreateCommand;
23 import org.opendaylight.vcpe.command.EvcDeleteCommand;
24 import org.opendaylight.vcpe.command.EvcUpdateCommand;
25 import org.opendaylight.vcpe.command.TransactionInvoker;
26 import org.opendaylight.vcpe.command.UniCreateCommand;
27 import org.opendaylight.vcpe.command.UniDeleteCommand;
28 import org.opendaylight.vcpe.command.UniUpdateCommand;
29 import org.opendaylight.yangtools.concepts.ListenerRegistration;
30 import org.opendaylight.yangtools.yang.binding.DataObject;
31 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35 public class VcpeDataChangeListener  implements IVcpeDataChangeListener {
36
37     private static final Logger LOG = LoggerFactory.getLogger(VcpeDataChangeListener.class);
38     private Map<String, ListenerRegistration<DataChangeListener>> listeners;
39     private DataBroker dataBroker;
40     private TransactionInvoker invoker;
41
42     public VcpeDataChangeListener(DataBroker dataBroker, TransactionInvoker invoker) {
43         this.dataBroker = dataBroker;
44         this.invoker = invoker;
45         listeners = new HashMap<String, ListenerRegistration<DataChangeListener>>();
46         ListenerRegistration<DataChangeListener> uniListener = dataBroker.registerDataChangeListener(
47                 LogicalDatastoreType.CONFIGURATION, VcpeMapper.getUnisIid()
48                 , this, DataChangeScope.SUBTREE);
49         ListenerRegistration<DataChangeListener> evcListener = dataBroker.registerDataChangeListener(
50                 LogicalDatastoreType.CONFIGURATION, VcpeMapper.getEvcIid()
51                 , this, DataChangeScope.SUBTREE);
52         ListenerRegistration<DataChangeListener> ovsdbListener = dataBroker.registerDataChangeListener(
53                 LogicalDatastoreType.OPERATIONAL, VcpeMapper.getOvsdbTopologyIdentifier()
54                 , this, DataChangeScope.SUBTREE);
55         listeners.put("uni", uniListener);
56         listeners.put("evc", evcListener);
57         listeners.put("ovsdb", ovsdbListener);
58     }
59
60     @Override
61     public void onDataChanged(
62             AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
63         create(change.getCreatedData());
64         update(change.getUpdatedData());
65         delete(change);
66     }
67
68     @Override
69     public void create(Map<InstanceIdentifier<?>, DataObject> changes) {
70         if (changes != null) {
71             List<Command> commands = new ArrayList<Command>();
72             commands.add(new UniCreateCommand(dataBroker, changes));
73             commands.add(new EvcCreateCommand(dataBroker, changes));
74             invoker.setCommands(commands);
75             invoker.invoke();
76         }
77     }
78
79     @Override
80     public void update(Map<InstanceIdentifier<?>, DataObject> changes) {
81         if (changes != null) {
82             List<Command> commands = new ArrayList<Command>();
83             commands.add(new UniUpdateCommand(dataBroker, changes));
84             commands.add(new EvcUpdateCommand(dataBroker, changes));
85             invoker.setCommands(commands);
86             invoker.invoke();
87         }
88     }
89
90     @Override
91     public void delete(
92             AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
93         if (changes != null) {
94             List<Command> commands = new ArrayList<Command>();
95             commands.add(new UniDeleteCommand(dataBroker, changes));
96             commands.add(new EvcDeleteCommand(dataBroker, changes));
97             invoker.setCommands(commands);
98             invoker.invoke();
99         }
100     }
101
102     @Override
103     public void close() throws Exception {
104         LOG.info("VcpeDataChangeListener stopped.");
105         for (Map.Entry<String, ListenerRegistration<DataChangeListener>> entry : listeners.entrySet()) {
106             ListenerRegistration<DataChangeListener> value = entry.getValue();
107             if (value != null) {
108                 value.close();
109             }
110         }
111     }
112 }