1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.application.viewstate;
20
21 import java.util.Map;
22 import javax.faces.context.ExternalContext;
23 import javax.faces.context.FacesContext;
24 import org.apache.myfaces.shared.renderkit.RendererUtils;
25
26
27
28
29 class CounterKeyFactory extends KeyFactory<Integer>
30 {
31
32
33
34
35
36
37
38 @Override
39 public Integer generateKey(FacesContext facesContext)
40 {
41 ExternalContext externalContext = facesContext.getExternalContext();
42 Object sessionObj = externalContext.getSession(true);
43 Integer sequence = null;
44
45
46 synchronized (sessionObj)
47 {
48 Map<String, Object> map = externalContext.getSessionMap();
49 sequence = (Integer) map.get(RendererUtils.SEQUENCE_PARAM);
50 if (sequence == null || sequence.intValue() == Integer.MAX_VALUE)
51 {
52 sequence = Integer.valueOf(1);
53 }
54 else
55 {
56 sequence = Integer.valueOf(sequence.intValue() + 1);
57 }
58 map.put(RendererUtils.SEQUENCE_PARAM, sequence);
59 }
60 return sequence;
61 }
62
63 public String encode(Integer sequence)
64 {
65 return Integer.toString(sequence, Character.MAX_RADIX);
66 }
67
68 public Integer decode(String serverStateId)
69 {
70 return Integer.valueOf((String) serverStateId, Character.MAX_RADIX);
71 }
72
73 }