Lior Vernia has uploaded a new change for review.

Change subject: engine: Added ability to affect sort order in search
......................................................................

engine: Added ability to affect sort order in search

Added to the search mechanism a generic way for developers to override
the default sort order according to a field in the database, without
affecting other conditions related to that field.

Change-Id: I80b65dacdccc208c8c7e0f2564f2660782d36d69
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=895468
Signed-off-by: Lior Vernia <lver...@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
3 files changed, 25 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/69/11469/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 f6553f0..03ea073 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
@@ -34,10 +34,12 @@
             new HashMap<String, List<ValueValidationFunction>>();
     private final Map<String, Class<?>> mTypeDict = new HashMap<String, 
Class<?>>();
     protected final Map<String, String> mColumnNameDict = new HashMap<String, 
String>();
+    protected final Map<String, String> mSortableFieldDict = new 
HashMap<String, String>();
     protected final List<String> mNotFreeTextSearchableFieldsList = new 
ArrayList<String>();
 
     /**
      * Gets the LIKE clause syntax for non case-sensitive search
+     *
      * @return the LIKE syntax according to current DBEngine.
      */
     public static String getLikeSyntax(boolean caseSensitive) {
@@ -51,6 +53,7 @@
 
     /**
      * Gets the I18N prefix used for value compare.
+     *
      * @return
      */
     public static String getI18NPrefix() {
@@ -115,6 +118,15 @@
         return retval;
     }
 
+    public String getSortableDbField(String fieldName) {
+        if (mSortableFieldDict.containsKey(fieldName)) {
+            return mSortableFieldDict.get(fieldName);
+        }
+        else {
+            return getDbFieldName(fieldName);
+        }
+    }
+
     public Class<?> getDbFieldType(String fieldName) {
         Class<?> retval = null;
         if (mTypeDict.containsKey(fieldName)) {
@@ -125,7 +137,10 @@
     }
 
     // FIXME Probably Not Hibernate Friendly
-    public final String buildFreeTextConditionSql(String tableName, String 
relations, String value, boolean caseSensitive) {
+    public final String buildFreeTextConditionSql(String tableName,
+            String relations,
+            String value,
+            boolean caseSensitive) {
         StringBuilder sb = new StringBuilder(" ( ");
         boolean firstTime = true;
         if (!StringHelper.isNullOrEmpty(value) && !"''".equals(value)) {
@@ -305,6 +320,7 @@
             }
         }
     }
+
     // private static final String DATE_FORMAT = "MMM dd,yyyy";
     private static DateTime DealWithDateEnum(String value) {
         DateTime formatedValue = new DateTime();
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 ecdc0c7..67dc775 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
@@ -10,6 +10,8 @@
 
     String getDbFieldName(String fieldName);
 
+    String getSortableDbField(String fieldName);
+
     Class<?> getDbFieldType(String fieldName);
 
     IAutoCompleter getFieldRelationshipAutoCompleter(String fieldName);
@@ -18,7 +20,11 @@
 
     String buildFreeTextConditionSql(String tableName, String relations, 
String value, boolean caseSensitive);
 
-    String buildConditionSql(String fieldName, String customizedValue, String 
customizedRelation, String tableName, boolean caseSensitive);
+    String buildConditionSql(String fieldName,
+            String customizedValue,
+            String customizedRelation,
+            String tableName,
+            boolean caseSensitive);
 
     void formatValue(String fieldName, RefObject<String> relations, 
RefObject<String> value, boolean caseSensitive);
 }
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 9d0a98a..0edbcf5 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
@@ -824,7 +824,7 @@
                 case SORT_FIELD:
                     conditionFieldAC = 
mSearchObjectAC.getFieldAutoCompleter(searchObjStr);
                     sortByPhrase =
-                            StringFormat.format(" ORDER BY %1$s", 
conditionFieldAC.getDbFieldName(obj.getBody()));
+                            StringFormat.format(" ORDER BY %1$s", 
conditionFieldAC.getSortableDbField(obj.getBody()));
                     break;
                 case SORT_DIRECTION:
                     sortByPhrase = StringFormat.format("%1$s %2$s", 
sortByPhrase, obj.getBody());


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I80b65dacdccc208c8c7e0f2564f2660782d36d69
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Lior Vernia <lver...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to