1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.view.facelets.pool.impl;
20
21 import java.util.ArrayList;
22 import java.util.HashMap;
23 import java.util.List;
24 import java.util.Map;
25 import javax.faces.component.UIViewRoot;
26 import javax.faces.context.FacesContext;
27 import org.apache.myfaces.config.RuntimeConfig;
28 import org.apache.myfaces.config.element.ViewPoolMapping;
29 import org.apache.myfaces.config.element.ViewPoolParameter;
30 import org.apache.myfaces.shared.util.ViewProtectionUtils;
31 import org.apache.myfaces.view.facelets.ViewPoolProcessor;
32 import org.apache.myfaces.view.facelets.pool.ViewPool;
33 import org.apache.myfaces.view.facelets.pool.ViewPoolFactory;
34
35
36
37
38 public class ViewPoolFactoryImpl extends ViewPoolFactory
39 {
40 private List<String> urlPatterns;
41 private List<ViewPool> viewPoolList;
42 private ViewPool defaultViewPool;
43
44 public ViewPoolFactoryImpl(FacesContext context)
45 {
46 RuntimeConfig runtimeConfig = RuntimeConfig.getCurrentInstance(context.getExternalContext());
47
48 if (runtimeConfig.getViewPoolMappings().isEmpty())
49 {
50 defaultViewPool = new ViewPoolImpl(context, new HashMap<String, String>());
51 }
52 urlPatterns = new ArrayList<String>();
53 viewPoolList = new ArrayList<ViewPool>();
54 for (ViewPoolMapping vpm : runtimeConfig.getViewPoolMappings())
55 {
56 urlPatterns.add(vpm.getUrlPattern());
57 Map<String,String> parameters = new HashMap<String, String>();
58 for (ViewPoolParameter param : vpm.getParameterList())
59 {
60 parameters.put(param.getName(), param.getValue());
61 }
62 viewPoolList.add(new ViewPoolImpl(context, parameters));
63 }
64 }
65
66 @Override
67 public ViewPool getViewPool(FacesContext context, UIViewRoot root)
68 {
69 for (int i = 0; i < urlPatterns.size(); i++)
70 {
71 String urlPattern = urlPatterns.get(i);
72 if (ViewProtectionUtils.matchPattern(root.getViewId(), urlPattern))
73 {
74 return viewPoolList.get(i);
75 }
76 }
77 if (defaultViewPool != null)
78 {
79
80
81
82 Boolean enableViewPool = (Boolean) root.getAttributes().get(ViewPoolProcessor.ENABLE_VIEW_POOL);
83 if (enableViewPool == null)
84 {
85 return null;
86 }
87 return defaultViewPool;
88 }
89 return null;
90 }
91 }