Fixed EVC create
[unimgr.git] / impl / src / main / java / org / opendaylight / unimgr / impl / UnimgrDataChangeListener.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.unimgr.impl;
9
10 import java.util.ArrayList;
11 import java.util.HashSet;
12 import java.util.List;
13 import java.util.Map;
14 import java.util.Set;
15
16 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
17 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
18 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
19 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
20 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
21 import org.opendaylight.unimgr.api.IUnimgrDataChangeListener;
22 import org.opendaylight.unimgr.command.Command;
23 import org.opendaylight.unimgr.command.EvcCreateCommand;
24 import org.opendaylight.unimgr.command.EvcDeleteCommand;
25 import org.opendaylight.unimgr.command.EvcUpdateCommand;
26 import org.opendaylight.unimgr.command.TransactionInvoker;
27 import org.opendaylight.unimgr.command.UniCreateCommand;
28 import org.opendaylight.unimgr.command.UniDeleteCommand;
29 import org.opendaylight.unimgr.command.UniUpdateCommand;
30 import org.opendaylight.yangtools.concepts.ListenerRegistration;
31 import org.opendaylight.yangtools.yang.binding.DataObject;
32 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
35
36 public class UnimgrDataChangeListener  implements IUnimgrDataChangeListener {
37
38     private static final Logger LOG = LoggerFactory.getLogger(UnimgrDataChangeListener.class);
39     private Set<ListenerRegistration<DataChangeListener>> listeners;
40     private DataBroker dataBroker;
41     private TransactionInvoker invoker;
42
43     public UnimgrDataChangeListener(DataBroker dataBroker, TransactionInvoker invoker) {
44         this.dataBroker = dataBroker;
45         this.invoker = invoker;
46         listeners = new HashSet<ListenerRegistration<DataChangeListener>>();
47         listeners.add(dataBroker.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION,
48                                                             UnimgrMapper.getUniTopologyIid(),
49                                                             this,
50                                                             DataChangeScope.SUBTREE));
51         listeners.add(dataBroker.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION,
52                                                             UnimgrMapper.getEvcTopologyIid(),
53                                                             this,
54                                                             DataChangeScope.SUBTREE));
55         listeners.add(dataBroker.registerDataChangeListener(LogicalDatastoreType.OPERATIONAL,
56                                                             UnimgrMapper.getOvsdbTopologyIid(),
57                                                             this,
58                                                             DataChangeScope.SUBTREE));
59     }
60
61     @Override
62     public void onDataChanged(AsyncDataChangeEvent<InstanceIdentifier<?>,
63                               DataObject> change) {
64         create(change.getCreatedData());
65         update(change.getUpdatedData());
66         delete(change);
67     }
68
69     @Override
70     public void create(Map<InstanceIdentifier<?>,
71                        DataObject> changes) {
72         if (changes != null) {
73             List<Command> commands = new ArrayList<Command>();
74             Command uniCreate = new UniCreateCommand(dataBroker, changes);
75             Command evcCreate = new EvcCreateCommand(dataBroker, changes);
76             commands.add(uniCreate);
77             commands.add(evcCreate);
78             invoker.setCommands(commands);
79             invoker.invoke();
80         }
81     }
82
83     @Override
84     public void update(Map<InstanceIdentifier<?>,
85                        DataObject> changes) {
86         if (changes != null) {
87             List<Command> commands = new ArrayList<Command>();
88             Command uniUpdate = new UniUpdateCommand(dataBroker, changes);
89             Command evcUpdate = new EvcUpdateCommand(dataBroker, changes);
90             commands.add(uniUpdate);
91             commands.add(evcUpdate);
92             invoker.setCommands(commands);
93             invoker.invoke();
94         }
95     }
96
97     @Override
98     public void delete(AsyncDataChangeEvent<InstanceIdentifier<?>,
99                        DataObject> changes) {
100         if (changes != null) {
101             List<Command> commands = new ArrayList<Command>();
102             Command uniDelete = new UniDeleteCommand(dataBroker, changes);
103             Command evcDelete = new EvcDeleteCommand(dataBroker, changes);
104             commands.add(uniDelete);
105             commands.add(evcDelete);
106             invoker.setCommands(commands);
107             invoker.invoke();
108         }
109     }
110
111     @Override
112     public void close() throws Exception {
113         LOG.info("UnimgrDataChangeListener stopped.");
114         for (ListenerRegistration<DataChangeListener> listener : listeners) {
115             if (listener != null) {
116                 listener.close();
117             }
118         }
119     }
120 }