You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ta...@apache.org on 2020/10/30 15:08:25 UTC

[myfaces] branch master updated: Jakarta Faces 4.0 - Spec Issue #1497 - API enhancements for Java8

This is an automated email from the ASF dual-hosted git repository.

tandraschko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces.git


The following commit(s) were added to refs/heads/master by this push:
     new 895fc4e  Jakarta Faces 4.0 - Spec Issue #1497 - API enhancements for Java8
895fc4e is described below

commit 895fc4ebed67cf9de121157c1a3563490d4ea9b0
Author: Thomas Andraschko <ta...@apache.org>
AuthorDate: Fri Oct 30 16:08:18 2020 +0100

    Jakarta Faces 4.0 - Spec Issue #1497 - API enhancements for Java8
---
 .../java/jakarta/faces/component/StateHelper.java  | 11 +++++++++
 .../jakarta/faces/component/_DeltaStateHelper.java | 26 +++++++++++++++++++++
 .../behavior/_AjaxBehaviorDeltaStateHelper.java    | 17 ++++++++++++++
 .../component/behavior/_DeltaStateHelper.java      | 27 +++++++++++++++++++++-
 .../java/jakarta/faces/event/PhaseListener.java    | 10 ++++++--
 .../main/java/jakarta/faces/render/Renderer.java   | 12 +++++-----
 6 files changed, 94 insertions(+), 9 deletions(-)

diff --git a/api/src/main/java/jakarta/faces/component/StateHelper.java b/api/src/main/java/jakarta/faces/component/StateHelper.java
index 716a7f0..fbaf7d4 100644
--- a/api/src/main/java/jakarta/faces/component/StateHelper.java
+++ b/api/src/main/java/jakarta/faces/component/StateHelper.java
@@ -19,6 +19,7 @@
 package jakarta.faces.component;
 
 import java.io.Serializable;
+import java.util.function.Supplier;
 
 /**
  * @since 2.0
@@ -31,6 +32,16 @@ public interface StateHelper extends StateHolder
 
     public Object eval(Serializable key, Object defaultValue);
 
+    /**
+     * 
+     * @param key
+     * @param defaultValueSupplier
+     * @return 
+     * 
+     * @since 4.0
+     */
+    public Object eval(Serializable key, Supplier<Object> defaultValueSupplier);
+
     public Object get(Serializable key);
 
     public Object put(Serializable key, Object value);
diff --git a/api/src/main/java/jakarta/faces/component/_DeltaStateHelper.java b/api/src/main/java/jakarta/faces/component/_DeltaStateHelper.java
index e64dcf2..0137d7b 100644
--- a/api/src/main/java/jakarta/faces/component/_DeltaStateHelper.java
+++ b/api/src/main/java/jakarta/faces/component/_DeltaStateHelper.java
@@ -28,6 +28,7 @@ import java.util.Map;
 
 import jakarta.el.ValueExpression;
 import jakarta.faces.context.FacesContext;
+import java.util.function.Supplier;
 
 /**
  * A delta enabled state holder implementing the StateHolder Interface. 
@@ -355,6 +356,31 @@ class _DeltaStateHelper implements StateHelper, TransientStateHelper, TransientS
         }
         return defaultValue;
     }
+    
+
+    /**
+     * 
+     * @param key
+     * @param defaultValueSupplier
+     * @return 
+     * 
+     * @since 4.0
+     */
+    @Override
+    public Object eval(Serializable key, Supplier<Object> defaultValueSupplier)
+    {
+        Object returnValue = _fullState.get(key);
+        if (returnValue != null)
+        {
+            return returnValue;
+        }
+        ValueExpression expression = _component.getValueExpression(key.toString());
+        if (expression != null)
+        {
+            return expression.getValue(_component.getFacesContext().getELContext());
+        }
+        return defaultValueSupplier.get();
+    }
 
     @Override
     public Object get(Serializable key)
diff --git a/api/src/main/java/jakarta/faces/component/behavior/_AjaxBehaviorDeltaStateHelper.java b/api/src/main/java/jakarta/faces/component/behavior/_AjaxBehaviorDeltaStateHelper.java
index f982590..c3f482b 100644
--- a/api/src/main/java/jakarta/faces/component/behavior/_AjaxBehaviorDeltaStateHelper.java
+++ b/api/src/main/java/jakarta/faces/component/behavior/_AjaxBehaviorDeltaStateHelper.java
@@ -30,6 +30,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Supplier;
 
 /**
  * Delta state helper to deal with the ajax
@@ -154,6 +155,22 @@ class _AjaxBehaviorDeltaStateHelper<A extends AjaxBehavior> implements StateHelp
     }
 
     @Override
+    public Object eval(Serializable key, Supplier<Object> defaultValueSupplier)
+    {
+        Object returnValue = _fullState.get(key);
+        if (returnValue != null)
+        {
+            return returnValue;
+        }
+        ValueExpression expression = _target.getValueExpression(key.toString());
+        if (expression != null)
+        {
+            return expression.getValue(FacesContext.getCurrentInstance().getELContext());
+        }
+        return defaultValueSupplier.get();
+    }
+
+    @Override
     public Object get(Serializable key)
     {
         return _fullState.get(key);
diff --git a/api/src/main/java/jakarta/faces/component/behavior/_DeltaStateHelper.java b/api/src/main/java/jakarta/faces/component/behavior/_DeltaStateHelper.java
index fa1052f..8d573e7 100644
--- a/api/src/main/java/jakarta/faces/component/behavior/_DeltaStateHelper.java
+++ b/api/src/main/java/jakarta/faces/component/behavior/_DeltaStateHelper.java
@@ -31,6 +31,7 @@ import jakarta.faces.component.StateHelper;
 import jakarta.faces.component.StateHolder;
 import jakarta.faces.component.UIComponentBase;
 import jakarta.faces.context.FacesContext;
+import java.util.function.Supplier;
 
 /**
  * A delta enabled state holder implementing the StateHolder Interface. 
@@ -134,7 +135,7 @@ import jakarta.faces.context.FacesContext;
  * validator or listeners should deal with StateHolder or PartialStateHolder
  * on component classes. 
  */
