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/27 22:11:50 UTC

svn commit: r1776209 - in /myfaces/core/branches/2.3.x/impl/src: main/java/org/apache/myfaces/component/search/SearchExpressionHandlerImpl.java test/java/org/apache/myfaces/component/search/SearchExpressionImplTest.java

Author: tandraschko
Date: Tue Dec 27 22:11:49 2016
New Revision: 1776209

URL: http://svn.apache.org/viewvc?rev=1776209&view=rev
Log:
MYFACES-4075 SearchExpression API (improved handling with spaces)

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/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=1776209&r1=1776208&r2=1776209&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 Tue Dec 27 22:11:49 2016
@@ -61,6 +61,15 @@ public class SearchExpressionHandlerImpl
     @Override
     public String resolveClientId(SearchExpressionContext searchExpressionContext, String expression)
     {
+        if (expression == null)
+        {
+            expression = "";
+        }
+        else
+        {
+            expression = expression.trim();
+        }
+        
         FacesContext facesContext = searchExpressionContext.getFacesContext();
         SearchExpressionHandler handler = facesContext.getApplication().getSearchExpressionHandler();
         
@@ -123,16 +132,23 @@ public class SearchExpressionHandlerImpl
     }
 
     @Override
-    public List<String> resolveClientIds(SearchExpressionContext searchExpressionContext,
-            String expressions)
+    public List<String> resolveClientIds(SearchExpressionContext searchExpressionContext, String expressions)
     {
+        if (expressions == null)
+        {
+            expressions = "";
+        }
+        else
+        {
+            expressions = expressions.trim();
+        }
+        
         FacesContext facesContext = searchExpressionContext.getFacesContext();
         SearchExpressionHandler handler = facesContext.getApplication().getSearchExpressionHandler();
 
         CollectClientIdsCallback callback = new CollectClientIdsCallback();
 
-        for (String expression : facesContext.getApplication().getSearchExpressionHandler().splitExpressions(
-                        facesContext, expressions))
+        for (String expression : handler.splitExpressions(facesContext, expressions))
         {
             if (handler.isPassthroughExpression(searchExpressionContext, expression))
             {
@@ -203,6 +219,15 @@ public class SearchExpressionHandlerImpl
     public void resolveComponent(SearchExpressionContext searchExpressionContext, String expression,
         ContextCallback callback)
     {
+        if (expression == null)
+        {
+            expression = "";
+        }
+        else
+        {
+            expression = expression.trim();
+        }
+        
         FacesContext facesContext = searchExpressionContext.getFacesContext();
         SingleInvocationCallback checkCallback = new SingleInvocationCallback(callback);
         
@@ -266,8 +291,17 @@ public class SearchExpressionHandlerImpl
 
     @Override
     public void resolveComponents(SearchExpressionContext searchExpressionContext, String expressions,
-        ContextCallback callback)
+            ContextCallback callback)
     {
+        if (expressions == null)
+        {
+            expressions = "";
+        }
+        else
+        {
+            expressions = expressions.trim();
+        }
+        
         FacesContext facesContext = searchExpressionContext.getFacesContext();
         SearchExpressionHandler handler = facesContext.getApplication().getSearchExpressionHandler();
         
@@ -333,9 +367,20 @@ public class SearchExpressionHandlerImpl
     public void invokeOnComponent(final SearchExpressionContext searchExpressionContext,
             UIComponent previous, String topExpression, ContextCallback topCallback)
     {
+        if (topExpression == null)
+        {
+            topExpression = "";
+        }
+        else
+        {
+            topExpression = topExpression.trim();
+        }
+        
         // Command pattern to apply the keyword or command to the base and then invoke the callback
         FacesContext facesContext = searchExpressionContext.getFacesContext();
 
+        SearchExpressionHandler handler = facesContext.getApplication().getSearchExpressionHandler();
+        
         UIComponent currentBase = previous;
 
         //Step 1: find base
@@ -345,8 +390,7 @@ public class SearchExpressionHandlerImpl
         {
             UIComponent findBase;
             findBase = SearchComponentUtils.getRootComponent(currentBase);
-            facesContext.getApplication().getSearchExpressionHandler().invokeOnComponent(
-                    searchExpressionContext, findBase, topExpression.substring(1), topCallback);
+            handler.invokeOnComponent(searchExpressionContext, findBase, topExpression.substring(1), topCallback);
             return;
         }
 
@@ -363,8 +407,7 @@ public class SearchExpressionHandlerImpl
                         topExpression.substring(1+command.length()+1) : null;
 
             final ContextCallback parentCallback = topCallback;
-            final SearchExpressionHandler currentInstance =
-                    facesContext.getApplication().getSearchExpressionHandler();
+
 
             // If the keyword is @child, @composite, @form, @namingcontainer, @next, @none, @parent, @previous,
             // @root, @this ,  all commands change the source to be applied the action
@@ -380,7 +423,7 @@ public class SearchExpressionHandlerImpl
                         @Override
                         public void invokeContextCallback(FacesContext facesContext, UIComponent target)
                         {
-                            currentInstance.invokeOnComponent(
+                            handler.invokeOnComponent(
                                     searchExpressionContext, target, remaining, parentCallback);
                         }
                     });
@@ -454,9 +497,6 @@ public class SearchExpressionHandlerImpl
                             String targetClientId = contextClientId.substring(0, startCommon+base.length()) +
                                     expression.substring(base.length());
 
-                            final SearchExpressionHandler currentHandler =
-                                    facesContext.getApplication().getSearchExpressionHandler();
-
                             if (nextExpression != null)
                             {
                                 final String childExpression = nextExpression;
@@ -464,7 +504,7 @@ public class SearchExpressionHandlerImpl
                                 parent.invokeOnComponent(facesContext, targetClientId, new ContextCallback(){
                                     public void invokeContextCallback(FacesContext context, UIComponent target)
                                     {
-                                        currentHandler.invokeOnComponent(
+                                        handler.invokeOnComponent(
                                                 searchExpressionContext, target, childExpression, topCallback);
                                     }
                                 });
@@ -502,6 +542,15 @@ public class SearchExpressionHandlerImpl
     @Override
     public boolean isPassthroughExpression(SearchExpressionContext searchExpressionContext, String topExpression)
     {
+        if (topExpression == null)
+        {
+            topExpression = "";
+        }
+        else
+        {
+            topExpression = topExpression.trim();
+        }
+        
         FacesContext facesContext = searchExpressionContext.getFacesContext();
         // Command pattern to apply the keyword or command to the base and then invoke the callback
         boolean passthrough = false;
@@ -555,6 +604,15 @@ public class SearchExpressionHandlerImpl
 
     public boolean isValidExpression(SearchExpressionContext searchExpressionContext, String topExpression)
     {
+        if (topExpression == null)
+        {
+            topExpression = "";
+        }
+        else
+        {
+            topExpression = topExpression.trim();
+        }
+        
         FacesContext facesContext = searchExpressionContext.getFacesContext();
         // Command pattern to apply the keyword or command to the base and then invoke the callback
         boolean isValid = true;
@@ -726,7 +784,10 @@ public class SearchExpressionHandlerImpl
                 if (isSeparator)
                 {
                     // lets add token inside buffer to our tokens
-                    tokens.add(buffer.toString());
+                    String bufferAsString = buffer.toString().trim();
+                    if (bufferAsString.length() > 0) {
+                        tokens.add(bufferAsString);
+                    }
                     // now we need to clear buffer
                     buffer.delete(0, buffer.length());
                 }

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=1776209&r1=1776208&r2=1776209&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 Tue Dec 27 22:11:49 2016
@@ -96,7 +96,7 @@ public class SearchExpressionImplTest ex
         Assert.assertEquals(componentId, "mainForm:showName");
 
         componentId = facesContext.getApplication().getSearchExpressionHandler().resolveClientIds(
-                searchContext, "@namingcontainer:showName").get(0);
+                searchContext, " @namingcontainer:showName ").get(0);
         Assert.assertEquals(componentId, "mainForm:showName");
 
         UIOutput name = (UIOutput) facesContext.getViewRoot().findComponent("mainForm:name");
@@ -147,6 +147,19 @@ public class SearchExpressionImplTest ex
                 //System.out.println(componentId);
             }
         });
+        
+        facesContext.getViewRoot().invokeOnComponent(facesContext, "mainForm:table:3:baseText", 
+                new ContextCallback()
+        {
+            @Override
+            public void invokeContextCallback(FacesContext context, UIComponent target)
+            {
+                SearchExpressionHandler handler = facesContext.getApplication().getSearchExpressionHandler();
+                SearchExpressionContext searchContext = 
+                        SearchExpressionContext.createSearchExpressionContext(context, target);
+                Assert.assertEquals(handler.resolveClientId(searchContext, "@next"), "mainForm:table:3:nestedText");
+            }
+        });
        
         processRemainingPhases();
     }
@@ -184,7 +197,7 @@ public class SearchExpressionImplTest ex
 
         CollectComponentsCallback callback = new CollectComponentsCallback();
         facesContext.getApplication().getSearchExpressionHandler().resolveComponents(
-                searchContext, "@id(name)", callback);
+                searchContext, " @id(name)   @none  ", callback);
         
         Assert.assertEquals(2, callback.getComponents().size());
         
@@ -302,14 +315,14 @@ public class SearchExpressionImplTest ex
         Assert.assertTrue(handler.isValidExpression(searchContext, "mainForm:showName"));
         Assert.assertTrue(handler.isValidExpression(searchContext, "mainForm:table:3:nested:1:nestedText"));
         Assert.assertTrue(handler.isValidExpression(searchContext, "mainForm:table:3:baseText"));
-        Assert.assertTrue(handler.isValidExpression(searchContext, "mainForm:table:0:baseText"));
+        Assert.assertTrue(handler.isValidExpression(searchContext, " mainForm:table:0:baseText"));
         Assert.assertTrue(handler.isValidExpression(searchContext, "mainForm:table:3:nested:0:nestedText"));
         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, "@this"));
         Assert.assertTrue(handler.isValidExpression(searchContext, "@this:@parent:showName"));
-        Assert.assertTrue(handler.isValidExpression(searchContext, "@parent:showName:@parent:showName"));
+        Assert.assertTrue(handler.isValidExpression(searchContext, "@parent:showName:@parent:showName "));
         Assert.assertTrue(handler.isValidExpression(searchContext, "@form:showName"));
         Assert.assertTrue(handler.isValidExpression(searchContext, "@namingcontainer:showName"));
         Assert.assertTrue(handler.isValidExpression(searchContext, "@previous"));