You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by fm...@apache.org on 2012/06/21 12:37:08 UTC

svn commit: r1352492 - /incubator/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchPanel.java

Author: fmartelli
Date: Thu Jun 21 10:37:07 2012
New Revision: 1352492

URL: http://svn.apache.org/viewvc?rev=1352492&view=rev
Log:
SYNCOPE-99 #comment recursive generation of NodCond used to fail

Modified:
    incubator/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchPanel.java

Modified: incubator/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchPanel.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchPanel.java?rev=1352492&r1=1352491&r2=1352492&view=diff
==============================================================================
--- incubator/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchPanel.java (original)
+++ incubator/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchPanel.java Thu Jun 21 10:37:07 2012
@@ -72,8 +72,8 @@ public class UserSearchPanel extends Pan
      */
     private static final Logger LOG = LoggerFactory.getLogger(UserSearchPanel.class);
 
-    private List<String> ATTRIBUTES_NOTINCLUDED = Arrays.asList(new String[] { "attributes", "derivedAttributes",
-            "virtualAttributes", "serialVersionUID", "memberships", "resources", "password", "propagationStatusMap" });
+    private List<String> ATTRIBUTES_NOTINCLUDED = Arrays.asList(new String[]{"attributes", "derivedAttributes",
+                "virtualAttributes", "serialVersionUID", "memberships", "resources", "password", "propagationStatusMap"});
 
     @SpringBean
     private SchemaRestClient schemaRestClient;
@@ -224,7 +224,7 @@ public class UserSearchPanel extends Pan
             searchConditionList = new ArrayList<SearchCondWrapper>();
             searchConditionList.add(new SearchCondWrapper());
         } else {
-            searchConditionList = getSearchCondWrappers(initNodeCond);
+            searchConditionList = getSearchCondWrappers(initNodeCond, null);
         }
         searchFormContainer.add(new SearchView("searchView", searchConditionList, searchFormContainer));
 
@@ -276,7 +276,7 @@ public class UserSearchPanel extends Pan
         return searchFeedback;
     }
 
-    private List<SearchCondWrapper> getSearchCondWrappers(final NodeCond searchCond) {
+    private List<SearchCondWrapper> getSearchCondWrappers(final NodeCond searchCond, final NodeCond.Type type) {
         LOG.debug("Search condition: {}", searchCond);
 
         List<SearchCondWrapper> wrappers = new ArrayList<SearchCondWrapper>();
@@ -284,17 +284,28 @@ public class UserSearchPanel extends Pan
         switch (searchCond.getType()) {
             case LEAF:
             case NOT_LEAF:
-                wrappers.add(getSearchCondWrapper(searchCond));
+                final SearchCondWrapper wrapper = getSearchCondWrapper(searchCond);
+
+                if (type != null) {
+                    switch (type) {
+                        case AND:
+                            wrapper.setOperationType(OperationType.AND);
+                            break;
+                        case OR:
+                            wrapper.setOperationType(OperationType.OR);
+                            break;
+                        default:
+                        // nothing to specify
+                    }
+                }
+
+                wrappers.add(wrapper);
                 break;
 
             case AND:
             case OR:
-                wrappers.add(getSearchCondWrapper(searchCond.getLeftNodeCond()));
-                SearchCondWrapper wrapper = getSearchCondWrapper(searchCond.getRightNodeCond());
-                wrapper.setOperationType(searchCond.getType() == NodeCond.Type.AND
-                        ? OperationType.AND
-                        : OperationType.OR);
-                wrappers.add(wrapper);
+                wrappers.addAll(getSearchCondWrappers(searchCond.getLeftNodeCond(), type));
+                wrappers.addAll(getSearchCondWrappers(searchCond.getRightNodeCond(), searchCond.getType()));
                 break;
 
             default:
@@ -342,17 +353,15 @@ public class UserSearchPanel extends Pan
     }
 
     private NodeCond buildSearchCond(final List<SearchCondWrapper> conditions) {
-        // inverse processing: from right to left
-        // (OperationType is specified on the right)
-        SearchCondWrapper searchConditionWrapper = conditions.get(conditions.size() - 1);
+        SearchCondWrapper searchConditionWrapper = conditions.get(0);
         if (searchConditionWrapper == null || searchConditionWrapper.getFilterType() == null) {
             return null;
         }
 
         LOG.debug("Search conditions: fname {}; ftype {}; fvalue {}; OP {}; type {}; isnot {}", new Object[] {
-                searchConditionWrapper.getFilterName(), searchConditionWrapper.getFilterType(),
-                searchConditionWrapper.getFilterValue(), searchConditionWrapper.getOperationType(),
-                searchConditionWrapper.getType(), searchConditionWrapper.isNotOperator() });
+                    searchConditionWrapper.getFilterName(), searchConditionWrapper.getFilterType(),
+                    searchConditionWrapper.getFilterValue(), searchConditionWrapper.getOperationType(),
+                    searchConditionWrapper.getType(), searchConditionWrapper.isNotOperator()});
 
         NodeCond nodeCond = null;
 
@@ -406,15 +415,15 @@ public class UserSearchPanel extends Pan
                 break;
 
             default:
-                // nothing to do
+            // nothing to do
         }
 
         LOG.debug("Processed condition {}", nodeCond);
 
         if (conditions.size() > 1) {
-            List<SearchCondWrapper> subList = conditions.subList(0, conditions.size() - 1);
+            List<SearchCondWrapper> subList = conditions.subList(1, conditions.size());
 
-            if (OperationType.OR.equals(searchConditionWrapper.getOperationType())) {
+            if (OperationType.OR.equals(subList.get(0).getOperationType())) {
                 nodeCond = NodeCond.getOrCond(nodeCond, buildSearchCond(subList));
             } else {
                 nodeCond = NodeCond.getAndCond(nodeCond, buildSearchCond(subList));