View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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  }