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 A18AA7466 for ; Mon, 24 Oct 2011 22:02:15 +0000 (UTC) Received: (qmail 54639 invoked by uid 500); 24 Oct 2011 22:02:15 -0000 Delivered-To: apmail-myfaces-dev-archive@myfaces.apache.org Received: (qmail 54589 invoked by uid 500); 24 Oct 2011 22:02:15 -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 54582 invoked by uid 99); 24 Oct 2011 22:02:15 -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 22:02:15 +0000 X-ASF-Spam-Status: No, hits=-0.6 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of lu4242@gmail.com designates 209.85.213.53 as permitted sender) Received: from [209.85.213.53] (HELO mail-yw0-f53.google.com) (209.85.213.53) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 24 Oct 2011 22:02:02 +0000 Received: by yws29 with SMTP id 29so2891171yws.12 for ; Mon, 24 Oct 2011 15:01:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; bh=HpYV7x04vpGb/dOeBR+ts9tjbPNSKghQgFcoRwZTn9Q=; b=gzmsQ4x4xwjKIL9AcC5Z4CFOLHufjglV/4FqJ/bhKeSXEH6/9zt+Ez3wuZ7bAPe31b 2vDC59GZILaCnOkkgvCjj/pxMH1oODhWRQa1RVIVW0AKcuQrL9gy6gclK5v+C1YuT8IY 7CDaERPinbD5d3ImdqJdGw8gI5lRDjSHlBbb0= MIME-Version: 1.0 Received: by 10.68.36.103 with SMTP id p7mr50717199pbj.74.1319493700262; Mon, 24 Oct 2011 15:01:40 -0700 (PDT) Received: by 10.142.187.11 with HTTP; Mon, 24 Oct 2011 15:01:40 -0700 (PDT) In-Reply-To: References: <1319488640.52542.YahooMailNeo@web27803.mail.ukl.yahoo.com> <1319490248.9511.YahooMailNeo@web27808.mail.ukl.yahoo.com> Date: Mon, 24 Oct 2011 17:01:40 -0500 Message-ID: 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 From: Leonardo Uribe To: MyFaces Development , Mark Struberg Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Virus-Checked: Checked by ClamAV on apache.org I remember that from workshop done CONFESS or JSFDays conference some years ago. See: http://www.angelikalanger.com/ Angelika Langer did an explanation about the Java Memory Model. In my undersanding, a final var modifier ensures the variable is initialized on the constructor, so after the constructor execution, that var becomes thread safe, because both threads will have the same copy. What is wrong is take the reference in the constructor. In theory, some optimizations make use of final modifier to define if an object is mutable or inmutable. If the object is inmutable, it is possible to reuse the object and the jvm or compiler can use that information to allocate, gc or reuse the object. In the case of "private final HashMap", in theory if you use reflection you can change the var but if it is marked as final you can't. Again, final semantic has sense. 2011/10/24 Jakob Korherr : >> Please take a look at the Java-VM and the Java-Mem specification. > > Actually I have never heard of anything like that and I could not find > any evidence supporting your information while looking at the Java-VM > spec, Mark. Can you please point me in the right direction? > > IMHO it is stupid to declare that e.g. a private final HashMap must > not change its inner state. This would not make any sence for the > developer. > > Regards, > Jakob > > 2011/10/24 Mark Struberg : >> Please take a look at the Java-VM and the Java-Mem specification. >> >> The Java VM has a lot of optimisation for high scalability. >> One of those features is that memory which is not declared volatile will= get copied to a different mem location for each thread accessing it. This = allows to highly utilize the L1 and L2 caches of modern multi core CPUs. Wh= ich in turn also means that if we take as an example >> >> public class MyCls { >> >> =A0 private static int i; >> >> =A0 public int getCounter() { return i;} >> >> >> =A0 public void count() { i++ }; >> >> } >> >> might well return different values for getCounter() for different parall= el threads! >> >> >> I know this is not really as well known as it should be, but marking a c= lass member 'final' does also mean that it's mem doesn't need to get synced= back (because it's assumed that this got initialized once and then will ne= ver change). >> >> LieGrue, >> strub >> >> >> >> >> ----- Original Message ----- >>> From: Leonardo Uribe >>> To: MyFaces Development ; Mark Struberg >>> Cc: >>> Sent: Monday, October 24, 2011 10:48 PM >>> Subject: Re: svn commit: r1188267 [1/2] - in /myfaces/core/trunk/api/sr= c: main/java/javax/faces/application/ main/java/javax/faces/component/ main= /java/javax/faces/component/behavior/ main/java/javax/faces/convert/ main/j= ava/javax/faces/event/ main/java/javax >>> >>> Hi >>> >>> I personally prefer use final modifier. In some cases, such vars has >>> some "history" behind, so I do not agree to change them blindly, >>> without check each case. Now, it could exists a hashmap that its >>> variable is final, but its key/value pairs are mutable. >>> >>> Really do these type of cleanups makes harder maintain 2.0.x and 2.1.x >>> branches. I usually compare files and apply patches in both branches. >>> I prefer delay this to a future 2.2.x branch, but if it is applied on >>> current trunk its ok anyway. >>> >>> regards, >>> >>> Leonardo Uribe >>> >>> 2011/10/24 Mark Struberg : >>>> =A0Hi! >>>> >>>> =A0I removed them because they got inhomogenously used. The same metho= d >>> contained variables which are final and others which are not modified n= either >>> and not marked final. >>>> >>>> =A0Also I found a few hashmaps which were marked final, although they = get >>> modified later. Please be aware that final is not only a keyword which = stops you >>> from changing the pointer (in C speak) but also means that those underl= ying mem >>> areas will NOT be synced to other threads! >>>> >>>> =A0Otoh there have been unmodifiableCollections in uppercase letters w= hich are >>> not marked final ;) >>>> >>>> =A0Btw, if anyone also likes to join and help with the cleanup then yo= u are >>> welcome ^^ >>>> >>>> =A0I only used IDE support for fixing if without {}, but all other aut= omated >>> reformatting turned out to create WAY too much noise (and sometimes eve= n break >>> the format at all). I tried both IDEA and Eclipse, but none of them wor= ked >>> satisfyingly. >>>> >>>> >>>> =A0I'll checkin an upgrade of myfaces-core pom.xml with >>> mf-parent-11-SNAPSHOT and an additional -Pcheckstyle profile which will= enable >>> the 'standard' checks. >>>> >>>> =A0LieGrue, >>>> =A0strub >>>> >>>> >>>> >>>> =A0----- Original Message ----- >>>>> =A0From: Jakob Korherr >>>>> =A0To: MyFaces Development ; >>> gudnabrsam@gmail.com >>>>> =A0Cc: >>>>> =A0Sent: Monday, October 24, 2011 10:15 PM >>>>> =A0Subject: 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/behavi= or/ >>> main/java/javax/faces/convert/ main/java/javax/faces/event/ main/java/j= avax >>>>> >>>>> =A0I agree with Matt. I don't think that having local variables marke= d >>> as >>>>> =A0final is a bad thing. >>>>> >>>>> =A0Regards, >>>>> =A0Jakob >>>>> >>>>> =A02011/10/24 Matt Benson : >>>>>> =A0=A0Not a huge deal; I wouldn't necessarily revert the commit, but >>> IMO >>>>>> =A0=A0there are good reasons to mark local variables as final: =A0co= de >>>>>> =A0=A0self-documents the intent that a variable's value won't >>> change; >>>>> =A0then >>>>>> =A0=A0there is the somewhat controversial notion that marking a fina= l >>>>>> =A0=A0variable as such may contribute to better JIT performance. =A0= It >>>>>> =A0=A0certainly couldn't hurt, could it? >>>>>> >>>>>> =A0=A0Matt >>>>>> >>>>>> =A0=A0On Mon, Oct 24, 2011 at 1:09 PM, =A0 >>> wrote: >>>>>>> =A0=A0Author: struberg >>>>>>> =A0=A0Date: Mon Oct 24 18:09:08 2011 >>>>>>> =A0=A0New Revision: 1188267 >>>>>>> >>>>>>> =A0=A0URL: http://svn.apache.org/viewvc?rev=3D1188267&view=3Drev >>>>>>> =A0=A0Log: >>>>>>> =A0=A0MYFACES-3368 fix linebreakes and unnecessary final for local >>> fields >>>>>>> >>>>>>> =A0=A0Modified: >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/application/Navigat= ionCase.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/UICompone= nt.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/UICompone= ntBase.java >>>>>>> >>>>> =A0=A0myfaces/core/trunk/api/src/main/java/javax/faces/component/UIDa= ta.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/UIInput.j= ava >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/UISelectM= any.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/_Componen= tAttributesMap.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/_LocaleUt= ils.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/_MethodBi= ndingToListener.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/_MethodBi= ndingToMethodExpression.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/_MethodEx= pressionToMethodBinding.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/_SelectIt= emsIterator.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/_ValueBin= dingToValueExpression.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/_ValueExp= ressionToValueBinding.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/behavior/= _AjaxBehaviorDeltaStateHelper.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/convert/NumberConve= rter.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/convert/_MessageUti= ls.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/event/ListenerFor.j= ava >>>>>>> >>>>> =A0=A0myfaces/core/trunk/api/src/main/java/javax/faces/event/PhaseEve= nt.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/validator/BeanValid= ator.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/validator/DoubleRan= geValidator.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/validator/LengthVal= idator.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/validator/LongRange= Validator.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/validator/Validator= Exception.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/Attri= buteHandler.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/Compo= nentHandler.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/Compo= siteFaceletHandler.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/Deleg= atingMetaTagHandler.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/Facet= Handler.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/MetaT= agHandler.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/Metad= ata.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/TagAt= tribute.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/TagAt= tributeException.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/TagCo= nfig.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/TagEx= ception.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/TagHa= ndler.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/TagHa= ndlerDelegate.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/TextH= andler.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/Valid= atorHandler.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/webapp/UIComponentT= agBase.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/test/java/javax/faces/application/FacesMe= ssageTest.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/test/java/javax/faces/component/AbstractU= IComponentPropertyTest.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/test/java/javax/faces/component/UICompone= ntBaseGetClientIdTest.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/test/java/javax/faces/component/UICompone= ntInvokeOnComponentTest.java >>>>>>> >>>>> >>> =A0myfaces/core/trunk/api/src/test/java/javax/faces/component/UIViewPar= ameterTest.java >>>>>>> >>>>>>> =A0=A0Modified: >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/application/Navigation= Case.java >>>>>>> =A0=A0URL: >>>>> >>> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax= /faces/application/NavigationCase.java?rev=3D1188267&r1=3D1188266&r2=3D1188= 267&view=3Ddiff >>>>>>> >>>>> >>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D >>>>>>> =A0=A0--- >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/application/Navigation= Case.java >>>>> =A0(original) >>>>>>> =A0=A0+++ >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/application/Navigation= Case.java >>>>> =A0Mon Oct 24 18:09:08 2011 >>>>>>> =A0=A0@@ -249,7 +249,7 @@ public class NavigationCase >>>>>>> >>> builder.append("\">\n"); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 for (Map.Entry>> List> entry >>>>> =A0: _parameters.entrySet()) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0final String name = =3D entry.getKey(); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0String name =3D entr= y.getKey(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 for (String value : e= ntry.getValue()) >>>>>>> =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 =A0 builder.appen= d(" >>>>> =A0=A0\n"); >>>>>>> >>>>>>> =A0=A0Modified: >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponent.= java >>>>>>> =A0=A0URL: >>>>> >>> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax= /faces/component/UIComponent.java?rev=3D1188267&r1=3D1188266&r2=3D1188267&v= iew=3Ddiff >>>>>>> >>>>> >>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D >>>>>>> =A0=A0--- >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponent.= java >>>>> =A0(original) >>>>>>> =A0=A0+++ >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponent.= java Mon >>>>> =A0Oct 24 18:09:08 2011 >>>>>>> =A0=A0@@ -62,35 +62,38 @@ import org.apache.myfaces.buildtools.mav >>>>>>> =A0=A0=A0import >>>>> >>> org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFWebCo= nfigParam; >>>>>>> >>>>>>> =A0=A0=A0/** >>>>>>> =A0=A0- * >>>>>>> =A0=A0+ * >>>>>>> =A0=A0=A0* see Javadoc of >>>> >>> href=3D"http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.h= tml">J >>>>>>> =A0=A0=A0* SF Specification >>>>>>> =A0=A0- * >>>>>>> =A0=A0+ * >>>>>>> =A0=A0=A0* @author Manfred Geiler (latest modification by $Author$) >>>>>>> =A0=A0=A0* @version $Revision$ $Date$ >>>>>>> =A0=A0=A0*/ >>>>>>> =A0=A0-@JSFComponent(type =3D "javax.faces.Component", >>> family =3D >>>>> =A0"javax.faces.Component", desc =3D "abstract base >>> component", >>>>> =A0configExcluded =3D true) >>>>>>> =A0=A0-public abstract class UIComponent implements >>> PartialStateHolder, >>>>> =A0TransientStateHolder , SystemEventListenerHolder, >>> ComponentSystemEventListener { >>>>>>> =A0=A0+@JSFComponent(type =3D "javax.faces.Component", >>> family =3D >>>>> =A0"javax.faces.Component", >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0desc =3D "abstract base componen= t", >>>>> =A0configExcluded =3D true) >>>>>>> =A0=A0+public abstract class UIComponent >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0implements PartialStateHolder, TransientStat= eHolder, >>>>> =A0SystemEventListenerHolder, ComponentSystemEventListener >>>>>>> =A0=A0+{ >>>>>>> =A0=A0=A0 =A0 // TODO: Reorder methods, this class is a mess >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* Constant used in component attribute map to retr= ieve >>> the >>>>> =A0BeanInfo of a composite >>>>>>> =A0=A0=A0 =A0 =A0* component. >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @see >>> ViewDeclarationLanguage#getComponentMetadata(FacesContext, >>>>> =A0Resource) >>>>>>> =A0=A0=A0 =A0 =A0* @see >>>>> =A0ViewDeclarationLanguage#retargetAttachedObjects(FacesContext, >>> UIComponent, List) >>>>>>> =A0=A0=A0 =A0 =A0* @see >>>>> =A0ViewDeclarationLanguage#retargetMethodExpressions(FacesContext, >>> UIComponent) >>>>>>> =A0=A0=A0 =A0 =A0* @see Application#createComponent(FacesContext, >>> Resource) >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0=A0 =A0 public static final String BEANINFO_KEY =3D >>>>> =A0"javax.faces.component.BEANINFO_KEY"; >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* Constant used in BeanInfo descriptor as a key fo= r >>> retrieve an >>>>> =A0alternate component type >>>>>>> =A0=A0=A0 =A0 =A0* for create the composite base component. >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @see Application#createComponent(FacesContext, >>> Resource) >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0=A0 =A0 public static final String COMPOSITE_COMPONENT_TYPE_K= EY =3D >>>>> =A0"javax.faces.component.COMPOSITE_COMPONENT_TYPE"; >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* Constant used to define the facet inside this co= mponent >>> that >>>>> =A0store the component hierarchy >>>>>>> =A0=A0=A0 =A0 =A0* generated by a composite component implementatio= n, and >>> then >>>>> =A0rendered. In other words, >>>>>>> =A0=A0@@ -98,23 +101,23 @@ public abstract class UIComponent implem >>>>>>> =A0=A0=A0 =A0 =A0* this face are rendered. >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0=A0 =A0 public static final String COMPOSITE_FACET_NAME =3D >>>>> =A0"javax.faces.component.COMPOSITE_FACET_NAME"; >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* Constant used to store the current component tha= t is >>> being >>>>> =A0processed. >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @see #pushComponentToEL(FacesContext, UIComponen= t) >>>>>>> =A0=A0=A0 =A0 =A0* @see #popComponentFromEL(FacesContext) >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0=A0 =A0 public static final String CURRENT_COMPONENT =3D >>>>> =A0"javax.faces.component.CURRENT_COMPONENT"; >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* Constant used to store the current composite com= ponent >>> that is >>>>> =A0being processed. >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @see #pushComponentToEL(FacesContext, UIComponen= t) >>>>>>> =A0=A0=A0 =A0 =A0* @see #popComponentFromEL(FacesContext) >>>>>>> =A0=A0- =A0 =A0 */ >>>>>>> =A0=A0+ =A0 =A0 */ >>>>>>> =A0=A0=A0 =A0 public static final String CURRENT_COMPOSITE_COMPONEN= T =3D >>>>> =A0"javax.faces.component.CURRENT_COMPOSITE_COMPONENT"; >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* This constant has two usages. The first one is i= n >>> component >>>>> =A0attribute map to identify the >>>>>>> =A0=A0=A0 =A0 =A0* facet name under this component is child of its = parent. >>> The >>>>> =A0second one is on BeanInfo descriptor >>>>>>> =A0=A0@@ -123,33 +126,35 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0* by COMPOSITE_FACET_NAME constant). >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0=A0 =A0 public static final String FACETS_KEY =3D >>>>> =A0"javax.faces.component.FACETS_KEY"; >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* Constant used in component attribute map to stor= e the >>> {@link >>>>> =A0javax.faces.view.Location} object >>>>>>> =A0=A0=A0 =A0 =A0* where the definition of this component is. >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0=A0 =A0 public static final String VIEW_LOCATION_KEY =3D >>>>> =A0"javax.faces.component.VIEW_LOCATION_KEY"; >>>>>>> =A0=A0- >>>>>>> =A0=A0- =A0 =A0public static final String >>> ATTRS_WITH_DECLARED_DEFAULT_VALUES =3D >>>>> =A0"javax.faces.component.ATTR_NAMES_WITH_DEFAULT_VALUES"; >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0+ =A0 =A0public static final String >>> ATTRS_WITH_DECLARED_DEFAULT_VALUES >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0=3D >>>>> =A0"javax.faces.component.ATTR_NAMES_WITH_DEFAULT_VALUES"; >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* Indicate if the facesContext attribute values un= der the >>> keys >>>>> =A0javax.faces.component.CURRENT_COMPONENT and >>>>>>> =A0=A0=A0 =A0 =A0* javax.faces.component.CURRENT_COMPOSITE_COMPONEN= T >>> should be >>>>> =A0valid or not. By default, those keys are >>>>>>> =A0=A0=A0 =A0 =A0* deprecated since 2.1 >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0@JSFWebConfigParam(since=3D"2.1.0", >>>>> =A0expectedValues=3D"true, false", defaultValue=3D"false") >>>>>>> =A0=A0- =A0 =A0public static final String >>>>> =A0HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME =3D >>>>> =A0"javax.faces.HONOR_CURRENT_COMPONENT_ATTRIBUTES"; >>>>>>> =A0=A0- >>>>>>> =A0=A0+ =A0 =A0@JSFWebConfigParam(since =3D "2.1.0", >>> expectedValues =3D >>>>> =A0"true, false", defaultValue =3D "false") >>>>>>> =A0=A0+ =A0 =A0public static final String >>>>> =A0HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0=3D >>>>> =A0"javax.faces.HONOR_CURRENT_COMPONENT_ATTRIBUTES"; >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* The key under which the component stack is store= d in >>> the >>>>> =A0FacesContext. >>>>>>> =A0=A0=A0 =A0 =A0* ATTENTION: this constant is duplicate in >>>>> =A0CompositeComponentExpressionUtils. >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0=A0 =A0 private static final String _COMPONENT_STACK =3D >>>>> =A0"componentStack:" + UIComponent.class.getName(); >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 private static final String >>> _CURRENT_COMPOSITE_COMPONENT_KEY =3D >>>>> =A0"compositeComponent:" + UIComponent.class.getName(); >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 Map, >>>>> =A0List> _systemEventListenerClassMap; >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* @deprecated >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0@@ -164,26 +169,27 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 private transient Map >>> _resourceBundleMap =3D >>>>> =A0null; >>>>>>> =A0=A0=A0 =A0 private boolean _inView =3D false; >>>>>>> =A0=A0=A0 =A0 private _DeltaStateHelper _stateHelper =3D null; >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* In JSF 2.0 bindings map was deprecated, and repl= aced >>> with a map >>>>>>> =A0=A0=A0 =A0 =A0* inside stateHelper. We need this one here becaus= e >>> stateHelper >>>>> =A0needs >>>>>>> =A0=A0=A0 =A0 =A0* to be implemented from here and internally it de= pends >>> from this >>>>> =A0property. >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0=A0 =A0 private boolean _initialStateMarked =3D false; >>>>>>> =A0=A0- >>>>>>> =A0=A0- =A0 =A0/** Value of the {@link >>>>> =A0UIComponent#HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME} paramet= er */ >>>>>>> =A0=A0+ >>>>>>> =A0=A0+ =A0 =A0/** Value of the {@link >>>>> =A0UIComponent#HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME} paramet= er */ >>>>>>> =A0=A0=A0 =A0 private Boolean _honorCurrentComponentAttributes; >>>>>>> >>>>>>> =A0=A0- =A0 =A0public UIComponent() { >>>>>>> =A0=A0+ =A0 =A0public UIComponent() >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0=A0 =A0 public abstract Map getAttributes(); >>>>>>> >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* {@inheritDoc} >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @since 2.0 >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0=A0 =A0 public boolean initialStateMarked() >>>>>>> =A0=A0@@ -193,7 +199,7 @@ public abstract class UIComponent implem >>>>>>> >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* Invokes the >>> invokeContextCallback >>>>> =A0method with the component, specified by >>> clientId. >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @param context >>>>>>> =A0=A0=A0 =A0 =A0* =A0 =A0 =A0 =A0 =A0 =A0FacesContext= for >>> the current >>>>> =A0request >>>>>>> =A0=A0=A0 =A0 =A0* @param clientId >>>>>>> =A0=A0@@ -204,9 +210,11 @@ public abstract class UIComponent implem >>>>>>> =A0=A0=A0 =A0 =A0* @throws javax.faces.FacesException >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0=A0 =A0 public boolean invokeOnComponent(FacesContext context= , >>> String >>>>> =A0clientId, ContextCallback callback) >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0throws FacesException { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0throws FacesException >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // java.lang.NullPointerException - if any of= the >>> arguments are >>>>> =A0null >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (context =3D=3D null || clientId =3D=3D n= ull || callback >>> =3D=3D null) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (context =3D=3D null || clientId =3D=3D n= ull || callback >>> =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new NullPointerException(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0@@ -215,16 +223,21 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 // searching for this component? >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 boolean found =3D >>> clientId.equals(this.getClientId(context)); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if (found) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0try { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (found) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0try >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 callback.invokeContex= tCallback(context, >>> this); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} catch (Exception e) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0catch (Exception e) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 throw new FacesExcept= ion(e); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return found; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 // Searching for this component's >>> children/facets >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0for (Iterator it =3D >>>>> =A0this.getFacetsAndChildren(); !found && it.hasNext();) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0for (Iterator it =3D >>>>> =A0this.getFacetsAndChildren(); !found && it.hasNext(); ) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 found =3D it.next().invokeOnC= omponent(context, >>> clientId, >>>>> =A0callback); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return found; >>>>>>> =A0=A0@@ -237,15 +250,16 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @param component >>>>>>> =A0=A0=A0 =A0 =A0* @return true if the component is a composite com= ponent >>> otherwise >>>>> =A0false is returned >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* >>>>>>> =A0=A0=A0 =A0 =A0* @throws NullPointerException if the component is= null >>>>>>> =A0=A0=A0 =A0 =A0* @since 2.0 >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public static boolean isCompositeComponent(UICompone= nt >>> component) >>>>> =A0{ >>>>>>> =A0=A0+ =A0 =A0public static boolean isCompositeComponent(UICompone= nt >>> component) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 //since _isCompositeComponent does it the sam= e way we >>> do it >>>>> =A0here also although I >>>>>>> =A0=A0=A0 =A0 =A0 =A0 //would prefer following method >>>>>>> =A0=A0@@ -261,15 +275,16 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0* instance (which represents the view). If this co= mponent >>>>>>> =A0=A0=A0 =A0 =A0* is a UIViewRoot instance, the components >>> "always" >>>>>>> =A0=A0=A0 =A0 =A0* is on the view. >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* By default it is false but for UIViewRoot instan= ces is >>>>>>> =A0=A0=A0 =A0 =A0* true. >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @return >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @since 2.0 >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public boolean isInView() { >>>>>>> =A0=A0+ =A0 =A0public boolean isInView() >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 return _inView; >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0@@ -292,10 +307,11 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0* >>>>>>> =A0=A0=A0 =A0 =A0* @param context >>>>>>> =A0=A0=A0 =A0 =A0* @return >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @since 2.0 >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0protected boolean isVisitable(VisitContext context) = { >>>>>>> =A0=A0+ =A0 =A0protected boolean isVisitable(VisitContext context) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 Collection hints =3D >>> context.getHints(); >>>>>>> >>>>>>> =A0=A0@@ -322,18 +338,23 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0=A0 =A0 public abstract void setValueBinding(String name, >>> ValueBinding >>>>> =A0binding); >>>>>>> >>>>>>> =A0=A0- =A0 =A0public void setValueExpression(String name, >>> ValueExpression >>>>> =A0expression) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (name =3D=3D null) { >>>>>>> =A0=A0+ =A0 =A0public void setValueExpression(String name, >>> ValueExpression >>>>> =A0expression) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (name =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new NullPointerException("name"= ); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (name.equals("id")) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (name.equals("id")) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new IllegalArgumentException("C= an't >>> set a >>>>> =A0ValueExpression for the 'id' property."); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (name.equals("parent")) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (name.equals("parent")) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new IllegalArgumentException("C= an't >>> set a >>>>> =A0ValueExpression for the 'parent' property."); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (expression =3D=3D null) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (expression =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 //if (bindings !=3D null) { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 // =A0 =A0bindings.remove(name); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 // =A0 =A0if (bindings.isEmpty()) { >>>>>>> =A0=A0@@ -341,13 +362,19 @@ public abstract class UIComponent imple= m >>>>>>> =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 =A0 getStateHelper().remove(PropertyKeys.= bindings, >>> name); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0} else { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if (expression.isLiteralText()) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0try { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0} >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0else >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (expression.isLiteralText()) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0try >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Object value =3D >>>>> =A0expression.getValue(getFacesContext().getELContext()); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 getAttributes().put(n= ame, value); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return; >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} catch (ELException e) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0catch (ELException e) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 throw new FacesExcept= ion(e); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0@@ -361,7 +388,8 @@ public abstract class UIComponent implem >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0public String getClientId() { >>>>>>> =A0=A0+ =A0 =A0public String getClientId() >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 return getClientId(getFacesContext()); >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0@@ -375,30 +403,36 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0* >>>>>>> =A0=A0=A0 =A0 =A0* @param component the component to start from >>>>>>> =A0=A0=A0 =A0 =A0* @return the parent composite component if found >>> otherwise null >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @since 2.0 >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public static UIComponent >>> getCompositeComponentParent(UIComponent >>>>> =A0component) { >>>>>>> =A0=A0+ =A0 =A0public static UIComponent >>> getCompositeComponentParent(UIComponent >>>>> =A0component) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if(component =3D=3D null) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (component =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return null; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 UIComponent parent =3D component; >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0do { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0do >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 parent =3D parent.getParent(); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if(parent !=3D null && >>>>> =A0UIComponent.isCompositeComponent(parent)) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (parent !=3D null && >>>>> =A0UIComponent.isCompositeComponent(parent)) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return parent; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- =A0 =A0 =A0 =A0} while(parent !=3D null); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0} while (parent !=3D null); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 return null; >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* @since 1.2 >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public String getContainerClientId(FacesContext ctx)= { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (ctx =3D=3D null) { >>>>>>> =A0=A0+ =A0 =A0public String getContainerClientId(FacesContext ctx) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (ctx =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new NullPointerException("Faces= Context >>>>> =A0ctx"); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0@@ -406,24 +440,26 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @param context >>>>>>> =A0=A0=A0 =A0 =A0* @return >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @since 2.0 >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public static UIComponent >>> getCurrentComponent(FacesContext >>>>> =A0context) { >>>>>>> =A0=A0- >>>>>>> =A0=A0+ =A0 =A0public static UIComponent >>> getCurrentComponent(FacesContext >>>>> =A0context) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 Boolean honorCurrentComponentAttributes =3D >>>>> =A0_getHonorCurrentComponentAttributes(context); >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 if (honorCurrentComponentAttributes =3D=3D Bo= olean.TRUE) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return (UIComponent) >>>>> =A0context.getAttributes().get(UIComponent.CURRENT_COMPONENT); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 else >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0LinkedList componentSta= ck =3D >>>>> =A0(LinkedList) >>>>> =A0context.getAttributes().get(UIComponent._COMPONENT_STACK); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if(componentStack =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0LinkedList componentSta= ck >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=3D (LinkedList) >>>>> =A0context.getAttributes().get(UIComponent._COMPONENT_STACK); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (componentStack =3D=3D null) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return null; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0@@ -435,16 +471,17 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @param context >>>>>>> =A0=A0=A0 =A0 =A0* @return >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @since 2.0 >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public static UIComponent >>>>> =A0getCurrentCompositeComponent(FacesContext context) { >>>>>>> =A0=A0- >>>>>>> =A0=A0+ =A0 =A0public static UIComponent >>>>> =A0getCurrentCompositeComponent(FacesContext context) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 Boolean honorCurrentComponentAttributes =3D >>>>> =A0_getHonorCurrentComponentAttributes(context); >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 if (honorCurrentComponentAttributes =3D=3D Bo= olean.TRUE) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return (UIComponent) >>>>> =A0context.getAttributes().get(UIComponent.CURRENT_COMPOSITE_COMPONEN= T); >>>>>>> =A0=A0@@ -459,15 +496,22 @@ public abstract class UIComponent imple= m >>>>>>> >>>>>>> =A0=A0=A0 =A0 public abstract String getId(); >>>>>>> >>>>>>> =A0=A0- =A0 =A0public List >>>>> =A0getListenersForEventClass(Class >>> eventClass) { >>>>>>> =A0=A0+ =A0 =A0public List >>>>> =A0getListenersForEventClass(Class >>> eventClass) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 List listeners; >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (_systemEventListenerClassMap =3D=3D null= ) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (_systemEventListenerClassMap =3D=3D null= ) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 listeners =3D Collections.emptyList()= ; >>>>>>> =A0=A0- =A0 =A0 =A0 =A0} else { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0} >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0else >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 listeners =3D >>> _systemEventListenerClassMap.get(eventClass); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if (listeners =3D=3D null) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (listeners =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 listeners =3D Collections.emp= tyList(); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0} else { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0} >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0else >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 listeners =3D >>> Collections.unmodifiableList(listeners); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0@@ -476,17 +520,20 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @return >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @since 2.0 >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public UIComponent getNamingContainer() { >>>>>>> =A0=A0+ =A0 =A0public UIComponent getNamingContainer() >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // Starting with "this", return the closest >>> component >>>>> =A0in the ancestry that is a NamingContainer >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // or null if none can be found. >>>>>>> =A0=A0=A0 =A0 =A0 =A0 UIComponent component =3D this; >>>>>>> =A0=A0- =A0 =A0 =A0 =A0do { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if (component instanceof NamingConta= iner) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0do >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (component instanceof NamingConta= iner) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return component; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0@@ -512,10 +559,11 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0* =A0 =A0 otherwise take no action >>>>>>> =A0=A0=A0 =A0 =A0*
    >>>>>>> =A0=A0=A0 =A0 =A0* @param isInView >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @since 2.0 >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public void setInView(boolean isInView) { >>>>>>> =A0=A0+ =A0 =A0public void setInView(boolean isInView) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 _inView =3D isInView; >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0@@ -539,48 +587,63 @@ public abstract class UIComponent imple= m >>>>>>> >>>>>>> =A0=A0=A0 =A0 public abstract boolean getRendersChildren(); >>>>>>> >>>>>>> =A0=A0- =A0 =A0public Map getResourceBundleMap() { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (_resourceBundleMap =3D=3D null) { >>>>>>> =A0=A0+ =A0 =A0public Map getResourceBundleMap() >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (_resourceBundleMap =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 FacesContext context =3D getFacesCont= ext(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 Locale locale =3D context.getViewRoot= ().getLocale(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 ClassLoader loader =3D >>> _ClassUtils.getContextClassLoader(); >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0try { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0try >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // looks for a ResourceBundle= with a base name >>> equal to >>>>> =A0the fully qualified class >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // name of the current UIComp= onent this and >>> Locale >>>>> =A0equal to the Locale of the current UIViewRoot. >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 _resourceBundleMap =3D new >>>>> =A0BundleMap(ResourceBundle.getBundle(getClass().getName(), locale, >>> loader)); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0} catch (MissingResourceException e)= { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0} >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0catch (MissingResourceException e) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // If no such bundle is found= , and the >>> component is a >>>>> =A0composite component >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (this._isCompositeCompone= nt()) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (this._isCompositeCompone= nt()) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // No need to check c= omponentResource (the >>> resource >>>>> =A0used to build the composite >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // component instance= ) to null since it is >>> already >>>>> =A0done on this._isCompositeComponent() >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Resource componentRes= ource =3D (Resource) >>>>> =A0getAttributes().get(Resource.COMPONENT_RESOURCE_KEY); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // Let resourceName b= e the resourceName of >>> the >>>>> =A0Resource for this composite component, >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // replacing the file= extension with >>>>> =A0".properties" >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 int extensionIndex = =3D >>>>> =A0componentResource.getResourceName().lastIndexOf('.'); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0String resourceName = =3D (extensionIndex >>> < 0 ? >>>>> =A0componentResource.getResourceName() : >>>>> =A0componentResource.getResourceName().substring(0, extensionIndex)) = + >>>>> =A0".properties"; >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0String resourceName = =3D (extensionIndex >>> < 0 >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0? >>> componentResource.getResourceName() >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0: >>>>> =A0componentResource.getResourceName().substring(0, extensionIndex)) = + >>>>> =A0".properties"; >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // Let libraryName be= the libraryName of >>> the the >>>>> =A0Resource for this composite component. >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // Call >>>>> =A0ResourceHandler.createResource(java.lang.String,java.lang.String), >>> passing the >>>>> =A0derived >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // resourceName and >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // libraryName. >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0Resource bundleResou= rce =3D >>>>> >>> context.getApplication().getResourceHandler().createResource(resourceNa= me, >>>>> =A0componentResource.getLibraryName()); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0Resource bundleResou= rce =3D >>>>> =A0context.getApplication().getResourceHandler() >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0.cre= ateResource(resourceName, >>>>> =A0componentResource.getLibraryName()); >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (bundleResource != =3D null) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (bundleResource != =3D null) >>>>>>> =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 =A0 // If the res= ultant Resource exists >>> and can be >>>>> =A0found, the InputStream for the resource >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // is used to= create a ResourceBundle. >>> If >>>>> =A0either of the two previous steps for obtaining the >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // ResourceBu= ndle >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // for this c= omponent is successful, >>> the >>>>> =A0ResourceBundle is wrapped in a Map and >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // returned. >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0try { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_res= ourceBundleMap =3D new >>> BundleMap(new >>>>> =A0PropertyResourceBundle(bundleResource.getInputStream())); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} catch (IOE= xception e1) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0try >>>>>>> =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 =A0 =A0 =A0 =A0 =A0_res= ourceBundleMap >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0=3D new BundleMap(new >>>>> =A0PropertyResourceBundle(bundleResource.getInputStream())); >>>>>>> =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 =A0 =A0 =A0catch (IOExc= eption e1) >>>>>>> =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 =A0 =A0 =A0 =A0 =A0 // No= thing happens, then >>> resourceBundleMap >>>>> =A0is set as empty map >>>>>>> =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 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // Otherwise Collections.EMPT= Y_MAP is >>> returned. >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (_resourceBundleMap =3D= =3D null) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (_resourceBundleMap =3D= =3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 _resourceBundleMap = =3D >>> Collections.emptyMap(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0@@ -594,26 +657,33 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0=A0 =A0 public abstract ValueBinding getValueBinding(String n= ame); >>>>>>> >>>>>>> =A0=A0- =A0 =A0public ValueExpression getValueExpression(String nam= e) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (name =3D=3D null) { >>>>>>> =A0=A0+ =A0 =A0public ValueExpression getValueExpression(String nam= e) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (name =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new NullPointerException("name = can not >>> be >>>>> =A0null"); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0- =A0 =A0 =A0 =A0Map bindings =3D >>> (Map) >>>>> =A0getStateHelper(). >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0get(PropertyKeys.bindings); >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (bindings =3D=3D null) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if (!(this instanceof UIComponentBas= e)) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0Map bindings =3D (Map>>>> =A0Object>) getStateHelper(). >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0get(PropertyKeys.bindings); >>>>>>> =A0=A0+ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (bindings =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (!(this instanceof UIComponentBas= e)) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // if the component does not = inherit from >>>>> =A0UIComponentBase and don't implements JSF 1.2 or later >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ValueBinding vb =3D getValueB= inding(name); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (vb !=3D null) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (vb !=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 //bindings =3D new Ha= shMap>>>> =A0ValueExpression>(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ValueExpression ve = =3D new >>>>> =A0_ValueBindingToValueExpression(vb); >>>>>>> =A0=A0- >>> =A0getStateHelper().put(PropertyKeys.bindings , name, >>>>> =A0=A0ve); >>>>>>> =A0=A0+ >>> =A0getStateHelper().put(PropertyKeys.bindings, name, >>>>> =A0ve); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return ve; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- =A0 =A0 =A0 =A0} else { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0} >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0else >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 //return bindings.get(name); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return (ValueExpression) bindings.get= (name); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0@@ -636,7 +706,7 @@ public abstract class UIComponent implem >>>>>>> >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* {@inheritDoc} >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @since 2.0 >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0=A0 =A0 public void clearInitialState() >>>>>>> =A0=A0@@ -652,8 +722,10 @@ public abstract class UIComponent implem >>>>>>> >>>>>>> =A0=A0=A0 =A0 public abstract void encodeEnd(FacesContext context) >>> throws >>>>> =A0IOException; >>>>>>> >>>>>>> =A0=A0- =A0 =A0public void encodeAll(FacesContext context) throws >>> IOException { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (context =3D=3D null) { >>>>>>> =A0=A0+ =A0 =A0public void encodeAll(FacesContext context) throws >>> IOException >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (context =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new NullPointerException(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0@@ -669,23 +741,27 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 popComponentFromEL(context); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 //if (isRendered()) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0this.encodeBegin(context); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0this.encodeBegin(context); >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0// rendering children >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if (this.getRendersChildren()) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0this.encodeChildren(context)= ; >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0} // let children render itself >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0else { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (this.getChildCount() > 0= ) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (int i =3D0; i < >>> this.getChildCount(); i++) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0UIComponent = comp =3D >>> this.getChildren().get(i); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0comp.encodeA= ll(context); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0// rendering children >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (this.getRendersChildren()) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0this.encodeChildren(context); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0} // let children render itself >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0else >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (this.getChildCount() > 0) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (int i =3D 0; i < this.g= etChildCount(); >>> i++) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0UIComponent comp =3D >>> this.getChildren().get(i); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0comp.encodeAll(conte= xt); >>>>>>> =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 =A0this.encodeEnd(context); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0} >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0this.encodeEnd(context); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 //} >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0@@ -701,16 +777,19 @@ public abstract class UIComponent imple= m >>>>>>> >>>>>>> =A0=A0=A0 =A0 public abstract void processDecodes(FacesContext cont= ext); >>>>>>> >>>>>>> =A0=A0- =A0 =A0public void processEvent(ComponentSystemEvent event) >>> throws >>>>> =A0AbortProcessingException { >>>>>>> =A0=A0+ =A0 =A0public void processEvent(ComponentSystemEvent event) >>> throws >>>>> =A0AbortProcessingException >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // The default implementation performs the fo= llowing >>> action. If >>>>> =A0the argument event is an instance of >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // AfterRestoreStateEvent, >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (event instanceof PostRestoreStateEvent) = { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (event instanceof PostRestoreStateEvent) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 // call this.getValueExpression(java.= lang.String) >>> passing >>>>> =A0the literal string "binding" >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 ValueExpression expression =3D >>>>> =A0getValueExpression("binding"); >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 // If the result is non-null, set the= value of the >>>>> =A0ValueExpression to be this. >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if (expression !=3D null) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (expression !=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> >>> expression.setValue(getFacesContext().getELContext(), >>>>> =A0this); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0@@ -722,7 +801,8 @@ public abstract class UIComponent implem >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 // and jsp restore state triggers, a = central point >>> is >>>>> =A0preferrble so we do it here >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 //TODO ask the EG the spec clearly co= ntradicts >>> blackbox RI >>>>> =A0behavior here >>>>>>> >>>>>>> =A0=A0- >>>>> =A0//getFacesContext().getApplication().publishEvent(getFacesContext(= ), >>>>> =A0PostRestoreStateEvent.class, UIComponent.class, this); >>>>>>> =A0=A0+ >>>>> =A0=A0//getFacesContext().getApplication().publishEvent(getFacesConte= xt(), >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0// PostRestoreStateEvent.class, >>> UIComponent.class, this); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0=A0 =A0 } >>>>>>> =A0=A0@@ -733,7 +813,9 @@ public abstract class UIComponent implem >>>>>>> >>>>>>> =A0=A0=A0 =A0 public abstract java.lang.Object >>> processSaveState(FacesContext >>>>> =A0context); >>>>>>> >>>>>>> =A0=A0- =A0 =A0public void subscribeToEvent(Class>> SystemEvent> >>>>> =A0eventClass, ComponentSystemEventListener componentListener) { >>>>>>> =A0=A0+ =A0 =A0public void subscribeToEvent(Class>> SystemEvent> >>>>> =A0eventClass, >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 ComponentSystemEventListener >>>>> =A0componentListener) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // The default implementation creates an inne= r >>>>> =A0SystemEventListener instance that wraps argument >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // componentListener as the listener argument= . >>>>>>> =A0=A0=A0 =A0 =A0 =A0 if (eventClass =3D=3D null) >>>>>>> =A0=A0@@ -744,17 +826,19 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new >>> NullPointerException("componentListener >>>>> =A0required"); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 SystemEventListener listener =3D new >>> EventListenerWrapper(this, >>>>> =A0componentListener); >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // Make sure the map exists >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (_systemEventListenerClassMap =3D=3D null= ) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (_systemEventListenerClassMap =3D=3D null= ) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 _systemEventListenerClassMap =3D new >>> HashMap>>>> =A0extends SystemEvent>, List>(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 List listeners =3D >>>>> =A0_systemEventListenerClassMap.get(eventClass); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // Make sure the list for class exists >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (listeners =3D=3D null) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (listeners =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 listeners =3D new >>> _DeltaList(new >>>>> =A0ArrayList(2)); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 _systemEventListenerClassMap.put(even= tClass, >>> listeners); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0@@ -764,13 +848,15 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0=A0 =A0 public void unsubscribeFromEvent(Class>> SystemEvent> >>>>> =A0eventClass, >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0ComponentSystemEventListener compone= ntListener) { >>>>>>> =A0=A0+ >>> ComponentSystemEventListener >>>>> =A0componentListener) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 /* >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0* When doing the comparison to determine i= f an >>> existing >>>>> =A0listener is equal to the argument componentListener >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0* (and thus must be removed), the equals()= method on >>> the >>>>> =A0existing listener must be invoked, passing the >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0* argument componentListener, rather than = the other >>> way >>>>> =A0around. >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0* >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 * -=3DSimon Lessard=3D- What is that suppos= ed to mean? >>> Are we >>>>> =A0supposed to keep an internal map of created listener wrappers? >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 * -=3DSimon Lessard=3D- What is that suppos= ed to mean? >>> Are we >>>>> =A0supposed to keep >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 * an internal map of created listener wrapp= ers? >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0* -=3D Leonardo Uribe=3D- Yes, it is suppo= sed a wrapper >>> should be >>>>> =A0used to hold listener references, to prevent >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0* serialize component instances on the sta= te. >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0*/ >>>>>>> =A0=A0@@ -786,12 +872,13 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0 =A0 if (_systemEventListenerClassMap !=3D null) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 List listeners = =3D >>>>> =A0_systemEventListenerClassMap.get(eventClass); >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 if (listeners !=3D null && >>> !listeners.isEmpty()) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (Iterator it =3D >>>>> =A0listeners.iterator(); it.hasNext();) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (Iterator it =3D >>>>> =A0listeners.iterator(); it.hasNext(); ) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ComponentSystemEvent= Listener listener =3D >>>>> =A0((EventListenerWrapper) it.next()).getComponentSystemEventListener= (); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ComponentSystemEvent= Listener listener >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=3D = ((EventListenerWrapper) >>>>> =A0it.next()).getComponentSystemEventListener(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (listener !=3D nul= l && >>>>> =A0listener.equals(componentListener)) >>>>>>> =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 =A0 it.remove(); >>>>>>> =A0=A0@@ -822,48 +909,59 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0* @param callback the callback to be performed >>>>>>> =A0=A0=A0 =A0 =A0* @return false if the processing is not done true= if we >>> can >>>>> =A0shortcut >>>>>>> =A0=A0=A0 =A0 =A0* the visiting because we are done with everything >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @since 2.0 >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public boolean visitTree(VisitContext context, >>> VisitCallback >>>>> =A0callback) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0try { >>>>>>> =A0=A0+ =A0 =A0public boolean visitTree(VisitContext context, >>> VisitCallback >>>>> =A0callback) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0try >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 pushComponentToEL(context.getFacesCon= text(), >>> this); >>>>>>> =A0=A0- >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if (!isVisitable(context)) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return false; >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0} >>>>>>> =A0=A0- >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0VisitResult res =3D >>> context.invokeVisitCallback(this, >>>>> =A0callback); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0switch (res) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0//we are done nothing has to be proc= essed anymore >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0case COMPLETE: >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return true; >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0case REJECT: >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (!isVisitable(context)) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return false; >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0} >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0//accept >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0default: >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (getFacetCount() > 0) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (UIComponent fac= et : >>> getFacets().values()) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (facet.vi= sitTree(context, >>> callback)) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0retu= rn true; >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0VisitResult res =3D >>> context.invokeVisitCallback(this, >>>>> =A0callback); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0switch (res) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0//we are done nothing has to= be processed >>> anymore >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case COMPLETE: >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return true; >>>>>>> =A0=A0+ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case REJECT: >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return false; >>>>>>> =A0=A0+ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0//accept >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0default: >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (getFacetCount() = > 0) >>>>>>> =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 =A0for (UICompo= nent facet : >>> getFacets().values()) >>>>>>> =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 =A0 =A0 =A0 =A0 =A0if (= facet.visitTree(context, >>> callback)) >>>>>>> =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 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0return true; >>>>>>> =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 =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 =A0 =A0} >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0int childCount =3D getChildC= ount(); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (childCount > 0) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (int i =3D0; i <= childCount; i++) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0UIComponent = child =3D >>> getChildren().get(i); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (child.vi= sitTree(context, >>> callback)) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0retu= rn true; >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0int childCount =3D g= etChildCount(); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (childCount > 0) >>>>>>> =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 =A0for (int i = =3D 0; i < childCount; >>> i++) >>>>>>> =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 =A0 =A0 =A0 =A0 =A0UICo= mponent child =3D >>> getChildren().get(i); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (= child.visitTree(context, >>> callback)) >>>>>>> =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 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0return true; >>>>>>> =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 =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 =A0 =A0} >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return false; >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return false; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- =A0 =A0 =A0 =A0finally { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0finally >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 //all components must call popCompone= ntFromEl >>> after >>>>> =A0visiting is finished >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 popComponentFromEL(context.getFacesCo= ntext()); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0@@ -881,14 +979,14 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0* (Note that rendererType is suspicious, in theory= this >>> field is >>>>>>> =A0=A0=A0 =A0 =A0* initialized on constructor, but on 1.1 and 1.2 i= s saved >>> and >>>>> =A0restored, >>>>>>> =A0=A0=A0 =A0 =A0* so to keep backward behavior we put it on StateH= elper ) >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* Also, facesListeners can't be wrapped on >>> StateHelper because >>>>> =A0it >>>>>>> =A0=A0=A0 =A0 =A0* needs to handle PartialStateHolder instances whe= n it is >>> saved >>>>> =A0and >>>>>>> =A0=A0=A0 =A0 =A0* restored and this interface does not implement >>>>> =A0PartialStateHolder, >>>>>>> =A0=A0=A0 =A0 =A0* so we can't propagate calls to markInitialState = and >>>>> =A0clearInitialState, >>>>>>> =A0=A0=A0 =A0 =A0* in other words, the List wrapped by StateHelper = does >>> not handle >>>>>>> =A0=A0=A0 =A0 =A0* PartialStateHolder items. >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* "bindings" map does not need to deal with >>>>> =A0PartialStateHolder instances, >>>>>>> =A0=A0=A0 =A0 =A0* =A0so we can use StateHelper feature (handle del= ta for >>> this map or >>>>> =A0in >>>>>>> =A0=A0=A0 =A0 =A0* =A0other words track add/removal from bindings m= ap as >>> delta). >>>>>>> =A0=A0@@ -902,7 +1000,8 @@ public abstract class UIComponent implem >>>>>>> =A0=A0=A0 =A0 =A0 =A0 facesListeners >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0protected StateHelper getStateHelper() { >>>>>>> =A0=A0+ =A0 =A0protected StateHelper getStateHelper() >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 return getStateHelper(true); >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0@@ -912,26 +1011,32 @@ public abstract class UIComponent >>> implem >>>>>>> =A0=A0=A0 =A0 =A0* @param create if true a state helper is created = if not >>> already >>>>> =A0existing >>>>>>> =A0=A0=A0 =A0 =A0* @return an implementation of the StateHelper int= erface >>> or null >>>>> =A0if none exists and create is set to false >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0protected StateHelper getStateHelper(boolean create)= { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if(_stateHelper !=3D null) { >>>>>>> =A0=A0+ =A0 =A0protected StateHelper getStateHelper(boolean create) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (_stateHelper !=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return _stateHelper; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if(create) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (create) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 _stateHelper =3D new _DeltaStateHelpe= r(this); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 return _stateHelper; >>>>>>> =A0=A0=A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 public final TransientStateHelper >>> getTransientStateHelper() >>>>>>> =A0=A0=A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 return getTransientStateHelper(true); >>>>>>> =A0=A0=A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0- =A0 =A0public TransientStateHelper >>> getTransientStateHelper(boolean >>>>> =A0create) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if(_stateHelper !=3D null) { >>>>>>> =A0=A0+ >>>>>>> =A0=A0+ =A0 =A0public TransientStateHelper >>> getTransientStateHelper(boolean >>>>> =A0create) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (_stateHelper !=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return _stateHelper; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if(create) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (create) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 _stateHelper =3D new _DeltaStateHelpe= r(this); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 return _stateHelper; >>>>>>> =A0=A0@@ -948,22 +1053,24 @@ public abstract class UIComponent >>> implem >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0=A0 =A0 @SuppressWarnings("unchecked") >>>>>>> =A0=A0- =A0 =A0public final void popComponentFromEL(FacesContext >>> context) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0Map contextAttributes =3D >>>>> =A0context.getAttributes(); >>>>>>> =A0=A0- >>>>>>> =A0=A0+ =A0 =A0public final void popComponentFromEL(FacesContext >>> context) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0Map contextAttributes =3D >>>>> =A0context.getAttributes(); >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 if (_honorCurrentComponentAttributes =3D=3D n= ull) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 _honorCurrentComponentAttributes =3D >>>>> =A0_getHonorCurrentComponentAttributes(context); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 if (_honorCurrentComponentAttributes =3D=3D B= oolean.TRUE) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 // Pop the current UIComponent from t= he >>> FacesContext >>>>> =A0attributes map so that the previous >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 // UIComponent, if any, becomes the c= urrent >>> component. >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0LinkedList componentSta= ck =3D >>>>> =A0(LinkedList) >>>>> =A0contextAttributes.get(UIComponent._COMPONENT_STACK); >>>>>>> =A0=A0- >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0UIComponent oldCurrent =3D >>>>> =A0(UIComponent)contextAttributes.get(UIComponent.CURRENT_COMPONENT); >>>>>>> =A0=A0- >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0LinkedList componentSta= ck >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=3D (LinkedList) >>>>> =A0contextAttributes.get(UIComponent._COMPONENT_STACK); >>>>>>> =A0=A0+ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0UIComponent oldCurrent =3D (UICompon= ent) >>>>> =A0contextAttributes.get(UIComponent.CURRENT_COMPONENT); >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 UIComponent newCurrent =3D null; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 if (componentStack !=3D null && >>>>> =A0!componentStack.isEmpty()) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0@@ -973,7 +1080,7 @@ public abstract class UIComponent implem >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 int componentIndex = =3D >>> componentStack.indexOf(this); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (componentIndex >= =3D 0) >>>>>>> =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 =A0for (int i = =3D 0; i < >>> (componentIndex+1); >>>>> =A0i++) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (int i = =3D 0; i < >>> (componentIndex + 1); >>>>> =A0i++) >>>>>>> =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 =A0 =A0 =A0 =A0 =A0 newCu= rrent =3D >>> componentStack.removeFirst(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0@@ -994,8 +1101,8 @@ public abstract class UIComponent implem >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 //Reset the current composite= component >>>>>>> >>>>> =A0contextAttributes.put(UIComponent.CURRENT_COMPOSITE_COMPONENT, nul= l); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0oldCurrent =3D >>>>> =A0(UIComponent)contextAttributes.put(UIComponent.CURRENT_COMPONENT, >>> newCurrent); >>>>>>> =A0=A0- >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0oldCurrent =3D (UIComponent) >>>>> =A0contextAttributes.put(UIComponent.CURRENT_COMPONENT, newCurrent); >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 if (oldCurrent !=3D null && >>>>> =A0oldCurrent._isCompositeComponent()) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // Recalculate the current co= mposite component >>>>>>> =A0=A0@@ -1008,7 +1115,7 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 else >>>>>>> =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 =A0 UIComponent p= reviousCompositeComponent >>> =3D null; >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (Iterato= r it =3D >>>>> =A0componentStack.iterator(); it.hasNext();) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (Iterato= r it =3D >>>>> =A0componentStack.iterator(); it.hasNext(); ) >>>>>>> =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 =A0 =A0 =A0 =A0 =A0 UICom= ponent component =3D it.next(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if >>> (component._isCompositeComponent()) >>>>>>> =A0=A0@@ -1026,15 +1133,16 @@ public abstract class UIComponent >>> implem >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 // Pop the current UIComponent from t= he >>> FacesContext >>>>> =A0attributes map so that the previous >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 // UIComponent, if any, becomes the c= urrent >>> component. >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0LinkedList componentSta= ck =3D >>>>> =A0(LinkedList) >>>>> =A0contextAttributes.get(UIComponent._COMPONENT_STACK); >>>>>>> =A0=A0- >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0LinkedList componentSta= ck >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=3D (LinkedList) >>>>> =A0contextAttributes.get(UIComponent._COMPONENT_STACK); >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 UIComponent oldCurrent =3D null; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 if (componentStack !=3D null && >>>>> =A0!componentStack.isEmpty()) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 int componentIndex =3D >>> componentStack.indexOf(this); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (componentIndex >=3D 0) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (int i =3D 0; i = < >>> (componentIndex+1); i++) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (int i =3D 0; i = < (componentIndex + >>> 1); i++) >>>>>>> =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 =A0 oldCurrent = =3D >>> componentStack.removeFirst(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0@@ -1044,12 +1152,12 @@ public abstract class UIComponent >>> implem >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return; >>>>>>> =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 =A0 =A0 =A0 =A0 =A0 if (oldCurrent !=3D null && >>>>> =A0oldCurrent._isCompositeComponent()) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // Recalculate the current co= mposite component >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 UIComponent previousComposite= Component =3D null; >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (Iterator i= t =3D >>>>> =A0componentStack.iterator(); it.hasNext();) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (Iterator i= t =3D >>>>> =A0componentStack.iterator(); it.hasNext(); ) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 UIComponent component= =3D it.next(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (component._isComp= ositeComponent()) >>>>>>> =A0=A0@@ -1064,40 +1172,42 @@ public abstract class UIComponent >>> implem >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0=A0 =A0 @SuppressWarnings("unchecked") >>>>>>> =A0=A0- =A0 =A0public final void pushComponentToEL(FacesContext con= text, >>>>> =A0UIComponent component) { >>>>>>> =A0=A0+ =A0 =A0public final void pushComponentToEL(FacesContext con= text, >>>>> =A0UIComponent component) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 if (component =3D=3D null) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 component =3D this; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 Map contextAttributes =3D >>>>> =A0context.getAttributes(); >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 if (_honorCurrentComponentAttributes =3D=3D n= ull) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 _honorCurrentComponentAttributes =3D >>>>> =A0_getHonorCurrentComponentAttributes(context); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 if (_honorCurrentComponentAttributes =3D=3D B= oolean.TRUE) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 UIComponent currentComponent =3D (UIC= omponent) >>>>> =A0contextAttributes.get(UIComponent.CURRENT_COMPONENT); >>>>>>> =A0=A0- >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if(currentComponent !=3D null) >>>>>>> =A0=A0+ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (currentComponent !=3D null) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0LinkedList comp= onentStack >>> =3D >>>>> =A0(LinkedList) >>>>> =A0contextAttributes.get(UIComponent._COMPONENT_STACK); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if(componentStack =3D=3D nul= l) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0LinkedList comp= onentStack >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=3D (LinkedL= ist) >>>>> =A0contextAttributes.get(UIComponent._COMPONENT_STACK); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (componentStack =3D=3D nu= ll) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 componentStack =3D ne= w >>>>> =A0LinkedList(); >>>>>>> >>> contextAttributes.put(UIComponent._COMPONENT_STACK, >>>>> =A0componentStack); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 componentStack.addFirst(curre= ntComponent); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 // Push the current UIComponent this = to the >>> FacesContext >>>>> =A0=A0attribute map using the key CURRENT_COMPONENT >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 // saving the previous UIComponent as= sociated with >>>>> =A0CURRENT_COMPONENT for a subsequent call to >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 // >>> popComponentFromEL(javax.faces.context.FacesContext). >>>>>>> >>> contextAttributes.put(UIComponent.CURRENT_COMPONENT, >>>>> =A0component); >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 if (component._isCompositeComponent()= ) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> >>>>> =A0contextAttributes.put(UIComponent.CURRENT_COMPOSITE_COMPONENT, >>> component); >>>>>>> =A0=A0@@ -1105,8 +1215,9 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 else >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0LinkedList componentSta= ck =3D >>>>> =A0(LinkedList) >>>>> =A0contextAttributes.get(UIComponent._COMPONENT_STACK); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if(componentStack =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0LinkedList componentSta= ck >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=3D (LinkedList) >>>>> =A0contextAttributes.get(UIComponent._COMPONENT_STACK); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (componentStack =3D=3D null) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 componentStack =3D new >>> LinkedList(); >>>>>>> >>> contextAttributes.put(UIComponent._COMPONENT_STACK, >>>>> =A0componentStack); >>>>>>> =A0=A0@@ -1122,25 +1233,28 @@ public abstract class UIComponent >>> implem >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* @since 1.2 >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public int getFacetCount() { >>>>>>> =A0=A0+ =A0 =A0public int getFacetCount() >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // not sure why the RI has this method in bot= h >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // UIComponent and UIComponentBase >>>>>>> =A0=A0=A0 =A0 =A0 =A0 Map facets =3D getFacets= (); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 return facets =3D=3D null ? 0 : facets.size()= ; >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0private boolean _isCompositeComponent() { >>>>>>> =A0=A0+ =A0 =A0private boolean _isCompositeComponent() >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 //moved to the static method >>>>>>> =A0=A0=A0 =A0 =A0 =A0 return UIComponent.isCompositeComponent(this)= ; >>>>>>> =A0=A0=A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* Gets value of >>>>> =A0"javax.faces.HONOR_CURRENT_COMPONENT_ATTRIBUTES" parameter >>> cached in >>>>> =A0facesContext.attributes >>>>>>> =A0=A0=A0 =A0 =A0* or resolves that param and caches its value in >>>>> =A0facesContext.attributes. >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0* @return canonical Boolean value for parameter >>>>> =A0"javax.faces.HONOR_CURRENT_COMPONENT_ATTRIBUTES" >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0private static Boolean >>>>> =A0_getHonorCurrentComponentAttributes(FacesContext facesContext) { >>>>>>> =A0=A0+ =A0 =A0private static Boolean >>>>> =A0_getHonorCurrentComponentAttributes(FacesContext facesContext) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // performance note: we cache value in >>> facesContext.attributes >>>>> =A0because >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // 1) methods pushComponentToEL, popComponent= FromEl, >>>>> =A0getCurrentComponent a getCurrentCompositeComponent >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // can use that value >>>>>>> =A0=A0@@ -1149,49 +1263,65 @@ public abstract class UIComponent >>> implem >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // implementation and performance >>>>>>> =A0=A0=A0 =A0 =A0 =A0 Map attributes =3D >>>>> =A0facesContext.getAttributes(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 Boolean paramValue =3D (Boolean) >>>>> =A0attributes.get(HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (paramValue =3D=3D null) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0String param =3D >>>>> >>> facesContext.getExternalContext().getInitParameter(HONOR_CURRENT_COMPON= ENT_ATTRIBUTES_PARAM_NAME); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (paramValue =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0String param >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=3D >>>>> >>> facesContext.getExternalContext().getInitParameter(HONOR_CURRENT_COMPON= ENT_ATTRIBUTES_PARAM_NAME); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 paramValue =3D Boolean.valueOf((param= !=3D null >>> && >>>>> =A0Boolean.valueOf(param).booleanValue())); >>>>>>> >>>>> =A0attributes.put(HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME, >>> paramValue); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 return paramValue; >>>>>>> =A0=A0=A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0- =A0 =A0private static class BundleMap implements Map>>>> =A0String> { >>>>>>> =A0=A0+ >>>>>>> =A0=A0+ =A0 =A0private static class BundleMap implements Map>>>> =A0String> >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 private ResourceBundle _bundle; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 private List _values; >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0public BundleMap(ResourceBundle bundle) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0public BundleMap(ResourceBundle bundle) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 _bundle =3D bundle; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // Optimized methods >>>>>>> =A0=A0- =A0 =A0 =A0 =A0public String get(Object key) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0try { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0public String get(Object key) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0try >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return (String) >>> _bundle.getObject(key.toString()); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0} catch (Exception e) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0} >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0catch (Exception e) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return "???" + key + >>> "???"; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0public boolean isEmpty() { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0public boolean isEmpty() >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return !_bundle.getKeys().hasMoreElem= ents(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0public boolean containsKey(Object key) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0try { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0public boolean containsKey(Object key) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0try >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return _bundle.getObject(key.= toString()) !=3D >>> null; >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0} catch (MissingResourceException e)= { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0} >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0catch (MissingResourceException e) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return false; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // Unoptimized methods >>>>>>> =A0=A0- =A0 =A0 =A0 =A0public Collection values() { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if (_values =3D=3D null) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0public Collection values() >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (_values =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 _values =3D new ArrayList(); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (Enumeration enu= mer =3D >>>>> =A0_bundle.getKeys(); enumer.hasMoreElements();) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0for (Enumeration enu= mer =3D >>>>> =A0_bundle.getKeys(); enumer.hasMoreElements(); ) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 String v =3D >>> _bundle.getString(enumer.nextElement()); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 _values.add(v); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0@@ -1199,29 +1329,37 @@ public abstract class UIComponent >>> implem >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return _values; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0public int size() { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0public int size() >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return values().size(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0public boolean containsValue(Object value) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0public boolean containsValue(Object value) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return values().contains(value); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0public Set> >>> entrySet() { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0public Set> >>> entrySet() >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 Set> set =3D ne= w >>>>> =A0HashSet>(); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0for (Enumeration enumer =3D >>> _bundle.getKeys(); >>>>> =A0enumer.hasMoreElements();) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0for (Enumeration enumer =3D >>> _bundle.getKeys(); >>>>> =A0enumer.hasMoreElements(); ) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 final String k =3D enumer.nex= tElement(); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0set.add(new Map.Entry() >>> { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0set.add(new Map.Entry() >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0public String getKey= () { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0public String getKey= () >>>>>>> =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 =A0 return k; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0public String getVal= ue() { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0public String getVal= ue() >>>>>>> =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 =A0 return (Strin= g) _bundle.getObject(k); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0public String setVal= ue(String value) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0public String setVal= ue(String value) >>>>>>> =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 =A0 throw new >>> UnsupportedOperationException(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }); >>>>>>> =A0=A0@@ -1230,37 +1368,44 @@ public abstract class UIComponent >>> implem >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return set; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0public Set keySet() { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0public Set keySet() >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 Set set =3D new >>> HashSet(); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0for (Enumeration enumer =3D >>> _bundle.getKeys(); >>>>> =A0enumer.hasMoreElements();) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0for (Enumeration enumer =3D >>> _bundle.getKeys(); >>>>> =A0enumer.hasMoreElements(); ) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 set.add(enumer.nextElement())= ; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return set; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // Unsupported methods >>>>>>> =A0=A0- =A0 =A0 =A0 =A0public String remove(Object key) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0public String remove(Object key) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new UnsupportedOperationExcepti= on(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0public void putAll(Map>>>> =A0String> t) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0public void putAll(Map>>>> =A0String> t) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new UnsupportedOperationExcepti= on(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0public String put(String key, String value) = { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0public String put(String key, String value) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new UnsupportedOperationExcepti= on(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0public void clear() { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0public void clear() >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new UnsupportedOperationExcepti= on(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0static class EventListenerWrapper implements >>> SystemEventListener, >>>>> =A0PartialStateHolder { >>>>>>> =A0=A0+ =A0 =A0static class EventListenerWrapper implements >>> SystemEventListener, >>>>> =A0PartialStateHolder >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 private Class componentClass; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 private ComponentSystemEventListener listener= ; >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 private boolean _initialStateMarked; >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 private int listenerCapability; >>>>>>> =A0=A0@@ -1270,16 +1415,16 @@ public abstract class UIComponent >>> implem >>>>>>> =A0=A0=A0 =A0 =A0 =A0 private static final int LISTENER_TYPE_COMPON= ENT =3D 4; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 private static final int LISTENER_TYPE_RENDER= ER =3D 8; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 private static final int LISTENER_TYPE_OTHER = =3D 16; >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 public EventListenerWrapper() >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 //need a no-arg constructor for state= saving >>> purposes >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 super(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0* Note we have two cases: >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0* 1. listener is an instance of UIComponen= t. In this >>> case we >>>>> =A0cannot save and restore >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0* =A0 =A0it because we need to point to th= e real >>> component, but we >>>>> =A0can assume the instance >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0* =A0 =A0is the same because UIComponent.s= ubscribeToEvent >>> says so. >>>>> =A0Also take into account >>>>>>> =A0=A0@@ -1289,11 +1434,12 @@ public abstract class UIComponent >>> implem >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0* 3. listener is an instance of >>> ComponentSystemEventListener >>>>> =A0but not from UIComponent. >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0* =A0 =A0In this case, the instance could = implement >>> StateHolder, >>>>> =A0PartialStateHolder or do >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0* =A0 =A0implement anything, so we have to= deal with that >>> case as >>>>> =A0usual. >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0* @param component >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0* @param listener >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0 =A0 =A0public EventListenerWrapper(UIComponent comp= onent, >>>>> =A0ComponentSystemEventListener listener) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0public EventListenerWrapper(UIComponent comp= onent, >>>>> =A0ComponentSystemEventListener listener) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 assert component !=3D null; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 assert listener !=3D null; >>>>>>> >>>>>>> =A0=A0@@ -1302,7 +1448,7 @@ public abstract class UIComponent imple= m >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 initListenerCapability(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 private void initListenerCapability() >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 this.listenerCapability =3D 0; >>>>>>> =A0=A0@@ -1318,7 +1464,7 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (this.listener instanceof >>> PartialStateHolder) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0this.listenerCapabil= ity =3D >>> LISTENER_TYPE_OTHER | >>>>> =A0LISTENER_SAVE_PARTIAL_STATE_HOLDER; >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0this.listenerCapabil= ity =3D >>> LISTENER_TYPE_OTHER | >>>>> =A0LISTENER_SAVE_PARTIAL_STATE_HOLDER; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 else if (this.listener instan= ceof StateHolder) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0@@ -1332,7 +1478,8 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 @Override >>>>>>> =A0=A0- =A0 =A0 =A0 =A0public boolean equals(Object o) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0public boolean equals(Object o) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 if (o =3D=3D this) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return true; >>>>>>> =A0=A0@@ -1341,13 +1488,16 @@ public abstract class UIComponent >>> implem >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 EventListenerWrapper other = =3D >>> (EventListenerWrapper) o; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return >>> componentClass.equals(other.componentClass) >>>>> =A0&& listener.equals(other.listener); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0} else { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0} >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0else >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return false; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 @Override >>>>>>> =A0=A0- =A0 =A0 =A0 =A0public int hashCode() { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0public int hashCode() >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return componentClass.hashCode() + >>> listener.hashCode(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0@@ -1358,7 +1508,7 @@ public abstract class UIComponent imple= m >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return >>> source.getClass().isAssignableFrom(componentClass); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 public ComponentSystemEventListener >>>>> =A0getComponentSystemEventListener() >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return listener; >>>>>>> =A0=A0@@ -1377,9 +1527,9 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0 =A0 public void clearInitialState() >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 //if (!(listener instanceof UICompone= nt) >>> && >>>>> =A0listener instanceof PartialStateHolder) >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if ( (listenerCapability & >>>>> =A0LISTENER_SAVE_PARTIAL_STATE_HOLDER) !=3D 0) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCapability & >>>>> =A0LISTENER_SAVE_PARTIAL_STATE_HOLDER) !=3D 0) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- >>> =A0((PartialStateHolder)listener).clearInitialState(); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0((PartialStateHolder) >>> listener).clearInitialState(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 _initialStateMarked =3D false; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0@@ -1387,9 +1537,9 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0 =A0 public boolean initialStateMarked() >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 //if (!(listener instanceof UICompone= nt) >>> && >>>>> =A0listener instanceof PartialStateHolder) >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if ( (listenerCapability & >>>>> =A0LISTENER_SAVE_PARTIAL_STATE_HOLDER) !=3D 0) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCapability & >>>>> =A0LISTENER_SAVE_PARTIAL_STATE_HOLDER) !=3D 0) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return >>>>> =A0((PartialStateHolder)listener).initialStateMarked(); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return ((PartialStateHolder) >>>>> =A0listener).initialStateMarked(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 //return false; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return _initialStateMarked; >>>>>>> =A0=A0@@ -1398,9 +1548,9 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0 =A0 public void markInitialState() >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 //if (!(listener instanceof UICompone= nt) >>> && >>>>> =A0listener instanceof PartialStateHolder) >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if ( (listenerCapability & >>>>> =A0LISTENER_SAVE_PARTIAL_STATE_HOLDER) !=3D 0) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCapability & >>>>> =A0LISTENER_SAVE_PARTIAL_STATE_HOLDER) !=3D 0) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- >>> =A0((PartialStateHolder)listener).markInitialState(); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0((PartialStateHolder) >>> listener).markInitialState(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 _initialStateMarked =3D true; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0@@ -1408,11 +1558,11 @@ public abstract class UIComponent >>> implem >>>>>>> =A0=A0=A0 =A0 =A0 =A0 public boolean isTransient() >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 //if ( listener instanceof StateHolde= r) >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCapability & >>>>> =A0LISTENER_SAVE_PARTIAL_STATE_HOLDER) !=3D 0 || >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(listenerCapability & >>> LISTENER_SAVE_STATE_HOLDER) >>>>> =A0!=3D 0 ) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCapability & >>>>> =A0LISTENER_SAVE_PARTIAL_STATE_HOLDER) !=3D 0 || >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(listenerCapability = & >>>>> =A0LISTENER_SAVE_STATE_HOLDER) !=3D 0) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return ((StateHolder)listene= r).isTransient(); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0} >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return ((StateHolder) >>> listener).isTransient(); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0} >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return false; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0@@ -1426,24 +1576,27 @@ public abstract class UIComponent >>> implem >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 componentClass =3D (Class) values[0]; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 if (values[1] instanceof _AttachedDel= taWrapper) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0((StateHolder)listener).rest= oreState(context, >>>>> =A0((_AttachedDeltaWrapper)values[1]).getWrappedStateObject()); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0((StateHolder) >>> listener).restoreState(context, >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0((_AttachedD= eltaWrapper) >>>>> =A0values[1]).getWrappedStateObject()); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 else >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 //Full restore >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 listenerCapability =3D (Integ= er) values[2]; >>>>>>> =A0=A0- >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if ( (listenerCapability & >>>>> =A0LISTENER_TYPE_COMPONENT) !=3D 0 ) >>>>>>> =A0=A0+ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCapability & >>> LISTENER_TYPE_COMPONENT) >>>>> =A0!=3D 0) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 listener =3D >>>>> =A0UIComponent.getCurrentComponent(context); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0else if ( (listenerCapabilit= y & >>>>> =A0LISTENER_TYPE_RENDERER) !=3D 0) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0else if ((listenerCapability= & >>>>> =A0LISTENER_TYPE_RENDERER) !=3D 0) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0listener =3D (Compon= entSystemEventListener) >>>>> =A0UIComponent.getCurrentComponent(context).getRenderer(context); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0listener =3D (Compon= entSystemEventListener) >>>>>>> =A0=A0+ >>>>> =A0=A0UIComponent.getCurrentComponent(context).getRenderer(context); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 else >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0listener =3D (Compon= entSystemEventListener) >>>>> =A0UIComponentBase.restoreAttachedState(context, values[1]); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0listener =3D (Compon= entSystemEventListener) >>>>>>> =A0=A0+ >>>>> =A0=A0UIComponentBase.restoreAttachedState(context, values[1]); >>>>>>> =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 =A0 =A0 =A0 =A0 =A0 listener =3D values[1] =3D=3D= null ? >>>>>>> =A0=A0@@ -1469,8 +1622,8 @@ public abstract class UIComponent imple= m >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Object[] state =3D new Object= [3]; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 state[0] =3D componentClass; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 //If this is not a component = or a renderer, >>> save it >>>>> =A0calling UIComponent.saveAttachedState >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (!( (listenerCapability & >>>>> =A0LISTENER_TYPE_COMPONENT) !=3D 0 || >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (listenerCapabi= lity & >>>>> =A0LISTENER_TYPE_RENDERER) !=3D 0 =A0 =A0) ) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (!((listenerCapability & >>>>> =A0LISTENER_TYPE_COMPONENT) !=3D 0 || >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(listenerCap= ability & >>>>> =A0LISTENER_TYPE_RENDERER) !=3D 0)) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 state[1] =3D >>>>> =A0UIComponentBase.saveAttachedState(context, listener); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0@@ -1485,25 +1638,26 @@ public abstract class UIComponent >>> implem >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // If initialStateMarked() = =3D=3D true means two >>> things: >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // 1. PSS is being used >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if ( (listenerCapability & >>>>> =A0LISTENER_TYPE_COMPONENT) !=3D 0) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCapability & >>> LISTENER_TYPE_COMPONENT) >>>>> =A0!=3D 0) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return null; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0else if ( (listenerCapabilit= y & >>>>> =A0LISTENER_TYPE_RENDERER) !=3D 0) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0else if ((listenerCapability= & >>>>> =A0LISTENER_TYPE_RENDERER) !=3D 0) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return null; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 else >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if ( (listenerCapabi= lity & >>>>> =A0LISTENER_SAVE_STATE_HOLDER) !=3D 0 || >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (listenerCa= pability & >>>>> =A0LISTENER_SAVE_PARTIAL_STATE_HOLDER) !=3D 0) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCapabil= ity & >>>>> =A0LISTENER_SAVE_STATE_HOLDER) !=3D 0 || >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(lis= tenerCapability & >>>>> =A0LISTENER_SAVE_PARTIAL_STATE_HOLDER) !=3D 0) >>>>>>> =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 =A0 Object listen= erSaved =3D ((StateHolder) >>>>> =A0listener).saveState(context); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (listenerS= aved =3D=3D null) >>>>>>> =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 =A0 =A0 =A0 =A0 =A0 retur= n null; >>>>>>> =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 =A0 =A0 =A0return new O= bject[]{componentClass, >>> new >>>>> =A0_AttachedDeltaWrapper(listener.getClass(), listenerSaved)}; >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return new O= bject[]{componentClass, >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0new >>>>> =A0_AttachedDeltaWrapper(listener.getClass(), listenerSaved)}; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 else >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0@@ -1524,11 +1678,11 @@ public abstract class UIComponent >>> implem >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 public void setTransient(boolean newTransient= Value) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCapability & >>>>> =A0LISTENER_SAVE_PARTIAL_STATE_HOLDER) !=3D 0 || >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(listenerCapability = & >>>>> =A0LISTENER_SAVE_STATE_HOLDER) !=3D 0 ) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if ((listenerCapability & >>>>> =A0LISTENER_SAVE_PARTIAL_STATE_HOLDER) !=3D 0 || >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(listenerCapability = & >>>>> =A0LISTENER_SAVE_STATE_HOLDER) !=3D 0) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- >>>>> =A0=A0((StateHolder)listener).setTransient(newTransientValue); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0} >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0((StateHolder) >>>>> =A0listener).setTransient(newTransientValue); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0} >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 } >>>>>>> =A0=A0=A0} >>>>>>> >>>>>>> =A0=A0Modified: >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentB= ase.java >>>>>>> =A0=A0URL: >>>>> >>> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax= /faces/component/UIComponentBase.java?rev=3D1188267&r1=3D1188266&r2=3D11882= 67&view=3Ddiff >>>>>>> >>>>> >>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D >>>>>>> =A0=A0--- >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentB= ase.java >>>>> =A0(original) >>>>>>> =A0=A0+++ >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentB= ase.java >>>>> =A0Mon Oct 24 18:09:08 2011 >>>>>>> =A0=A0@@ -590,7 +590,7 @@ public abstract class UIComponentBase ex >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return null; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0final char separatorChar =3D >>>>> =A0UINamingContainer.getSeparatorChar(getFacesContext()); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0char separatorChar =3D >>>>> =A0UINamingContainer.getSeparatorChar(getFacesContext()); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 UIComponent findBase; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 if (expr.charAt(0) =3D=3D separatorChar) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> >>>>>>> =A0=A0Modified: >>>>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.= java >>>>>>> =A0=A0URL: >>>>> >>> 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 >>>>>>> >>>>> >>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D >>>>>>> =A0=A0--- >>>>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.= java >>>>> =A0(original) >>>>>>> =A0=A0+++ >>>>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.= java >>> Mon Oct >>>>> =A024 18:09:08 2011 >>>>>>> =A0=A0@@ -316,7 +316,7 @@ public class UIData extends UIComponentB >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new NullPointerException(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0 =A0 =A0final String baseClientId =3D getClientId(co= ntext); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0String baseClientId =3D getClientId(context)= ; >>>>>>> >>>>>>> =A0=A0=A0 =A0 =A0 =A0 // searching for this component? >>>>>>> =A0=A0=A0 =A0 =A0 =A0 boolean returnValue =3D baseClientId.equals(c= lientId); >>>>>>> =A0=A0@@ -1565,7 +1565,7 @@ public class UIData extends UIComponent= B >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 FacesEvent originalEvent =3D ((FacesE= ventWrapper) >>>>> =A0event).getWrappedFacesEvent(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 int eventRowIndex =3D ((FacesEventWra= pper) >>>>> =A0event).getRowIndex(); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0final int currentRowIndex =3D getRow= Index(); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0int currentRowIndex =3D getRowIndex(= ); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 UIComponent source =3D originalEvent.= getComponent(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 UIComponent compositeParent =3D >>>>> =A0UIComponent.getCompositeComponentParent(source); >>>>>>> >>>>>>> >>>>>>> =A0=A0Modified: >>>>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/UIInput= .java >>>>>>> =A0=A0URL: >>>>> >>> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax= /faces/component/UIInput.java?rev=3D1188267&r1=3D1188266&r2=3D1188267&view= =3Ddiff >>>>>>> >>>>> >>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D >>>>>>> =A0=A0--- >>>>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/UIInput= .java >>>>> =A0(original) >>>>>>> =A0=A0+++ >>>>> =A0myfaces/core/trunk/api/src/main/java/javax/faces/component/UIInput= .java >>> Mon Oct >>>>> =A024 18:09:08 2011 >>>>>>> =A0=A0@@ -1065,7 +1065,7 @@ public class UIInput extends UIOutput i= m >>>>>>> =A0=A0=A0 =A0 @SuppressWarnings("unchecked") >>>>>>> =A0=A0=A0 =A0 private Map> >>> _getDebugInfoMap() >>>>>>> =A0=A0=A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0final Map requestMap =3D >>> getFacesContext() >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0Map requestMap =3D >>> getFacesContext() >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 .getExternalContext().getRequ= estMap(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 Map> debugInfo =3D >>>>> =A0(Map>) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 requestMap.get(DEBUG_INFO_KEY= + >>> getClientId()); >>>>>>> >>>>>>> =A0=A0Modified: >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UISelectMany= .java >>>>>>> =A0=A0URL: >>>>> >>> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax= /faces/component/UISelectMany.java?rev=3D1188267&r1=3D1188266&r2=3D1188267&= view=3Ddiff >>>>>>> >>>>> >>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D >>>>>>> =A0=A0--- >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UISelectMany= .java >>>>> =A0(original) >>>>>>> =A0=A0+++ >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UISelectMany= .java Mon >>>>> =A0Oct 24 18:09:08 2011 >>>>>>> =A0=A0@@ -419,7 +419,7 @@ public class UISelectMany extends UIInpu >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 else >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0Class valueClass = =3D >>>>> =A0convertedValue.getClass(); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0Class valueClass =3D >>> convertedValue.getClass(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 if (valueClass.isArray()) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return new >>> _PrimitiveArrayIterator(convertedValue); >>>>>>> >>>>>>> =A0=A0Modified: >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_ComponentAt= tributesMap.java >>>>>>> =A0=A0URL: >>>>> >>> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax= /faces/component/_ComponentAttributesMap.java?rev=3D1188267&r1=3D1188266&r2= =3D1188267&view=3Ddiff >>>>>>> >>>>> >>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D >>>>>>> =A0=A0--- >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_ComponentAt= tributesMap.java >>>>> =A0(original) >>>>>>> =A0=A0+++ >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_ComponentAt= tributesMap.java >>>>> =A0Mon Oct 24 18:09:08 2011 >>>>>>> =A0=A0@@ -210,9 +210,9 @@ class _ComponentAttributesMap implements >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* Call put(key, value) for each entry in the provi= ded >>> map. >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public void putAll(Map>> Object> >>>>> =A0t) >>>>>>> =A0=A0+ =A0 =A0public void putAll(Map t) >>>>>>> =A0=A0=A0 =A0 { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0for (Map.Entry>> Object> entry >>>>> =A0: t.entrySet()) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0for (Map.Entry entry : >>>>> =A0t.entrySet()) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 put(entry.getKey(), entry.getValue())= ; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> >>>>>>> =A0=A0Modified: >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_LocaleUtils= .java >>>>>>> =A0=A0URL: >>>>> >>> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax= /faces/component/_LocaleUtils.java?rev=3D1188267&r1=3D1188266&r2=3D1188267&= view=3Ddiff >>>>>>> >>>>> >>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D >>>>>>> =A0=A0--- >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_LocaleUtils= .java >>>>> =A0(original) >>>>>>> =A0=A0+++ >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_LocaleUtils= .java Mon >>>>> =A0Oct 24 18:09:08 2011 >>>>>>> =A0=A0@@ -34,21 +34,22 @@ import java.util.concurrent.ConcurrentMa >>>>>>> =A0=A0=A0*

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

    >>>>>>> =A0=A0- * >>>>>>> =A0=A0+ * >>>>>>> =A0=A0=A0* NOTE: This a copy of commons lang LocaleUtils, to use it >>> inside >>>>> =A0MyFaces >>>>>>> =A0=A0=A0* >>>>>>> =A0=A0=A0* @since 2.2 >>>>>>> =A0=A0=A0* @version $Id$ >>>>>>> =A0=A0=A0*/ >>>>>>> =A0=A0-class _LocaleUtils { >>>>>>> =A0=A0+class _LocaleUtils >>>>>>> =A0=A0+{ >>>>>>> >>>>>>> =A0=A0=A0 =A0 /** Concurrent map of language locales by country. */ >>>>>>> =A0=A0- =A0 =A0private static final ConcurrentMap>>>> =A0List> cLanguagesByCountry =3D >>>>>>> =A0=A0- =A0 =A0 =A0 =A0new ConcurrentHashMap>> List>(); >>>>>>> =A0=A0+ =A0 =A0private static final ConcurrentMap>>>> =A0List> cLanguagesByCountry =3D >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0new ConcurrentHashMap>> List>(); >>>>>>> >>>>>>> =A0=A0=A0 =A0 /** Concurrent map of country locales by language. */ >>>>>>> =A0=A0- =A0 =A0private static final ConcurrentMap>>>> =A0List> cCountriesByLanguage =3D >>>>>>> =A0=A0- =A0 =A0 =A0 =A0new ConcurrentHashMap>> List>(); >>>>>>> =A0=A0+ =A0 =A0private static final ConcurrentMap>>>> =A0List> cCountriesByLanguage =3D >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0new ConcurrentHashMap>> List>(); >>>>>>> >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0*

    {@code _LocaleUtils} instances should NOT be >>>>> =A0constructed in standard programming. >>>>>>> =A0=A0@@ -57,11 +58,13 @@ class _LocaleUtils { >>>>>>> =A0=A0=A0 =A0 =A0*

    This constructor is public to permit tools >>> that require >>>>> =A0a JavaBean instance >>>>>>> =A0=A0=A0 =A0 =A0* to operate.

    >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public _LocaleUtils() { >>>>>>> =A0=A0- =A0 =A0 =A0super(); >>>>>>> =A0=A0+ =A0 =A0public _LocaleUtils() >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0super(); >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> >>>>> >>> //---------------------------------------------------------------------= -- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0*

    Converts a String to a Locale.

    >>>>>>> =A0=A0=A0 =A0 =A0* >>>>>>> =A0=A0@@ -89,37 +92,51 @@ class _LocaleUtils { >>>>>>> =A0=A0=A0 =A0 =A0* @return a Locale, null if null input >>>>>>> =A0=A0=A0 =A0 =A0* @throws IllegalArgumentException if the string i= s an >>> invalid >>>>> =A0format >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public static Locale toLocale(String str) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (str =3D=3D null) { >>>>>>> =A0=A0+ =A0 =A0public static Locale toLocale(String str) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (str =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return null; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 int len =3D str.length(); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (len !=3D 2 && len !=3D 5 && len < >>> 7) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (len !=3D 2 && len !=3D 5 && len < >>> 7) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new IllegalArgumentException("I= nvalid >>> locale >>>>> =A0format: " + str); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 char ch0 =3D str.charAt(0); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 char ch1 =3D str.charAt(1); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (ch0 < 'a' || ch0 > 'z' || >>> ch1 < >>>>> =A0'a' || ch1 > 'z') { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (ch0 < 'a' || ch0 > 'z' || >>> ch1 < >>>>> =A0'a' || ch1 > 'z') >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new IllegalArgumentException("I= nvalid >>> locale >>>>> =A0format: " + str); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (len =3D=3D 2) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (len =3D=3D 2) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return new Locale(str, ""); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0} else { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if (str.charAt(2) !=3D '_') { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0} >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0else >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (str.charAt(2) !=3D '_') >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 throw new >>> IllegalArgumentException("Invalid locale >>>>> =A0format: " + str); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 char ch3 =3D str.charAt(3); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if (ch3 =3D=3D '_') { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (ch3 =3D=3D '_') >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return new Locale(str.substri= ng(0, 2), >>> "", >>>>> =A0str.substring(4)); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 char ch4 =3D str.charAt(4); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if (ch3 < 'A' || ch3 > 'Z' >>> || ch4 >>>>> =A0< 'A' || ch4 > 'Z') { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (ch3 < 'A' || ch3 > 'Z' >>> || ch4 >>>>> =A0< 'A' || ch4 > 'Z') >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 throw new >>> IllegalArgumentException("Invalid locale >>>>> =A0format: " + str); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if (len =3D=3D 5) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (len =3D=3D 5) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return new Locale(str.substri= ng(0, 2), >>> str.substring(3, >>>>> =A05)); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0} else { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (str.charAt(5) !=3D '_') = { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0} >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0else >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (str.charAt(5) !=3D '_') >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 throw new >>> IllegalArgumentException("Invalid >>>>> =A0locale format: " + str); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return new Locale(str.substri= ng(0, 2), >>> str.substring(3, >>>>> =A05), str.substring(6)); >>>>>>> =A0=A0@@ -128,6 +145,7 @@ class _LocaleUtils { >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> >>>>> >>> //---------------------------------------------------------------------= -- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0*

    Obtains the list of locales to search through >>> when >>>>> =A0performing >>>>>>> =A0=A0=A0 =A0 =A0* a locale search.

    >>>>>>> =A0=A0@@ -140,11 +158,13 @@ class _LocaleUtils { >>>>>>> =A0=A0=A0 =A0 =A0* @param locale =A0the locale to start from >>>>>>> =A0=A0=A0 =A0 =A0* @return the unmodifiable list of Locale objects,= 0 >>> being locale, >>>>> =A0not null >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public static List localeLookupList(Locale >>> locale) { >>>>>>> =A0=A0+ =A0 =A0public static List localeLookupList(Locale >>> locale) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 return localeLookupList(locale, locale); >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> >>>>> >>> //---------------------------------------------------------------------= -- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0*

    Obtains the list of locales to search through >>> when >>>>> =A0performing >>>>>>> =A0=A0=A0 =A0 =A0* a locale search.

    >>>>>>> =A0=A0@@ -162,17 +182,22 @@ class _LocaleUtils { >>>>>>> =A0=A0=A0 =A0 =A0* @param defaultLocale =A0the default locale to us= e if no >>> other is >>>>> =A0found >>>>>>> =A0=A0=A0 =A0 =A0* @return the unmodifiable list of Locale objects,= 0 >>> being locale, >>>>> =A0not null >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public static List localeLookupList(Locale >>> locale, >>>>> =A0Locale defaultLocale) { >>>>>>> =A0=A0+ =A0 =A0public static List localeLookupList(Locale >>> locale, >>>>> =A0Locale defaultLocale) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 List list =3D new >>> ArrayList(4); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (locale !=3D null) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (locale !=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 list.add(locale); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if (locale.getVariant().length() > 0= ) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (locale.getVariant().length() > 0= ) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 list.add(new Locale(locale.ge= tLanguage(), >>>>> =A0locale.getCountry())); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if (locale.getCountry().length() > 0= ) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (locale.getCountry().length() > 0= ) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 list.add(new Locale(locale.ge= tLanguage(), >>>>> =A0"")); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if (list.contains(defaultLocale) =3D= =3D false) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (!list.contains(defaultLocale)) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 list.add(defaultLocale); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0@@ -180,45 +205,52 @@ class _LocaleUtils { >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> >>>>> >>> //---------------------------------------------------------------------= -- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0*

    Obtains an unmodifiable list of installed >>>>> =A0locales.

    >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0*

    This method is a wrapper around {@link >>>>> =A0Locale#getAvailableLocales()}. >>>>>>> =A0=A0=A0 =A0 =A0* It is more efficient, as the JDK method must cre= ate a >>> new array >>>>> =A0each >>>>>>> =A0=A0=A0 =A0 =A0* time it is called.

    >>>>>>> =A0=A0=A0 =A0 =A0* >>>>>>> =A0=A0=A0 =A0 =A0* @return the unmodifiable list of available local= es >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public static List availableLocaleList() { >>>>>>> =A0=A0+ =A0 =A0public static List availableLocaleList() >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 return SyncAvoid.AVAILABLE_LOCALE_LIST; >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> >>>>> >>> //---------------------------------------------------------------------= -- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0*

    Obtains an unmodifiable set of installed >>>>> =A0locales.

    >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0*

    This method is a wrapper around {@link >>>>> =A0Locale#getAvailableLocales()}. >>>>>>> =A0=A0=A0 =A0 =A0* It is more efficient, as the JDK method must cre= ate a >>> new array >>>>> =A0each >>>>>>> =A0=A0=A0 =A0 =A0* time it is called.

    >>>>>>> =A0=A0=A0 =A0 =A0* >>>>>>> =A0=A0=A0 =A0 =A0* @return the unmodifiable set of available locale= s >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public static Set availableLocaleSet() { >>>>>>> =A0=A0+ =A0 =A0public static Set availableLocaleSet() >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 return SyncAvoid.AVAILABLE_LOCALE_SET; >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> >>>>> >>> //---------------------------------------------------------------------= -- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0*

    Checks if the locale specified is in the list >>> of >>>>> =A0available locales.

    >>>>>>> =A0=A0=A0 =A0 =A0* >>>>>>> =A0=A0=A0 =A0 =A0* @param locale the Locale object to check if it i= s >>> available >>>>>>> =A0=A0=A0 =A0 =A0* @return true if the locale is a known locale >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public static boolean isAvailableLocale(Locale local= e) { >>>>>>> =A0=A0+ =A0 =A0public static boolean isAvailableLocale(Locale local= e) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 return availableLocaleList().contains(locale)= ; >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> >>>>> >>> //---------------------------------------------------------------------= -- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0*

    Obtains the list of languages supported for a >>> given >>>>> =A0country.

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

    Obtains the list of countries supported for a >>> given >>>>> =A0language.

    >>>>>>> =A0=A0- =A0 =A0 * >>>>>>> =A0=A0+ =A0 =A0 * >>>>>>> =A0=A0=A0 =A0 =A0*

    This method takes a language code and searche= s >>> to find >>>>> =A0the >>>>>>> =A0=A0=A0 =A0 =A0* countries available for that language. Variant l= ocales >>> are >>>>> =A0removed.

    >>>>>>> =A0=A0=A0 =A0 =A0* >>>>>>> =A0=A0=A0 =A0 =A0* @param languageCode =A0the 2 letter language cod= e, null >>> returns >>>>> =A0empty >>>>>>> =A0=A0=A0 =A0 =A0* @return an unmodifiable List of Locale objects, = not >>> null >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public static List >>> countriesByLanguage(String >>>>> =A0languageCode) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (languageCode =3D=3D null) { >>>>>>> =A0=A0+ =A0 =A0public static List >>> countriesByLanguage(String >>>>> =A0languageCode) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (languageCode =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 return Collections.emptyList(); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 List countries =3D >>>>> =A0cCountriesByLanguage.get(languageCode); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0if (countries =3D=3D null) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0if (countries =3D=3D null) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 countries =3D new ArrayList()= ; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 List locales =3D >>> availableLocaleList(); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0for (int i =3D 0; i < locales.size()= ; i++) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0for (int i =3D 0; i < locales.size()= ; i++) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Locale locale =3D locales.get= (i); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (languageCode.equals(local= e.getLanguage()) >>>>> =A0&& >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 locale.getCou= ntry().length() !=3D 0 >>> && >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0locale.getVa= riant().length() =3D=3D 0) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0locale.getVa= riant().length() =3D=3D 0) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 countries.add(locale)= ; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0@@ -285,13 +328,15 @@ class _LocaleUtils { >>>>>>> >>>>>>> >>>>> >>> //---------------------------------------------------------------------= -- >>>>>>> =A0=A0=A0 =A0 // class to avoid synchronization >>>>>>> =A0=A0- =A0 =A0static class SyncAvoid { >>>>>>> =A0=A0+ =A0 =A0static class SyncAvoid >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 /** Unmodifiable list of available locales. *= / >>>>>>> =A0=A0=A0 =A0 =A0 =A0 private static List >>> AVAILABLE_LOCALE_LIST; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 /** Unmodifiable set of available locales. */ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 private static Set AVAILABLE_LOCALE_S= ET; >>>>>>> =A0=A0- >>>>>>> =A0=A0- =A0 =A0 =A0 =A0static { >>>>>>> =A0=A0+ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0static >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 List list =3D new >>>>> =A0ArrayList(Arrays.asList(Locale.getAvailableLocales())); >>> =A0// extra >>>>> =A0safe >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 AVAILABLE_LOCALE_LIST =3D >>> Collections.unmodifiableList(list); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 AVAILABLE_LOCALE_SET =3D >>> Collections.unmodifiableSet(new >>>>> =A0HashSet(availableLocaleList())); >>>>>>> >>>>>>> =A0=A0Modified: >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_MethodBindi= ngToListener.java >>>>>>> =A0=A0URL: >>>>> >>> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax= /faces/component/_MethodBindingToListener.java?rev=3D1188267&r1=3D1188266&r= 2=3D1188267&view=3Ddiff >>>>>>> >>>>> >>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D >>>>>>> =A0=A0--- >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_MethodBindi= ngToListener.java >>>>> =A0(original) >>>>>>> =A0=A0+++ >>>>> >>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_MethodBindi= ngToListener.java >>>>> =A0Mon Oct 24 18:09:08 2011 >>>>>>> =A0=A0@@ -20,7 +20,6 @@ >>>>>>> =A0=A0=A0package javax.faces.component; >>>>>>> >>>>>>> =A0=A0=A0import javax.faces.FacesException; >>>>>>> =A0=A0-import javax.faces.component.StateHolder; >>>>>>> =A0=A0=A0import javax.faces.context.FacesContext; >>>>>>> =A0=A0=A0import javax.faces.el.EvaluationException; >>>>>>> =A0=A0=A0import javax.faces.el.MethodBinding; >>>>>>> =A0=A0@@ -32,17 +31,20 @@ import javax.faces.event.FacesEvent; >>>>>>> =A0=A0=A0* >>>>>>> =A0=A0=A0* @author Stan Silvert >>>>>>> =A0=A0=A0*/ >>>>>>> =A0=A0-abstract class _MethodBindingToListener implements >>> StateHolder { >>>>>>> =A0=A0- >>>>>>> =A0=A0+abstract class _MethodBindingToListener implements >>> StateHolder >>>>>>> =A0=A0+{ >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 protected MethodBinding methodBinding; >>>>>>> =A0=A0- >>>>>>> =A0=A0- =A0 =A0public _MethodBindingToListener() { >>>>>>> =A0=A0+ >>>>>>> =A0=A0+ =A0 =A0public _MethodBindingToListener() >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 /** >>>>>>> =A0=A0=A0 =A0 =A0* Creates a new instance of MethodBindingToListene= r >>>>>>> =A0=A0=A0 =A0 =A0*/ >>>>>>> =A0=A0- =A0 =A0public _MethodBindingToListener(MethodBinding >>> methodBinding) { >>>>>>> =A0=A0+ =A0 =A0public _MethodBindingToListener(MethodBinding >>> methodBinding) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 if (methodBinding =3D=3D null) >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new NullPointerException("metho= dBinding >>> can not >>>>> =A0be null"); >>>>>>> =A0=A0@@ -51,58 +53,71 @@ abstract class _MethodBindingToListener >>>>>>> =A0=A0=A0 =A0 =A0 =A0 { >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new >>> IllegalArgumentException("methodBinding must >>>>> =A0implement the StateHolder interface"); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 this.methodBinding =3D methodBinding; >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0private FacesContext getFacesContext() { >>>>>>> =A0=A0+ =A0 =A0private FacesContext getFacesContext() >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 return FacesContext.getCurrentInstance(); >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0protected void invokeMethodBinding(FacesEvent event) >>> throws >>>>> =A0AbortProcessingException { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0try { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0methodBinding.invoke(getFacesContext= (), new >>> Object[] >>>>> =A0{event}); >>>>>>> =A0=A0+ =A0 =A0protected void invokeMethodBinding(FacesEvent event) >>> throws >>>>> =A0AbortProcessingException >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0try >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0methodBinding.invoke(getFacesContext= (), new >>>>> =A0Object[]{event}); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- =A0 =A0 =A0 =A0catch (EvaluationException e) { >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0catch (EvaluationException e) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 Throwable cause =3D e.getCause(); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0if (cause !=3D null && cause instanc= eof >>>>> =A0AbortProcessingException) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0throw (AbortProcessingExcept= ion)cause; >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0if (cause !=3D null && cause instanc= eof >>>>> =A0AbortProcessingException) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0throw (AbortProcessingExcept= ion) cause; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw e; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0=A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0- =A0 =A0public MethodBinding getMethodBinding() { >>>>>>> =A0=A0+ >>>>>>> =A0=A0+ =A0 =A0public MethodBinding getMethodBinding() >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 return methodBinding; >>>>>>> =A0=A0=A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0- =A0 =A0public void restoreState(FacesContext context, Objec= t >>> state) { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0Object[] stateArray =3D (Object[])state; >>>>>>> =A0=A0- =A0 =A0 =A0 =A0try { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0 =A0 =A0methodBinding =3D >>>>> =A0(MethodBinding)_ClassUtils.getContextClassLoader() >>>>>>> =A0=A0- >>>>> =A0.loadClass((String)stateArray[0]) >>>>>>> =A0=A0- >>> .newInstance(); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0} catch (Exception e) { >>>>>>> =A0=A0+ >>>>>>> =A0=A0+ =A0 =A0public void restoreState(FacesContext context, Objec= t >>> state) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0Object[] stateArray =3D (Object[]) state; >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0try >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0methodBinding =3D (MethodBinding) >>>>> =A0_ClassUtils.getContextClassLoader() >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0.loadClass((String) = stateArray[0]) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0.newInstance(); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0} >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0catch (Exception e) >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 =A0 =A0 throw new FacesException(e); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0- =A0 =A0 =A0 =A0((StateHolder)methodBinding).restoreState(co= ntext, >>>>> =A0stateArray[1]); >>>>>>> =A0=A0+ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0((StateHolder) methodBinding).restoreState(c= ontext, >>>>> =A0stateArray[1]); >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0public Object saveState(FacesContext context) { >>>>>>> =A0=A0+ =A0 =A0public Object saveState(FacesContext context) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0=A0 =A0 =A0 =A0 Object[] stateArray =3D new Object[2]; >>>>>>> =A0=A0=A0 =A0 =A0 =A0 stateArray[0] =3D methodBinding.getClass().ge= tName(); >>>>>>> =A0=A0- =A0 =A0 =A0 =A0stateArray[1] =3D >>>>> =A0((StateHolder)methodBinding).saveState(context); >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0stateArray[1] =3D ((StateHolder) >>>>> =A0methodBinding).saveState(context); >>>>>>> =A0=A0=A0 =A0 =A0 =A0 return stateArray; >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0public void setTransient(boolean newTransientValue) = { >>>>>>> =A0=A0- >>> =A0((StateHolder)methodBinding).setTransient(newTransientValue); >>>>>>> =A0=A0+ =A0 =A0public void setTransient(boolean newTransientValue) >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0((StateHolder) >>> methodBinding).setTransient(newTransientValue); >>>>>>> =A0=A0=A0 =A0 } >>>>>>> >>>>>>> =A0=A0- =A0 =A0public boolean isTransient() { >>>>>>> =A0=A0- =A0 =A0 =A0 =A0return ((StateHolder)methodBinding).isTransi= ent(); >>>>>>> =A0=A0+ =A0 =A0public boolean isTransient() >>>>>>> =A0=A0+ =A0 =A0{ >>>>>>> =A0=A0+ =A0 =A0 =A0 =A0return ((StateHolder) methodBinding).isTrans= ient(); >>>>>>> =A0=A0=A0 =A0 } >>>>>>> =A0=A0- >>>>>>> =A0=A0+ >>>>>>> =A0=A0=A0} >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> =A0-- >>>>> =A0Jakob Korherr >>>>> >>>>> =A0blog: http://www.jakobk.com >>>>> =A0twitter: http://twitter.com/jakobkorherr >>>>> =A0work: http://www.irian.at >>>>> >>>> >>> >> > > > > -- > Jakob Korherr > > blog: http://www.jakobk.com > twitter: http://twitter.com/jakobkorherr > work: http://www.irian.at >