5ff6214cb479688de4a3e34350fd8674401854bd
[ovsdb.git] / openstack / net-virt / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / impl / NodeCacheManagerImpl.java
1 /*
2  * Copyright (C) 2015 Red Hat, Inc.
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  *  Authors : Flavio Fernandes
9  */
10 package org.opendaylight.ovsdb.openstack.netvirt.impl;
11
12 import com.google.common.collect.Lists;
13 import org.opendaylight.ovsdb.openstack.netvirt.AbstractEvent;
14 import org.opendaylight.ovsdb.openstack.netvirt.AbstractHandler;
15 import org.opendaylight.ovsdb.openstack.netvirt.NodeCacheManagerEvent;
16 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
17 import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheManager;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
21
22 import java.util.List;
23
24 public class NodeCacheManagerImpl extends AbstractHandler
25         implements NodeCacheManager {
26
27     private static final Logger logger = LoggerFactory.getLogger(NodeCacheManagerImpl.class);
28     private List<Node> nodeCache = Lists.newArrayList();
29
30
31     @Override
32     public void nodeAdded(String nodeIdentifier) {
33         logger.info("XXX >>>>> enqueue: Node added : {}", nodeIdentifier);
34         logger.debug(">>>>> enqueue: Node added : {}", nodeIdentifier);
35         enqueueEvent(new NodeCacheManagerEvent(nodeIdentifier, Action.ADD));
36     }
37     @Override
38     public void nodeRemoved(String nodeIdentifier) {
39         logger.info("XXX >>>>> enqueue: Node removed : {}", nodeIdentifier);
40         logger.debug(">>>>> enqueue: Node removed : {}", nodeIdentifier);
41         enqueueEvent(new NodeCacheManagerEvent(nodeIdentifier, Action.DELETE));
42     }
43     @Override
44     public List<Node> getNodes() {
45         return nodeCache;
46     }
47
48     void doNodeAdded(Node node) {
49         nodeCache.add(node);
50         logger.info("XXXX added node {}. cache is now {}", node, nodeCache);
51     }
52     void doNodeRemoved(Node node) {
53         nodeCache.remove(node);
54         logger.info("XXXX removed node {}. cache is now {}", node, nodeCache);
55     }
56
57     /**
58      * Process the event.
59      *
60      * @param abstractEvent the {@link org.opendaylight.ovsdb.openstack.netvirt.AbstractEvent} event to be handled.
61      * @see org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher
62      */
63     @Override
64     public void processEvent(AbstractEvent abstractEvent) {
65         if (!(abstractEvent instanceof NodeCacheManagerEvent)) {
66             logger.error("Unable to process abstract event " + abstractEvent);
67             return;
68         }
69         NodeCacheManagerEvent ev = (NodeCacheManagerEvent) abstractEvent;
70         logger.debug(">>>>> dequeue: {}", ev);
71         switch (ev.getAction()) {
72             case ADD:
73                 doNodeAdded(NodeUtils.getOpenFlowNode(ev.getNodeIdentifier()));
74                 break;
75             case DELETE:
76                 doNodeRemoved(NodeUtils.getOpenFlowNode(ev.getNodeIdentifier()));
77                 break;
78             case UPDATE:
79                 break;
80             default:
81                 logger.warn("Unable to process event action " + ev.getAction());
82                 break;
83         }
84     }
85 }