You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by sv...@apache.org on 2005/08/09 03:05:23 UTC
svn commit: r230941 - in /myfaces: forrest/trunk/content/xdocs/tomahawk/
tomahawk/trunk/src/java/org/apache/myfaces/custom/selectOneLanguage/
Author: svieujot
Date: Mon Aug 8 18:04:41 2005
New Revision: 230941
URL: http://svn.apache.org/viewcvs?rev=230941&view=rev
Log:
Refactor x:selectOneLanguage component to allow limited languages list.
Added:
myfaces/forrest/trunk/content/xdocs/tomahawk/selectOneLanguage.xml (with props)
Modified:
myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/selectOneLanguage/SelectOneLanguage.java
myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/selectOneLanguage/SelectOneLanguageRenderer.java
Added: myfaces/forrest/trunk/content/xdocs/tomahawk/selectOneLanguage.xml
URL: http://svn.apache.org/viewcvs/myfaces/forrest/trunk/content/xdocs/tomahawk/selectOneLanguage.xml?rev=230941&view=auto
==============================================================================
--- myfaces/forrest/trunk/content/xdocs/tomahawk/selectOneLanguage.xml (added)
+++ myfaces/forrest/trunk/content/xdocs/tomahawk/selectOneLanguage.xml Mon Aug 8 18:04:41 2005
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "document-v12.dtd">
+
+<document>
+ <!-- component name -->
+ <header>
+ <title>Select One Language</title>
+ <subtitle><x:selectOneLanguage/></subtitle>
+ </header>
+ <body>
+ <!-- Description -->
+ <section>
+ <title>Description</title>
+ <p>
+ A localized input control for ISO 639 language codes (same as for for java.util.Locale.getLanguage()).
+ </p>
+ </section>
+ <!-- screen shot -->
+ <section>
+ <title>Screen Shot</title>
+ TODO
+ </section>
+ <!-- API -->
+ <section>
+ <title>API</title>
+ <table>
+ <tr>
+ <td>component-family</td>
+ <td>javax.faces.SelectOne</td>
+ </tr>
+ <tr>
+ <td>renderer-type</td>
+ <td>org.apache.myfaces.SelectOneLanguageRenderer</td>
+ </tr>
+ <tr>
+ <td>component-class</td>
+ <td>org.apache.myfaces.custom.selectOneLanguage.SelectOneLanguage</td>
+ </tr>
+ <tr>
+ <td>renderer-class</td>
+ <td>org.apache.myfaces.custom.selectOneLanguage.SelectOneLanguageRenderer</td>
+ </tr>
+ <tr>
+ <td>tag-class</td>
+ <td>org.apache.myfaces.custom.selectOneLanguage.SelectOneLanguageTag</td>
+ </tr>
+ </table>
+ </section>
+ <!-- Usage -->
+ <section>
+ <title>Usage</title>
+ <source>
+<x:selectOneLanguage maxLength="int">
+ ...(optional f:select* filters)...
+<x:selectOneCountry/>
+ </source>
+ </section>
+ <!-- Syntax -->
+ <section>
+ <title>Syntax</title>
+ <note label="<x:inputDate>">
+ <code>
+ maxLength - Integer equals to the maximum number of characters in the language name.
+ </code>
+ <br/>
+ </note>
+ </section>
+ <!-- Instructions -->
+ <section>
+ <title>Instructions</title>
+ <p>
+ You can restrict the languages list by adding <f:selectItem*/> tags with the language codes.<br/>
+ Example : <f:selectItem itemValue="de"/> <f:selectItem itemValue="es"/> <f:selectItem itemValue="fr"/> ...
+ </p>
+ </section>
+ </body>
+ <footer>
+ <legal>Java, J2EE, and JCP are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.<br />
+ © 2004 - 2005, Apache Software Foundation
+ </legal>
+ </footer>
+
+</document>
Propchange: myfaces/forrest/trunk/content/xdocs/tomahawk/selectOneLanguage.xml
------------------------------------------------------------------------------
svn:keywords = "Id Author LastChangedDate LastChangedBy LastChangedRevision"
Propchange: myfaces/forrest/trunk/content/xdocs/tomahawk/selectOneLanguage.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Modified: myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/selectOneLanguage/SelectOneLanguage.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/selectOneLanguage/SelectOneLanguage.java?rev=230941&r1=230940&r2=230941&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/selectOneLanguage/SelectOneLanguage.java (original)
+++ myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/selectOneLanguage/SelectOneLanguage.java Mon Aug 8 18:04:41 2005
@@ -15,17 +15,8 @@
*/
package org.apache.myfaces.custom.selectOneLanguage;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.TreeMap;
-
-import javax.faces.component.UISelectItem;
-import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
-import javax.faces.model.SelectItem;
import org.apache.myfaces.component.html.ext.HtmlSelectOneMenu;
@@ -63,62 +54,5 @@
Object values[] = (Object[])state;
super.restoreState(context, values[0]);
_maxLength = (Integer)values[1];
- }
-
- // -------- Over ridden UIComponent methods -----------
-
- public void encodeChildren(FacesContext context){
- // noop
- }
-
- public int getChildCount(){
- return Locale.getISOLanguages().length;
- }
-
- public List getChildren(){
- String[] availableLanguages = Locale.getISOLanguages();
-
- Locale currentLocale;
-
- FacesContext facesContext = FacesContext.getCurrentInstance();
- UIViewRoot viewRoot = facesContext.getViewRoot();
- if( viewRoot != null )
- currentLocale = viewRoot.getLocale();
- else
- currentLocale = facesContext.getApplication().getDefaultLocale();
-
-
- TreeMap map = new TreeMap();
- // TreeMap is sorted according to the keys' natural order
-
- for(int i=0; i<availableLanguages.length; i++){
- String languageCode = availableLanguages[i];
- Locale tmp = new Locale(languageCode);
- map.put(tmp.getDisplayLanguage(currentLocale), languageCode);
- }
-
- List languagesSelectItems = new ArrayList(availableLanguages.length);
-
- int maxDescriptionLength = _maxLength==null ? Integer.MAX_VALUE : _maxLength.intValue();
- if( maxDescriptionLength < 5 )
- maxDescriptionLength = 5;
-
- for(Iterator i = map.keySet().iterator(); i.hasNext(); ){
- String languageName = (String) i.next();
- String languageCode = (String) map.get( languageName );
- String label;
- if( languageName.length() <= maxDescriptionLength )
- label = languageName;
- else{
- label = languageName.substring(0, maxDescriptionLength-3)+"...";
- }
-
- UISelectItem selectItem = new UISelectItem();
- selectItem.setValue( new SelectItem(languageCode, label) );
-
- languagesSelectItems.add( selectItem );
- }
-
- return languagesSelectItems;
}
}
Modified: myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/selectOneLanguage/SelectOneLanguageRenderer.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/selectOneLanguage/SelectOneLanguageRenderer.java?rev=230941&r1=230940&r2=230941&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/selectOneLanguage/SelectOneLanguageRenderer.java (original)
+++ myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/selectOneLanguage/SelectOneLanguageRenderer.java Mon Aug 8 18:04:41 2005
@@ -15,6 +15,25 @@
*/
package org.apache.myfaces.custom.selectOneLanguage;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+import java.util.TreeMap;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.convert.Converter;
+import javax.faces.model.SelectItem;
+
+import org.apache.myfaces.renderkit.RendererUtils;
+import org.apache.myfaces.renderkit.html.HTML;
+import org.apache.myfaces.renderkit.html.HtmlRendererUtils;
import org.apache.myfaces.renderkit.html.ext.HtmlMenuRenderer;
/**
@@ -22,4 +41,99 @@
* @version $Revision$ $Date: 2005-05-11 12:14:23 -0400 (Wed, 11 May 2005) $
*/
public class SelectOneLanguageRenderer extends HtmlMenuRenderer {
+
+ private Set getFilterSet(SelectOneLanguage component){
+ List selectItems = RendererUtils.getSelectItemList(component);
+ Set set = new HashSet( selectItems.size() );
+
+ for (Iterator i = selectItems.iterator(); i.hasNext(); )
+ set.add( ((SelectItem)i.next()).getValue().toString().toLowerCase() );
+
+ return set;
+ }
+
+ protected List getLanguagesChoicesAsSelectItemList(SelectOneLanguage component){
+ //return RendererUtils.getSelectItemList(component);
+
+ Set filterSet = getFilterSet(component);
+
+ String[] availableLanguages = Locale.getISOLanguages();
+
+ Locale currentLocale;
+
+ FacesContext facesContext = FacesContext.getCurrentInstance();
+ UIViewRoot viewRoot = facesContext.getViewRoot();
+ if( viewRoot != null )
+ currentLocale = viewRoot.getLocale();
+ else
+ currentLocale = facesContext.getApplication().getDefaultLocale();
+
+
+ TreeMap map = new TreeMap();
+ // TreeMap is sorted according to the keys' natural order
+
+ for(int i=0; i<availableLanguages.length; i++){
+ String languageCode = availableLanguages[i];
+ if( ! filterSet.isEmpty() && ! filterSet.contains(languageCode))
+ continue;
+ Locale tmp = new Locale(languageCode);
+ map.put(tmp.getDisplayLanguage(currentLocale), languageCode);
+ }
+
+ List languagesSelectItems = new ArrayList( map.size() );
+
+ Integer maxLength = component.getMaxLength();
+ int maxDescriptionLength = maxLength==null ? Integer.MAX_VALUE : maxLength.intValue();
+ if( maxDescriptionLength < 5 )
+ maxDescriptionLength = 5;
+
+ for(Iterator i = map.keySet().iterator(); i.hasNext(); ){
+ String languageName = (String) i.next();
+ String languageCode = (String) map.get( languageName );
+ String label;
+ if( languageName.length() <= maxDescriptionLength )
+ label = languageName;
+ else
+ label = languageName.substring(0, maxDescriptionLength-3)+"...";
+
+ languagesSelectItems.add( new SelectItem(languageCode, label) );
+ }
+
+ return languagesSelectItems;
+ }
+
+ public void encodeEnd(FacesContext facesContext, UIComponent component)
+ throws IOException
+ {
+ RendererUtils.checkParamValidity(facesContext, component, null);
+
+ if(HtmlRendererUtils.isDisplayValueOnly(component))
+ {
+ HtmlRendererUtils.renderDisplayValueOnlyForSelects(facesContext, component);
+ return;
+ }
+
+ ResponseWriter writer = facesContext.getResponseWriter();
+
+ writer.startElement(HTML.SELECT_ELEM, component);
+ HtmlRendererUtils.writeIdIfNecessary(writer, component, facesContext);
+ writer.writeAttribute(HTML.NAME_ATTR, component.getClientId(facesContext), null);
+
+ List selectItemList = getLanguagesChoicesAsSelectItemList((SelectOneLanguage) component);
+ Converter converter = HtmlRendererUtils.findUIOutputConverterFailSafe(facesContext, component);
+
+ writer.writeAttribute(HTML.SIZE_ATTR, Integer.toString(1), null);
+
+ HtmlRendererUtils.renderHTMLAttributes(writer, component, HTML.SELECT_PASSTHROUGH_ATTRIBUTES_WITHOUT_DISABLED);
+ if ( isDisabled(facesContext, component) ) {
+ writer.writeAttribute(HTML.DISABLED_ATTR, Boolean.TRUE, null);
+ }
+
+ Set lookupSet = HtmlRendererUtils.getSubmittedOrSelectedValuesAsSet(false, component, facesContext, converter);
+
+ HtmlRendererUtils.renderSelectOptions(facesContext, component, converter, lookupSet, selectItemList);
+ // bug #970747: force separate end tag
+ writer.writeText("", null);
+ writer.endElement(HTML.SELECT_ELEM);
+ }
}