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.selectOneLanguage;
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.renderkit.html.ext.HtmlMenuRenderer;
34  import org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils;
35  import org.apache.myfaces.shared_tomahawk.renderkit.html.HTML;
36  import org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils;
37  import org.apache.myfaces.shared_tomahawk.renderkit.html.util.ResourceUtils;
38  
39  /**
40   * @JSFRenderer
41   *   renderKitId = "HTML_BASIC"
42   *   family = "javax.faces.SelectOne"
43   *   type = "org.apache.myfaces.SelectOneLanguageRenderer"
44   * 
45   * @author Sylvain Vieujot (latest modification by $Author: skitching $)
46   * @version $Revision: 673833 $ $Date: 2005-05-11 12:14:23 -0400 (Wed, 11 May 2005) $
47   */
48  public class SelectOneLanguageRenderer extends HtmlMenuRenderer {
49      
50      public void encodeEnd(FacesContext facesContext, UIComponent component)
51      throws IOException
52      {
53          RendererUtils.checkParamValidity(facesContext, component, null);
54  
55          SelectOneLanguage selectOneLanguage = (SelectOneLanguage) component;
56          ResponseWriter writer = facesContext.getResponseWriter();
57  
58          Map<String, List<ClientBehavior>> behaviors = null;
59          behaviors = selectOneLanguage.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, selectOneLanguage);
70              if (!behaviors.isEmpty())
71              {
72                  writer.writeAttribute(HTML.ID_ATTR, component.getClientId(facesContext),null);
73              }
74              else
75              {
76                  HtmlRendererUtils.writeIdIfNecessary(writer, selectOneLanguage, facesContext);
77              }
78          
79              String[] supportedAttributes = {HTML.STYLE_CLASS_ATTR, HTML.STYLE_ATTR};
80              HtmlRendererUtils.renderHTMLAttributes(writer, selectOneLanguage, supportedAttributes);
81              
82              String languageCode = selectOneLanguage.getValue().toString();
83              String languageName = new Locale(languageCode).getDisplayLanguage( facesContext.getViewRoot().getLocale() );
84              
85              writer.write( languageName );
86              
87              writer.endElement(HTML.SPAN_ELEM);
88              return;
89          }
90          
91          writer.startElement(HTML.SELECT_ELEM, component);
92          if (!behaviors.isEmpty())
93          {
94              writer.writeAttribute(HTML.ID_ATTR, component.getClientId(facesContext),null);
95          }
96          else
97          {
98              HtmlRendererUtils.writeIdIfNecessary(writer, selectOneLanguage, facesContext);
99          }
100         writer.writeAttribute(HTML.NAME_ATTR, selectOneLanguage.getClientId(facesContext), null);
101 
102         List selectItemList = selectOneLanguage.getLanguagesChoicesAsSelectItemList();
103         Converter converter = HtmlRendererUtils.findUIOutputConverterFailSafe(facesContext, selectOneLanguage);
104 
105         writer.writeAttribute(HTML.SIZE_ATTR, "1", null);
106 
107         if (!behaviors.isEmpty())
108         {
109             HtmlRendererUtils.renderBehaviorizedOnchangeEventHandler(facesContext, writer, selectOneLanguage, behaviors);
110             HtmlRendererUtils.renderBehaviorizedEventHandlers(facesContext, writer, selectOneLanguage, behaviors);
111             HtmlRendererUtils.renderBehaviorizedFieldEventHandlersWithoutOnchange(facesContext, writer, selectOneLanguage, behaviors);
112             HtmlRendererUtils.renderHTMLAttributes(writer, selectOneLanguage, HTML.SELECT_PASSTHROUGH_ATTRIBUTES_WITHOUT_DISABLED_AND_EVENTS);
113         }
114         else
115         {
116             HtmlRendererUtils.renderHTMLAttributes(writer, selectOneLanguage, HTML.SELECT_PASSTHROUGH_ATTRIBUTES_WITHOUT_DISABLED);
117         }
118         
119         if ( isDisabled(facesContext, selectOneLanguage) ) {
120             writer.writeAttribute(HTML.DISABLED_ATTR, Boolean.TRUE, null);
121         }
122 
123         Set lookupSet = HtmlRendererUtils.getSubmittedOrSelectedValuesAsSet(false, selectOneLanguage, facesContext, converter);
124 
125         HtmlRendererUtils.renderSelectOptions(facesContext, selectOneLanguage, converter, lookupSet, selectItemList);
126         // bug #970747: force separate end tag
127         writer.writeText("", null);
128         writer.endElement(HTML.SELECT_ELEM);
129     }
130 }