1
2
3
4
5 package org.rcfaces.core.internal.converter;
6
7 import java.util.HashMap;
8 import java.util.Iterator;
9 import java.util.Map;
10
11 import javax.faces.component.UIComponent;
12 import javax.faces.context.FacesContext;
13 import javax.faces.convert.Converter;
14
15 import org.rcfaces.core.component.capability.IAsyncRenderModeCapability;
16 import org.rcfaces.core.internal.Constants;
17 import org.rcfaces.core.internal.tools.AsyncModeTools;
18 import org.rcfaces.core.model.AbstractConverter;
19
20
21
22
23
24 public class AsyncRenderModeConverter extends AbstractConverter {
25 private static final String REVISION = "$Revision: 1.18 $";
26
27 private static final String NONE_ASYNC_RENDER_MODE_NAME = "none";
28
29 private static final String BUFFER_ASYNC_RENDER_MODE_NAME = "buffer";
30
31 private static final String TREE_ASYNC_RENDER_MODE_NAME = "tree";
32
33 private static final Integer DEFAULT_ASYNC_RENDER_MODE = new Integer(
34 Constants.DEFAULT_ASYNC_MODE);
35
36 private static final Integer ASYNC_MODE_ENABLE_VALUE = new Integer(
37 Constants.ENABLE_ASYNC_MODE_VALUE);
38
39 public static final Converter SINGLETON = new AsyncRenderModeConverter();
40
41 private static Map ASYNC_RENDER_MODES = new HashMap(5);
42 static {
43 ASYNC_RENDER_MODES.put(NONE_ASYNC_RENDER_MODE_NAME, new Integer(
44 IAsyncRenderModeCapability.NONE_ASYNC_RENDER_MODE));
45 ASYNC_RENDER_MODES.put(BUFFER_ASYNC_RENDER_MODE_NAME, new Integer(
46 IAsyncRenderModeCapability.BUFFER_ASYNC_RENDER_MODE));
47 ASYNC_RENDER_MODES.put(TREE_ASYNC_RENDER_MODE_NAME, new Integer(
48 IAsyncRenderModeCapability.TREE_ASYNC_RENDER_MODE));
49 }
50
51 public Object getAsObject(FacesContext context, UIComponent component,
52 String value) {
53
54 if (value == null || value.length() < 1) {
55 return DEFAULT_ASYNC_RENDER_MODE;
56 }
57
58 value = value.toLowerCase();
59
60 Integer i = (Integer) ASYNC_RENDER_MODES.get(value);
61 if (i != null) {
62 return i;
63 }
64
65 if ("default".equalsIgnoreCase(value)) {
66 return DEFAULT_ASYNC_RENDER_MODE;
67 }
68
69 if ("enabled".equalsIgnoreCase(value)) {
70 if (Constants.FACELETS_SUPPORT) {
71 return new Integer(AsyncModeTools.getEnableValue(context));
72 }
73
74 return ASYNC_MODE_ENABLE_VALUE;
75 }
76
77 throw new IllegalArgumentException("Keyword '" + value
78 + "' is not supported for a async-render type !");
79 }
80
81 public String getAsString(FacesContext context, UIComponent component,
82 Object value) {
83
84 if (value == null) {
85 return (String) ASYNC_RENDER_MODES.get(DEFAULT_ASYNC_RENDER_MODE);
86 }
87
88 if ((value instanceof Integer) == false) {
89 throw new IllegalArgumentException("Value must be an Integer !");
90 }
91
92 for (Iterator it = ASYNC_RENDER_MODES.entrySet().iterator(); it
93 .hasNext();) {
94 Map.Entry entry = (Map.Entry) it.next();
95
96 if (value.equals(entry.getValue())) {
97 return (String) entry.getKey();
98 }
99 }
100
101 throw new IllegalArgumentException("Value '" + value
102 + "' is not supported for a async-render-mode type !");
103 }
104
105 public static final String getName(int asyncRenderMode) {
106 switch (asyncRenderMode) {
107 case IAsyncRenderModeCapability.NONE_ASYNC_RENDER_MODE:
108 return NONE_ASYNC_RENDER_MODE_NAME;
109
110 case IAsyncRenderModeCapability.BUFFER_ASYNC_RENDER_MODE:
111 return BUFFER_ASYNC_RENDER_MODE_NAME;
112
113 case IAsyncRenderModeCapability.TREE_ASYNC_RENDER_MODE:
114 return TREE_ASYNC_RENDER_MODE_NAME;
115 }
116
117 return null;
118 }
119 }