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 2016/12/28 12:58:29 UTC

svn commit: r1776278 - in /myfaces/core/branches/2.3.x/impl/src: main/java/org/apache/myfaces/component/search/ main/java/org/apache/myfaces/renderkit/html/ test/java/org/apache/myfaces/component/search/

Author: tandraschko
Date: Wed Dec 28 12:58:29 2016
New Revision: 1776278

URL: http://svn.apache.org/viewvc?rev=1776278&view=rev
Log:
MYFACES-4075 SearchExpression API ([perf] reuse context + improved handling with empty expressions)

Modified:
    myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/component/search/SearchExpressionHandlerImpl.java
    myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlAjaxBehaviorRenderer.java
    myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/component/search/SearchExpressionImplTest.java

Modified: myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/component/search/SearchExpressionHandlerImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/component/search/SearchExpressionHandlerImpl.java?rev=1776278&r1=1776277&r2=1776278&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/component/search/SearchExpressionHandlerImpl.java (original)
+++ myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/component/search/SearchExpressionHandlerImpl.java Wed Dec 28 12:58:29 2016
@@ -66,14 +66,12 @@ public class SearchExpressionHandlerImpl
     @Override
     public String resolveClientId(SearchExpressionContext searchExpressionContext, String expression)
     {
-        if (expression == null)
+        if (expression == null || expression.trim().isEmpty())
         {
-            expression = "";
-        }
-        else
-        {
-            expression = expression.trim();
+            return null;
         }
+
+        expression = expression.trim();
         
         FacesContext facesContext = searchExpressionContext.getFacesContext();
         SearchExpressionHandler handler = facesContext.getApplication().getSearchExpressionHandler();
@@ -139,14 +137,12 @@ public class SearchExpressionHandlerImpl
     @Override
     public List<String> resolveClientIds(SearchExpressionContext searchExpressionContext, String expressions)
     {
-        if (expressions == null)
+        if (expressions == null || expressions.trim().isEmpty())
         {
-            expressions = "";
-        }
-        else
-        {
-            expressions = expressions.trim();
+            return Collections.emptyList();
         }
+ 
+        expressions = expressions.trim();
         
         FacesContext facesContext = searchExpressionContext.getFacesContext();
         SearchExpressionHandler handler = facesContext.getApplication().getSearchExpressionHandler();
@@ -224,22 +220,22 @@ public class SearchExpressionHandlerImpl
     public void resolveComponent(SearchExpressionContext searchExpressionContext, String expression,
         ContextCallback callback)
     {
-        if (expression == null)
+        if (expression == null || expression.trim().isEmpty())
         {
-            expression = "";
-        }
-        else
-        {
-            expression = expression.trim();
+            return;
         }
         
+        expression = expression.trim();
+        
         FacesContext facesContext = searchExpressionContext.getFacesContext();
+        SearchExpressionHandler handler = facesContext.getApplication().getSearchExpressionHandler();
+
         SingleInvocationCallback checkCallback = new SingleInvocationCallback(callback);
         
         addHint(searchExpressionContext, SearchExpressionHint.RESOLVE_SINGLE_COMPONENT);
 
-        facesContext.getApplication().getSearchExpressionHandler().invokeOnComponent(
-                searchExpressionContext, searchExpressionContext.getSource(), expression, checkCallback);
+        handler.invokeOnComponent(searchExpressionContext, searchExpressionContext.getSource(),
+                expression, checkCallback);
 
         if (!checkCallback.isInvoked() && isHintSet(searchExpressionContext, SearchExpressionHint.PARENT_FALLBACK))
         {
@@ -298,15 +294,13 @@ public class SearchExpressionHandlerImpl
     public void resolveComponents(SearchExpressionContext searchExpressionContext, String expressions,
             ContextCallback callback)
     {
-        if (expressions == null)
-        {
-            expressions = "";
-        }
-        else
+        if (expressions == null || expressions.trim().isEmpty())
         {
-            expressions = expressions.trim();
+            return;
         }
         
+        expressions = expressions.trim();
+        
         FacesContext facesContext = searchExpressionContext.getFacesContext();
         SearchExpressionHandler handler = facesContext.getApplication().getSearchExpressionHandler();
         
@@ -372,14 +366,12 @@ public class SearchExpressionHandlerImpl
     public void invokeOnComponent(final SearchExpressionContext searchExpressionContext,
             UIComponent previous, String topExpression, ContextCallback topCallback)
     {
-        if (topExpression == null)
+        if (topExpression == null || topExpression.trim().isEmpty())
         {
-            topExpression = "";
-        }
-        else
-        {
-            topExpression = topExpression.trim();
+            return;
         }
+
+        topExpression = topExpression.trim();
         
         // Command pattern to apply the keyword or command to the base and then invoke the callback
         FacesContext facesContext = searchExpressionContext.getFacesContext();
@@ -636,14 +628,12 @@ public class SearchExpressionHandlerImpl
 
     public boolean isValidExpression(SearchExpressionContext searchExpressionContext, String topExpression)
     {
-        if (topExpression == null)
-        {
-            topExpression = "";
-        }
-        else
+        if (topExpression == null || topExpression.trim().isEmpty())
         {
-            topExpression = topExpression.trim();
+            return true;
         }
+
+        topExpression = topExpression.trim();
         
         FacesContext facesContext = searchExpressionContext.getFacesContext();
         // Command pattern to apply the keyword or command to the base and then invoke the callback

Modified: myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlAjaxBehaviorRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlAjaxBehaviorRenderer.java?rev=1776278&r1=1776277&r2=1776278&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlAjaxBehaviorRenderer.java (original)
+++ myfaces/core/branches/2.3.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlAjaxBehaviorRenderer.java Wed Dec 28 12:58:29 2016
@@ -430,6 +430,8 @@ public class HtmlAjaxBehaviorRenderer ex
 
             int cnt = 0;
 
+            SearchExpressionContext searchExpressionContext = null;
+            
             // perf: dataHolder is a Collection : ajaxBehaviour.getExecute()
             // and ajaxBehaviour.getRender() API
             // In most cases comes here a ArrayList, because
@@ -440,16 +442,28 @@ public class HtmlAjaxBehaviorRenderer ex
                 List<String> list = (List<String>) dataHolder;
                 for (; cnt  < executeSize; cnt++)
                 {
+                    if (searchExpressionContext == null)
+                    {
+                        searchExpressionContext = SearchExpressionContext.createSearchExpressionContext(
+                                context.getFacesContext(), context.getComponent(), EXPRESSION_HINTS, null);
+                    }
+                    
                     String strVal = list.get(cnt);
-                    build(context, executeSize, retVal, cnt, strVal);
+                    build(context, executeSize, retVal, cnt, strVal, searchExpressionContext);
                 }
             }
             else
             {
                 for (String strVal : dataHolder)
                 {
+                    if (searchExpressionContext == null)
+                    {
+                        searchExpressionContext = SearchExpressionContext.createSearchExpressionContext(
+                                context.getFacesContext(), context.getComponent(), EXPRESSION_HINTS, null);
+                    }
+                    
                     cnt++;
-                    build(context, executeSize, retVal, cnt, strVal);
+                    build(context, executeSize, retVal, cnt, strVal, searchExpressionContext);
                 }
             }
 
@@ -465,7 +479,7 @@ public class HtmlAjaxBehaviorRenderer ex
     
     public void build(ClientBehaviorContext context,
             int size, StringBuilder retVal, int cnt,
-            String strVal)
+            String strVal, SearchExpressionContext searchExpressionContext)
     {
         strVal = strVal.trim();
         if (!EMPTY.equals(strVal))
@@ -480,9 +494,6 @@ public class HtmlAjaxBehaviorRenderer ex
             {
                 retVal.append(strVal);
             }*/
-            SearchExpressionContext searchExpressionContext =
-                    SearchExpressionContext.createSearchExpressionContext(context.getFacesContext(),
-                            context.getComponent(), EXPRESSION_HINTS, null);
             SearchExpressionHandler handler = context.getFacesContext().getApplication().getSearchExpressionHandler();
             String clientId = handler.resolveClientId(searchExpressionContext, strVal);
             retVal.append(clientId);
@@ -493,7 +504,8 @@ public class HtmlAjaxBehaviorRenderer ex
         }
     }
 
-    private final String getComponentId(ClientBehaviorContext context, String id)
+    /*
+    private String getComponentId(ClientBehaviorContext context, String id)
     {
 
         UIComponent contextComponent = context.getComponent();
@@ -509,8 +521,9 @@ public class HtmlAjaxBehaviorRenderer ex
         }
         throw new FacesException("Component with id:" + id + " not found");
     }
+    */
 
-    private final void assertBehavior(ClientBehavior behavior)
+    private void assertBehavior(ClientBehavior behavior)
     {
         if (!(behavior instanceof AjaxBehavior))
         {

Modified: myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/component/search/SearchExpressionImplTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/component/search/SearchExpressionImplTest.java?rev=1776278&r1=1776277&r2=1776278&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/component/search/SearchExpressionImplTest.java (original)
+++ myfaces/core/branches/2.3.x/impl/src/test/java/org/apache/myfaces/component/search/SearchExpressionImplTest.java Wed Dec 28 12:58:29 2016
@@ -238,6 +238,8 @@ public class SearchExpressionImplTest ex
         String clientId = handler.resolveClientId(searchContextWithParentFallback, "@none");
         Assert.assertNotNull(clientId);
         
+        Assert.assertNull(handler.resolveClientId(searchContextWithParentFallback, " "));
+        
         expressionHints = new HashSet<SearchExpressionHint>();
         expressionHints.add(SearchExpressionHint.IGNORE_NO_RESULT);
         SearchExpressionContext searchContextWithIgnoreNoResult = 
@@ -320,6 +322,7 @@ public class SearchExpressionImplTest ex
         Assert.assertTrue(handler.isValidExpression(searchContext, "mainForm:table:3:nested"));
         Assert.assertTrue(handler.isValidExpression(searchContext, "mainForm:table:1:nested:0:nestedText"));
         
+        Assert.assertTrue(handler.isValidExpression(searchContext, " "));
         Assert.assertTrue(handler.isValidExpression(searchContext, "@this"));
         Assert.assertTrue(handler.isValidExpression(searchContext, "@this:@parent:showName"));
         Assert.assertTrue(handler.isValidExpression(searchContext, "@parent:showName:@parent:showName "));