Return-Path: X-Original-To: apmail-myfaces-dev-archive@www.apache.org Delivered-To: apmail-myfaces-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id D3BFF7DD8 for ; Mon, 24 Oct 2011 21:04:42 +0000 (UTC) Received: (qmail 59171 invoked by uid 500); 24 Oct 2011 21:04:42 -0000 Delivered-To: apmail-myfaces-dev-archive@myfaces.apache.org Received: (qmail 59124 invoked by uid 500); 24 Oct 2011 21:04:42 -0000 Mailing-List: contact dev-help@myfaces.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "MyFaces Development" Delivered-To: mailing list dev@myfaces.apache.org Received: (qmail 59117 invoked by uid 99); 24 Oct 2011 21:04:42 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 24 Oct 2011 21:04:42 +0000 X-ASF-Spam-Status: No, hits=0.7 required=5.0 tests=FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_NEUTRAL X-Spam-Check-By: apache.org Received-SPF: neutral (nike.apache.org: local policy) Received: from [217.146.183.240] (HELO nm9-vm0.bullet.mail.ukl.yahoo.com) (217.146.183.240) by apache.org (qpsmtpd/0.29) with SMTP; Mon, 24 Oct 2011 21:04:30 +0000 Received: from [217.146.183.210] by nm9.bullet.mail.ukl.yahoo.com with NNFMP; 24 Oct 2011 21:04:10 -0000 Received: from [217.146.183.175] by tm3.bullet.mail.ukl.yahoo.com with NNFMP; 24 Oct 2011 21:04:10 -0000 Received: from [127.0.0.1] by omp1016.mail.ukl.yahoo.com with NNFMP; 24 Oct 2011 21:04:10 -0000 X-Yahoo-Newman-Property: ymail-3 X-Yahoo-Newman-Id: 43244.77721.bm@omp1016.mail.ukl.yahoo.com Received: (qmail 11056 invoked by uid 60001); 24 Oct 2011 21:04:09 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s1024; t=1319490249; bh=8gkBeWwD0I8F5KQLg/KiEZAc3XzXqKfSmE6VCnO9KMc=; h=X-YMail-OSG:Received:X-Mailer:References:Message-ID:Date:From:Reply-To:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding; b=hYLECAaJNq7HiqVUaKncL9o9zPt+mdYKFBW3uZ1qWJ93CAElbOMludYelT80sd5Ct+upFHU6TmDzaDxT3gwb+GfWlZmc6gcUbCKETG/47NoqxZ/TUIGlKYc82LFgAsr21t2o3A5FOxLCmOnrFvA9DiBTr1Z8q5i8PH38KRETNJg= DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.de; h=X-YMail-OSG:Received:X-Mailer:References:Message-ID:Date:From:Reply-To:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding; b=ivWS3KlvpvokmATCIOF8zx0D8GQvsetIMPAABI1/Ji9umnAXSAsUhf2s0DEGh3Wwm5IFK+YA1iJ+bihrcW7A0O2jDfygf4gzet9YhEdGUaHuMGEnxskWPW+Dpqvy1XOQ5CAVM8mCPqi7lgBzCQ2kxv1XTwrldsMwLK7n7kld5jg=; X-YMail-OSG: QYsNHgwVM1mOevYpmMO9yOQjqWjPHJJbUVLf_ME4WEpTy01 Iz0zxWd87fCCDeFBCp4iyzAcD3Qjwo2vsHfF8o4E.ESaPUqBYw1BwzKSeLO. .NqO4TmdR8aHjHf_8pGN0I2hPdZsQWIPUfQJ_XEP5dVW5oFIyaF95eaZh.tz mMwydfKx1gxzjkJ4EaIQ7pxsnhFQTHi0H9adh_Vhs7MlaNq7RwIDfgoK57yq WvQi8WUWWp1j0WWde9v3Er6hhVh4jLFY9sSerh5G5ztPgMSXU27jb1.CsmGX 2_Kuv96q.REEbdLAQJqmaBDeMY4D5MyCn.uRQ9an000a8m3lphuAgMqMN85r KoMiLpnr_4tBxo8Nc5DoRrNFW6StfRVof7Ca6s_hnGzh6xldFzRo9Tj4enQW _x__PhiUZ0yLNMwWKeCouzjyBMimSfCiMRX3B7.KnRE7Hl82Tj7YD1ffilnu lc18y2x93gJJC71R1a2TOujbcW1DwEVpVFIvwl6LqTgC6s0tBqFNgqmMHy3r CfHq4zcnoaA.i8xkXkpbr6BvBV0mXN_E- Received: from [80.108.122.184] by web27808.mail.ukl.yahoo.com via HTTP; Mon, 24 Oct 2011 22:04:08 BST X-Mailer: YahooMailWebService/0.8.114.317681 References: <1319488640.52542.YahooMailNeo@web27803.mail.ukl.yahoo.com> Message-ID: <1319490248.9511.YahooMailNeo@web27808.mail.ukl.yahoo.com> Date: Mon, 24 Oct 2011 22:04:08 +0100 (BST) From: Mark Struberg Reply-To: Mark Struberg Subject: Re: svn commit: r1188267 [1/2] - in /myfaces/core/trunk/api/src: main/java/javax/faces/application/ main/java/javax/faces/component/ main/java/javax/faces/component/behavior/ main/java/javax/faces/convert/ main/java/javax/faces/event/ main/java/javax To: myfaces-dev In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Virus-Checked: Checked by ClamAV on apache.org Please take a look at the Java-VM and the Java-Mem specification.=0A=0AThe = Java VM has a lot of optimisation for high scalability.=0AOne of those feat= ures is that memory which is not declared volatile will get copied to a dif= ferent mem location for each thread accessing it. This allows to highly uti= lize the L1 and L2 caches of modern multi core CPUs. Which in turn also mea= ns that if we take as an example=0A=0Apublic class MyCls {=0A=0A=A0 private= static int i;=0A=0A=A0 public int getCounter() { return i;}=0A=A0 =0A=0A= =A0 public void count() { i++ };=0A=0A}=0A=0Amight well return different va= lues for getCounter() for different parallel threads!=0A=0A=0AI know this i= s not really as well known as it should be, but marking a class member 'fin= al' does also mean that it's mem doesn't need to get synced back (because i= t's assumed that this got initialized once and then will never change).=0A= =0ALieGrue,=0Astrub=0A=0A=0A=0A=0A----- Original Message -----=0A> From: Le= onardo Uribe =0A> To: MyFaces Development ; Mark Struberg =0A> Cc: =0A> Sent: Monday, Oct= ober 24, 2011 10:48 PM=0A> Subject: Re: svn commit: r1188267 [1/2] - in /my= faces/core/trunk/api/src: main/java/javax/faces/application/ main/java/java= x/faces/component/ main/java/javax/faces/component/behavior/ main/java/java= x/faces/convert/ main/java/javax/faces/event/ main/java/javax=0A> =0A> Hi= =0A> =0A> I personally prefer use final modifier. In some cases, such vars = has=0A> some "history" behind, so I do not agree to change them blindly,=0A= > without check each case. Now, it could exists a hashmap that its=0A> vari= able is final, but its key/value pairs are mutable.=0A> =0A> Really do thes= e type of cleanups makes harder maintain 2.0.x and 2.1.x=0A> branches. I us= ually compare files and apply patches in both branches.=0A> I prefer delay = this to a future 2.2.x branch, but if it is applied on=0A> current trunk it= s ok anyway.=0A> =0A> regards,=0A> =0A> Leonardo Uribe=0A> =0A> 2011/10/24 = Mark Struberg :=0A>> Hi!=0A>> =0A>> I removed them bec= ause they got inhomogenously used. The same method =0A> contained variables= which are final and others which are not modified neither =0A> and not mar= ked final.=0A>> =0A>> Also I found a few hashmaps which were marked final,= although they get =0A> modified later. Please be aware that final is not o= nly a keyword which stops you =0A> from changing the pointer (in C speak) b= ut also means that those underlying mem =0A> areas will NOT be synced to ot= her threads!=0A>> =0A>> Otoh there have been unmodifiableCollections in up= percase letters which are =0A> not marked final ;)=0A>> =0A>> Btw, if anyo= ne also likes to join and help with the cleanup then you are =0A> welcome ^= ^=0A>> =0A>> I only used IDE support for fixing if without {}, but all oth= er automated =0A> reformatting turned out to create WAY too much noise (and= sometimes even break =0A> the format at all). I tried both IDEA and Eclips= e, but none of them worked =0A> satisfyingly.=0A>> =0A>> =0A>> I'll checki= n an upgrade of myfaces-core pom.xml with =0A> mf-parent-11-SNAPSHOT and an= additional -Pcheckstyle profile which will enable =0A> the 'standard' chec= ks.=0A>> =0A>> LieGrue,=0A>> strub=0A>> =0A>> =0A>> =0A>> ----- Original= Message -----=0A>>> From: Jakob Korherr =0A>>> = To: MyFaces Development ; =0A> gudnabrsam@gmail.com= =0A>>> Cc:=0A>>> Sent: Monday, October 24, 2011 10:15 PM=0A>>> Subject: = Re: svn commit: r1188267 [1/2] - in =0A> /myfaces/core/trunk/api/src: main/= java/javax/faces/application/ =0A> main/java/javax/faces/component/ main/ja= va/javax/faces/component/behavior/ =0A> main/java/javax/faces/convert/ main= /java/javax/faces/event/ main/java/javax=0A>>> =0A>>> I agree with Matt. I= don't think that having local variables marked =0A> as=0A>>> final is a b= ad thing.=0A>>> =0A>>> Regards,=0A>>> Jakob=0A>>> =0A>>> 2011/10/24 Matt= Benson :=0A>>>> =A0Not a huge deal; I wouldn't nece= ssarily revert the commit, but =0A> IMO=0A>>>> =A0there are good reasons t= o mark local variables as final: =A0code=0A>>>> =A0self-documents the inte= nt that a variable's value won't =0A> change;=0A>>> then=0A>>>> =A0there = is the somewhat controversial notion that marking a final=0A>>>> =A0variab= le as such may contribute to better JIT performance. =A0It=0A>>>> =A0certa= inly couldn't hurt, could it?=0A>>>> =0A>>>> =A0Matt=0A>>>> =0A>>>> =A0On= Mon, Oct 24, 2011 at 1:09 PM, =A0 =0A> wrote:=0A>>>>>= =A0Author: struberg=0A>>>>> =A0Date: Mon Oct 24 18:09:08 2011=0A>>>>> = =A0New Revision: 1188267=0A>>>>> =0A>>>>> =A0URL: http://svn.apache.org/vi= ewvc?rev=3D1188267&view=3Drev=0A>>>>> =A0Log:=0A>>>>> =A0MYFACES-3368 fix= linebreakes and unnecessary final for local =0A> fields=0A>>>>> =0A>>>>> = =A0Modified:=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/java/ja= vax/faces/application/NavigationCase.java=0A>>>>> =0A>>> =0A> =A0myfaces/co= re/trunk/api/src/main/java/javax/faces/component/UIComponent.java=0A>>>>> = =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/U= IComponentBase.java=0A>>>>> =0A>>> =A0myfaces/core/trunk/api/src/main/java= /javax/faces/component/UIData.java=0A>>>>> =0A>>> =0A> =A0myfaces/core/trun= k/api/src/main/java/javax/faces/component/UIInput.java=0A>>>>> =0A>>> =0A> = =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/UISelectMany.= java=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/java/javax/face= s/component/_ComponentAttributesMap.java=0A>>>>> =0A>>> =0A> =A0myfaces/cor= e/trunk/api/src/main/java/javax/faces/component/_LocaleUtils.java=0A>>>>> = =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/_= MethodBindingToListener.java=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/= src/main/java/javax/faces/component/_MethodBindingToMethodExpression.java= =0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/java/javax/faces/co= mponent/_MethodExpressionToMethodBinding.java=0A>>>>> =0A>>> =0A> =A0myface= s/core/trunk/api/src/main/java/javax/faces/component/_SelectItemsIterator.j= ava=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/java/javax/faces= /component/_ValueBindingToValueExpression.java=0A>>>>> =0A>>> =0A> =A0myfac= es/core/trunk/api/src/main/java/javax/faces/component/_ValueExpressionToVal= ueBinding.java=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/java/= javax/faces/component/behavior/_AjaxBehaviorDeltaStateHelper.java=0A>>>>> = =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/java/javax/faces/convert/Num= berConverter.java=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/ja= va/javax/faces/convert/_MessageUtils.java=0A>>>>> =0A>>> =0A> =A0myfaces/co= re/trunk/api/src/main/java/javax/faces/event/ListenerFor.java=0A>>>>> =0A>>= > =A0myfaces/core/trunk/api/src/main/java/javax/faces/event/PhaseEvent.jav= a=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/java/javax/faces/v= alidator/BeanValidator.java=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/s= rc/main/java/javax/faces/validator/DoubleRangeValidator.java=0A>>>>> =0A>>>= =0A> =A0myfaces/core/trunk/api/src/main/java/javax/faces/validator/LengthV= alidator.java=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/java/j= avax/faces/validator/LongRangeValidator.java=0A>>>>> =0A>>> =0A> =A0myfaces= /core/trunk/api/src/main/java/javax/faces/validator/ValidatorException.java= =0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/java/javax/faces/vi= ew/facelets/AttributeHandler.java=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk= /api/src/main/java/javax/faces/view/facelets/ComponentHandler.java=0A>>>>> = =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facele= ts/CompositeFaceletHandler.java=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/a= pi/src/main/java/javax/faces/view/facelets/DelegatingMetaTagHandler.java=0A= >>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/= facelets/FacetHandler.java=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/sr= c/main/java/javax/faces/view/facelets/MetaTagHandler.java=0A>>>>> =0A>>> = =0A> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/Meta= data.java=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/java/javax= /faces/view/facelets/TagAttribute.java=0A>>>>> =0A>>> =0A> =A0myfaces/core/= trunk/api/src/main/java/javax/faces/view/facelets/TagAttributeException.jav= a=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/java/javax/faces/v= iew/facelets/TagConfig.java=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/s= rc/main/java/javax/faces/view/facelets/TagException.java=0A>>>>> =0A>>> =0A= > =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/TagHand= ler.java=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/java/javax/= faces/view/facelets/TagHandlerDelegate.java=0A>>>>> =0A>>> =0A> =A0myfaces/= core/trunk/api/src/main/java/javax/faces/view/facelets/TextHandler.java=0A>= >>>> =0A>>> =0A> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/f= acelets/ValidatorHandler.java=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api= /src/main/java/javax/faces/webapp/UIComponentTagBase.java=0A>>>>> =0A>>> = =0A> =A0myfaces/core/trunk/api/src/test/java/javax/faces/application/FacesM= essageTest.java=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/src/test/java= /javax/faces/component/AbstractUIComponentPropertyTest.java=0A>>>>> =0A>>> = =0A> =A0myfaces/core/trunk/api/src/test/java/javax/faces/component/UICompon= entBaseGetClientIdTest.java=0A>>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/s= rc/test/java/javax/faces/component/UIComponentInvokeOnComponentTest.java=0A= >>>>> =0A>>> =0A> =A0myfaces/core/trunk/api/src/test/java/javax/faces/compo= nent/UIViewParameterTest.java=0A>>>>> =0A>>>>> =A0Modified:=0A>>> =0A> myf= aces/core/trunk/api/src/main/java/javax/faces/application/NavigationCase.ja= va=0A>>>>> =A0URL:=0A>>> =0A> http://svn.apache.org/viewvc/myfaces/core/tr= unk/api/src/main/java/javax/faces/application/NavigationCase.java?rev=3D118= 8267&r1=3D1188266&r2=3D1188267&view=3Ddiff=0A>>>>> =0A>>> =0A> =3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= >>>>> =A0---=0A>>> =0A> myfaces/core/trunk/api/src/main/java/javax/faces/a= pplication/NavigationCase.java=0A>>> (original)=0A>>>>> =A0+++=0A>>> =0A>= myfaces/core/trunk/api/src/main/java/javax/faces/application/NavigationCas= e.java=0A>>> Mon Oct 24 18:09:08 2011=0A>>>>> =A0@@ -249,7 +249,7 @@ publ= ic class NavigationCase=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =0A> bu= ilder.append("\">\n");=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 for (Map= .Entry List> entry=0A>>> : _parameters.entrySet())=0A= >>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0- =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0final String name =3D entry.getKey();=0A>>>>> =A0+ = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0String name =3D entry.getKey();=0A>>= >>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 for (String value : entry.g= etValue())=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> = =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 builder.append("=0A>>> = =A0\n");=0A>>>>> =0A>>>>> =A0Modified:=0A>>> =0A> myfaces/core= /trunk/api/src/main/java/javax/faces/component/UIComponent.java=0A>>>>> = =A0URL:=0A>>> =0A> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/= main/java/javax/faces/component/UIComponent.java?rev=3D1188267&r1=3D1188266= &r2=3D1188267&view=3Ddiff=0A>>>>> =0A>>> =0A> =3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A>>>>> =A0---= =0A>>> =0A> myfaces/core/trunk/api/src/main/java/javax/faces/component/UICo= mponent.java=0A>>> (original)=0A>>>>> =A0+++=0A>>> =0A> myfaces/core/trun= k/api/src/main/java/javax/faces/component/UIComponent.java Mon=0A>>> Oct 2= 4 18:09:08 2011=0A>>>>> =A0@@ -62,35 +62,38 @@ import org.apache.myfaces.b= uildtools.mav=0A>>>>> =A0=A0import=0A>>> =0A> org.apache.myfaces.buildtool= s.maven2.plugin.builder.annotation.JSFWebConfigParam;=0A>>>>> =0A>>>>> =A0= =A0/**=0A>>>>> =A0- *=0A>>>>> =A0+ *=0A>>>>> =A0=A0* see Javadoc of >> =0A> href=3D"http://java.sun.com/javaee/javaserverfaces/1.2/docs/api= /index.html">J=0A>>>>> =A0=A0* SF Specification=0A>>>>> =A0- *=0A>>>>= > =A0+ *=0A>>>>> =A0=A0* @author Manfred Geiler (latest modification by $= Author$)=0A>>>>> =A0=A0* @version $Revision$ $Date$=0A>>>>> =A0=A0*/=0A>>= >>> =A0-@JSFComponent(type =3D "javax.faces.Component", =0A> family =3D=0A= >>> "javax.faces.Component", desc =3D "abstract base =0A> component",=0A>>= > configExcluded =3D true)=0A>>>>> =A0-public abstract class UIComponent = implements =0A> PartialStateHolder,=0A>>> TransientStateHolder , SystemEve= ntListenerHolder, =0A> ComponentSystemEventListener {=0A>>>>> =A0+@JSFComp= onent(type =3D "javax.faces.Component", =0A> family =3D=0A>>> "javax.faces= .Component",=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0desc =3D "abstract ba= se component",=0A>>> configExcluded =3D true)=0A>>>>> =A0+public abstract= class UIComponent=0A>>>>> =A0+ =A0 =A0 =A0 =A0implements PartialStateHold= er, TransientStateHolder,=0A>>> SystemEventListenerHolder, ComponentSystem= EventListener=0A>>>>> =A0+{=0A>>>>> =A0=A0 =A0 // TODO: Reorder methods, = this class is a mess=0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0* Const= ant used in component attribute map to retrieve =0A> the=0A>>> BeanInfo of= a composite=0A>>>>> =A0=A0 =A0 =A0* component.=0A>>>>> =A0- =A0 =A0 *=0A= >>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0* @see =0A> ViewDeclarationLan= guage#getComponentMetadata(FacesContext,=0A>>> Resource)=0A>>>>> =A0=A0 = =A0 =A0* @see=0A>>> ViewDeclarationLanguage#retargetAttachedObjects(FacesC= ontext, =0A> UIComponent, List)=0A>>>>> =A0=A0 =A0 =A0* @see=0A>>> ViewDe= clarationLanguage#retargetMethodExpressions(FacesContext, =0A> UIComponent)= =0A>>>>> =A0=A0 =A0 =A0* @see Application#createComponent(FacesContext, = =0A> Resource)=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0=A0 =A0 public static = final String BEANINFO_KEY =3D=0A>>> "javax.faces.component.BEANINFO_KEY";= =0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 = =A0* Constant used in BeanInfo descriptor as a key for =0A> retrieve an=0A>= >> alternate component type=0A>>>>> =A0=A0 =A0 =A0* for create the compos= ite base component.=0A>>>>> =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>>= =A0=A0 =A0 =A0* @see Application#createComponent(FacesContext, =0A> Resou= rce)=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0=A0 =A0 public static final Stri= ng COMPOSITE_COMPONENT_TYPE_KEY =3D=0A>>> "javax.faces.component.COMPOSITE= _COMPONENT_TYPE";=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 /**=0A>>>= >> =A0=A0 =A0 =A0* Constant used to define the facet inside this component= =0A> that=0A>>> store the component hierarchy=0A>>>>> =A0=A0 =A0 =A0* ge= nerated by a composite component implementation, and =0A> then=0A>>> rende= red. In other words,=0A>>>>> =A0@@ -98,23 +101,23 @@ public abstract class= UIComponent implem=0A>>>>> =A0=A0 =A0 =A0* this face are rendered.=0A>>>>= > =A0=A0 =A0 =A0*/=0A>>>>> =A0=A0 =A0 public static final String COMPOSIT= E_FACET_NAME =3D=0A>>> "javax.faces.component.COMPOSITE_FACET_NAME";=0A>>>= >> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0* Con= stant used to store the current component that is =0A> being=0A>>> process= ed.=0A>>>>> =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0= * @see #pushComponentToEL(FacesContext, UIComponent)=0A>>>>> =A0=A0 =A0 = =A0* @see #popComponentFromEL(FacesContext)=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>= >> =A0=A0 =A0 public static final String CURRENT_COMPONENT =3D=0A>>> "jav= ax.faces.component.CURRENT_COMPONENT";=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> = =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0* Constant used to store the current= composite component =0A> that is=0A>>> being processed.=0A>>>>> =A0- =A0= =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0* @see #pushComponent= ToEL(FacesContext, UIComponent)=0A>>>>> =A0=A0 =A0 =A0* @see #popComponent= FromEL(FacesContext)=0A>>>>> =A0- =A0 =A0 */=0A>>>>> =A0+ =A0 =A0 */=0A>>= >>> =A0=A0 =A0 public static final String CURRENT_COMPOSITE_COMPONENT =3D= =0A>>> "javax.faces.component.CURRENT_COMPOSITE_COMPONENT";=0A>>>>> =A0-= =0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0* This consta= nt has two usages. The first one is in =0A> component=0A>>> attribute map = to identify the=0A>>>>> =A0=A0 =A0 =A0* facet name under this component is= child of its parent. =0A> The=0A>>> second one is on BeanInfo descriptor= =0A>>>>> =A0@@ -123,33 +126,35 @@ public abstract class UIComponent implem= =0A>>>>> =A0=A0 =A0 =A0* by COMPOSITE_FACET_NAME constant).=0A>>>>> =A0= =A0 =A0 =A0*/=0A>>>>> =A0=A0 =A0 public static final String FACETS_KEY =3D= =0A>>> "javax.faces.component.FACETS_KEY";=0A>>>>> =A0-=0A>>>>> =A0+=0A>= >>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0* Constant used in component at= tribute map to store the =0A> {@link=0A>>> javax.faces.view.Location} obje= ct=0A>>>>> =A0=A0 =A0 =A0* where the definition of this component is.=0A>>= >>> =A0=A0 =A0 =A0*/=0A>>>>> =A0=A0 =A0 public static final String VIEW_L= OCATION_KEY =3D=0A>>> "javax.faces.component.VIEW_LOCATION_KEY";=0A>>>>> = =A0-=0A>>>>> =A0- =A0 =A0public static final String =0A> ATTRS_WITH_DECLAR= ED_DEFAULT_VALUES =3D=0A>>> "javax.faces.component.ATTR_NAMES_WITH_DEFAULT= _VALUES";=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0+ =A0 =A0public static fi= nal String =0A> ATTRS_WITH_DECLARED_DEFAULT_VALUES=0A>>>>> =A0+ =A0 =A0 = =A0 =A0 =A0 =A0=3D=0A>>> "javax.faces.component.ATTR_NAMES_WITH_DEFAULT_VA= LUES";=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0* Indic= ate if the facesContext attribute values under the =0A> keys=0A>>> javax.f= aces.component.CURRENT_COMPONENT and=0A>>>>> =A0=A0 =A0 =A0* javax.faces.c= omponent.CURRENT_COMPOSITE_COMPONENT =0A> should be=0A>>> valid or not. By= default, those keys are=0A>>>>> =A0=A0 =A0 =A0* deprecated since 2.1=0A>>= >>> =A0=A0 =A0 =A0*/=0A>>>>> =A0- =A0 =A0@JSFWebConfigParam(since=3D"2.1.= 0",=0A>>> expectedValues=3D"true, false", defaultValue=3D"false")=0A>>>>> = =A0- =A0 =A0public static final String=0A>>> HONOR_CURRENT_COMPONENT_ATTR= IBUTES_PARAM_NAME =3D=0A>>> "javax.faces.HONOR_CURRENT_COMPONENT_ATTRIBUTE= S";=0A>>>>> =A0-=0A>>>>> =A0+ =A0 =A0@JSFWebConfigParam(since =3D "2.1.0"= , =0A> expectedValues =3D=0A>>> "true, false", defaultValue =3D "false")= =0A>>>>> =A0+ =A0 =A0public static final String=0A>>> HONOR_CURRENT_COMPO= NENT_ATTRIBUTES_PARAM_NAME=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0=3D=0A>>> = "javax.faces.HONOR_CURRENT_COMPONENT_ATTRIBUTES";=0A>>>>> =A0+=0A>>>>> = =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0* The key under which the component s= tack is stored in =0A> the=0A>>> FacesContext.=0A>>>>> =A0=A0 =A0 =A0* AT= TENTION: this constant is duplicate in=0A>>> CompositeComponentExpressionU= tils.=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0=A0 =A0 private static final St= ring _COMPONENT_STACK =3D=0A>>> "componentStack:" + UIComponent.class.getN= ame();=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 private static final= String =0A> _CURRENT_COMPOSITE_COMPONENT_KEY =3D=0A>>> "compositeComponen= t:" + UIComponent.class.getName();=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0= =A0 =A0 Map,=0A>>> List>= _systemEventListenerClassMap;=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 = =A0 /**=0A>>>>> =A0=A0 =A0 =A0* @deprecated=0A>>>>> =A0=A0 =A0 =A0*/=0A>>= >>> =A0@@ -164,26 +169,27 @@ public abstract class UIComponent implem=0A>>= >>> =A0=A0 =A0 private transient Map =0A> _resourceBundleM= ap =3D=0A>>> null;=0A>>>>> =A0=A0 =A0 private boolean _inView =3D false;= =0A>>>>> =A0=A0 =A0 private _DeltaStateHelper _stateHelper =3D null;=0A>>>= >> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0* In = JSF 2.0 bindings map was deprecated, and replaced =0A> with a map=0A>>>>> = =A0=A0 =A0 =A0* inside stateHelper. We need this one here because =0A> stat= eHelper=0A>>> needs=0A>>>>> =A0=A0 =A0 =A0* to be implemented from here a= nd internally it depends =0A> from this=0A>>> property.=0A>>>>> =A0=A0 = =A0 =A0*/=0A>>>>> =A0=A0 =A0 private boolean _initialStateMarked =3D false= ;=0A>>>>> =A0-=0A>>>>> =A0- =A0 =A0/** Value of the {@link=0A>>> UICompo= nent#HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME} parameter */=0A>>>>> = =A0+=0A>>>>> =A0+ =A0 =A0/** Value of the {@link=0A>>> UIComponent#HONOR_= CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME} parameter */=0A>>>>> =A0=A0 =A0 p= rivate Boolean _honorCurrentComponentAttributes;=0A>>>>> =0A>>>>> =A0- =A0= =A0public UIComponent() {=0A>>>>> =A0+ =A0 =A0public UIComponent()=0A>>>>= > =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> =A0=A0 =A0 public = abstract Map getAttributes();=0A>>>>> =0A>>>>> =A0=A0 =A0 = /**=0A>>>>> =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0= * {@inheritDoc}=0A>>>>> =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> = =A0=A0 =A0 =A0* @since 2.0=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0=A0 =A0 pu= blic boolean initialStateMarked()=0A>>>>> =A0@@ -193,7 +199,7 @@ public ab= stract class UIComponent implem=0A>>>>> =0A>>>>> =A0=A0 =A0 /**=0A>>>>> = =A0=A0 =A0 =A0* Invokes the =0A> invokeContextCallback=0A>>> = method with the component, specified by =0A> clientId.=0A>>>>>= =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0* @param co= ntext=0A>>>>> =A0=A0 =A0 =A0* =A0 =A0 =A0 =A0 =A0 =A0FacesContext for =0A> the current=0A>>> request=0A>>>>> =A0=A0 =A0 =A0* @param cl= ientId=0A>>>>> =A0@@ -204,9 +210,11 @@ public abstract class UIComponent i= mplem=0A>>>>> =A0=A0 =A0 =A0* @throws javax.faces.FacesException=0A>>>>> = =A0=A0 =A0 =A0*/=0A>>>>> =A0=A0 =A0 public boolean invokeOnComponent(Faces= Context context, =0A> String=0A>>> clientId, ContextCallback callback)=0A>= >>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0throws FacesException {=0A>>>>> =A0+ =A0= =A0 =A0 =A0 =A0 =A0throws FacesException=0A>>>>> =A0+ =A0 =A0{=0A>>>>> = =A0=A0 =A0 =A0 =A0 // java.lang.NullPointerException - if any of the =0A> a= rguments are=0A>>> null=0A>>>>> =A0- =A0 =A0 =A0 =A0if (context =3D=3D nu= ll || clientId =3D=3D null || callback =0A> =3D=3D null) {=0A>>>>> =A0+ = =A0 =A0 =A0 =A0if (context =3D=3D null || clientId =3D=3D null || callback = =0A> =3D=3D null)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 = =A0 =A0 =A0 throw new NullPointerException();=0A>>>>> =A0=A0 =A0 =A0 =A0 }= =0A>>>>> =0A>>>>> =A0@@ -215,16 +223,21 @@ public abstract class UICompone= nt implem=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0= // searching for this component?=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 boole= an found =3D =0A> clientId.equals(this.getClientId(context));=0A>>>>> =A0-= =A0 =A0 =A0 =A0 =A0 =A0if (found) {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0try {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0if (found)=0A>>>>> =A0+ = =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0try= =0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 callback.invokeContextCallback(context, =0A> this)= ;=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} catch (Exception e) {=0A>>= >>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0}=0A>>>>> =A0+ =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0catch (Exception e)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 throw new Face= sException(e);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return found;=0A>>>>> =A0=A0 =A0 =A0 =A0 = =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 // Searching for this compone= nt's =0A> children/facets=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0for (Iterato= r it =3D=0A>>> this.getFacetsAndChildren(); !found && it.hasN= ext();) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0for (Iterator i= t =3D=0A>>> this.getFacetsAndChildren(); !found && it.hasNext(); )=0A>>>>>= =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= found =3D it.next().invokeOnComponent(context, =0A> clientId,=0A>>> callb= ack);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0= =A0 return found;=0A>>>>> =A0@@ -237,15 +250,16 @@ public abstract class = UIComponent implem=0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> =A0=A0 =A0 /**= =0A>>>>> =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0* @= param component=0A>>>>> =A0=A0 =A0 =A0* @return true if the component is a= composite component =0A> otherwise=0A>>> false is returned=0A>>>>> =A0- = =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0*=0A>>>>> =A0=A0 = =A0 =A0* @throws NullPointerException if the component is null=0A>>>>> =A0= =A0 =A0 =A0* @since 2.0=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0- =A0 =A0publ= ic static boolean isCompositeComponent(UIComponent =0A> component)=0A>>> {= =0A>>>>> =A0+ =A0 =A0public static boolean isCompositeComponent(UIComponen= t =0A> component)=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =0A>>>>> =A0=A0 =A0 =A0 = =A0 //since _isCompositeComponent does it the same way we =0A> do it=0A>>> = here also although I=0A>>>>> =A0=A0 =A0 =A0 =A0 //would prefer following = method=0A>>>>> =A0@@ -261,15 +275,16 @@ public abstract class UIComponent = implem=0A>>>>> =A0=A0 =A0 =A0* instance (which represents the view). If th= is component=0A>>>>> =A0=A0 =A0 =A0* is a UIViewRoot instance, the compone= nts =0A> "always"=0A>>>>> =A0=A0 =A0 =A0* is on the view.=0A>>>>> =A0- = =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0* By default it is= false but for UIViewRoot instances is=0A>>>>> =A0=A0 =A0 =A0* true.=0A>>>= >> =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0* @return= =0A>>>>> =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0* @= since 2.0=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0- =A0 =A0public boolean isI= nView() {=0A>>>>> =A0+ =A0 =A0public boolean isInView()=0A>>>>> =A0+ =A0 = =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 return _inView;=0A>>>>> =A0=A0 =A0 }=0A>>= >>> =0A>>>>> =A0@@ -292,10 +307,11 @@ public abstract class UIComponent im= plem=0A>>>>> =A0=A0 =A0 =A0*=0A>>>>> =A0=A0 =A0 =A0* @param context=0A>>>= >> =A0=A0 =A0 =A0* @return=0A>>>>> =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *= =0A>>>>> =A0=A0 =A0 =A0* @since 2.0=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0= - =A0 =A0protected boolean isVisitable(VisitContext context) {=0A>>>>> =A0= + =A0 =A0protected boolean isVisitable(VisitContext context)=0A>>>>> =A0+ = =A0 =A0{=0A>>>>> =0A>>>>> =A0=A0 =A0 =A0 =A0 Collection hints = =3D =0A> context.getHints();=0A>>>>> =0A>>>>> =A0@@ -322,18 +338,23 @@ pub= lic abstract class UIComponent implem=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> = =A0=A0 =A0 public abstract void setValueBinding(String name, =0A> ValueBind= ing=0A>>> binding);=0A>>>>> =0A>>>>> =A0- =A0 =A0public void setValueExpr= ession(String name, =0A> ValueExpression=0A>>> expression) {=0A>>>>> =A0-= =A0 =A0 =A0 =A0if (name =3D=3D null) {=0A>>>>> =A0+ =A0 =A0public void se= tValueExpression(String name, =0A> ValueExpression=0A>>> expression)=0A>>>= >> =A0+ =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0if (name =3D=3D null)=0A>>>>= > =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 throw new Null= PointerException("name");=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0- =A0 = =A0 =A0 =A0if (name.equals("id")) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0if (name.e= quals("id"))=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0= =A0 throw new IllegalArgumentException("Can't =0A> set a=0A>>> ValueExpre= ssion for the 'id' property.");=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0-= =A0 =A0 =A0 =A0if (name.equals("parent")) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0i= f (name.equals("parent"))=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 = =A0 =A0 =A0 =A0 =A0 throw new IllegalArgumentException("Can't =0A> set a=0A= >>> ValueExpression for the 'parent' property.");=0A>>>>> =A0=A0 =A0 =A0 = =A0 }=0A>>>>> =0A>>>>> =A0- =A0 =A0 =A0 =A0if (expression =3D=3D null) {= =0A>>>>> =A0+ =A0 =A0 =A0 =A0if (expression =3D=3D null)=0A>>>>> =A0+ =A0= =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 //if (bindings !=3D null)= {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 // =A0 =A0bindings.remove(name);=0A>= >>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 // =A0 =A0if (bindings.isEmpty()) {=0A>>>>= > =A0@@ -341,13 +362,19 @@ public abstract class UIComponent implem=0A>>>>= > =A0=A0 =A0 =A0 =A0 =A0 =A0 // =A0 =A0}=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 = =A0 //}=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 getStateHelper().remove(Propert= yKeys.bindings, =0A> name);=0A>>>>> =A0- =A0 =A0 =A0 =A0} else {=0A>>>>> = =A0- =A0 =A0 =A0 =A0 =A0 =A0if (expression.isLiteralText()) {=0A>>>>> =A0-= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0try {=0A>>>>> =A0+ =A0 =A0 =A0 =A0}=0A>>>>= > =A0+ =A0 =A0 =A0 =A0else=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0+ = =A0 =A0 =A0 =A0 =A0 =A0if (expression.isLiteralText())=0A>>>>> =A0+ =A0 = =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0try=0A>>>= >> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 Object value =3D=0A>>> expression.getValue(getFacesCon= text().getELContext());=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= getAttributes().put(name, value);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 return;=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} catch (E= LException e) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0}=0A>>>>> =A0= + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0catch (ELException e)=0A>>>>> =A0+ =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 throw new FacesException(e);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0@@ -361,7 +388,= 8 @@ public abstract class UIComponent implem=0A>>>>> =A0=A0 =A0 =A0 =A0 }= =0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> =A0- =A0 =A0public String getClien= tId() {=0A>>>>> =A0+ =A0 =A0public String getClientId()=0A>>>>> =A0+ =A0 = =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 return getClientId(getFacesContext());=0A>= >>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> =A0@@ -375,30 +403,36 @@ public abstra= ct class UIComponent implem=0A>>>>> =A0=A0 =A0 =A0*=0A>>>>> =A0=A0 =A0 = =A0* @param component the component to start from=0A>>>>> =A0=A0 =A0 =A0* = @return the parent composite component if found =0A> otherwise null=0A>>>>>= =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0* @since 2.= 0=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0- =A0 =A0public static UIComponent = =0A> getCompositeComponentParent(UIComponent=0A>>> component) {=0A>>>>> = =A0+ =A0 =A0public static UIComponent =0A> getCompositeComponentParent(UICo= mponent=0A>>> component)=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =0A>>>>> =A0- =A0= =A0 =A0 =A0if(component =3D=3D null) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0if (co= mponent =3D=3D null)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0= =A0 =A0 =A0 return null;=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0= =A0 =A0 UIComponent parent =3D component;=0A>>>>> =0A>>>>> =A0- =A0 =A0 = =A0 =A0do {=0A>>>>> =A0+ =A0 =A0 =A0 =A0do=0A>>>>> =A0+ =A0 =A0 =A0 =A0{= =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 parent =3D parent.getParent();=0A>>>>>= =A0- =A0 =A0 =A0 =A0 =A0 =A0if(parent !=3D null &&=0A>>> UIComponent.isC= ompositeComponent(parent)) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0if (paren= t !=3D null &&=0A>>> UIComponent.isCompositeComponent(parent))=0A>>>>> = =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 r= eturn parent;=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0- =A0 =A0 = =A0 =A0} while(parent !=3D null);=0A>>>>> =A0+ =A0 =A0 =A0 =A0} while (par= ent !=3D null);=0A>>>>> =A0=A0 =A0 =A0 =A0 return null;=0A>>>>> =A0=A0 = =A0 }=0A>>>>> =0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0* @since 1.2= =0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0- =A0 =A0public String getContainerC= lientId(FacesContext ctx) {=0A>>>>> =A0- =A0 =A0 =A0 =A0if (ctx =3D=3D nul= l) {=0A>>>>> =A0+ =A0 =A0public String getContainerClientId(FacesContext c= tx)=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0if (ctx =3D=3D null= )=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 throw = new NullPointerException("FacesContext=0A>>> ctx");=0A>>>>> =A0=A0 =A0 = =A0 =A0 }=0A>>>>> =0A>>>>> =A0@@ -406,24 +440,26 @@ public abstract class = UIComponent implem=0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> =A0=A0 =A0 /**= =0A>>>>> =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0* @= param context=0A>>>>> =A0=A0 =A0 =A0* @return=0A>>>>> =A0- =A0 =A0 *=0A>>= >>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0* @since 2.0=0A>>>>> =A0=A0 =A0= =A0*/=0A>>>>> =A0- =A0 =A0public static UIComponent =0A> getCurrentCompon= ent(FacesContext=0A>>> context) {=0A>>>>> =A0-=0A>>>>> =A0+ =A0 =A0publi= c static UIComponent =0A> getCurrentComponent(FacesContext=0A>>> context)= =0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 Boolean h= onorCurrentComponentAttributes =3D=0A>>> _getHonorCurrentComponentAttribut= es(context);=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 if (ho= norCurrentComponentAttributes =3D=3D Boolean.TRUE)=0A>>>>> =A0=A0 =A0 =A0 = =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 return (UIComponent)=0A>>> conte= xt.getAttributes().get(UIComponent.CURRENT_COMPONENT);=0A>>>>> =A0=A0 =A0 = =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 else=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A= >>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0LinkedList componentStack = =3D=0A>>> (LinkedList)=0A>>> context.getAttributes().get(UIC= omponent._COMPONENT_STACK);=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0if(compone= ntStack =3D=3D null)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0LinkedList componentStack=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =3D (LinkedList)=0A>>> context.getAttributes().get(UIComponen= t._COMPONENT_STACK);=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0if (componentStac= k =3D=3D null)=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 return null;=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }= =0A>>>>> =A0@@ -435,16 +471,17 @@ public abstract class UIComponent implem= =0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0- =A0 = =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0* @param context=0A>>>= >> =A0=A0 =A0 =A0* @return=0A>>>>> =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *= =0A>>>>> =A0=A0 =A0 =A0* @since 2.0=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0= - =A0 =A0public static UIComponent=0A>>> getCurrentCompositeComponent(Face= sContext context) {=0A>>>>> =A0-=0A>>>>> =A0+ =A0 =A0public static UIComp= onent=0A>>> getCurrentCompositeComponent(FacesContext context)=0A>>>>> = =A0+ =A0 =A0{=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 Boolean honorCurren= tComponentAttributes =3D=0A>>> _getHonorCurrentComponentAttributes(context= );=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 if (honorCurrent= ComponentAttributes =3D=3D Boolean.TRUE)=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A>>= >>> =A0=A0 =A0 =A0 =A0 =A0 =A0 return (UIComponent)=0A>>> context.getAttr= ibutes().get(UIComponent.CURRENT_COMPOSITE_COMPONENT);=0A>>>>> =A0@@ -459,= 15 +496,22 @@ public abstract class UIComponent implem=0A>>>>> =0A>>>>> = =A0=A0 =A0 public abstract String getId();=0A>>>>> =0A>>>>> =A0- =A0 =A0pu= blic List=0A>>> getListenersForEventClass(Class =0A> eventClass) {=0A>>>>> =A0+ =A0 =A0public List=0A>>> getListenersForEventClass(Class =0A> eventClass)=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 List= listeners;=0A>>>>> =A0- =A0 =A0 =A0 =A0if (_systemEv= entListenerClassMap =3D=3D null) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0if (_system= EventListenerClassMap =3D=3D null)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> = =A0=A0 =A0 =A0 =A0 =A0 =A0 listeners =3D Collections.emptyList();=0A>>>>> = =A0- =A0 =A0 =A0 =A0} else {=0A>>>>> =A0+ =A0 =A0 =A0 =A0}=0A>>>>> =A0+ = =A0 =A0 =A0 =A0else=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 = =A0 =A0 =A0 listeners =3D =0A> _systemEventListenerClassMap.get(eventClass)= ;=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0if (listeners =3D=3D null) {=0A>>>>>= =A0+ =A0 =A0 =A0 =A0 =A0 =A0if (listeners =3D=3D null)=0A>>>>> =A0+ =A0 = =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 listeners = =3D Collections.emptyList();=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0} else {= =0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0}=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 = =A0else=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 listeners =3D =0A> Collections.unmodifiableList(listeners);= =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>= > =A0@@ -476,17 +520,20 @@ public abstract class UIComponent implem=0A>>>>= > =A0=A0 =A0 }=0A>>>>> =0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0- =A0 =A0 *=0A= >>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0* @return=0A>>>>> =A0- =A0 = =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0* @since 2.0=0A>>>>> = =A0=A0 =A0 =A0*/=0A>>>>> =A0- =A0 =A0public UIComponent getNamingContainer= () {=0A>>>>> =A0+ =A0 =A0public UIComponent getNamingContainer()=0A>>>>> = =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 // Starting with "this", return t= he closest =0A> component=0A>>> in the ancestry that is a NamingContainer= =0A>>>>> =A0=A0 =A0 =A0 =A0 // or null if none can be found.=0A>>>>> =A0= =A0 =A0 =A0 =A0 UIComponent component =3D this;=0A>>>>> =A0- =A0 =A0 =A0 = =A0do {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0if (component instanceof Namin= gContainer) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0do=0A>>>>> =A0+ =A0 =A0 =A0 =A0= {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0if (component instanceof NamingConta= iner)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 return component;=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>= >>>> =0A>>>>> =A0@@ -512,10 +559,11 @@ public abstract class UIComponent i= mplem=0A>>>>> =A0=A0 =A0 =A0* =A0 =A0 otherwise take no action=0A>>>>= > =A0=A0 =A0 =A0*
    =0A>>>>> =A0=A0 =A0 =A0* @param isInView=0A>>>>> = =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0* @since 2.0= =0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0- =A0 =A0public void setInView(boole= an isInView) {=0A>>>>> =A0+ =A0 =A0public void setInView(boolean isInView)= =0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 _inView =3D isInView;= =0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> =A0@@ -539,48 +587,63 @@ public ab= stract class UIComponent implem=0A>>>>> =0A>>>>> =A0=A0 =A0 public abstrac= t boolean getRendersChildren();=0A>>>>> =0A>>>>> =A0- =A0 =A0public Map getResourceBundleMap() {=0A>>>>> =A0- =A0 =A0 =A0 =A0if (_re= sourceBundleMap =3D=3D null) {=0A>>>>> =A0+ =A0 =A0public Map getResourceBundleMap()=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0= =A0if (_resourceBundleMap =3D=3D null)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>= >>> =A0=A0 =A0 =A0 =A0 =A0 =A0 FacesContext context =3D getFacesContext();= =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 Locale locale =3D context.getViewRoot(= ).getLocale();=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 ClassLoader loader =3D = =0A> _ClassUtils.getContextClassLoader();=0A>>>>> =0A>>>>> =A0- =A0 =A0 = =A0 =A0 =A0 =A0try {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0try=0A>>>>> =A0+= =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // lo= oks for a ResourceBundle with a base name =0A> equal to=0A>>> the fully qu= alified class=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // name of the cu= rrent UIComponent this and =0A> Locale=0A>>> equal to the Locale of the cu= rrent UIViewRoot.=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 _resourceBund= leMap =3D new=0A>>> BundleMap(ResourceBundle.getBundle(getClass().getName(= ), locale, =0A> loader));=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0} catch (Mis= singResourceException e) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0}=0A>>>>> = =A0+ =A0 =A0 =A0 =A0 =A0 =A0catch (MissingResourceException e)=0A>>>>> =A0= + =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // I= f no such bundle is found, and the =0A> component is a=0A>>> composite com= ponent=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (this._isCompositeCo= mponent()) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (this._isCompo= siteComponent())=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> = =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // No need to check componentRes= ource (the =0A> resource=0A>>> used to build the composite=0A>>>>> =A0=A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // component instance) to null since i= t is =0A> already=0A>>> done on this._isCompositeComponent()=0A>>>>> =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Resource componentResource =3D (Res= ource)=0A>>> getAttributes().get(Resource.COMPONENT_RESOURCE_KEY);=0A>>>>>= =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // Let resourceName be the res= ourceName of =0A> the=0A>>> Resource for this composite component,=0A>>>>>= =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // replacing the file extensio= n with=0A>>> ".properties"=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 int extensionIndex =3D=0A>>> componentResource.getResourceName().last= IndexOf('.');=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0String r= esourceName =3D (extensionIndex =0A> < 0 ?=0A>>> componentResource.getReso= urceName() :=0A>>> componentResource.getResourceName().substring(0, extens= ionIndex)) +=0A>>> ".properties";=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0String resourceName =3D (extensionIndex =0A> < 0=0A>>>>> = =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0? =0A> componen= tResource.getResourceName()=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0:=0A>>> componentResource.getResourceName().substri= ng(0, extensionIndex)) +=0A>>> ".properties";=0A>>>>> =0A>>>>> =A0=A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // Let libraryName be the libraryName of = =0A> the the=0A>>> Resource for this composite component.=0A>>>>> =A0=A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // Call=0A>>> ResourceHandler.createRe= source(java.lang.String,java.lang.String), =0A> passing the=0A>>> derived= =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // resourceName and=0A= >>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // libraryName.=0A>>>>> = =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0Resource bundleResource =3D=0A>= >> =0A> context.getApplication().getResourceHandler().createResource(resour= ceName,=0A>>> componentResource.getLibraryName());=0A>>>>> =A0+ =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0Resource bundleResource =3D=0A>>> context.g= etApplication().getResourceHandler()=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0.createResource(resourceName,=0A>>> compone= ntResource.getLibraryName());=0A>>>>> =0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0if (bundleResource !=3D null) {=0A>>>>> =A0+ =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (bundleResource !=3D null)=0A>>>>> =A0+ = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 // If the resultant Resource exists =0A> and ca= n be=0A>>> found, the InputStream for the resource=0A>>>>> =A0=A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // is used to create a ResourceBundle.= =0A> If=0A>>> either of the two previous steps for obtaining the=0A>>>>> = =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // ResourceBundle=0A>>>= >> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // for this componen= t is successful, =0A> the=0A>>> ResourceBundle is wrapped in a Map and=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 //= returned.=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0try= {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_re= sourceBundleMap =3D new =0A> BundleMap(new=0A>>> PropertyResourceBundle(bu= ndleResource.getInputStream()));=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0} catch (IOException e1) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0try=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0_resourceBundleMap=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=3D new BundleMap(new=0A>>>= PropertyResourceBundle(bundleResource.getInputStream()));=0A>>>>> =A0+ = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0}=0A>>>>> =A0+ =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0catch (IOException e1)=0A>>>>> =A0+ =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // Nothing happens, then =0A> resou= rceBundleMap=0A>>> is set as empty map=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 // Otherwise Collections.EMPTY_MAP is =0A> returned.= =0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (_resourceBundleMap =3D=3D= null) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (_resourceBundleMa= p =3D=3D null)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 _resourceBundleMap =3D =0A> Collect= ions.emptyMap();=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0= =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0@@ -594,26 +657,33 @@ public abstract= class UIComponent implem=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0=A0 =A0 pub= lic abstract ValueBinding getValueBinding(String name);=0A>>>>> =0A>>>>> = =A0- =A0 =A0public ValueExpression getValueExpression(String name) {=0A>>>>= > =A0- =A0 =A0 =A0 =A0if (name =3D=3D null) {=0A>>>>> =A0+ =A0 =A0public = ValueExpression getValueExpression(String name)=0A>>>>> =A0+ =A0 =A0{=0A>>= >>> =A0+ =A0 =A0 =A0 =A0if (name =3D=3D null)=0A>>>>> =A0+ =A0 =A0 =A0 = =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 throw new NullPointerException("na= me can not =0A> be=0A>>> null");=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> = =A0-=0A>>>>> =A0- =A0 =A0 =A0 =A0Map bindings =3D =0A> (Map= )=0A>>> getStateHelper().=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0= =A0get(PropertyKeys.bindings);=0A>>>>> =0A>>>>> =A0- =A0 =A0 =A0 =A0if (b= indings =3D=3D null) {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0if (!(this inst= anceof UIComponentBase)) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0Map= bindings =3D (Map>> Object>) getStateHelper().=0A>>>>> =A0+ = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0get(PropertyKeys.bindings);=0A>>>>> =A0+=0A= >>>>> =A0+ =A0 =A0 =A0 =A0if (bindings =3D=3D null)=0A>>>>> =A0+ =A0 =A0 = =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0if (!(this instanceof UICompo= nentBase))=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 // if the component does not inherit from=0A>>> UIComp= onentBase and don't implements JSF 1.2 or later=0A>>>>> =A0=A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 ValueBinding vb =3D getValueBinding(name);=0A>>>>> =A0- = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (vb !=3D null) {=0A>>>>> =A0+ =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0if (vb !=3D null)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 //bindings= =3D new HashMap>> ValueExpression>();=0A>>>>> =A0=A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 ValueExpression ve =3D new=0A>>> _ValueBindin= gToValueExpression(vb);=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =0A> =A0getStateHelper().put(PropertyKeys.bindings , name,=0A>>> =A0ve);= =0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =0A> =A0getStateHelper()= .put(PropertyKeys.bindings, name,=0A>>> ve);=0A>>>>> =A0=A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 return ve;=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0- =A0 =A0 =A0 =A0} = else {=0A>>>>> =A0+ =A0 =A0 =A0 =A0}=0A>>>>> =A0+ =A0 =A0 =A0 =A0else=0A>= >>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 //return bi= ndings.get(name);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 return (ValueExpressi= on) bindings.get(name);=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0@@ -636,7= +706,7 @@ public abstract class UIComponent implem=0A>>>>> =0A>>>>> =A0= =A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0* {@inheritDoc}=0A>>>>> =A0- =A0 =A0 *= =0A>>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0* @since 2.0=0A>>>>> =A0= =A0 =A0 =A0*/=0A>>>>> =A0=A0 =A0 public void clearInitialState()=0A>>>>> = =A0@@ -652,8 +722,10 @@ public abstract class UIComponent implem=0A>>>>> = =0A>>>>> =A0=A0 =A0 public abstract void encodeEnd(FacesContext context) = =0A> throws=0A>>> IOException;=0A>>>>> =0A>>>>> =A0- =A0 =A0public void e= ncodeAll(FacesContext context) throws =0A> IOException {=0A>>>>> =A0- =A0 = =A0 =A0 =A0if (context =3D=3D null) {=0A>>>>> =A0+ =A0 =A0public void enco= deAll(FacesContext context) throws =0A> IOException=0A>>>>> =A0+ =A0 =A0{= =0A>>>>> =A0+ =A0 =A0 =A0 =A0if (context =3D=3D null)=0A>>>>> =A0+ =A0 = =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 throw new NullPointerExcep= tion();=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =0A>>>>> =A0@@ -669,23 +741,= 27 @@ public abstract class UIComponent implem=0A>>>>> =A0=A0 =A0 =A0 =A0 = {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 popComponentFromEL(context);=0A>>>>> = =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 = =A0 //if (isRendered()) {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0this.encodeB= egin(context);=0A>>>>> =A0+ =A0 =A0 =A0 =A0this.encodeBegin(context);=0A>>= >>> =0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0// rendering children=0A>>>>> = =A0- =A0 =A0 =A0 =A0 =A0 =A0if (this.getRendersChildren()) {=0A>>>>> =A0- = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0this.encodeChildren(context);=0A>>>>> =A0- = =A0 =A0 =A0 =A0 =A0 =A0} // let children render itself=0A>>>>> =A0- =A0 = =A0 =A0 =A0 =A0 =A0else {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (= this.getChildCount() > 0) {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0for (int i =3D0; i < =0A> this.getChildCount(); i++) {=0A>>>>> =A0-= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0UIComponent comp =3D =0A> t= his.getChildren().get(i);=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0comp.encodeAll(context);=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0}=0A>>>>> =A0+ =A0 =A0 =A0 =A0// rendering children=0A>>>>>= =A0+ =A0 =A0 =A0 =A0if (this.getRendersChildren())=0A>>>>> =A0+ =A0 =A0 = =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0this.encodeChildren(context);= =0A>>>>> =A0+ =A0 =A0 =A0 =A0} // let children render itself=0A>>>>> =A0+= =A0 =A0 =A0 =A0else=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0+ =A0 =A0 = =A0 =A0 =A0 =A0if (this.getChildCount() > 0)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 = =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (int i =3D 0; i <= this.getChildCount(); =0A> i++)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0UIComponent comp = =3D =0A> this.getChildren().get(i);=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0comp.encodeAll(context);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0- =A0 =A0 =A0 = =A0 =A0 =A0this.encodeEnd(context);=0A>>>>> =A0+ =A0 =A0 =A0 =A0}=0A>>>>> = =A0+ =A0 =A0 =A0 =A0this.encodeEnd(context);=0A>>>>> =A0=A0 =A0 =A0 =A0 /= /}=0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> =A0@@ -701,16 +777,19 @@ public = abstract class UIComponent implem=0A>>>>> =0A>>>>> =A0=A0 =A0 public abstr= act void processDecodes(FacesContext context);=0A>>>>> =0A>>>>> =A0- =A0 = =A0public void processEvent(ComponentSystemEvent event) =0A> throws=0A>>> = AbortProcessingException {=0A>>>>> =A0+ =A0 =A0public void processEvent(Co= mponentSystemEvent event) =0A> throws=0A>>> AbortProcessingException=0A>>>= >> =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 // The default implementation= performs the following =0A> action. If=0A>>> the argument event is an ins= tance of=0A>>>>> =A0=A0 =A0 =A0 =A0 // AfterRestoreStateEvent,=0A>>>>> = =A0- =A0 =A0 =A0 =A0if (event instanceof PostRestoreStateEvent) {=0A>>>>> = =A0+ =A0 =A0 =A0 =A0if (event instanceof PostRestoreStateEvent)=0A>>>>> = =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 // call = this.getValueExpression(java.lang.String) =0A> passing=0A>>> the literal s= tring "binding"=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 ValueExpression express= ion =3D=0A>>> getValueExpression("binding");=0A>>>>> =0A>>>>> =A0=A0 =A0 = =A0 =A0 =A0 =A0 // If the result is non-null, set the value of the=0A>>> V= alueExpression to be this.=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0if (express= ion !=3D null) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0if (expression !=3D n= ull)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =0A> expression.setValue(getFacesContext().getELContext(),=0A>= >> this);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =0A>>>>> =A0@@ -7= 22,7 +801,8 @@ public abstract class UIComponent implem=0A>>>>> =A0=A0 =A0= =A0 =A0 =A0 =A0 // and jsp restore state triggers, a central point =0A> is= =0A>>> preferrble so we do it here=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 //T= ODO ask the EG the spec clearly contradicts =0A> blackbox RI=0A>>> behavio= r here=0A>>>>> =0A>>>>> =A0-=0A>>> //getFacesContext().getApplication().p= ublishEvent(getFacesContext(),=0A>>> PostRestoreStateEvent.class, UICompon= ent.class, this);=0A>>>>> =A0+=0A>>> =A0//getFacesContext().getApplicatio= n().publishEvent(getFacesContext(),=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0//= PostRestoreStateEvent.class, =0A> UIComponent.class, this);=0A>>>>> =A0= =A0 =A0 =A0 =A0 }=0A>>>>> =0A>>>>> =A0=A0 =A0 }=0A>>>>> =A0@@ -733,7 +813= ,9 @@ public abstract class UIComponent implem=0A>>>>> =0A>>>>> =A0=A0 =A0= public abstract java.lang.Object =0A> processSaveState(FacesContext=0A>>> = context);=0A>>>>> =0A>>>>> =A0- =A0 =A0public void subscribeToEvent(Class= SystemEvent>=0A>>> eventClass, ComponentSystemEventListene= r componentListener) {=0A>>>>> =A0+ =A0 =A0public void subscribeToEvent(Cl= ass SystemEvent>=0A>>> eventClass,=0A>>>>> =A0+ =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ComponentSystemEven= tListener=0A>>> componentListener)=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0=A0 = =A0 =A0 =A0 // The default implementation creates an inner=0A>>> SystemEve= ntListener instance that wraps argument=0A>>>>> =A0=A0 =A0 =A0 =A0 // comp= onentListener as the listener argument.=0A>>>>> =A0=A0 =A0 =A0 =A0 if (eve= ntClass =3D=3D null)=0A>>>>> =A0@@ -744,17 +826,19 @@ public abstract clas= s UIComponent implem=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 = =A0 =A0 =A0 throw new =0A> NullPointerException("componentListener=0A>>> r= equired");=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>= > =A0=A0 =A0 =A0 =A0 SystemEventListener listener =3D new =0A> EventListen= erWrapper(this,=0A>>> componentListener);=0A>>>>> =0A>>>>> =A0=A0 =A0 =A0= =A0 // Make sure the map exists=0A>>>>> =A0- =A0 =A0 =A0 =A0if (_systemEv= entListenerClassMap =3D=3D null) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0if (_system= EventListenerClassMap =3D=3D null)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> = =A0=A0 =A0 =A0 =A0 =A0 =A0 _systemEventListenerClassMap =3D new =0A> HashMa= p>> extends SystemEvent>, List>();=0A>>>>= > =A0=A0 =A0 =A0 =A0 }=0A>>>>> =0A>>>>> =A0=A0 =A0 =A0 =A0 List listeners =3D=0A>>> _systemEventListenerClassMap.get(eventClas= s);=0A>>>>> =A0=A0 =A0 =A0 =A0 // Make sure the list for class exists=0A>>= >>> =A0- =A0 =A0 =A0 =A0if (listeners =3D=3D null) {=0A>>>>> =A0+ =A0 =A0= =A0 =A0if (listeners =3D=3D null)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> = =A0=A0 =A0 =A0 =A0 =A0 =A0 listeners =3D new =0A> _DeltaList(new=0A>>> ArrayList(2));=0A>>>>> =A0=A0 =A0 = =A0 =A0 =A0 =A0 _systemEventListenerClassMap.put(eventClass, =0A> listeners= );=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0@@ -764,13 +848,15 @@ public a= bstract class UIComponent implem=0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> = =A0=A0 =A0 public void unsubscribeFromEvent(Class SystemEven= t>=0A>>> eventClass,=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0ComponentSystemE= ventListener componentListener) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =0A> ComponentSystemEventListe= ner=0A>>> componentListener)=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 = =A0 =A0 /*=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0* When doing the comparison to de= termine if an =0A> existing=0A>>> listener is equal to the argument compon= entListener=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0* (and thus must be removed), th= e equals() method on =0A> the=0A>>> existing listener must be invoked, pas= sing the=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0* argument componentListener, rathe= r than the other =0A> way=0A>>> around.=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0*= =0A>>>>> =A0- =A0 =A0 =A0 =A0 * -=3DSimon Lessard=3D- What is that suppose= d to mean? =0A> Are we=0A>>> supposed to keep an internal map of created l= istener wrappers?=0A>>>>> =A0+ =A0 =A0 =A0 =A0 * -=3DSimon Lessard=3D- Wha= t is that supposed to mean? =0A> Are we=0A>>> supposed to keep=0A>>>>> = =A0+ =A0 =A0 =A0 =A0 * an internal map of created listener wrappers?=0A>>>>= > =A0=A0 =A0 =A0 =A0 =A0* -=3D Leonardo Uribe=3D- Yes, it is supposed a wr= apper =0A> should be=0A>>> used to hold listener references, to prevent=0A= >>>>> =A0=A0 =A0 =A0 =A0 =A0* serialize component instances on the state.= =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0*/=0A>>>>> =A0@@ -786,12 +872,13 @@ public= abstract class UIComponent implem=0A>>>>> =A0=A0 =A0 =A0 =A0 if (_systemE= ventListenerClassMap !=3D null)=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A>>>>> =A0= =A0 =A0 =A0 =A0 =A0 =A0 List listeners =3D=0A>>> _sys= temEventListenerClassMap.get(eventClass);=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>= >> =A0=A0 =A0 =A0 =A0 =A0 =A0 if (listeners !=3D null && =0A> !listeners.i= sEmpty())=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0- =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0for (Iterator it =3D=0A>>> listene= rs.iterator(); it.hasNext();)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= for (Iterator it =3D=0A>>> listeners.iterator(); it.h= asNext(); )=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0- =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ComponentSystemEventListener listener = =3D=0A>>> ((EventListenerWrapper) it.next()).getComponentSystemEventListen= er();=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ComponentSystemE= ventListener listener=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0=3D ((EventListenerWrapper)=0A>>> it.next()).getComponentS= ystemEventListener();=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 i= f (listener !=3D null &&=0A>>> listener.equals(componentListener))=0A>>>>>= =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 it.remove();=0A>>>>> =A0@@ -822,48 +909,59= @@ public abstract class UIComponent implem=0A>>>>> =A0=A0 =A0 =A0* @para= m callback the callback to be performed=0A>>>>> =A0=A0 =A0 =A0* @return fa= lse if the processing is not done true if we =0A> can=0A>>> shortcut=0A>>>= >> =A0=A0 =A0 =A0* the visiting because we are done with everything=0A>>>>= > =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0* @since 2= .0=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0- =A0 =A0public boolean visitTree(= VisitContext context, =0A> VisitCallback=0A>>> callback) {=0A>>>>> =A0- = =A0 =A0 =A0 =A0try {=0A>>>>> =A0+ =A0 =A0public boolean visitTree(VisitCon= text context, =0A> VisitCallback=0A>>> callback)=0A>>>>> =A0+ =A0 =A0{=0A= >>>>> =A0+ =A0 =A0 =A0 =A0try=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0= =A0 =A0 =A0 =A0 =A0 =A0 pushComponentToEL(context.getFacesContext(), =0A> t= his);=0A>>>>> =A0-=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0if (!isVisitable(c= ontext)) {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return false;=0A>>>= >> =A0- =A0 =A0 =A0 =A0 =A0 =A0}=0A>>>>> =A0-=0A>>>>> =A0- =A0 =A0 =A0 = =A0 =A0 =A0VisitResult res =3D =0A> context.invokeVisitCallback(this,=0A>>>= callback);=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0switch (res) {=0A>>>>> = =A0- =A0 =A0 =A0 =A0 =A0 =A0//we are done nothing has to be processed anymo= re=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0case COMPLETE:=0A>>>>> =A0- =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0return true;=0A>>>>> =0A>>>>> =A0- =A0 =A0 =A0 = =A0 =A0 =A0case REJECT:=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0if (!isVisitab= le(context))=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 return false;=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0}= =0A>>>>> =0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0//accept=0A>>>>> =A0- =A0 = =A0 =A0 =A0 =A0 =A0default:=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if= (getFacetCount() > 0) {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0for (UIComponent facet : =0A> getFacets().values()) {=0A>>>>> =A0- =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (facet.visitTree(context, =0A= > callback)) {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0return true;=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0VisitResult re= s =3D =0A> context.invokeVisitCallback(this,=0A>>> callback);=0A>>>>> =A0= + =A0 =A0 =A0 =A0 =A0 =A0switch (res)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0= {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0//we are done nothing has to= be processed =0A> anymore=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0cas= e COMPLETE:=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return tru= e;=0A>>>>> =A0+=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case REJECT:= =0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return false;=0A>>>>>= =A0+=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0//accept=0A>>>>> =A0+ = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0default:=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0if (getFacetCount() > 0)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0for (UIComponent facet : =0A> getFacets().values())=0A>>>>> =A0= + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0+ =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (facet.visitTree(context,= =0A> callback))=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0return true;=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0}=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>>= =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0}=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0int childCount =3D getChildCount();=0A>>>>> =A0- =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0if (childCount > 0) {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0for (int i =3D0; i < childCount; i++) {=0A>>>>> =A0- = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0UIComponent child =3D =0A> g= etChildren().get(i);=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0if (child.visitTree(context, =0A> callback)) {=0A>>>>> =A0- =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return true;=0A>>>>> =A0+ = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0int childCount =3D getChildCount();= =0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (childCount > 0)= =0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0+ =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (int i =3D 0; i < childCount= ; =0A> i++)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{= =0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0UICom= ponent child =3D =0A> getChildren().get(i);=0A>>>>> =A0+ =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (child.visitTree(context, =0A> ca= llback))=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0return true;=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0}=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0- = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0}=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0return false;=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0retur= n false;=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 = }=0A>>>>> =A0- =A0 =A0 =A0 =A0finally {=0A>>>>> =A0+ =A0 =A0 =A0 =A0final= ly=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 //all= components must call popComponentFromEl =0A> after=0A>>> visiting is fini= shed=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 popComponentFromEL(context.getFace= sContext());=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0@@ -881,14 +979,14 @= @ public abstract class UIComponent implem=0A>>>>> =A0=A0 =A0 =A0* (Note t= hat rendererType is suspicious, in theory this =0A> field is=0A>>>>> =A0= =A0 =A0 =A0* initialized on constructor, but on 1.1 and 1.2 is saved =0A> a= nd=0A>>> restored,=0A>>>>> =A0=A0 =A0 =A0* so to keep backward behavior w= e put it on StateHelper )=0A>>>>> =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *= =0A>>>>> =A0=A0 =A0 =A0* Also, facesListeners can't be wrapped on =0A> Sta= teHelper because=0A>>> it=0A>>>>> =A0=A0 =A0 =A0* needs to handle Partial= StateHolder instances when it is =0A> saved=0A>>> and=0A>>>>> =A0=A0 =A0 = =A0* restored and this interface does not implement=0A>>> PartialStateHold= er,=0A>>>>> =A0=A0 =A0 =A0* so we can't propagate calls to markInitialStat= e and=0A>>> clearInitialState,=0A>>>>> =A0=A0 =A0 =A0* in other words, th= e List wrapped by StateHelper does =0A> not handle=0A>>>>> =A0=A0 =A0 =A0*= PartialStateHolder items.=0A>>>>> =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *= =0A>>>>> =A0=A0 =A0 =A0* "bindings" map does not need to deal with=0A>>> = PartialStateHolder instances,=0A>>>>> =A0=A0 =A0 =A0* =A0so we can use Sta= teHelper feature (handle delta for =0A> this map or=0A>>> in=0A>>>>> =A0= =A0 =A0 =A0* =A0other words track add/removal from bindings map as =0A> del= ta).=0A>>>>> =A0@@ -902,7 +1000,8 @@ public abstract class UIComponent imp= lem=0A>>>>> =A0=A0 =A0 =A0 =A0 facesListeners=0A>>>>> =A0=A0 =A0 }=0A>>>>= > =0A>>>>> =A0- =A0 =A0protected StateHelper getStateHelper() {=0A>>>>> = =A0+ =A0 =A0protected StateHelper getStateHelper()=0A>>>>> =A0+ =A0 =A0{= =0A>>>>> =A0=A0 =A0 =A0 =A0 return getStateHelper(true);=0A>>>>> =A0=A0 = =A0 }=0A>>>>> =0A>>>>> =A0@@ -912,26 +1011,32 @@ public abstract class UIC= omponent =0A> implem=0A>>>>> =A0=A0 =A0 =A0* @param create if true a state= helper is created if not =0A> already=0A>>> existing=0A>>>>> =A0=A0 =A0 = =A0* @return an implementation of the StateHelper interface =0A> or null=0A= >>> if none exists and create is set to false=0A>>>>> =A0=A0 =A0 =A0*/=0A= >>>>> =A0- =A0 =A0protected StateHelper getStateHelper(boolean create) {= =0A>>>>> =A0- =A0 =A0 =A0 =A0if(_stateHelper !=3D null) {=0A>>>>> =A0+ = =A0 =A0protected StateHelper getStateHelper(boolean create)=0A>>>>> =A0+ = =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0if (_stateHelper !=3D null)=0A>>>>> = =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 return _stateHelp= er;=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0- =A0 =A0 =A0 =A0if(create) {= =0A>>>>> =A0+ =A0 =A0 =A0 =A0if (create)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A= >>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 _stateHelper =3D new _DeltaStateHelper(th= is);=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 return _stat= eHelper;=0A>>>>> =A0=A0 =A0 }=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 = =A0 public final TransientStateHelper =0A> getTransientStateHelper()=0A>>>>= > =A0=A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 return getTransientStateHelper(= true);=0A>>>>> =A0=A0 =A0 }=0A>>>>> =A0-=0A>>>>> =A0- =A0 =A0public Tran= sientStateHelper =0A> getTransientStateHelper(boolean=0A>>> create) {=0A>>= >>> =A0- =A0 =A0 =A0 =A0if(_stateHelper !=3D null) {=0A>>>>> =A0+=0A>>>>>= =A0+ =A0 =A0public TransientStateHelper =0A> getTransientStateHelper(bool= ean=0A>>> create)=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0if (= _stateHelper !=3D null)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 = =A0 =A0 =A0 =A0 return _stateHelper;=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> = =A0- =A0 =A0 =A0 =A0if(create) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0if (create)= =0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 _stateH= elper =3D new _DeltaStateHelper(this);=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>= > =A0=A0 =A0 =A0 =A0 return _stateHelper;=0A>>>>> =A0@@ -948,22 +1053,24 = @@ public abstract class UIComponent =0A> implem=0A>>>>> =A0=A0 =A0 }=0A>>= >>> =0A>>>>> =A0=A0 =A0 @SuppressWarnings("unchecked")=0A>>>>> =A0- =A0 = =A0public final void popComponentFromEL(FacesContext =0A> context) {=0A>>>>= > =A0- =A0 =A0 =A0 =A0Map contextAttributes =3D=0A>>> con= text.getAttributes();=0A>>>>> =A0-=0A>>>>> =A0+ =A0 =A0public final void = popComponentFromEL(FacesContext =0A> context)=0A>>>>> =A0+ =A0 =A0{=0A>>>>= > =A0+ =A0 =A0 =A0 =A0Map contextAttributes =3D=0A>>> con= text.getAttributes();=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 if (_honorC= urrentComponentAttributes =3D=3D null)=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A>>>>= > =A0=A0 =A0 =A0 =A0 =A0 =A0 _honorCurrentComponentAttributes =3D=0A>>> _= getHonorCurrentComponentAttributes(context);=0A>>>>> =A0=A0 =A0 =A0 =A0 }= =0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 if (_honorCurrentC= omponentAttributes =3D=3D Boolean.TRUE)=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A>>>= >> =A0=A0 =A0 =A0 =A0 =A0 =A0 // Pop the current UIComponent from the =0A>= FacesContext=0A>>> attributes map so that the previous=0A>>>>> =A0=A0 = =A0 =A0 =A0 =A0 =A0 // UIComponent, if any, becomes the current =0A> compon= ent.=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0LinkedList component= Stack =3D=0A>>> (LinkedList)=0A>>> contextAttributes.get(UIC= omponent._COMPONENT_STACK);=0A>>>>> =A0-=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0= =A0UIComponent oldCurrent =3D=0A>>> (UIComponent)contextAttributes.get(UI= Component.CURRENT_COMPONENT);=0A>>>>> =A0-=0A>>>>> =A0+ =A0 =A0 =A0 =A0 = =A0 =A0LinkedList componentStack=0A>>>>> =A0+ =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0=3D (LinkedList)=0A>>> contextAttribu= tes.get(UIComponent._COMPONENT_STACK);=0A>>>>> =A0+=0A>>>>> =A0+ =A0 =A0 = =A0 =A0 =A0 =A0UIComponent oldCurrent =3D (UIComponent)=0A>>> contextAttri= butes.get(UIComponent.CURRENT_COMPONENT);=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0= =A0 =A0 =A0 =A0 UIComponent newCurrent =3D null;=0A>>>>> =A0=A0 =A0 =A0 = =A0 =A0 =A0 if (componentStack !=3D null &&=0A>>> !componentStack.isEmpty(= ))=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0@@ -973,7 +1080,7 @@ p= ublic abstract class UIComponent implem=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 int componentIndex =3D =0A> componentStack.indexOf(this);= =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (componentIndex >= =3D 0)=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0- = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (int i =3D 0; i < =0A> (= componentIndex+1);=0A>>> i++)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0for (int i =3D 0; i < =0A> (componentIndex + 1);=0A>>> = i++)=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> = =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 newCurrent =3D = =0A> componentStack.removeFirst();=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0@@ -994,8 +1101,8 @@ public abstract clas= s UIComponent implem=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 //Reset th= e current composite component=0A>>>>> =0A>>> contextAttributes.put(UICompo= nent.CURRENT_COMPOSITE_COMPONENT, null);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 = =A0 }=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0oldCurrent =3D=0A>>> (UICompone= nt)contextAttributes.put(UIComponent.CURRENT_COMPONENT, =0A> newCurrent);= =0A>>>>> =A0-=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0oldCurrent =3D (UICompo= nent)=0A>>> contextAttributes.put(UIComponent.CURRENT_COMPONENT, newCurren= t);=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 if (oldCurrent !=3D n= ull &&=0A>>> oldCurrent._isCompositeComponent())=0A>>>>> =A0=A0 =A0 =A0 = =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // Recalculate th= e current composite component=0A>>>>> =A0@@ -1008,7 +1115,7 @@ public abst= ract class UIComponent implem=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 else=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> = =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 UIComponent previousCom= positeComponent =0A> =3D null;=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0for (Iterator it =3D=0A>>> componentStack.= iterator(); it.hasNext();)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0for (Iterator it =3D=0A>>> componentStack.iter= ator(); it.hasNext(); )=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 UIComponent component =3D it.next();=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if =0A> (component._isCompositeComponen= t())=0A>>>>> =A0@@ -1026,15 +1133,16 @@ public abstract class UIComponent = =0A> implem=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 = =A0 // Pop the current UIComponent from the =0A> FacesContext=0A>>> attrib= utes map so that the previous=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 // UIComp= onent, if any, becomes the current =0A> component.=0A>>>>> =A0- =A0 =A0 = =A0 =A0 =A0 =A0LinkedList componentStack =3D=0A>>> (LinkedLis= t)=0A>>> contextAttributes.get(UIComponent._COMPONENT_STACK);= =0A>>>>> =A0-=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0LinkedList= componentStack=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=3D (L= inkedList)=0A>>> contextAttributes.get(UIComponent._COMPONENT= _STACK);=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 UIComponent oldC= urrent =3D null;=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 if (componentStack != =3D null &&=0A>>> !componentStack.isEmpty())=0A>>>>> =A0=A0 =A0 =A0 =A0 = =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 int componentIndex = =3D =0A> componentStack.indexOf(this);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 if (componentIndex >=3D 0)=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (int i =3D 0= ; i < =0A> (componentIndex+1); i++)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0for (int i =3D 0; i < (componentIndex + =0A> 1); i++)=0A>>>>= > =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 oldCurrent =3D =0A> componentStack.removeF= irst();=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0@= @ -1044,12 +1152,12 @@ public abstract class UIComponent =0A> implem=0A>>>>= > =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return;=0A>>>>> =A0=A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> = =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 if (oldCurrent !=3D = null &&=0A>>> oldCurrent._isCompositeComponent())=0A>>>>> =A0=A0 =A0 =A0 = =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // Recalculate th= e current composite component=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 U= IComponent previousCompositeComponent =3D null;=0A>>>>> =A0- =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0for (Iterator it =3D=0A>>> componentStack.= iterator(); it.hasNext();)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for= (Iterator it =3D=0A>>> componentStack.iterator(); it.hasNext= (); )=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 UIComponent component =3D it.next();=0A>>>>> = =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (component._isCompositeCompon= ent())=0A>>>>> =A0@@ -1064,40 +1172,42 @@ public abstract class UIComponen= t =0A> implem=0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> =A0=A0 =A0 @SuppressW= arnings("unchecked")=0A>>>>> =A0- =A0 =A0public final void pushComponentTo= EL(FacesContext context,=0A>>> UIComponent component) {=0A>>>>> =A0+ =A0 = =A0public final void pushComponentToEL(FacesContext context,=0A>>> UICompo= nent component)=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 if (comp= onent =3D=3D null)=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 = =A0 =A0 =A0 component =3D this;=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =0A>>= >>> =A0=A0 =A0 =A0 =A0 Map contextAttributes =3D=0A>>> co= ntext.getAttributes();=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 = =A0 if (_honorCurrentComponentAttributes =3D=3D null)=0A>>>>> =A0=A0 =A0 = =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 _honorCurrentComponentAttribu= tes =3D=0A>>> _getHonorCurrentComponentAttributes(context);=0A>>>>> =A0= =A0 =A0 =A0 =A0 }=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 i= f (_honorCurrentComponentAttributes =3D=3D Boolean.TRUE)=0A>>>>> =A0=A0 = =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 UIComponent currentCompon= ent =3D (UIComponent)=0A>>> contextAttributes.get(UIComponent.CURRENT_COMP= ONENT);=0A>>>>> =A0-=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0if(currentCompon= ent !=3D null)=0A>>>>> =A0+=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0if (curre= ntComponent !=3D null)=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0- = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0LinkedList componentStack =0A> = =3D=0A>>> (LinkedList)=0A>>> contextAttributes.get(UICompone= nt._COMPONENT_STACK);=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if(compo= nentStack =3D=3D null)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0LinkedL= ist componentStack=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0=3D (LinkedList)=0A>>> contextAttributes.g= et(UIComponent._COMPONENT_STACK);=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0if (componentStack =3D=3D null)=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 componentStack = =3D new=0A>>> LinkedList();=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =0A> contextAttributes.put(UIComponent._COMPONENT_STACK= ,=0A>>> componentStack);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=0A>= >>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 compon= entStack.addFirst(currentComponent);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }= =0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 // Push th= e current UIComponent this to the =0A> FacesContext=0A>>> =A0attribute map= using the key CURRENT_COMPONENT=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 // sav= ing the previous UIComponent associated with=0A>>> CURRENT_COMPONENT for a= subsequent call to=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 // =0A> popComponen= tFromEL(javax.faces.context.FacesContext).=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 = =A0 =0A> contextAttributes.put(UIComponent.CURRENT_COMPONENT,=0A>>> compon= ent);=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 if (c= omponent._isCompositeComponent())=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 {=0A>= >>>> =0A>>> contextAttributes.put(UIComponent.CURRENT_COMPOSITE_COMPONENT,= =0A> component);=0A>>>>> =A0@@ -1105,8 +1215,9 @@ public abstract class U= IComponent implem=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0= else=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0Li= nkedList componentStack =3D=0A>>> (LinkedList)= =0A>>> contextAttributes.get(UIComponent._COMPONENT_STACK);=0A>>>>> =A0- = =A0 =A0 =A0 =A0 =A0 =A0if(componentStack =3D=3D null)=0A>>>>> =A0+ =A0 =A0= =A0 =A0 =A0 =A0LinkedList componentStack=0A>>>>> =A0+ =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=3D (LinkedList)=0A>>> con= textAttributes.get(UIComponent._COMPONENT_STACK);=0A>>>>> =A0+ =A0 =A0 =A0= =A0 =A0 =A0if (componentStack =3D=3D null)=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0= =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 componentStack =3D new = =0A> LinkedList();=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =0A> contextAttributes.put(UIComponent._COMPONENT_STACK,=0A>>> componentS= tack);=0A>>>>> =A0@@ -1122,25 +1233,28 @@ public abstract class UIComponen= t =0A> implem=0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0* @since 1.2= =0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0- =A0 =A0public int getFacetCount() = {=0A>>>>> =A0+ =A0 =A0public int getFacetCount()=0A>>>>> =A0+ =A0 =A0{=0A= >>>>> =A0=A0 =A0 =A0 =A0 // not sure why the RI has this method in both=0A= >>>>> =A0=A0 =A0 =A0 =A0 // UIComponent and UIComponentBase=0A>>>>> =A0= =A0 =A0 =A0 =A0 Map facets =3D getFacets();=0A>>>>> = =A0=A0 =A0 =A0 =A0 return facets =3D=3D null ? 0 : facets.size();=0A>>>>> = =A0=A0 =A0 }=0A>>>>> =0A>>>>> =A0- =A0 =A0private boolean _isCompositeComp= onent() {=0A>>>>> =A0+ =A0 =A0private boolean _isCompositeComponent()=0A>>= >>> =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 //moved to the static method= =0A>>>>> =A0=A0 =A0 =A0 =A0 return UIComponent.isCompositeComponent(this);= =0A>>>>> =A0=A0 =A0 }=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 /**= =0A>>>>> =A0=A0 =A0 =A0* Gets value of=0A>>> "javax.faces.HONOR_CURRENT_C= OMPONENT_ATTRIBUTES" parameter =0A> cached in=0A>>> facesContext.attribute= s=0A>>>>> =A0=A0 =A0 =A0* or resolves that param and caches its value in= =0A>>> facesContext.attributes.=0A>>>>> =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 = =A0 *=0A>>>>> =A0=A0 =A0 =A0* @return canonical Boolean value for paramete= r=0A>>> "javax.faces.HONOR_CURRENT_COMPONENT_ATTRIBUTES"=0A>>>>> =A0=A0 = =A0 =A0*/=0A>>>>> =A0- =A0 =A0private static Boolean=0A>>> _getHonorCurre= ntComponentAttributes(FacesContext facesContext) {=0A>>>>> =A0+ =A0 =A0pri= vate static Boolean=0A>>> _getHonorCurrentComponentAttributes(FacesContext= facesContext)=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 // perfor= mance note: we cache value in =0A> facesContext.attributes=0A>>> because= =0A>>>>> =A0=A0 =A0 =A0 =A0 // 1) methods pushComponentToEL, popComponentF= romEl,=0A>>> getCurrentComponent a getCurrentCompositeComponent=0A>>>>> = =A0=A0 =A0 =A0 =A0 // can use that value=0A>>>>> =A0@@ -1149,49 +1263,65 @= @ public abstract class UIComponent =0A> implem=0A>>>>> =A0=A0 =A0 =A0 =A0= // implementation and performance=0A>>>>> =A0=A0 =A0 =A0 =A0 Map attributes =3D=0A>>> facesContext.getAttributes();=0A>>>>> =A0=A0= =A0 =A0 =A0 Boolean paramValue =3D (Boolean)=0A>>> attributes.get(HONOR_C= URRENT_COMPONENT_ATTRIBUTES_PARAM_NAME);=0A>>>>> =A0- =A0 =A0 =A0 =A0if (p= aramValue =3D=3D null) {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0String param = =3D=0A>>> =0A> facesContext.getExternalContext().getInitParameter(HONOR_CUR= RENT_COMPONENT_ATTRIBUTES_PARAM_NAME);=0A>>>>> =A0+ =A0 =A0 =A0 =A0if (par= amValue =3D=3D null)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0+ =A0 =A0 = =A0 =A0 =A0 =A0String param=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0=3D=0A>>> =0A> facesContext.getExternalContext().getInitParameter(HO= NOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME);=0A>>>>> =A0=A0 =A0 =A0 =A0 = =A0 =A0 paramValue =3D Boolean.valueOf((param !=3D null =0A> &&=0A>>> Bool= ean.valueOf(param).booleanValue()));=0A>>>>> =0A>>> attributes.put(HONOR_C= URRENT_COMPONENT_ATTRIBUTES_PARAM_NAME, =0A> paramValue);=0A>>>>> =A0=A0 = =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 return paramValue;=0A>>>>> =A0= =A0 =A0 }=0A>>>>> =A0-=0A>>>>> =A0- =A0 =A0private static class BundleMap= implements Map>> String> {=0A>>>>> =A0+=0A>>>>> =A0+ =A0 = =A0private static class BundleMap implements Map>> String>=0A>= >>>> =A0+ =A0 =A0{=0A>>>>> =0A>>>>> =A0=A0 =A0 =A0 =A0 private ResourceBu= ndle _bundle;=0A>>>>> =A0=A0 =A0 =A0 =A0 private List _values;=0A>= >>>> =0A>>>>> =A0- =A0 =A0 =A0 =A0public BundleMap(ResourceBundle bundle) = {=0A>>>>> =A0+ =A0 =A0 =A0 =A0public BundleMap(ResourceBundle bundle)=0A>>= >>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 _bundle =3D = bundle;=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =0A>>>>> =A0=A0 =A0 =A0 =A0 = // Optimized methods=0A>>>>> =A0- =A0 =A0 =A0 =A0public String get(Object = key) {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0try {=0A>>>>> =A0+ =A0 =A0 =A0= =A0public String get(Object key)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> = =A0+ =A0 =A0 =A0 =A0 =A0 =A0try=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>= >>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return (String) =0A> _bundle.getObj= ect(key.toString());=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0} catch (Exceptio= n e) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0}=0A>>>>> =A0+ =A0 =A0 =A0 =A0= =A0 =A0catch (Exception e)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> = =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return "???" + key + =0A> "???";=0A>>>>= > =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =0A>>= >>> =A0- =A0 =A0 =A0 =A0public boolean isEmpty() {=0A>>>>> =A0+ =A0 =A0 = =A0 =A0public boolean isEmpty()=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0= =A0 =A0 =A0 =A0 =A0 =A0 return !_bundle.getKeys().hasMoreElements();=0A>>>>= > =A0=A0 =A0 =A0 =A0 }=0A>>>>> =0A>>>>> =A0- =A0 =A0 =A0 =A0public boolea= n containsKey(Object key) {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0try {=0A>>= >>> =A0+ =A0 =A0 =A0 =A0public boolean containsKey(Object key)=0A>>>>> = =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0try=0A>>>>> =A0= + =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 retu= rn _bundle.getObject(key.toString()) !=3D =0A> null;=0A>>>>> =A0- =A0 =A0 = =A0 =A0 =A0 =A0} catch (MissingResourceException e) {=0A>>>>> =A0+ =A0 =A0= =A0 =A0 =A0 =A0}=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0catch (MissingResour= ceException e)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 return false;=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }= =0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =0A>>>>> =A0=A0 =A0 =A0 =A0 // Unop= timized methods=0A>>>>> =A0- =A0 =A0 =A0 =A0public Collection valu= es() {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0if (_values =3D=3D null) {=0A>>= >>> =A0+ =A0 =A0 =A0 =A0public Collection values()=0A>>>>> =A0+ = =A0 =A0 =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0if (_values =3D=3D nu= ll)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 _values =3D new ArrayList();=0A>>>>> =A0- =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0for (Enumeration enumer =3D=0A>>> _bundle.getKe= ys(); enumer.hasMoreElements();) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0for (Enumeration enumer =3D=0A>>> _bundle.getKeys(); enumer= .hasMoreElements(); )=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>= > =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 String v =3D =0A> _bundle.get= String(enumer.nextElement());=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 _values.add(v);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>= >> =A0@@ -1199,29 +1329,37 @@ public abstract class UIComponent =0A> imple= m=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 return _values;=0A>>>>> =A0=A0 =A0 = =A0 =A0 }=0A>>>>> =0A>>>>> =A0- =A0 =A0 =A0 =A0public int size() {=0A>>>>>= =A0+ =A0 =A0 =A0 =A0public int size()=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>= >>> =A0=A0 =A0 =A0 =A0 =A0 =A0 return values().size();=0A>>>>> =A0=A0 =A0= =A0 =A0 }=0A>>>>> =0A>>>>> =A0- =A0 =A0 =A0 =A0public boolean containsVal= ue(Object value) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0public boolean containsValu= e(Object value)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 = =A0 =A0 return values().contains(value);=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>= >>> =0A>>>>> =A0- =A0 =A0 =A0 =A0public Set> =0A= > entrySet() {=0A>>>>> =A0+ =A0 =A0 =A0 =A0public Set> =0A> entrySet()=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 = =A0 =A0 =A0 =A0 Set> set =3D new=0A>>> HashSet>();=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0for (Enumeration<= String> enumer =3D =0A> _bundle.getKeys();=0A>>> enumer.hasMoreElements();= ) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0for (Enumeration enumer = =3D =0A> _bundle.getKeys();=0A>>> enumer.hasMoreElements(); )=0A>>>>> =A0= + =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 fina= l String k =3D enumer.nextElement();=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0set.add(new Map.Entry() =0A> {=0A>>>>> =A0+ =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0set.add(new Map.Entry()=0A>>>>> = =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =0A>>>>> =A0- =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0public String getKey() {=0A>>>>> =A0+ =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0public String getKey()=0A>>>>> =A0+ =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 return k;=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 }=0A>>>>> =0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0pub= lic String getValue() {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0public String getValue()=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return= (String) _bundle.getObject(k);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 }=0A>>>>> =0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0pu= blic String setValue(String value) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0public String setValue(String value)=0A>>>>> =A0+ =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 throw new =0A> UnsupportedOperationException();=0A>>>>>= =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 });=0A>>>>> =A0@@ -1230,37 +1368,44 @@ public abstract cla= ss UIComponent =0A> implem=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 return set;= =0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =0A>>>>> =A0- =A0 =A0 =A0 =A0public= Set keySet() {=0A>>>>> =A0+ =A0 =A0 =A0 =A0public Set key= Set()=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 Se= t set =3D new =0A> HashSet();=0A>>>>> =A0- =A0 =A0 =A0 =A0= =A0 =A0for (Enumeration enumer =3D =0A> _bundle.getKeys();=0A>>> = enumer.hasMoreElements();) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0for (Enum= eration enumer =3D =0A> _bundle.getKeys();=0A>>> enumer.hasMoreEle= ments(); )=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 set.add(enumer.nextElement());=0A>>>>> =A0=A0 =A0 =A0 = =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 return set;=0A>>>>> =A0= =A0 =A0 =A0 =A0 }=0A>>>>> =0A>>>>> =A0=A0 =A0 =A0 =A0 // Unsupported metho= ds=0A>>>>> =A0- =A0 =A0 =A0 =A0public String remove(Object key) {=0A>>>>> = =A0+ =A0 =A0 =A0 =A0public String remove(Object key)=0A>>>>> =A0+ =A0 =A0= =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 throw new UnsupportedOperatio= nException();=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =0A>>>>> =A0- =A0 =A0 = =A0 =A0public void putAll(Map>> String> t)= {=0A>>>>> =A0+ =A0 =A0 =A0 =A0public void putAll(Map>> String> t)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 = =A0 =A0 =A0 =A0 =A0 throw new UnsupportedOperationException();=0A>>>>> =A0= =A0 =A0 =A0 =A0 }=0A>>>>> =0A>>>>> =A0- =A0 =A0 =A0 =A0public String put(S= tring key, String value) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0public String put(S= tring key, String value)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0= =A0 =A0 =A0 =A0 throw new UnsupportedOperationException();=0A>>>>> =A0=A0= =A0 =A0 =A0 }=0A>>>>> =0A>>>>> =A0- =A0 =A0 =A0 =A0public void clear() {= =0A>>>>> =A0+ =A0 =A0 =A0 =A0public void clear()=0A>>>>> =A0+ =A0 =A0 =A0= =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 throw new UnsupportedOperationExc= eption();=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>= >>> =A0- =A0 =A0static class EventListenerWrapper implements =0A> SystemEv= entListener,=0A>>> PartialStateHolder {=0A>>>>> =A0+ =A0 =A0static class = EventListenerWrapper implements =0A> SystemEventListener,=0A>>> PartialSta= teHolder=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =0A>>>>> =A0=A0 =A0 =A0 =A0 privat= e Class componentClass;=0A>>>>> =A0=A0 =A0 =A0 =A0 private ComponentSys= temEventListener listener;=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 = =A0 =A0 private boolean _initialStateMarked;=0A>>>>> =0A>>>>> =A0=A0 =A0 = =A0 =A0 private int listenerCapability;=0A>>>>> =A0@@ -1270,16 +1415,16 @@= public abstract class UIComponent =0A> implem=0A>>>>> =A0=A0 =A0 =A0 =A0 = private static final int LISTENER_TYPE_COMPONENT =3D 4;=0A>>>>> =A0=A0 =A0= =A0 =A0 private static final int LISTENER_TYPE_RENDERER =3D 8;=0A>>>>> = =A0=A0 =A0 =A0 =A0 private static final int LISTENER_TYPE_OTHER =3D 16;=0A>= >>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 public EventListenerWr= apper()=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 /= /need a no-arg constructor for state saving =0A> purposes=0A>>>>> =A0=A0 = =A0 =A0 =A0 =A0 =A0 super();=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0-=0A= >>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0= * Note we have two cases:=0A>>>>> =A0- =A0 =A0 =A0 =A0 *=0A>>>>> =A0+ =A0= =A0 =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0* 1. listener is an instance = of UIComponent. In this =0A> case we=0A>>> cannot save and restore=0A>>>>>= =A0=A0 =A0 =A0 =A0 =A0* =A0 =A0it because we need to point to the real = =0A> component, but we=0A>>> can assume the instance=0A>>>>> =A0=A0 =A0 = =A0 =A0 =A0* =A0 =A0is the same because UIComponent.subscribeToEvent =0A> s= ays so.=0A>>> Also take into account=0A>>>>> =A0@@ -1289,11 +1434,12 @@ p= ublic abstract class UIComponent =0A> implem=0A>>>>> =A0=A0 =A0 =A0 =A0 = =A0* 3. listener is an instance of =0A> ComponentSystemEventListener=0A>>> = but not from UIComponent.=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0* =A0 =A0In this = case, the instance could implement =0A> StateHolder,=0A>>> PartialStateHol= der or do=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0* =A0 =A0implement anything, so we= have to deal with that =0A> case as=0A>>> usual.=0A>>>>> =A0- =A0 =A0 = =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0* = @param component=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0* @param listener=0A>>>>> = =A0=A0 =A0 =A0 =A0 =A0*/=0A>>>>> =A0- =A0 =A0 =A0 =A0public EventListenerW= rapper(UIComponent component,=0A>>> ComponentSystemEventListener listener)= {=0A>>>>> =A0+ =A0 =A0 =A0 =A0public EventListenerWrapper(UIComponent com= ponent,=0A>>> ComponentSystemEventListener listener)=0A>>>>> =A0+ =A0 =A0= =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 assert component !=3D null;= =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 assert listener !=3D null;=0A>>>>> =0A= >>>>> =A0@@ -1302,7 +1448,7 @@ public abstract class UIComponent implem=0A= >>>>> =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 initListenerCapability();=0A>>>>= > =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0= =A0 private void initListenerCapability()=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A= >>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 this.listenerCapability =3D 0;=0A>>>>> = =A0@@ -1318,7 +1464,7 @@ public abstract class UIComponent implem=0A>>>>> = =A0=A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if= (this.listener instanceof =0A> PartialStateHolder)=0A>>>>> =A0=A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0this.listenerCapability =3D =0A> LISTENER_TYPE_OTHER |=0A>>> LISTENER_S= AVE_PARTIAL_STATE_HOLDER;=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0this.listenerCapability =3D =0A> LISTENER_TYPE_OTHER |=0A>>> LISTENER_= SAVE_PARTIAL_STATE_HOLDER;=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=0A= >>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 else if (this.listener instanceof= StateHolder)=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0@@ = -1332,7 +1478,8 @@ public abstract class UIComponent implem=0A>>>>> =A0=A0= =A0 =A0 =A0 }=0A>>>>> =0A>>>>> =A0=A0 =A0 =A0 =A0 @Override=0A>>>>> =A0-= =A0 =A0 =A0 =A0public boolean equals(Object o) {=0A>>>>> =A0+ =A0 =A0 =A0= =A0public boolean equals(Object o)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> = =A0=A0 =A0 =A0 =A0 =A0 =A0 if (o =3D=3D this)=0A>>>>> =A0=A0 =A0 =A0 =A0 = =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return true;=0A>>>>> = =A0@@ -1341,13 +1488,16 @@ public abstract class UIComponent =0A> implem= =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 EventListenerWrapper other =3D =0A> (EventListenerWrapper) o;=0A>>>= >> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return =0A> componentClass.equals(ot= her.componentClass)=0A>>> && listener.equals(other.listener);=0A>>>>> =A0= - =A0 =A0 =A0 =A0 =A0 =A0} else {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0}=0A= >>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0else=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 = =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return false;=0A>>>>> =A0= =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =0A>>>>> = =A0=A0 =A0 =A0 =A0 @Override=0A>>>>> =A0- =A0 =A0 =A0 =A0public int hashCo= de() {=0A>>>>> =A0+ =A0 =A0 =A0 =A0public int hashCode()=0A>>>>> =A0+ =A0= =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 return componentClass.has= hCode() + =0A> listener.hashCode();=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> = =0A>>>>> =A0@@ -1358,7 +1508,7 @@ public abstract class UIComponent implem= =0A>>>>> =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 return =0A> source.getClass()= .isAssignableFrom(componentClass);=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> = =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 public ComponentSystemEventL= istener=0A>>> getComponentSystemEventListener()=0A>>>>> =A0=A0 =A0 =A0 = =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 return listener;=0A>>>>> =A0@@ -= 1377,9 +1527,9 @@ public abstract class UIComponent implem=0A>>>>> =A0=A0 = =A0 =A0 =A0 public void clearInitialState()=0A>>>>> =A0=A0 =A0 =A0 =A0 {= =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 //if (!(listener instanceof UIComponen= t) =0A> &&=0A>>> listener instanceof PartialStateHolder)=0A>>>>> =A0- =A0= =A0 =A0 =A0 =A0 =A0if ( (listenerCapability &=0A>>> LISTENER_SAVE_PARTIAL= _STATE_HOLDER) !=3D 0)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCa= pability &=0A>>> LISTENER_SAVE_PARTIAL_STATE_HOLDER) !=3D 0)=0A>>>>> =A0= =A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =0A> = =A0((PartialStateHolder)listener).clearInitialState();=0A>>>>> =A0+ =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0((PartialStateHolder) =0A> listener).clearInitia= lState();=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0= =A0 =A0 _initialStateMarked =3D false;=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>= >> =A0@@ -1387,9 +1537,9 @@ public abstract class UIComponent implem=0A>>>= >> =A0=A0 =A0 =A0 =A0 public boolean initialStateMarked()=0A>>>>> =A0=A0 = =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 //if (!(listener instance= of UIComponent) =0A> &&=0A>>> listener instanceof PartialStateHolder)=0A>>= >>> =A0- =A0 =A0 =A0 =A0 =A0 =A0if ( (listenerCapability &=0A>>> LISTENER= _SAVE_PARTIAL_STATE_HOLDER) !=3D 0)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0if= ((listenerCapability &=0A>>> LISTENER_SAVE_PARTIAL_STATE_HOLDER) !=3D 0)= =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0return=0A>>> ((PartialStateHolder)listener).initialStateMarked(= );=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return ((PartialStateHolder= )=0A>>> listener).initialStateMarked();=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 = =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 //return false;=0A>>>>> =A0=A0 = =A0 =A0 =A0 =A0 =A0 return _initialStateMarked;=0A>>>>> =A0@@ -1398,9 +154= 8,9 @@ public abstract class UIComponent implem=0A>>>>> =A0=A0 =A0 =A0 =A0= public void markInitialState()=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A>>>>> =A0= =A0 =A0 =A0 =A0 =A0 =A0 //if (!(listener instanceof UIComponent) =0A> &&=0A= >>> listener instanceof PartialStateHolder)=0A>>>>> =A0- =A0 =A0 =A0 =A0 = =A0 =A0if ( (listenerCapability &=0A>>> LISTENER_SAVE_PARTIAL_STATE_HOLDER= ) !=3D 0)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCapability &=0A= >>> LISTENER_SAVE_PARTIAL_STATE_HOLDER) !=3D 0)=0A>>>>> =A0=A0 =A0 =A0 = =A0 =A0 =A0 {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =0A> =A0((PartialSt= ateHolder)listener).markInitialState();=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0((PartialStateHolder) =0A> listener).markInitialState();=0A>>>>>= =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 _initial= StateMarked =3D true;=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0@@ -1408,11= +1558,11 @@ public abstract class UIComponent =0A> implem=0A>>>>> =A0=A0 = =A0 =A0 =A0 public boolean isTransient()=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A>>= >>> =A0=A0 =A0 =A0 =A0 =A0 =A0 //if ( listener instanceof StateHolder)=0A>= >>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCapability &=0A>>> LISTENER= _SAVE_PARTIAL_STATE_HOLDER) !=3D 0 ||=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0(listenerCapability & =0A> LISTENER_SAVE_STATE_HOLDER)=0A>>> !=3D = 0 )=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCapability &=0A>>> L= ISTENER_SAVE_PARTIAL_STATE_HOLDER) !=3D 0 ||=0A>>>>> =A0+ =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0(listenerCapability &=0A>>> LISTENER_SAVE_STATE_HOL= DER) !=3D 0)=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0- =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0return ((StateHolder)listener).isTransient();=0A>>>>= > =A0- =A0 =A0 =A0 =A0 =A0 =A0}=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0return ((StateHolder) =0A> listener).isTransient();=0A>>>>> =A0+ =A0 = =A0 =A0 =A0 =A0 =A0}=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 return false;=0A>>= >>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =0A>>>>> =A0@@ -1426,24 +1576,27 @@ publ= ic abstract class UIComponent =0A> implem=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 = =A0 componentClass =3D (Class) values[0];=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 = =A0 if (values[1] instanceof _AttachedDeltaWrapper)=0A>>>>> =A0=A0 =A0 =A0= =A0 =A0 =A0 {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0((StateHolder)l= istener).restoreState(context,=0A>>> ((_AttachedDeltaWrapper)values[1]).ge= tWrappedStateObject());=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0((Stat= eHolder) =0A> listener).restoreState(context,=0A>>>>> =A0+ =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0((_AttachedDeltaWrapper)=0A>>> values[1]).= getWrappedStateObject());=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> = =A0=A0 =A0 =A0 =A0 =A0 =A0 else=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>= >> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 //Full restore=0A>>>>> =A0=A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 listenerCapability =3D (Integer) values[2];=0A>>>>>= =A0-=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if ( (listenerCapabilit= y &=0A>>> LISTENER_TYPE_COMPONENT) !=3D 0 )=0A>>>>> =A0+=0A>>>>> =A0+ = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCapability & =0A> LISTENER_TYPE= _COMPONENT)=0A>>> !=3D 0)=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=0A= >>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 listener =3D=0A>>> UICom= ponent.getCurrentComponent(context);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 }=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0else if ( (listenerC= apability &=0A>>> LISTENER_TYPE_RENDERER) !=3D 0)=0A>>>>> =A0+ =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0else if ((listenerCapability &=0A>>> LISTENER_TYPE_= RENDERER) !=3D 0)=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> = =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0listener =3D (ComponentSystemEv= entListener)=0A>>> UIComponent.getCurrentComponent(context).getRenderer(co= ntext);=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0listener =3D (= ComponentSystemEventListener)=0A>>>>> =A0+=0A>>> =A0UIComponent.getCurren= tComponent(context).getRenderer(context);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 else=0A>>>>> =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0listener =3D (ComponentSystemEventListener)=0A>>> UIComponentB= ase.restoreAttachedState(context, values[1]);=0A>>>>> =A0+ =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0listener =3D (ComponentSystemEventListener)=0A>>>>>= =A0+=0A>>> =A0UIComponentBase.restoreAttachedState(context, values[1]);= =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 /*=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 listener =3D= values[1] =3D=3D null ?=0A>>>>> =A0@@ -1469,8 +1622,8 @@ public abstract = class UIComponent implem=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Object= [] state =3D new Object[3];=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 sta= te[0] =3D componentClass;=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 //If = this is not a component or a renderer, =0A> save it=0A>>> calling UICompon= ent.saveAttachedState=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (!( (= listenerCapability &=0A>>> LISTENER_TYPE_COMPONENT) !=3D 0 ||=0A>>>>> =A0= - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (listenerCapability &=0A>>> = LISTENER_TYPE_RENDERER) !=3D 0 =A0 =A0) )=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0if (!((listenerCapability &=0A>>> LISTENER_TYPE_COMPONENT) != =3D 0 ||=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(list= enerCapability &=0A>>> LISTENER_TYPE_RENDERER) !=3D 0))=0A>>>>> =A0=A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 state[1] =3D=0A>>> UIComponentBase.saveAttachedState(context, list= ener);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0@@ -1485,2= 5 +1638,26 @@ public abstract class UIComponent =0A> implem=0A>>>>> =A0=A0= =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // If in= itialStateMarked() =3D=3D true means two =0A> things:=0A>>>>> =A0=A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 // 1. PSS is being used=0A>>>>> =A0- =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0if ( (listenerCapability &=0A>>> LISTENER_TYPE_COMPONEN= T) !=3D 0)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCapabi= lity & =0A> LISTENER_TYPE_COMPONENT)=0A>>> !=3D 0)=0A>>>>> =A0=A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = return null;=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0- = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0else if ( (listenerCapability &=0A>>> LISTE= NER_TYPE_RENDERER) !=3D 0)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0els= e if ((listenerCapability &=0A>>> LISTENER_TYPE_RENDERER) !=3D 0)=0A>>>>> = =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 return null;=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }= =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 else=0A>>>>> =A0=A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= if ( (listenerCapability &=0A>>> LISTENER_SAVE_STATE_HOLDER) !=3D 0 ||=0A>= >>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (listenerCapabil= ity &=0A>>> LISTENER_SAVE_PARTIAL_STATE_HOLDER) !=3D 0)=0A>>>>> =A0+ =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCapability &=0A>>> LISTENE= R_SAVE_STATE_HOLDER) !=3D 0 ||=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0(listenerCapability &=0A>>> LISTENER_SAVE_PARTI= AL_STATE_HOLDER) !=3D 0)=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Object li= stenerSaved =3D ((StateHolder)=0A>>> listener).saveState(context);=0A>>>>>= =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (listenerSaved =3D= =3D null)=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=0A>= >>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return nul= l;=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> = =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return new Object[]{com= ponentClass, =0A> new=0A>>> _AttachedDeltaWrapper(listener.getClass(), lis= tenerSaved)};=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= return new Object[]{componentClass,=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0new=0A>>> _= AttachedDeltaWrapper(listener.getClass(), listenerSaved)};=0A>>>>> =A0=A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 else=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 {= =0A>>>>> =A0@@ -1524,11 +1678,11 @@ public abstract class UIComponent =0A>= implem=0A>>>>> =0A>>>>> =A0=A0 =A0 =A0 =A0 public void setTransient(boole= an newTransientValue)=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A>>>>> =A0- =A0 =A0 = =A0 =A0 =A0 =A0if ((listenerCapability &=0A>>> LISTENER_SAVE_PARTIAL_STATE= _HOLDER) !=3D 0 ||=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(li= stenerCapability &=0A>>> LISTENER_SAVE_STATE_HOLDER) !=3D 0 )=0A>>>>> =A0= + =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCapability &=0A>>> LISTENER_SAVE_PAR= TIAL_STATE_HOLDER) !=3D 0 ||=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0(listenerCapability &=0A>>> LISTENER_SAVE_STATE_HOLDER) !=3D 0)=0A>= >>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0-=0A>>> =A0((StateHolder)li= stener).setTransient(newTransientValue);=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 = =A0}=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0((StateHolder)=0A>>> lis= tener).setTransient(newTransientValue);=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 = =A0}=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 }=0A>>>>> =A0=A0}= =0A>>>>> =0A>>>>> =A0Modified:=0A>>> =0A> myfaces/core/trunk/api/src/main/= java/javax/faces/component/UIComponentBase.java=0A>>>>> =A0URL:=0A>>> =0A>= http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/fa= ces/component/UIComponentBase.java?rev=3D1188267&r1=3D1188266&r2=3D1188267&= view=3Ddiff=0A>>>>> =0A>>> =0A> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A>>>>> =A0---=0A>>> =0A> myfac= es/core/trunk/api/src/main/java/javax/faces/component/UIComponentBase.java= =0A>>> (original)=0A>>>>> =A0+++=0A>>> =0A> myfaces/core/trunk/api/src/ma= in/java/javax/faces/component/UIComponentBase.java=0A>>> Mon Oct 24 18:09:= 08 2011=0A>>>>> =A0@@ -590,7 +590,7 @@ public abstract class UIComponentBa= se ex=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 return null;=0A>>>>> =A0=A0 =A0 = =A0 =A0 }=0A>>>>> =0A>>>>> =A0- =A0 =A0 =A0 =A0final char separatorChar = =3D=0A>>> UINamingContainer.getSeparatorChar(getFacesContext());=0A>>>>> = =A0+ =A0 =A0 =A0 =A0char separatorChar =3D=0A>>> UINamingContainer.getSepa= ratorChar(getFacesContext());=0A>>>>> =A0=A0 =A0 =A0 =A0 UIComponent findB= ase;=0A>>>>> =A0=A0 =A0 =A0 =A0 if (expr.charAt(0) =3D=3D separatorChar)= =0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A>>>>> =0A>>>>> =A0Modified:=0A>>> myface= s/core/trunk/api/src/main/java/javax/faces/component/UIData.java=0A>>>>> = =A0URL:=0A>>> =0A> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/= main/java/javax/faces/component/UIData.java?rev=3D1188267&r1=3D1188266&r2= =3D1188267&view=3Ddiff=0A>>>>> =0A>>> =0A> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A>>>>> =A0---=0A>>= > myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.java= =0A>>> (original)=0A>>>>> =A0+++=0A>>> myfaces/core/trunk/api/src/main/j= ava/javax/faces/component/UIData.java =0A> Mon Oct=0A>>> 24 18:09:08 2011= =0A>>>>> =A0@@ -316,7 +316,7 @@ public class UIData extends UIComponentB= =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 throw new NullPointerException();=0A>>= >>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =0A>>>>> =A0- =A0 =A0 =A0 =A0final Strin= g baseClientId =3D getClientId(context);=0A>>>>> =A0+ =A0 =A0 =A0 =A0Strin= g baseClientId =3D getClientId(context);=0A>>>>> =0A>>>>> =A0=A0 =A0 =A0 = =A0 // searching for this component?=0A>>>>> =A0=A0 =A0 =A0 =A0 boolean re= turnValue =3D baseClientId.equals(clientId);=0A>>>>> =A0@@ -1565,7 +1565,7= @@ public class UIData extends UIComponentB=0A>>>>> =A0=A0 =A0 =A0 =A0 {= =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 FacesEvent originalEvent =3D ((FacesEv= entWrapper)=0A>>> event).getWrappedFacesEvent();=0A>>>>> =A0=A0 =A0 =A0 = =A0 =A0 =A0 int eventRowIndex =3D ((FacesEventWrapper)=0A>>> event).getRow= Index();=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0final int currentRowIndex =3D= getRowIndex();=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0int currentRowIndex = =3D getRowIndex();=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 UIComponent source = =3D originalEvent.getComponent();=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 UICom= ponent compositeParent =3D=0A>>> UIComponent.getCompositeComponentParent(s= ource);=0A>>>>> =0A>>>>> =0A>>>>> =A0Modified:=0A>>> myfaces/core/trunk/a= pi/src/main/java/javax/faces/component/UIInput.java=0A>>>>> =A0URL:=0A>>> = =0A> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/java= x/faces/component/UIInput.java?rev=3D1188267&r1=3D1188266&r2=3D1188267&view= =3Ddiff=0A>>>>> =0A>>> =0A> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A>>>>> =A0---=0A>>> myfaces/core= /trunk/api/src/main/java/javax/faces/component/UIInput.java=0A>>> (origina= l)=0A>>>>> =A0+++=0A>>> myfaces/core/trunk/api/src/main/java/javax/faces/= component/UIInput.java =0A> Mon Oct=0A>>> 24 18:09:08 2011=0A>>>>> =A0@@ = -1065,7 +1065,7 @@ public class UIInput extends UIOutput im=0A>>>>> =A0=A0= =A0 @SuppressWarnings("unchecked")=0A>>>>> =A0=A0 =A0 private Map> =0A> _getDebugInfoMap()=0A>>>>> =A0=A0 =A0 {=0A>>>>> =A0= - =A0 =A0 =A0 =A0final Map requestMap =3D =0A> getFacesCont= ext()=0A>>>>> =A0+ =A0 =A0 =A0 =A0Map requestMap =3D =0A> = getFacesContext()=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 .getExternalC= ontext().getRequestMap();=0A>>>>> =A0=A0 =A0 =A0 =A0 Map> debugInfo =3D=0A>>> (Map>)=0A>>>>> =A0=A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 requestMap.get(DEBUG_INFO_KEY + =0A> getClientI= d());=0A>>>>> =0A>>>>> =A0Modified:=0A>>> =0A> myfaces/core/trunk/api/src/= main/java/javax/faces/component/UISelectMany.java=0A>>>>> =A0URL:=0A>>> = =0A> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/java= x/faces/component/UISelectMany.java?rev=3D1188267&r1=3D1188266&r2=3D1188267= &view=3Ddiff=0A>>>>> =0A>>> =0A> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A>>>>> =A0---=0A>>> =0A> myfac= es/core/trunk/api/src/main/java/javax/faces/component/UISelectMany.java=0A>= >> (original)=0A>>>>> =A0+++=0A>>> =0A> myfaces/core/trunk/api/src/main/j= ava/javax/faces/component/UISelectMany.java Mon=0A>>> Oct 24 18:09:08 2011= =0A>>>>> =A0@@ -419,7 +419,7 @@ public class UISelectMany extends UIInpu= =0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 else=0A>>>>> = =A0=A0 =A0 =A0 =A0 {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0Class valueClass =3D=0A>>> convertedValue.getClass();=0A>>>>> =A0+ =A0 = =A0 =A0 =A0 =A0 =A0Class valueClass =3D =0A> convertedValue.getClass();= =0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 if (valueClass.isArray())=0A>>>>> =A0= =A0 =A0 =A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 retur= n new =0A> _PrimitiveArrayIterator(convertedValue);=0A>>>>> =0A>>>>> =A0Mo= dified:=0A>>> =0A> myfaces/core/trunk/api/src/main/java/javax/faces/compone= nt/_ComponentAttributesMap.java=0A>>>>> =A0URL:=0A>>> =0A> http://svn.apac= he.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/_C= omponentAttributesMap.java?rev=3D1188267&r1=3D1188266&r2=3D1188267&view=3Dd= iff=0A>>>>> =0A>>> =0A> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A>>>>> =A0---=0A>>> =0A> myfaces/core/t= runk/api/src/main/java/javax/faces/component/_ComponentAttributesMap.java= =0A>>> (original)=0A>>>>> =A0+++=0A>>> =0A> myfaces/core/trunk/api/src/ma= in/java/javax/faces/component/_ComponentAttributesMap.java=0A>>> Mon Oct 2= 4 18:09:08 2011=0A>>>>> =A0@@ -210,9 +210,9 @@ class _ComponentAttributesM= ap implements=0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0* Call put(key= , value) for each entry in the provided =0A> map.=0A>>>>> =A0=A0 =A0 =A0*/= =0A>>>>> =A0- =A0 =A0public void putAll(Map Object>=0A>>> t)=0A>>>>> =A0+ =A0 =A0public void putAll(Map t)=0A>>>>> =A0=A0 =A0 {=0A>>>>> =A0- =A0 =A0 =A0 =A0for (Map= .Entry Object> entry=0A>>> : t.entrySet()= )=0A>>>>> =A0+ =A0 =A0 =A0 =A0for (Map.Entry entry := =0A>>> t.entrySet())=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0= =A0 =A0 =A0 put(entry.getKey(), entry.getValue());=0A>>>>> =A0=A0 =A0 =A0= =A0 }=0A>>>>> =0A>>>>> =A0Modified:=0A>>> =0A> myfaces/core/trunk/api/src= /main/java/javax/faces/component/_LocaleUtils.java=0A>>>>> =A0URL:=0A>>> = =0A> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/java= x/faces/component/_LocaleUtils.java?rev=3D1188267&r1=3D1188266&r2=3D1188267= &view=3Ddiff=0A>>>>> =0A>>> =0A> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A>>>>> =A0---=0A>>> =0A> myfac= es/core/trunk/api/src/main/java/javax/faces/component/_LocaleUtils.java=0A>= >> (original)=0A>>>>> =A0+++=0A>>> =0A> myfaces/core/trunk/api/src/main/j= ava/javax/faces/component/_LocaleUtils.java Mon=0A>>> Oct 24 18:09:08 2011= =0A>>>>> =A0@@ -34,21 +34,22 @@ import java.util.concurrent.ConcurrentMa= =0A>>>>> =A0=A0*

    This class tries to handle {@code null} input =0A> gra= cefully.=0A>>>>> =A0=A0* An exception will not be thrown for a {@code null= } input.=0A>>>>> =A0=A0* Each method documents its behaviour in more =0A> = detail.

    =0A>>>>> =A0- *=0A>>>>> =A0+ *=0A>>>>> =A0=A0* NOTE: This a c= opy of commons lang LocaleUtils, to use it =0A> inside=0A>>> MyFaces=0A>>>= >> =A0=A0*=0A>>>>> =A0=A0* @since 2.2=0A>>>>> =A0=A0* @version $Id$=0A>>= >>> =A0=A0*/=0A>>>>> =A0-class _LocaleUtils {=0A>>>>> =A0+class _LocaleU= tils=0A>>>>> =A0+{=0A>>>>> =0A>>>>> =A0=A0 =A0 /** Concurrent map of lang= uage locales by country. */=0A>>>>> =A0- =A0 =A0private static final Concu= rrentMap>> List> cLanguagesByCountry =3D=0A>>>>> =A0-= =A0 =A0 =A0 =A0new ConcurrentHashMap List>();=0A>>>>>= =A0+ =A0 =A0private static final ConcurrentMap>> List> cLanguagesByCountry =3D=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0new Concurr= entHashMap List>();=0A>>>>> =0A>>>>> =A0=A0 =A0 /** C= oncurrent map of country locales by language. */=0A>>>>> =A0- =A0 =A0priva= te static final ConcurrentMap>> List> cCountriesByLang= uage =3D=0A>>>>> =A0- =A0 =A0 =A0 =A0new ConcurrentHashMap Li= st>();=0A>>>>> =A0+ =A0 =A0private static final ConcurrentMap>> List> cCountriesByLanguage =3D=0A>>>>> =A0+ =A0 =A0 =A0= =A0 =A0 =A0new ConcurrentHashMap List>();=0A>>>>> =0A= >>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0*

    {@code _LocaleUtils} inst= ances should NOT be=0A>>> constructed in standard programming.=0A>>>>> = =A0@@ -57,11 +58,13 @@ class _LocaleUtils {=0A>>>>> =A0=A0 =A0 =A0*

    Thi= s constructor is public to permit tools =0A> that require=0A>>> a JavaBean= instance=0A>>>>> =A0=A0 =A0 =A0* to operate.

    =0A>>>>> =A0=A0 =A0 =A0*= /=0A>>>>> =A0- =A0 =A0public _LocaleUtils() {=0A>>>>> =A0- =A0 =A0 =A0sup= er();=0A>>>>> =A0+ =A0 =A0public _LocaleUtils()=0A>>>>> =A0+ =A0 =A0{=0A>= >>>> =A0+ =A0 =A0 =A0 =A0super();=0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> = =0A>>> =0A> //-------------------------------------------------------------= ----------=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0* <= p>Converts a String to a Locale.

    =0A>>>>> =A0=A0 =A0 =A0*=0A>>>>> =A0@= @ -89,37 +92,51 @@ class _LocaleUtils {=0A>>>>> =A0=A0 =A0 =A0* @return a = Locale, null if null input=0A>>>>> =A0=A0 =A0 =A0* @throws IllegalArgument= Exception if the string is an =0A> invalid=0A>>> format=0A>>>>> =A0=A0 = =A0 =A0*/=0A>>>>> =A0- =A0 =A0public static Locale toLocale(String str) {= =0A>>>>> =A0- =A0 =A0 =A0 =A0if (str =3D=3D null) {=0A>>>>> =A0+ =A0 =A0p= ublic static Locale toLocale(String str)=0A>>>>> =A0+ =A0 =A0{=0A>>>>> = =A0+ =A0 =A0 =A0 =A0if (str =3D=3D null)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>= >>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 return null;=0A>>>>> =A0=A0 =A0 =A0 =A0 }= =0A>>>>> =A0=A0 =A0 =A0 =A0 int len =3D str.length();=0A>>>>> =A0- =A0 = =A0 =A0 =A0if (len !=3D 2 && len !=3D 5 && len < =0A> 7) {=0A>>>>> =A0+ = =A0 =A0 =A0 =A0if (len !=3D 2 && len !=3D 5 && len < =0A> 7)=0A>>>>> =A0+ = =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 throw new IllegalArgum= entException("Invalid =0A> locale=0A>>> format: " + str);=0A>>>>> =A0=A0 = =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 char ch0 =3D str.charAt(0);=0A>>>= >> =A0=A0 =A0 =A0 =A0 char ch1 =3D str.charAt(1);=0A>>>>> =A0- =A0 =A0 = =A0 =A0if (ch0 < 'a' || ch0 > 'z' || =0A> ch1 <=0A>>> 'a' || ch1 > 'z') {= =0A>>>>> =A0+ =A0 =A0 =A0 =A0if (ch0 < 'a' || ch0 > 'z' || =0A> ch1 <=0A>>= > 'a' || ch1 > 'z')=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0= =A0 =A0 =A0 throw new IllegalArgumentException("Invalid =0A> locale=0A>>> = format: " + str);=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0- =A0 =A0 =A0 = =A0if (len =3D=3D 2) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0if (len =3D=3D 2)=0A>>>= >> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 return new Lo= cale(str, "");=0A>>>>> =A0- =A0 =A0 =A0 =A0} else {=0A>>>>> =A0- =A0 =A0 = =A0 =A0 =A0 =A0if (str.charAt(2) !=3D '_') {=0A>>>>> =A0+ =A0 =A0 =A0 =A0}= =0A>>>>> =A0+ =A0 =A0 =A0 =A0else=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> = =A0+ =A0 =A0 =A0 =A0 =A0 =A0if (str.charAt(2) !=3D '_')=0A>>>>> =A0+ =A0 = =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 throw new = =0A> IllegalArgumentException("Invalid locale=0A>>> format: " + str);=0A>>= >>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 char = ch3 =3D str.charAt(3);=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0if (ch3 =3D=3D = '_') {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0if (ch3 =3D=3D '_')=0A>>>>> = =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 r= eturn new Locale(str.substring(0, 2), =0A> "",=0A>>> str.substring(4));=0A= >>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 cha= r ch4 =3D str.charAt(4);=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0if (ch3 < 'A'= || ch3 > 'Z' =0A> || ch4=0A>>> < 'A' || ch4 > 'Z') {=0A>>>>> =A0+ =A0 = =A0 =A0 =A0 =A0 =A0if (ch3 < 'A' || ch3 > 'Z' =0A> || ch4=0A>>> < 'A' || c= h4 > 'Z')=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 throw new =0A> IllegalArgumentException("Invalid locale= =0A>>> format: " + str);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> = =A0- =A0 =A0 =A0 =A0 =A0 =A0if (len =3D=3D 5) {=0A>>>>> =A0+ =A0 =A0 =A0 = =A0 =A0 =A0if (len =3D=3D 5)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>>= =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return new Locale(str.substring(0, 2),= =0A> str.substring(3,=0A>>> 5));=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0} e= lse {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (str.charAt(5) !=3D '= _') {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0}=0A>>>>> =A0+ =A0 =A0 =A0 =A0 = =A0 =A0else=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0+ =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0if (str.charAt(5) !=3D '_')=0A>>>>> =A0+ =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 throw new =0A> IllegalArgumentException("Invalid=0A>>> locale format: = " + str);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 return new Locale(str.substring(0, 2), =0A> str.su= bstring(3,=0A>>> 5), str.substring(6));=0A>>>>> =A0@@ -128,6 +145,7 @@ cl= ass _LocaleUtils {=0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> =0A>>> =0A> //---= --------------------------------------------------------------------=0A>>>>= > =A0+=0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0*

    Obtains the lis= t of locales to search through =0A> when=0A>>> performing=0A>>>>> =A0=A0 = =A0 =A0* a locale search.

    =0A>>>>> =A0@@ -140,11 +158,13 @@ class _Loca= leUtils {=0A>>>>> =A0=A0 =A0 =A0* @param locale =A0the locale to start fro= m=0A>>>>> =A0=A0 =A0 =A0* @return the unmodifiable list of Locale objects,= 0 =0A> being locale,=0A>>> not null=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> = =A0- =A0 =A0public static List localeLookupList(Locale =0A> locale)= {=0A>>>>> =A0+ =A0 =A0public static List localeLookupList(Locale = =0A> locale)=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 return loca= leLookupList(locale, locale);=0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> =0A>>>= =0A> //-------------------------------------------------------------------= ----=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0*

    Obta= ins the list of locales to search through =0A> when=0A>>> performing=0A>>>= >> =A0=A0 =A0 =A0* a locale search.

    =0A>>>>> =A0@@ -162,17 +182,22 @@ = class _LocaleUtils {=0A>>>>> =A0=A0 =A0 =A0* @param defaultLocale =A0the d= efault locale to use if no =0A> other is=0A>>> found=0A>>>>> =A0=A0 =A0 = =A0* @return the unmodifiable list of Locale objects, 0 =0A> being locale,= =0A>>> not null=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0- =A0 =A0public stat= ic List localeLookupList(Locale =0A> locale,=0A>>> Locale defaultL= ocale) {=0A>>>>> =A0+ =A0 =A0public static List localeLookupList(L= ocale =0A> locale,=0A>>> Locale defaultLocale)=0A>>>>> =A0+ =A0 =A0{=0A>>= >>> =A0=A0 =A0 =A0 =A0 List list =3D new =0A> ArrayList(4)= ;=0A>>>>> =A0- =A0 =A0 =A0 =A0if (locale !=3D null) {=0A>>>>> =A0+ =A0 = =A0 =A0 =A0if (locale !=3D null)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> = =A0=A0 =A0 =A0 =A0 =A0 =A0 list.add(locale);=0A>>>>> =A0- =A0 =A0 =A0 =A0 = =A0 =A0if (locale.getVariant().length() > 0) {=0A>>>>> =A0+ =A0 =A0 =A0 = =A0 =A0 =A0if (locale.getVariant().length() > 0)=0A>>>>> =A0+ =A0 =A0 =A0 = =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 list.add(new Local= e(locale.getLanguage(),=0A>>> locale.getCountry()));=0A>>>>> =A0=A0 =A0 = =A0 =A0 =A0 =A0 }=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0if (locale.getCountr= y().length() > 0) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0if (locale.getCoun= try().length() > 0)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 list.add(new Locale(locale.getLanguage(),=0A>>>= ""));=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0- =A0 =A0 =A0 =A0= =A0 =A0if (list.contains(defaultLocale) =3D=3D false) {=0A>>>>> =A0+ =A0 = =A0 =A0 =A0 =A0 =A0if (!list.contains(defaultLocale))=0A>>>>> =A0+ =A0 =A0= =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 list.add(defa= ultLocale);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 = =A0 }=0A>>>>> =A0@@ -180,45 +205,52 @@ class _LocaleUtils {=0A>>>>> =A0= =A0 =A0 }=0A>>>>> =0A>>>>> =0A>>> =0A> //----------------------------------= -------------------------------------=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 /**= =0A>>>>> =A0=A0 =A0 =A0*

    Obtains an unmodifiable list of installed=0A>>= > locales.

    =0A>>>>> =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> = =A0=A0 =A0 =A0*

    This method is a wrapper around {@link=0A>>> Locale#get= AvailableLocales()}.=0A>>>>> =A0=A0 =A0 =A0* It is more efficient, as the = JDK method must create a =0A> new array=0A>>> each=0A>>>>> =A0=A0 =A0 =A0= * time it is called.

    =0A>>>>> =A0=A0 =A0 =A0*=0A>>>>> =A0=A0 =A0 =A0* = @return the unmodifiable list of available locales=0A>>>>> =A0=A0 =A0 =A0*= /=0A>>>>> =A0- =A0 =A0public static List availableLocaleList() {= =0A>>>>> =A0+ =A0 =A0public static List availableLocaleList()=0A>>= >>> =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 return SyncAvoid.AVAILABLE_L= OCALE_LIST;=0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> =0A>>> =0A> //----------= -------------------------------------------------------------=0A>>>>> =A0+= =0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0*

    Obtains an unmodifiabl= e set of installed=0A>>> locales.

    =0A>>>>> =A0- =A0 =A0 *=0A>>>>> =A0= + =A0 =A0 *=0A>>>>> =A0=A0 =A0 =A0*

    This method is a wrapper around {@l= ink=0A>>> Locale#getAvailableLocales()}.=0A>>>>> =A0=A0 =A0 =A0* It is mo= re efficient, as the JDK method must create a =0A> new array=0A>>> each=0A= >>>>> =A0=A0 =A0 =A0* time it is called.

    =0A>>>>> =A0=A0 =A0 =A0*=0A>>= >>> =A0=A0 =A0 =A0* @return the unmodifiable set of available locales=0A>>= >>> =A0=A0 =A0 =A0*/=0A>>>>> =A0- =A0 =A0public static Set availa= bleLocaleSet() {=0A>>>>> =A0+ =A0 =A0public static Set availableLo= caleSet()=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 return SyncAvo= id.AVAILABLE_LOCALE_SET;=0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> =0A>>> =0A>= //-----------------------------------------------------------------------= =0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0*

    Checks i= f the locale specified is in the list =0A> of=0A>>> available locales.

    = =0A>>>>> =A0=A0 =A0 =A0*=0A>>>>> =A0=A0 =A0 =A0* @param locale the Locale= object to check if it is =0A> available=0A>>>>> =A0=A0 =A0 =A0* @return t= rue if the locale is a known locale=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0-= =A0 =A0public static boolean isAvailableLocale(Locale locale) {=0A>>>>> = =A0+ =A0 =A0public static boolean isAvailableLocale(Locale locale)=0A>>>>> = =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 return availableLocaleList().con= tains(locale);=0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> =0A>>> =0A> //-------= ----------------------------------------------------------------=0A>>>>> = =A0+=0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0*

    Obtains the list o= f languages supported for a =0A> given=0A>>> country.

    =0A>>>>> =A0=A0 = =A0 =A0*=0A>>>>> =A0@@ -228,18 +260,23 @@ class _LocaleUtils {=0A>>>>> = =A0=A0 =A0 =A0* @param countryCode =A0the 2 letter country code, null =0A> = returns=0A>>> empty=0A>>>>> =A0=A0 =A0 =A0* @return an unmodifiable List = of Locale objects, not =0A> null=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0- = =A0 =A0public static List =0A> languagesByCountry(String=0A>>> cou= ntryCode) {=0A>>>>> =A0- =A0 =A0 =A0 =A0if (countryCode =3D=3D null) {=0A>= >>>> =A0+ =A0 =A0public static List =0A> languagesByCountry(String= =0A>>> countryCode)=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0if= (countryCode =3D=3D null)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 = =A0 =A0 =A0 =A0 =A0 return Collections.emptyList();=0A>>>>> =A0=A0 =A0 =A0= =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 List langs =3D=0A>>> cLanguages= ByCountry.get(countryCode);=0A>>>>> =A0- =A0 =A0 =A0 =A0if (langs =3D=3D n= ull) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0if (langs =3D=3D null)=0A>>>>> =A0+ = =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 langs =3D new ArrayLis= t();=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 List locales =3D = =0A> availableLocaleList();=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0for (int i= =3D 0; i < locales.size(); i++) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0for= (int i =3D 0; i < locales.size(); i++)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 = =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Locale locale =3D locales.= get(i);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (countryCode.equals(= locale.getCountry()) =0A> &&=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0locale.getVariant().length() =3D=3D 0) {=0A>>>>> =A0+ =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0locale.getVariant().length() =3D= =3D 0)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 langs.add(locale);=0A>>>>> =A0=A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0@@ = -251,28 +288,34 @@ class _LocaleUtils {=0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>= >>> =0A>>> =0A> //---------------------------------------------------------= --------------=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 = =A0*

    Obtains the list of countries supported for a =0A> given=0A>>> lan= guage.

    =0A>>>>> =A0- =A0 =A0 *=0A>>>>> =A0+ =A0 =A0 *=0A>>>>> =A0=A0 = =A0 =A0*

    This method takes a language code and searches =0A> to find=0A>= >> the=0A>>>>> =A0=A0 =A0 =A0* countries available for that language. Var= iant locales =0A> are=0A>>> removed.

    =0A>>>>> =A0=A0 =A0 =A0*=0A>>>>> = =A0=A0 =A0 =A0* @param languageCode =A0the 2 letter language code, null = =0A> returns=0A>>> empty=0A>>>>> =A0=A0 =A0 =A0* @return an unmodifiable = List of Locale objects, not =0A> null=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> = =A0- =A0 =A0public static List =0A> countriesByLanguage(String=0A>>= > languageCode) {=0A>>>>> =A0- =A0 =A0 =A0 =A0if (languageCode =3D=3D nul= l) {=0A>>>>> =A0+ =A0 =A0public static List =0A> countriesByLangua= ge(String=0A>>> languageCode)=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0+ =A0 =A0= =A0 =A0if (languageCode =3D=3D null)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>= > =A0=A0 =A0 =A0 =A0 =A0 =A0 return Collections.emptyList();=0A>>>>> =A0= =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 List countries =3D=0A= >>> cCountriesByLanguage.get(languageCode);=0A>>>>> =A0- =A0 =A0 =A0 =A0i= f (countries =3D=3D null) {=0A>>>>> =A0+ =A0 =A0 =A0 =A0if (countries =3D= =3D null)=0A>>>>> =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 = =A0 countries =3D new ArrayList();=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 = =A0 List locales =3D =0A> availableLocaleList();=0A>>>>> =A0- =A0 = =A0 =A0 =A0 =A0 =A0for (int i =3D 0; i < locales.size(); i++) {=0A>>>>> = =A0+ =A0 =A0 =A0 =A0 =A0 =A0for (int i =3D 0; i < locales.size(); i++)=0A>>= >>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 Locale locale =3D locales.get(i);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 if (languageCode.equals(locale.getLanguage())=0A>>> &&=0A>>>>> = =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 locale.getCountry().leng= th() !=3D 0 =0A> &&=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0locale.getVariant().length() =3D=3D 0) {=0A>>>>> =A0+ =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0locale.getVariant().length() =3D=3D 0)= =0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 countries.add(locale);=0A>>>>> =A0=A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 }=0A>>>>> =A0@@ -28= 5,13 +328,15 @@ class _LocaleUtils {=0A>>>>> =0A>>>>> =0A>>> =0A> //-------= ----------------------------------------------------------------=0A>>>>> = =A0=A0 =A0 // class to avoid synchronization=0A>>>>> =A0- =A0 =A0static cl= ass SyncAvoid {=0A>>>>> =A0+ =A0 =A0static class SyncAvoid=0A>>>>> =A0+ = =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 /** Unmodifiable list of available loc= ales. */=0A>>>>> =A0=A0 =A0 =A0 =A0 private static List =0A> AVAIL= ABLE_LOCALE_LIST;=0A>>>>> =A0=A0 =A0 =A0 =A0 /** Unmodifiable set of avail= able locales. */=0A>>>>> =A0=A0 =A0 =A0 =A0 private static Set AVA= ILABLE_LOCALE_SET;=0A>>>>> =A0-=0A>>>>> =A0- =A0 =A0 =A0 =A0static {=0A>>= >>> =A0+=0A>>>>> =A0+ =A0 =A0 =A0 =A0static=0A>>>>> =A0+ =A0 =A0 =A0 =A0= {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 List list =3D new=0A>>> Arra= yList(Arrays.asList(Locale.getAvailableLocales())); =0A> =A0// extr= a=0A>>> safe=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 AVAILABLE_LOCALE_LIST =3D= =0A> Collections.unmodifiableList(list);=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 = =A0 AVAILABLE_LOCALE_SET =3D =0A> Collections.unmodifiableSet(new=0A>>> Ha= shSet(availableLocaleList()));=0A>>>>> =0A>>>>> =A0Modified:=0A>>>= =0A> myfaces/core/trunk/api/src/main/java/javax/faces/component/_MethodBin= dingToListener.java=0A>>>>> =A0URL:=0A>>> =0A> http://svn.apache.org/viewv= c/myfaces/core/trunk/api/src/main/java/javax/faces/component/_MethodBinding= ToListener.java?rev=3D1188267&r1=3D1188266&r2=3D1188267&view=3Ddiff=0A>>>>>= =0A>>> =0A> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=0A>>>>> =A0---=0A>>> =0A> myfaces/core/trunk/api/= src/main/java/javax/faces/component/_MethodBindingToListener.java=0A>>> (o= riginal)=0A>>>>> =A0+++=0A>>> =0A> myfaces/core/trunk/api/src/main/java/ja= vax/faces/component/_MethodBindingToListener.java=0A>>> Mon Oct 24 18:09:0= 8 2011=0A>>>>> =A0@@ -20,7 +20,6 @@=0A>>>>> =A0=A0package javax.faces.com= ponent;=0A>>>>> =0A>>>>> =A0=A0import javax.faces.FacesException;=0A>>>>> = =A0-import javax.faces.component.StateHolder;=0A>>>>> =A0=A0import javax.= faces.context.FacesContext;=0A>>>>> =A0=A0import javax.faces.el.Evaluation= Exception;=0A>>>>> =A0=A0import javax.faces.el.MethodBinding;=0A>>>>> =A0= @@ -32,17 +31,20 @@ import javax.faces.event.FacesEvent;=0A>>>>> =A0=A0*= =0A>>>>> =A0=A0* @author Stan Silvert=0A>>>>> =A0=A0*/=0A>>>>> =A0-abstr= act class _MethodBindingToListener implements =0A> StateHolder {=0A>>>>> = =A0-=0A>>>>> =A0+abstract class _MethodBindingToListener implements =0A> S= tateHolder=0A>>>>> =A0+{=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 protected Metho= dBinding methodBinding;=0A>>>>> =A0-=0A>>>>> =A0- =A0 =A0public _MethodBi= ndingToListener() {=0A>>>>> =A0+=0A>>>>> =A0+ =A0 =A0public _MethodBindin= gToListener()=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 }=0A>>>>> =A0-=0A= >>>>> =A0+=0A>>>>> =A0=A0 =A0 /**=0A>>>>> =A0=A0 =A0 =A0* Creates a new = instance of MethodBindingToListener=0A>>>>> =A0=A0 =A0 =A0*/=0A>>>>> =A0-= =A0 =A0public _MethodBindingToListener(MethodBinding =0A> methodBinding) {= =0A>>>>> =A0+ =A0 =A0public _MethodBindingToListener(MethodBinding =0A> me= thodBinding)=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 if (methodB= inding =3D=3D null)=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 = =A0 =A0 =A0 throw new NullPointerException("methodBinding =0A> can not=0A>>= > be null");=0A>>>>> =A0@@ -51,58 +53,71 @@ abstract class _MethodBinding= ToListener=0A>>>>> =A0=A0 =A0 =A0 =A0 {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 = =A0 throw new =0A> IllegalArgumentException("methodBinding must=0A>>> impl= ement the StateHolder interface");=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> = =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 this.methodBinding =3D metho= dBinding;=0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> =A0- =A0 =A0private Faces= Context getFacesContext() {=0A>>>>> =A0+ =A0 =A0private FacesContext getFa= cesContext()=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 return Face= sContext.getCurrentInstance();=0A>>>>> =A0=A0 =A0 }=0A>>>>> =0A>>>>> =A0-= =A0 =A0protected void invokeMethodBinding(FacesEvent event) =0A> throws=0A= >>> AbortProcessingException {=0A>>>>> =A0- =A0 =A0 =A0 =A0try {=0A>>>>> = =A0- =A0 =A0 =A0 =A0 =A0 =A0methodBinding.invoke(getFacesContext(), new = =0A> Object[]=0A>>> {event});=0A>>>>> =A0+ =A0 =A0protected void invokeMe= thodBinding(FacesEvent event) =0A> throws=0A>>> AbortProcessingException= =0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0try=0A>>>>> =A0+ =A0 = =A0 =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0methodBinding.invoke(getF= acesContext(), new=0A>>> Object[]{event});=0A>>>>> =A0=A0 =A0 =A0 =A0 }= =0A>>>>> =A0- =A0 =A0 =A0 =A0catch (EvaluationException e) {=0A>>>>> =A0+= =A0 =A0 =A0 =A0catch (EvaluationException e)=0A>>>>> =A0+ =A0 =A0 =A0 =A0= {=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 Throwable cause =3D e.getCause();=0A>= >>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0if (cause !=3D null && cause instanceof= =0A>>> AbortProcessingException) {=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0throw (AbortProcessingException)cause;=0A>>>>> =A0+ =A0 =A0 =A0 =A0= =A0 =A0if (cause !=3D null && cause instanceof=0A>>> AbortProcessingExcep= tion)=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0throw (AbortProcessingException) cause;=0A>>>>> =A0=A0 =A0 = =A0 =A0 =A0 =A0 }=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0=A0 =A0 =A0 =A0 = =A0 =A0 throw e;=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0=A0 =A0 }=0A>>>>= > =A0-=0A>>>>> =A0- =A0 =A0public MethodBinding getMethodBinding() {=0A>>= >>> =A0+=0A>>>>> =A0+ =A0 =A0public MethodBinding getMethodBinding()=0A>>= >>> =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 return methodBinding;=0A>>>>= > =A0=A0 =A0 }=0A>>>>> =A0-=0A>>>>> =A0- =A0 =A0public void restoreState= (FacesContext context, Object =0A> state) {=0A>>>>> =A0- =A0 =A0 =A0 =A0Ob= ject[] stateArray =3D (Object[])state;=0A>>>>> =A0- =A0 =A0 =A0 =A0try {= =0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0methodBinding =3D=0A>>> (MethodBindi= ng)_ClassUtils.getContextClassLoader()=0A>>>>> =A0-=0A>>> .loadClass((Str= ing)stateArray[0])=0A>>>>> =A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =0A> .newInstance()= ;=0A>>>>> =A0- =A0 =A0 =A0 =A0} catch (Exception e) {=0A>>>>> =A0+=0A>>>>= > =A0+ =A0 =A0public void restoreState(FacesContext context, Object =0A> s= tate)=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0Object[] stateArr= ay =3D (Object[]) state;=0A>>>>> =A0+ =A0 =A0 =A0 =A0try=0A>>>>> =A0+ =A0= =A0 =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0 =A0 =A0methodBinding =3D (Metho= dBinding)=0A>>> _ClassUtils.getContextClassLoader()=0A>>>>> =A0+ =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0.loadClass((String) stateArray[0])=0A>>>>> = =A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0.newInstance();=0A>>>>> =A0+ = =A0 =A0 =A0 =A0}=0A>>>>> =A0+ =A0 =A0 =A0 =A0catch (Exception e)=0A>>>>> = =A0+ =A0 =A0 =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 =A0 =A0 throw new FacesEx= ception(e);=0A>>>>> =A0=A0 =A0 =A0 =A0 }=0A>>>>> =A0-=0A>>>>> =A0- =A0 = =A0 =A0 =A0((StateHolder)methodBinding).restoreState(context,=0A>>> stateA= rray[1]);=0A>>>>> =A0+=0A>>>>> =A0+ =A0 =A0 =A0 =A0((StateHolder) methodB= inding).restoreState(context,=0A>>> stateArray[1]);=0A>>>>> =A0=A0 =A0 }= =0A>>>>> =0A>>>>> =A0- =A0 =A0public Object saveState(FacesContext context= ) {=0A>>>>> =A0+ =A0 =A0public Object saveState(FacesContext context)=0A>>= >>> =A0+ =A0 =A0{=0A>>>>> =A0=A0 =A0 =A0 =A0 Object[] stateArray =3D new = Object[2];=0A>>>>> =A0=A0 =A0 =A0 =A0 stateArray[0] =3D methodBinding.getC= lass().getName();=0A>>>>> =A0- =A0 =A0 =A0 =A0stateArray[1] =3D=0A>>> ((S= tateHolder)methodBinding).saveState(context);=0A>>>>> =A0+ =A0 =A0 =A0 =A0= stateArray[1] =3D ((StateHolder)=0A>>> methodBinding).saveState(context);= =0A>>>>> =A0=A0 =A0 =A0 =A0 return stateArray;=0A>>>>> =A0=A0 =A0 }=0A>>>= >> =0A>>>>> =A0- =A0 =A0public void setTransient(boolean newTransientValue= ) {=0A>>>>> =A0- =A0 =A0 =A0 =0A> =A0((StateHolder)methodBinding).setTrans= ient(newTransientValue);=0A>>>>> =A0+ =A0 =A0public void setTransient(bool= ean newTransientValue)=0A>>>>> =A0+ =A0 =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0= ((StateHolder) =0A> methodBinding).setTransient(newTransientValue);=0A>>>>>= =A0=A0 =A0 }=0A>>>>> =0A>>>>> =A0- =A0 =A0public boolean isTransient() {= =0A>>>>> =A0- =A0 =A0 =A0 =A0return ((StateHolder)methodBinding).isTransie= nt();=0A>>>>> =A0+ =A0 =A0public boolean isTransient()=0A>>>>> =A0+ =A0 = =A0{=0A>>>>> =A0+ =A0 =A0 =A0 =A0return ((StateHolder) methodBinding).isTr= ansient();=0A>>>>> =A0=A0 =A0 }=0A>>>>> =A0-=0A>>>>> =A0+=0A>>>>> =A0= =A0}=0A>>>>> =0A>>>>> =0A>>>>> =0A>>>> =0A>>> =0A>>> =0A>>> =0A>>> --=0A>>= > Jakob Korherr=0A>>> =0A>>> blog: http://www.jakobk.com=0A>>> twitter: = http://twitter.com/jakobkorherr=0A>>> work: http://www.irian.at=0A>>> =0A>= > =0A>