Yair Zaslavsky has uploaded a new change for review.

Change subject: aaa: Fix search to search properly for users by groups
......................................................................

aaa: Fix search to search properly for users by groups

Instead of ilike 'group%' which is problematic in case the
user is member of multiple groups , the pattern matching
operator is used with a proper expression to replace the %
wildcard.

Topic: AAA
Bug-Url: https://bugzilla.redhat.com/1120720
Change-Id: I14e795926cb57de15b628587d5c3df427518720a
Signed-off-by: Yair Zaslavsky <yzasl...@redhat.com>
---
M 
backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/BaseConditionFieldAutoCompleter.java
M 
backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/IConditionFieldAutoCompleter.java
M 
backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java
M 
backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VdcUserConditionFieldAutoCompleter.java
4 files changed, 24 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/05/32705/1

diff --git 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/BaseConditionFieldAutoCompleter.java
 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/BaseConditionFieldAutoCompleter.java
index 7d6832d..62bb486 100644
--- 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/BaseConditionFieldAutoCompleter.java
+++ 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/BaseConditionFieldAutoCompleter.java
@@ -5,8 +5,10 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.ovirt.engine.core.common.businessentities.DateEnumForSearch;
 import org.ovirt.engine.core.common.businessentities.Tags;
@@ -34,6 +36,7 @@
     protected final Map<String, String> columnNameDict = new HashMap<String, 
String>();
     protected final Map<String, String> sortableFieldDict = new 
HashMap<String, String>();
     protected final List<String> notFreeTextSearchableFieldsList = new 
ArrayList<String>();
+    protected Set<String> verbsWithMultipleValues = new HashSet<String>();
 
     /**
      * Gets the LIKE clause syntax for non case-sensitive search
@@ -48,6 +51,13 @@
         else
             return Config.<String> getValue(ConfigValues.DBLikeSyntax);
     }
+
+    public String getMatchingSyntax(String fieldName, boolean positive, 
boolean caseSensitive) {
+        return verbsWithMultipleValues.contains(fieldName) ?
+                new StringBuilder(positive ? "" : " !").append(caseSensitive ? 
"~" : "~*").toString()
+                : new StringBuilder(positive ? "" : " NOT 
").append(getLikeSyntax(caseSensitive)).toString();
+    }
+
 
     /**
      * Gets the I18N prefix used for value compare.
@@ -377,4 +387,9 @@
                     pair.getFirst(), pair.getSecond());
         }
     }
+
+    @Override
+    public String getWildcard(String fieldName) {
+        return verbsWithMultipleValues.contains(fieldName) ? ".*" : "%";
+    }
 }
diff --git 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/IConditionFieldAutoCompleter.java
 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/IConditionFieldAutoCompleter.java
index 9d94e3c..66264b7 100644
--- 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/IConditionFieldAutoCompleter.java
+++ 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/IConditionFieldAutoCompleter.java
@@ -20,6 +20,10 @@
 
     String buildFreeTextConditionSql(String tableName, String relations, 
String value, boolean caseSensitive);
 
+    String getMatchingSyntax(String fieldName, boolean positive, boolean 
caseSensitive);
+
+    String getWildcard(String fieldName);
+
     String buildConditionSql(String fieldName,
             String customizedValue,
             String customizedRelation,
diff --git 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java
 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java
index 753099c..cfb93bc 100644
--- 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java
+++ 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java
@@ -1091,9 +1091,9 @@
                 
String.class.equals(conditionFieldAC.getDbFieldType(fieldName)))) {
             /* enable case-insensitive search by changing operation to I/LIKE 
*/
             if ("=".equals(customizedRelation)) {
-                customizedRelation = 
BaseConditionFieldAutoCompleter.getLikeSyntax(caseSensitive);
+                customizedRelation = 
conditionFieldAC.getMatchingSyntax(fieldName, true, caseSensitive);
             } else if ("!=".equals(customizedRelation)) {
-                customizedRelation = "NOT " + 
BaseConditionFieldAutoCompleter.getLikeSyntax(caseSensitive);
+                customizedRelation = 
conditionFieldAC.getMatchingSyntax(fieldName, false, caseSensitive);
             }
         }
         return customizedRelation;
@@ -1116,7 +1116,7 @@
                     
conditionValueAC.convertFieldEnumValueToActualValue(obj.getBody()));
         } else if ("".equals(fieldName) /* search on all relevant fields */||
                 
(String.class.equals(conditionFieldAC.getDbFieldType(fieldName)))) {
-            customizedValue = customizedValue.replace('*', '%');
+            customizedValue = customizedValue.replace("*", 
conditionFieldAC.getWildcard(fieldName));
         }
         return customizedValue;
     }
diff --git 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VdcUserConditionFieldAutoCompleter.java
 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VdcUserConditionFieldAutoCompleter.java
index a517a61..a0244a6 100644
--- 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VdcUserConditionFieldAutoCompleter.java
+++ 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VdcUserConditionFieldAutoCompleter.java
@@ -1,5 +1,6 @@
 package org.ovirt.engine.core.searchbackend;
 
+
 public class VdcUserConditionFieldAutoCompleter extends 
BaseConditionFieldAutoCompleter {
     public static final String FIRST_NAME = "NAME";
     public static final String LAST_NAME = "LASTNAME";
@@ -27,6 +28,7 @@
         mVerbs.add("TAG");
         mVerbs.add("POOL");
         mVerbs.add("TYPE");
+        verbsWithMultipleValues.add(GROUP);
 
         // Building the auto completion dictionary.
         buildCompletions();


-- 
To view, visit http://gerrit.ovirt.org/32705
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I14e795926cb57de15b628587d5c3df427518720a
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Yair Zaslavsky <yzasl...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to