Jakub Niedermertl has uploaded a new change for review.

Change subject: userportal, webadmin: New typeahead searching for template 
comboboxs
......................................................................

userportal, webadmin: New typeahead searching for template comboboxs

Typeahead serching for template comboboxes that matches suggestions
containing all whitespace separated parts of query (~ user input).

This change is necessary because second column of template suggestions
newly contains important name of subversion (instead of previous, less
important, description).

Change-Id: Ib7cff48cfd25fe1a121d6710579aafc7b7cf72e2
Bug-Url: https://bugzilla.redhat.com/1165630
Signed-off-by: Jakub Niedermertl <jnied...@redhat.com>
---
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelTypeAheadChangeableListBox.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelTypeAheadListBox.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelTypeAheadListBoxEditor.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/SuggestionMatcher.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
5 files changed, 81 insertions(+), 21 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/86/36586/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelTypeAheadChangeableListBox.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelTypeAheadChangeableListBox.java
index 18d9c26..f838a5b 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelTypeAheadChangeableListBox.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelTypeAheadChangeableListBox.java
@@ -16,7 +16,7 @@
     }
 
     public ListModelTypeAheadChangeableListBox(SuggestBoxRenderer<String> 
renderer, boolean autoAddToValidValues, String nullReplacementText) {
-        super(renderer, autoAddToValidValues);
+        super(renderer, autoAddToValidValues, new 
SuggestionMatcher.StartWithSuggestionMatcher());
         if (nullReplacementText == null) {
             nullReplacementText = ""; //$NON-NLS-1$
         } else {
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelTypeAheadListBox.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelTypeAheadListBox.java
index afe91b0..6887d711 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelTypeAheadListBox.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelTypeAheadListBox.java
@@ -85,12 +85,9 @@
         ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
     }
 
-    public ListModelTypeAheadListBox(SuggestBoxRenderer<T> renderer) {
-        this(renderer, true);
-    }
-
-    public ListModelTypeAheadListBox(SuggestBoxRenderer<T> renderer, boolean 
autoAddToValidValues) {
-        super(new RenderableSuggestOracle<T>(renderer));
+    public ListModelTypeAheadListBox(SuggestBoxRenderer<T> renderer, boolean 
autoAddToValidValues,
+                                     SuggestionMatcher suggestionMatcher) {
+        super(new RenderableSuggestOracle<T>(renderer, suggestionMatcher));
         this.renderer = renderer;
         this.autoAddToValidValues = autoAddToValidValues;
 
@@ -390,26 +387,19 @@
     public RenderableSuggestion(T row, SuggestBoxRenderer<T> renderer) {
         super(renderer.getReplacementString(row), 
renderer.getDisplayString(row));
     }
-
-    public boolean matches(String query) {
-        String replacementString = getReplacementString();
-        if (replacementString == null || query == null) {
-            return false;
-        }
-
-        return replacementString.toLowerCase().startsWith(query.toLowerCase());
-    }
 }
 
 class RenderableSuggestOracle<T> extends MultiWordSuggestOracle {
 
     private SuggestBoxRenderer<T> renderer;
+    final private SuggestionMatcher matcher;
 
     // inited to avoid null checks
     private Collection<T> data = new ArrayList<T>();
 
-    public RenderableSuggestOracle(SuggestBoxRenderer<T> renderer) {
+    public RenderableSuggestOracle(SuggestBoxRenderer<T> renderer, 
SuggestionMatcher matcher) {
         this.renderer = renderer;
+        this.matcher = matcher;
     }
 
     @Override
@@ -419,7 +409,8 @@
         String query = request.getQuery();
         for (T row : data) {
             RenderableSuggestion<T> suggestionCandidate = new 
RenderableSuggestion<T>(row, renderer);
-            if (suggestionCandidate.matches(query)) {
+            if (this.matcher.match(
+                    query, suggestionCandidate.getReplacementString(), 
suggestionCandidate.getDisplayString())) {
                 suggestions.add(suggestionCandidate);
             }
         }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelTypeAheadListBoxEditor.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelTypeAheadListBoxEditor.java
index fac9943..11466c5 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelTypeAheadListBoxEditor.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelTypeAheadListBoxEditor.java
@@ -29,10 +29,22 @@
         this(renderer, true, visibilityRenderer);
     }
 
+    public ListModelTypeAheadListBoxEditor(SuggestBoxRenderer<T> renderer, 
VisibilityRenderer visibilityRenderer,
+                                           SuggestionMatcher 
suggestionMatcher) {
+        this(renderer, true, visibilityRenderer, suggestionMatcher);
+    }
+
+    public ListModelTypeAheadListBoxEditor(SuggestBoxRenderer<T> renderer,
+                                           boolean autoAddToValidValues,
+                                           VisibilityRenderer 
visibilityRenderer) {
+        this(renderer, autoAddToValidValues, visibilityRenderer, new 
SuggestionMatcher.StartWithSuggestionMatcher());
+    }
+
     public ListModelTypeAheadListBoxEditor(SuggestBoxRenderer<T> renderer,
             boolean autoAddToValidValues,
-            VisibilityRenderer visibilityRenderer) {
-        super(new ListModelTypeAheadListBox<T>(renderer, 
autoAddToValidValues), visibilityRenderer);
+            VisibilityRenderer visibilityRenderer,
+            SuggestionMatcher suggestionMatcher) {
+        super(new ListModelTypeAheadListBox<T>(renderer, autoAddToValidValues, 
suggestionMatcher), visibilityRenderer);
         this.editor = WidgetWithLabelEditor.of(getContentWidget().asEditor(), 
this);
     }
 
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/SuggestionMatcher.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/SuggestionMatcher.java
new file mode 100644
index 0000000..120dbd5
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/SuggestionMatcher.java
@@ -0,0 +1,55 @@
+package org.ovirt.engine.ui.common.widget.editor;
+
+/**
+ * A matcher used by {@link RenderableSuggestOracle} to recognize suggestions 
corresponding to user query string.
+ */
+public interface SuggestionMatcher {
+
+    /**
+     *
+     * @param query text typed by user into combobox
+     * @param replacementString one line string representing suggestion in 
selected state
+     * @param displayString html string representing suggestion in suggestion 
list (eg. generated by {@link 
org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractVmPopupWidget#typeAheadNameDescriptionTemplateNullSafe(java.lang.String,
 java.lang.String)})
+     * @return is suggestion matching
+     */
+    public boolean match(String query, String replacementString, String 
displayString);
+
+    /**
+     * Case independent matcher. Suggestion matches if replacementString 
starts with query.
+     */
+    public static class StartWithSuggestionMatcher implements 
SuggestionMatcher {
+
+        @Override
+        public boolean match(String query, String replacementString, String 
displayString) {
+            if (replacementString == null || query == null) {
+                return false;
+            }
+
+            return 
replacementString.toLowerCase().startsWith(query.toLowerCase());
+        }
+    }
+
+    /**
+     * Case independent matcher. Suggestion matches if all whitespace 
separated parts of query are contained in
+     * replacement string.
+     */
+    public static class ContainsSuggestionMatcher implements SuggestionMatcher 
{
+
+        @Override
+        public boolean match(String query, String replacementString, String 
displayString) {
+            if (replacementString == null || query == null) {
+                return false;
+            }
+
+            final String lowerQuery = query.toLowerCase();
+            final String lowerReplacement = replacementString.toLowerCase();
+            final String[] querySegments = lowerQuery.split("\\s"); 
//$NON-NLS-1$
+            for (String querySegment : querySegments) {
+                if (!lowerReplacement.contains(querySegment)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    }
+}
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
index c1bb51f..f70d253 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
@@ -75,6 +75,7 @@
 import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxOnlyEditor;
 import 
org.ovirt.engine.ui.common.widget.editor.ListModelTypeAheadChangeableListBoxEditor;
 import 
org.ovirt.engine.ui.common.widget.editor.ListModelTypeAheadListBoxEditor;
+import org.ovirt.engine.ui.common.widget.editor.SuggestionMatcher;
 import org.ovirt.engine.ui.common.widget.editor.VncKeyMapRenderer;
 import org.ovirt.engine.ui.common.widget.editor.generic.DetachableLabel;
 import 
org.ovirt.engine.ui.common.widget.editor.generic.EntityModelCheckBoxEditor;
@@ -1188,7 +1189,8 @@
                                         + 
versionTemplate.getTemplateVersionNumber() + ")"; //$NON-NLS-1$
                     }
                 },
-                new ModeSwitchingVisibilityRenderer());
+                new ModeSwitchingVisibilityRenderer(),
+                new SuggestionMatcher.ContainsSuggestionMatcher());
 
         oSTypeEditor = new ListModelListBoxEditor<Integer>(new 
AbstractRenderer<Integer>() {
             @Override


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

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

Reply via email to