View Javadoc

1   /*
2    * $Id: AsyncRenderModeConverter.java,v 1.18 2011/06/16 09:29:40 jbmeslin Exp $
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   * @author Olivier Oeuillot (latest modification by $Author: jbmeslin $)
22   * @version $Revision: 1.18 $ $Date: 2011/06/16 09:29:40 $
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 }