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  package org.apache.myfaces.custom.selectOneCountry;
20  
21  import java.io.IOException;
22  import java.util.List;
23  import java.util.Locale;
24  import java.util.Map;
25  import java.util.Set;
26  
27  import javax.faces.component.UIComponent;
28  import javax.faces.component.behavior.ClientBehavior;
29  import javax.faces.context.FacesContext;
30  import javax.faces.context.ResponseWriter;
31  import javax.faces.convert.Converter;
32  
33  import org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils;
34  import org.apache.myfaces.shared_tomahawk.renderkit.html.HTML;
35  import org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils;
36  import org.apache.myfaces.shared_tomahawk.renderkit.html.util.ResourceUtils;
37  import org.apache.myfaces.renderkit.html.ext.HtmlMenuRenderer;
38  
39  /**
40   * @JSFRenderer
41   *   renderKitId = "HTML_BASIC"
42   *   family = "javax.faces.SelectOne"
43   *   type = "org.apache.myfaces.SelectOneCountryRenderer"
44   * 
45   * @author Sylvain Vieujot (latest modification by $Author: skitching $)
46   * @version $Revision: 673833 $ $Date: 2008-07-03 16:58:05 -0500 (jue, 03 jul 2008) $
47   */
48  public class SelectOneCountryRenderer extends HtmlMenuRenderer {
49      
50      public void encodeEnd(FacesContext facesContext, UIComponent component)
51      throws IOException
52      {
53          RendererUtils.checkParamValidity(facesContext, component, null);
54  
55          SelectOneCountry selectOneCountry = (SelectOneCountry) component;
56          ResponseWriter writer = facesContext.getResponseWriter();
57  
58          Map<String, List<ClientBehavior>> behaviors = null;
59          behaviors = selectOneCountry.getClientBehaviors();
60          if (!behaviors.isEmpty())
61          {
62              ResourceUtils.renderDefaultJsfJsInlineIfNecessary(
63                      facesContext, facesContext.getResponseWriter());
64          }
65  
66          if(HtmlRendererUtils.isDisplayValueOnly(component))
67          {
68              //HtmlRendererUtils.renderDisplayValueOnlyForSelects(facesContext, component);
69              writer.startElement(HTML.SPAN_ELEM, selectOneCountry);
70              if (!behaviors.isEmpty())
71              {
72                  writer.writeAttribute(HTML.ID_ATTR, component.getClientId(facesContext),null);
73              }
74              else
75              {
76                  HtmlRendererUtils.writeIdIfNecessary(writer, selectOneCountry, facesContext);
77              }
78  
79              String[] supportedAttributes = {HTML.STYLE_CLASS_ATTR, HTML.STYLE_ATTR};
80              HtmlRendererUtils.renderHTMLAttributes(writer, selectOneCountry, supportedAttributes);
81  
82              String countryCode = selectOneCountry.getValue().toString();
83              String countryName = new Locale(countryCode, countryCode).getDisplayCountry( facesContext.getViewRoot().getLocale() );
84  
85              writer.write( countryName );
86  
87              writer.endElement(HTML.SPAN_ELEM);
88              return;
89          }
90  
91          writer.startElement(HTML.SELECT_ELEM, selectOneCountry);
92          if (!behaviors.isEmpty())
93          {
94              writer.writeAttribute(HTML.ID_ATTR, component.getClientId(facesContext),null);
95          }
96          else
97          {
98              HtmlRendererUtils.writeIdIfNecessary(writer, selectOneCountry, facesContext);
99          }
100         writer.writeAttribute(HTML.NAME_ATTR, component.getClientId(facesContext), null);
101 
102         List selectItemList = selectOneCountry.getCountriesChoicesAsSelectItemList();
103         Converter converter = HtmlRendererUtils.findUIOutputConverterFailSafe(facesContext, selectOneCountry);
104 
105         writer.writeAttribute(HTML.SIZE_ATTR, "1", null);
106 
107         if (!behaviors.isEmpty())
108         {
109             HtmlRendererUtils.renderBehaviorizedOnchangeEventHandler(facesContext, writer, selectOneCountry, behaviors);
110             HtmlRendererUtils.renderBehaviorizedEventHandlers(facesContext, writer, selectOneCountry, behaviors);
111             HtmlRendererUtils.renderBehaviorizedFieldEventHandlersWithoutOnchange(facesContext, writer, selectOneCountry, behaviors);
112             HtmlRendererUtils.renderHTMLAttributes(writer, selectOneCountry, HTML.SELECT_PASSTHROUGH_ATTRIBUTES_WITHOUT_DISABLED_AND_EVENTS);
113         }
114         else
115         {
116             HtmlRendererUtils.renderHTMLAttributes(writer, selectOneCountry, HTML.SELECT_PASSTHROUGH_ATTRIBUTES_WITHOUT_DISABLED);
117         }
118         if ( isDisabled(facesContext, selectOneCountry) ) {
119             writer.writeAttribute(HTML.DISABLED_ATTR, Boolean.TRUE, null);
120         }
121 
122         Set lookupSet = HtmlRendererUtils.getSubmittedOrSelectedValuesAsSet(false, selectOneCountry, facesContext, converter);
123 
124         HtmlRendererUtils.renderSelectOptions(facesContext, selectOneCountry, converter, lookupSet, selectItemList);
125         // bug #970747: force separate end tag
126         writer.writeText("", null);
127         writer.endElement(HTML.SELECT_ELEM);
128     }
129 }