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>&lt;x:selectOneLanguage/&gt;</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>
+&lt;x:selectOneLanguage maxLength="int"&gt;
+	...(optional f:select* filters)...
+&lt;x:selectOneCountry/&gt;
+            </source>
+        </section>
+        <!-- Syntax -->
+        <section>
+            <title>Syntax</title>
+            <note label="&lt;x:inputDate&gt;">
+                <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 &lt;f:selectItem*/&gt; tags with the language codes.<br/>
+                Example : &lt;f:selectItem itemValue="de"/&gt; &lt;f:selectItem itemValue="es"/&gt; &lt;f:selectItem itemValue="fr"/&gt; ...
+            </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 />
+	&copy; 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);
+	}
 }