-class _DeltaStateHelper <A extends AjaxBehavior> implements StateHelper
+class _DeltaStateHelper<A extends AjaxBehavior> implements StateHelper
 {
 
     /**
@@ -248,6 +249,30 @@ class _DeltaStateHelper <A extends AjaxBehavior> implements StateHelper
         return defaultValue;
     }
 
+    /**
+     *
+     * @param key
+     * @param defaultValueSupplier
+     * @return
+     *
+     * @since 4.0
+     */
+    @Override
+    public Object eval(Serializable key, Supplier<Object> defaultValueSupplier)
+    {
+        Object returnValue = _fullState.get(key);
+        if (returnValue != null)
+        {
+            return returnValue;
+        }
+        ValueExpression expression = _target.getValueExpression(key.toString());
+        if (expression != null)
+        {
+            return expression.getValue(_target.getFacesContext().getELContext());
+        }
+        return defaultValueSupplier.get();
+    }
+
     @Override
     public Object get(Serializable key)
     {
diff --git a/api/src/main/java/jakarta/faces/event/PhaseListener.java b/api/src/main/java/jakarta/faces/event/PhaseListener.java
index 83b3026..c478bb9 100755
--- a/api/src/main/java/jakarta/faces/event/PhaseListener.java
+++ b/api/src/main/java/jakarta/faces/event/PhaseListener.java
@@ -23,9 +23,15 @@ package jakarta.faces.event;
  */
 public interface PhaseListener extends java.util.EventListener, java.io.Serializable
 {
-    void afterPhase(PhaseEvent event);
+    default void afterPhase(PhaseEvent event)
+    {
+        
+    }
 
-    void beforePhase(PhaseEvent event);
+    default void beforePhase(PhaseEvent event)
+    {
+        
+    }
 
     PhaseId getPhaseId();
 }
diff --git a/api/src/main/java/jakarta/faces/render/Renderer.java b/api/src/main/java/jakarta/faces/render/Renderer.java
index a0fc559..c33c7eb 100755
--- a/api/src/main/java/jakarta/faces/render/Renderer.java
+++ b/api/src/main/java/jakarta/faces/render/Renderer.java
@@ -27,14 +27,14 @@ import jakarta.faces.convert.ConverterException;
 /**
  * see Javadoc of <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.html">JSF Specification</a>
  */
-public abstract class Renderer
+public abstract class Renderer<T extends UIComponent>
 {
     /**
      * @since 2.2
      */
     public static final String PASSTHROUGH_RENDERER_LOCALNAME_KEY = "elementName";
     
-    public void decode(FacesContext context, UIComponent component)
+    public void decode(FacesContext context, T component)
     {
         if (context == null)
         {
@@ -49,7 +49,7 @@ public abstract class Renderer
     /**
      * @throws IOException if an input/output error occurs while rendering 
      */
-    public void encodeBegin(FacesContext context, UIComponent component) throws IOException
+    public void encodeBegin(FacesContext context, T component) throws IOException
     {
         if (context == null)
         {
@@ -71,7 +71,7 @@ public abstract class Renderer
      * @param component
      * @throws IOException
      */
-    public void encodeChildren(FacesContext context, UIComponent component) throws IOException
+    public void encodeChildren(FacesContext context, T component) throws IOException
     {
         if (context == null)
         {
@@ -100,7 +100,7 @@ public abstract class Renderer
     /**
      * @throws IOException if an input/output error occurs while rendering 
      */
-    public void encodeEnd(FacesContext context, UIComponent component) throws IOException
+    public void encodeEnd(FacesContext context, T component) throws IOException
     {
         if (context == null)
         {
@@ -141,7 +141,7 @@ public abstract class Renderer
         return false;
     }
 
-    public Object getConvertedValue(FacesContext context, UIComponent component, Object submittedValue)
+    public Object getConvertedValue(FacesContext context, T component, Object submittedValue)
             throws ConverterException
     {
         if (context == null)