Ramesh N has uploaded a new change for review.
Change subject: webadmin: UI plugin API - setSearchString
......................................................................
webadmin: UI plugin API - setSearchString
This patch adds new UI plugin API function ('setSearchString')
that can be used to apply given search string in WebAdmin's
search panel.
Just like the Search button, calling setSearchString function
triggers transition to the corresponding application place,
e.g. following code:
api.setSearchString('Vms:');
causes the application to reveal following place:
WebAdmin.html#vms // 'VM' main tab place
API signature:
setSearchString(searchString)
Example usage:
api.setSearchString('Hosts: name = abc');
Change-Id: I36eb8647577e974bddefe9462d302165a39b1c27
Bug-Url: https://bugzilla.redhat.com/1081028
Signed-off-by: Vojtech Szocs <[email protected]>
---
A
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ApplySearchStringEvent.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/EntityModel.java
M
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/PluginManager.java
M
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/api/PluginUiFunctions.java
5 files changed, 154 insertions(+), 3 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/30/41030/1
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ApplySearchStringEvent.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ApplySearchStringEvent.java
new file mode 100644
index 0000000..8f92e14
--- /dev/null
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ApplySearchStringEvent.java
@@ -0,0 +1,87 @@
+package org.ovirt.engine.ui.uicommonweb.models;
+
+import com.google.gwt.event.shared.EventHandler;
+import com.google.gwt.event.shared.GwtEvent;
+import com.google.gwt.event.shared.HasHandlers;
+import com.google.web.bindery.event.shared.HandlerRegistration;
+
+public class ApplySearchStringEvent extends
GwtEvent<ApplySearchStringEvent.ApplySearchStringHandler> {
+
+ String searchString;
+
+ protected ApplySearchStringEvent() {
+ // Possibly for serialization.
+ }
+
+ public ApplySearchStringEvent(String searchString) {
+ this.searchString = searchString;
+ }
+
+ public static void fire(HasHandlers source, String searchString) {
+ ApplySearchStringEvent eventInstance = new
ApplySearchStringEvent(searchString);
+ source.fireEvent(eventInstance);
+ }
+
+ public static void fire(HasHandlers source, ApplySearchStringEvent
eventInstance) {
+ source.fireEvent(eventInstance);
+ }
+
+ public interface HasApplySearchStringHandlers extends HasHandlers {
+ HandlerRegistration addApplySearchStringHandler(ApplySearchStringHandler
handler);
+ }
+
+ public interface ApplySearchStringHandler extends EventHandler {
+ public void onApplySearchString(ApplySearchStringEvent event);
+ }
+
+ private static final Type<ApplySearchStringHandler> TYPE = new
Type<ApplySearchStringHandler>();
+
+ public static Type<ApplySearchStringHandler> getType() {
+ return TYPE;
+ }
+
+ @Override
+ public Type<ApplySearchStringHandler> getAssociatedType() {
+ return TYPE;
+ }
+
+ @Override
+ protected void dispatch(ApplySearchStringHandler handler) {
+ handler.onApplySearchString(this);
+ }
+
+ public String getSearchString(){
+ return searchString;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ ApplySearchStringEvent other = (ApplySearchStringEvent) obj;
+ if (searchString == null) {
+ if (other.searchString != null)
+ return false;
+ } else if (!searchString.equals(other.searchString))
+ return false;
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int hashCode = 23;
+ hashCode = (hashCode * 37) + (searchString == null ? 1 :
searchString.hashCode());
+ return hashCode;
+ }
+
+ @Override
+ public String toString() {
+ return "ApplySearchStringEvent[" //$NON-NLS-1$
+ + searchString
+ + "]"; //$NON-NLS-1$
+ }
+}
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java
index 007825f..45577c8 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java
@@ -1,7 +1,11 @@
package org.ovirt.engine.ui.uicommonweb.models;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
+import java.util.Set;
import org.ovirt.engine.core.common.businessentities.AuditLog;
import org.ovirt.engine.core.common.businessentities.StorageDomain;
@@ -12,11 +16,16 @@
import org.ovirt.engine.core.compat.Regex;
import org.ovirt.engine.core.compat.RegexOptions;
import org.ovirt.engine.core.compat.StringHelper;
+import org.ovirt.engine.core.searchbackend.ISyntaxChecker;
+import org.ovirt.engine.core.searchbackend.SyntaxContainer;
+import org.ovirt.engine.core.searchbackend.SyntaxObject;
+import org.ovirt.engine.core.searchbackend.SyntaxObjectType;
import org.ovirt.engine.ui.frontend.Frontend;
import org.ovirt.engine.ui.uicommonweb.Linq;
import org.ovirt.engine.ui.uicommonweb.ReportInit;
import org.ovirt.engine.ui.uicommonweb.UICommand;
import org.ovirt.engine.ui.uicommonweb.help.HelpTag;
+import
org.ovirt.engine.ui.uicommonweb.models.ApplySearchStringEvent.ApplySearchStringHandler;
import org.ovirt.engine.ui.uicommonweb.models.autocomplete.SearchSuggestModel;
import org.ovirt.engine.ui.uicommonweb.models.bookmarks.BookmarkEventArgs;
import org.ovirt.engine.ui.uicommonweb.models.bookmarks.BookmarkListModel;
@@ -147,6 +156,14 @@
initItems();
setLoggedInUser(Frontend.getInstance().getLoggedInUser());
+
+ eventBus.addHandler(ApplySearchStringEvent.getType(), new
ApplySearchStringHandler() {
+ @Override
+ public void onApplySearchString(ApplySearchStringEvent event) {
+ setSearchString(event.getSearchString(), false);
+ getSearchCommand().execute();
+ }
+ });
}
private void initItems()
@@ -208,6 +225,7 @@
// Activate the default list model.
setSelectedItem(getDefaultItem());
+
}
private void updateHasSelectedTags()
@@ -522,7 +540,7 @@
private void clearSearchString()
{
- setSearchString(getHasSearchStringPrefix() ? "" :
getSelectedItem().getDefaultSearchString(), false); //$NON-NLS-1$
+ setSearchStringImpl(getHasSearchStringPrefix() ? "" :
getSelectedItem().getDefaultSearchString(), false); //$NON-NLS-1$
getSearchCommand().execute();
}
@@ -669,6 +687,10 @@
// Setting it now currently only to false, for case-insensitive
search
model.setCaseSensitiveSearch(false);
+
+ // ListModel.setSelectedItem compares values by reference,
following code ensures that
+ // "model" will always be selected (even if it's already the
currently selected item)
+ selectedItem = null;
// Change active list model as neccesary.
setSelectedItem(model);
@@ -1238,7 +1260,31 @@
setSearchString(value, true);
}
- public void setSearchString(String value, boolean checkIfNewValue)
+ public void setSearchString(String value, boolean checkIfNewValue) {
+ if (value == null || !containsTokens(value, SyntaxObjectType.SORTBY,
SyntaxObjectType.PAGE,
+ SyntaxObjectType.SORT_DIRECTION)) {
+ setSearchStringImpl(value, checkIfNewValue);
+ }
+ }
+
+ private boolean containsTokens(String searchString, SyntaxObjectType...
tokens) {
+ if (tokens == null) {
+ return false;
+ }
+ ISyntaxChecker syntaxChecker =
getAutoCompleteModel().getSyntaxChecker();
+ SyntaxContainer syntaxCont =
syntaxChecker.analyzeSyntaxState(searchString, true);
+ Set<SyntaxObjectType> searchTokenSet = new HashSet<SyntaxObjectType>();
+ Iterator<SyntaxObject> iterator = syntaxCont.iterator();
+ while (iterator.hasNext()) {
+ searchTokenSet.add(iterator.next().getType());
+ }
+ Set<SyntaxObjectType> tokenSet = new HashSet<SyntaxObjectType>();
+ tokenSet.addAll(Arrays.asList(tokens));
+ searchTokenSet.retainAll(tokenSet);
+ return !searchTokenSet.isEmpty();
+ }
+
+ private void setSearchStringImpl(String value, boolean checkIfNewValue)
{
if (!checkIfNewValue || !ObjectUtils.objectsEqual(searchString, value))
{
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/EntityModel.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/EntityModel.java
index 9354a5e..6f1e91f 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/EntityModel.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/EntityModel.java
@@ -24,7 +24,7 @@
/**
* The GWT event bus.
*/
- private EventBus eventBus;
+ protected EventBus eventBus;
private final List<HandlerRegistration> handlerRegistrations = new
ArrayList<HandlerRegistration>();
diff --git
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/PluginManager.java
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/PluginManager.java
index 137bd91..05790f1 100644
---
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/PluginManager.java
+++
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/PluginManager.java
@@ -513,6 +513,11 @@
uifunctio...@org.ovirt.engine.ui.webadmin.plugin.api.PluginUiFunctions::revealPlace(Ljava/lang/String;)(placeToken);
}
},
+ setSearchString: function(searchString) {
+ if (canDoPluginAction(this.pluginName)) {
+
uifunctio...@org.ovirt.engine.ui.webadmin.plugin.api.PluginUiFunctions::setSearchString(Ljava/lang/String;)(searchString);
+ }
+ },
loginUserName: function() {
if (canDoPluginAction(this.pluginName)) {
return
[email protected]::getFullUserName()();
diff --git
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/api/PluginUiFunctions.java
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/api/PluginUiFunctions.java
index 8d2eef7..ae34c66 100644
---
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/api/PluginUiFunctions.java
+++
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/api/PluginUiFunctions.java
@@ -8,6 +8,7 @@
import org.ovirt.engine.ui.common.widget.Align;
import org.ovirt.engine.ui.common.widget.action.AbstractButtonDefinition;
import org.ovirt.engine.ui.common.widget.action.ActionButtonDefinition;
+import org.ovirt.engine.ui.uicommonweb.models.ApplySearchStringEvent;
import org.ovirt.engine.ui.webadmin.place.WebAdminPlaceManager;
import org.ovirt.engine.ui.webadmin.plugin.entity.EntityObject;
import org.ovirt.engine.ui.webadmin.plugin.entity.EntityType;
@@ -255,4 +256,16 @@
});
}
+ /**
+ * Applies the given search string, which triggers transition to the
corresponding application place.
+ */
+ public void setSearchString(final String searchString) {
+ Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+ @Override
+ public void execute() {
+ ApplySearchStringEvent.fire(PluginUiFunctions.this,
searchString);
+ }
+ });
+ }
+
}
--
To view, visit https://gerrit.ovirt.org/41030
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I36eb8647577e974bddefe9462d302165a39b1c27
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5-gluster
Gerrit-Owner: Ramesh N <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches