Add IfNewHostNotify to DeviceManager
[controller.git] / opendaylight / usermanager / src / main / java / org / opendaylight / controller / usermanager / security / SessionManager.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, 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
9 package org.opendaylight.controller.usermanager.security;
10
11 import java.util.ArrayList;
12 import java.util.HashMap;
13 import java.util.HashSet;
14 import java.util.Iterator;
15 import java.util.List;
16 import java.util.Map;
17 import java.util.Map.Entry;
18 import java.util.Set;
19
20 import javax.servlet.ServletContext;
21 import javax.servlet.http.HttpSession;
22 import javax.servlet.http.HttpSessionEvent;
23
24 import org.opendaylight.controller.usermanager.ISessionManager;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
27
28 public class SessionManager implements ISessionManager {
29
30     private static final Logger logger = LoggerFactory
31             .getLogger(SessionManager.class);
32
33     private Map<ServletContext, Set<HttpSession>> sessionMap = new HashMap<ServletContext, Set<HttpSession>>();
34
35     @Override
36     public void sessionCreated(HttpSessionEvent se) {
37
38         ServletContext ctx = se.getSession().getServletContext();
39         String path = ctx.getContextPath();
40
41         logger.debug("Servlet Context Path created {}", path);
42         logger.debug("Session Id created for ctxt path {}",
43                 se.getSession().getId());
44
45         synchronized (sessionMap) {
46             Set<HttpSession> set = sessionMap.get(ctx);
47             if (set == null) {
48                 set = new HashSet<HttpSession>();
49                 sessionMap.put(ctx, set);
50             }
51             set.add(se.getSession());
52         }
53     }
54
55     @Override
56     public void sessionDestroyed(HttpSessionEvent se) {
57         ServletContext ctx = se.getSession().getServletContext();
58         String path = ctx.getContextPath();
59         logger.debug("Servlet Context Path of destroyed session - {}", path);
60         logger.debug("Session Id destroyed {}", se.getSession().getId());
61
62         synchronized (sessionMap) {
63             Set<HttpSession> set = sessionMap.get(ctx);
64             if (set != null) {
65                 set.remove(se.getSession());
66             }
67         }
68     }
69
70     @Override
71     public void invalidateSessions(String username, String sessionId) {
72
73         synchronized (sessionMap) {
74             List<HttpSession> sessionsList = new ArrayList<HttpSession>();
75             Iterator<Map.Entry<ServletContext, Set<HttpSession>>> sessMapIterator = sessionMap
76                     .entrySet().iterator();
77             while (sessMapIterator.hasNext()) {
78
79                 Entry<ServletContext, Set<HttpSession>> val = sessMapIterator
80                         .next();
81                 Iterator<HttpSession> sessIterator = val.getValue().iterator();
82
83                 while (sessIterator.hasNext()) {
84                     HttpSession session = sessIterator.next();
85                     if (session != null && sessionId != null && session.getId() != null && !session.getId().equals(sessionId)) {
86                         sessionsList.add(session);
87                         sessIterator.remove();
88                     }
89                     else {
90                         logger.debug(" session or sessionId is null ");
91                     }
92                 }
93             }
94
95             Iterator<HttpSession> sessionIt = sessionsList.iterator();
96             while (sessionIt.hasNext()) {
97                 HttpSession session = sessionIt.next();
98                 sessionIt.remove();
99                 session.invalidate();
100             }
101         }
102     }
103
104 }