Merge "Fix for Bug 3"
[controller.git] / opendaylight / md-sal / topology-lldp-discovery / src / main / java / org / opendaylight / md / controller / topology / lldp / LLDPLinkAger.java
1 package org.opendaylight.md.controller.topology.lldp;
2
3 import java.util.Date;
4 import java.util.Map;
5 import java.util.Timer;
6 import java.util.Map.Entry;
7 import java.util.TimerTask;
8 import java.util.concurrent.ConcurrentHashMap;
9
10 import org.opendaylight.md.controller.topology.lldp.utils.LLDPDiscoveryUtils;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.topology.discovery.rev130819.LinkDiscovered;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.topology.discovery.rev130819.LinkRemovedBuilder;
13
14
15 public class LLDPLinkAger {
16     private static final LLDPLinkAger instance = new LLDPLinkAger();
17     private Map<LinkDiscovered,Date> linkToDate = new ConcurrentHashMap<LinkDiscovered,Date>();
18     private LLDPDiscoveryProvider manager;
19     private Timer timer = new Timer();
20
21     public LLDPDiscoveryProvider getManager() {
22         return manager;
23     }
24     public void setManager(LLDPDiscoveryProvider manager) {
25         this.manager = manager;
26     }
27     private LLDPLinkAger() {
28         timer.schedule(new LLDPAgingTask(), 0,LLDPDiscoveryUtils.LLDP_INTERVAL);
29     }
30     public static LLDPLinkAger getInstance() {
31         return instance;
32     }
33     
34     public void put(LinkDiscovered link) {
35         Date expires = new Date();
36         expires.setTime(expires.getTime() + LLDPDiscoveryUtils.LLDP_EXPIRATION_TIME);
37         linkToDate.put(link, expires);
38     }
39     
40     public void close() {
41         timer.cancel();
42     }
43     
44     private class LLDPAgingTask extends TimerTask {
45
46         @Override
47         public void run() {
48             for (Entry<LinkDiscovered,Date> entry : linkToDate.entrySet()) {
49                 LinkDiscovered link = entry.getKey();
50                 Date expires = entry.getValue();
51                 Date now = new Date();
52                 if(now.after(expires)) {
53                     if(getInstance().getManager() != null) {
54                         LinkRemovedBuilder lrb = new LinkRemovedBuilder(link);
55                         getInstance().getManager().getNotificationService().publish(lrb.build());
56                         linkToDate.remove(link);
57                     }
58                 }
59             }
60             
61         }
62         
63     }
64 }
65