1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.myfaces.shared.context.flash;
21
22 import java.io.Serializable;
23 import java.util.Map;
24 import javax.faces.FacesWrapper;
25 import javax.faces.context.FacesContext;
26 import javax.faces.context.Flash;
27 import org.apache.myfaces.shared.util.LRULinkedHashMap;
28
29
30
31
32 class ClientWindowFlashTokenLRUMap extends LRULinkedHashMap<String, String> implements Serializable
33 {
34 public ClientWindowFlashTokenLRUMap(int capacity)
35 {
36 super(capacity);
37 }
38
39 @Override
40 protected boolean removeEldestEntry(Map.Entry<String, String> eldest)
41 {
42 FacesContext facesContext = FacesContext.getCurrentInstance();
43 Flash flash = facesContext.getExternalContext().getFlash();
44 if (flash != null)
45 {
46 ReleasableFlash rf = null;
47 while (flash != null)
48 {
49 if (flash instanceof ReleasableFlash)
50 {
51 rf = (ReleasableFlash) flash;
52 break;
53 }
54 if (flash instanceof FacesWrapper)
55 {
56 flash = ((FacesWrapper<? extends Flash>) flash).getWrapped();
57 }
58 else
59 {
60 flash = null;
61 }
62 }
63 if (rf != null)
64 {
65 rf.clearFlashMap(facesContext, (String) eldest.getKey(), (String) eldest.getValue());
66 }
67 }
68
69 return super.removeEldestEntry(eldest);
70 }
71 }