Author: rob.stryker(a)jboss.com
Date: 2008-11-21 19:37:55 -0500 (Fri, 21 Nov 2008)
New Revision: 11959
Modified:
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/DomainWrapper.java
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/MBeanAttributeInfoWrapper.java
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/MBeanInfoWrapper.java
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/tree/DomainNode.java
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/tree/ObjectNameNode.java
trunk/jmx/plugins/org.jboss.tools.jmx.ui/src/org/jboss/tools/jmx/ui/internal/dialogs/OpenMBeanSelectionDialog.java
trunk/jmx/plugins/org.jboss.tools.jmx.ui/src/org/jboss/tools/jmx/ui/internal/views/navigator/MBeanExplorerContentProvider.java
trunk/jmx/plugins/org.jboss.tools.jmx.ui/src/org/jboss/tools/jmx/ui/internal/views/navigator/QueryContribution.java
Log:
JBIDE-3253 - search bar much improved
Modified:
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/DomainWrapper.java
===================================================================
---
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/DomainWrapper.java 2008-11-21
18:30:00 UTC (rev 11958)
+++
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/DomainWrapper.java 2008-11-22
00:37:55 UTC (rev 11959)
@@ -47,7 +47,7 @@
for (Iterator iter = set.iterator(); iter.hasNext();) {
ObjectName on = (ObjectName) iter.next();
MBeanInfo info = mbsc.getMBeanInfo(on);
- instances[i] = new MBeanInfoWrapper(on, info, mbsc);
+ instances[i] = new MBeanInfoWrapper(on, info, mbsc, this);
i++;
}
return instances;
Modified:
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/MBeanAttributeInfoWrapper.java
===================================================================
---
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/MBeanAttributeInfoWrapper.java 2008-11-21
18:30:00 UTC (rev 11958)
+++
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/MBeanAttributeInfoWrapper.java 2008-11-22
00:37:55 UTC (rev 11959)
@@ -38,12 +38,9 @@
}
public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (!super.equals(obj))
- return false;
- if (getClass() != obj.getClass())
- return false;
+ if( !super.equals(obj))
+ return false;
+
final MBeanAttributeInfoWrapper other = (MBeanAttributeInfoWrapper) obj;
if (info == null) {
if (other.info != null)
Modified:
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/MBeanInfoWrapper.java
===================================================================
---
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/MBeanInfoWrapper.java 2008-11-21
18:30:00 UTC (rev 11958)
+++
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/MBeanInfoWrapper.java 2008-11-22
00:37:55 UTC (rev 11959)
@@ -20,21 +20,25 @@
public class MBeanInfoWrapper implements Comparable {
private final ObjectName on;
-
private final MBeanInfo info;
-
private final MBeanServerConnection mbsc;
+ private final Object parent;
public MBeanInfoWrapper(ObjectName on, MBeanInfo info,
- MBeanServerConnection mbsc) {
+ MBeanServerConnection mbsc, Object parent) {
Assert.isNotNull(on);
Assert.isNotNull(info);
Assert.isNotNull(mbsc);
this.on = on;
this.info = info;
this.mbsc = mbsc;
+ this.parent = parent;
}
+ public Object getParent() {
+ return parent;
+ }
+
public ObjectName getObjectName() {
return on;
}
Modified:
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/tree/DomainNode.java
===================================================================
---
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/tree/DomainNode.java 2008-11-21
18:30:00 UTC (rev 11958)
+++
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/tree/DomainNode.java 2008-11-22
00:37:55 UTC (rev 11959)
@@ -43,8 +43,7 @@
return false;
final DomainNode other = (DomainNode) obj;
if (domain == null) {
- if (other.domain != null)
- return false;
+ return other.domain == null;
} else if (!domain.equals(other.domain))
return false;
return true;
Modified:
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/tree/ObjectNameNode.java
===================================================================
---
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/tree/ObjectNameNode.java 2008-11-21
18:30:00 UTC (rev 11958)
+++
trunk/jmx/plugins/org.jboss.tools.jmx.core/src/org/jboss/tools/jmx/core/tree/ObjectNameNode.java 2008-11-22
00:37:55 UTC (rev 11959)
@@ -31,7 +31,7 @@
try {
connectionWrapper.run(new IJMXRunnable() {
public void run(MBeanServerConnection mbsc) throws Exception {
- array[0] = new MBeanInfoWrapper(on2, mbsc.getMBeanInfo(on2), mbsc);
+ array[0] = new MBeanInfoWrapper(on2, mbsc.getMBeanInfo(on2), mbsc,
ObjectNameNode.this);
}
});
} catch( JMXException ce ) {
Modified:
trunk/jmx/plugins/org.jboss.tools.jmx.ui/src/org/jboss/tools/jmx/ui/internal/dialogs/OpenMBeanSelectionDialog.java
===================================================================
---
trunk/jmx/plugins/org.jboss.tools.jmx.ui/src/org/jboss/tools/jmx/ui/internal/dialogs/OpenMBeanSelectionDialog.java 2008-11-21
18:30:00 UTC (rev 11958)
+++
trunk/jmx/plugins/org.jboss.tools.jmx.ui/src/org/jboss/tools/jmx/ui/internal/dialogs/OpenMBeanSelectionDialog.java 2008-11-22
00:37:55 UTC (rev 11959)
@@ -82,7 +82,7 @@
while (iter.hasNext()) {
ObjectName objectName = (ObjectName) iter.next();
MBeanInfo info = mbsc.getMBeanInfo(objectName);
- mbeans.add(new MBeanInfoWrapper(objectName, info, mbsc));
+ mbeans.add(new MBeanInfoWrapper(objectName, info, mbsc, null));
}
Collections.sort(mbeans);
viewer.setInput(mbeans);
Modified:
trunk/jmx/plugins/org.jboss.tools.jmx.ui/src/org/jboss/tools/jmx/ui/internal/views/navigator/MBeanExplorerContentProvider.java
===================================================================
---
trunk/jmx/plugins/org.jboss.tools.jmx.ui/src/org/jboss/tools/jmx/ui/internal/views/navigator/MBeanExplorerContentProvider.java 2008-11-21
18:30:00 UTC (rev 11958)
+++
trunk/jmx/plugins/org.jboss.tools.jmx.ui/src/org/jboss/tools/jmx/ui/internal/views/navigator/MBeanExplorerContentProvider.java 2008-11-22
00:37:55 UTC (rev 11959)
@@ -27,6 +27,7 @@
import org.jboss.tools.jmx.core.IConnectionProviderListener;
import org.jboss.tools.jmx.core.IConnectionWrapper;
import org.jboss.tools.jmx.core.MBeanFeatureInfoWrapper;
+import org.jboss.tools.jmx.core.MBeanOperationInfoWrapper;
import org.jboss.tools.jmx.core.tree.DomainNode;
import org.jboss.tools.jmx.core.tree.Node;
import org.jboss.tools.jmx.core.tree.ObjectNameNode;
@@ -64,10 +65,12 @@
}
public Object getParent(Object child) {
- if (child instanceof Node) {
- Node node = (Node) child;
- return node.getParent();
- }
+ if( child instanceof Root )
+ return ((Root)child).getConnection();
+ if (child instanceof Node)
+ return ((Node) child).getParent();
+ if( child instanceof MBeanFeatureInfoWrapper )
+ return ((MBeanFeatureInfoWrapper)child).getMBeanInfoWrapper().getParent();
return null;
}
@@ -79,14 +82,6 @@
if( parent instanceof IConnectionWrapper &&
((IConnectionWrapper)parent).isConnected()) {
return loadAndGetRootChildren(parent);
}
- if (parent instanceof Root) {
- Root root = (Root) parent;
- return root.getChildren();
- }
- if (parent instanceof DomainNode) {
- DomainNode node = (DomainNode) parent;
- return node.getChildren();
- }
if (parent instanceof ObjectNameNode) {
ObjectNameNode node = (ObjectNameNode) parent;
return node.getMbeanInfoWrapper().getMBeanFeatureInfos();
Modified:
trunk/jmx/plugins/org.jboss.tools.jmx.ui/src/org/jboss/tools/jmx/ui/internal/views/navigator/QueryContribution.java
===================================================================
---
trunk/jmx/plugins/org.jboss.tools.jmx.ui/src/org/jboss/tools/jmx/ui/internal/views/navigator/QueryContribution.java 2008-11-21
18:30:00 UTC (rev 11958)
+++
trunk/jmx/plugins/org.jboss.tools.jmx.ui/src/org/jboss/tools/jmx/ui/internal/views/navigator/QueryContribution.java 2008-11-22
00:37:55 UTC (rev 11959)
@@ -11,7 +11,9 @@
package org.jboss.tools.jmx.ui.internal.views.navigator;
import java.util.HashMap;
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
@@ -21,7 +23,7 @@
import org.eclipse.swt.widgets.Display;
public class QueryContribution {
-
+ private static Boolean TRUE_BOOL = new Boolean(true);
private static HashMap<Viewer, QueryContribution> map =
new HashMap<Viewer, QueryContribution>();
@@ -51,11 +53,12 @@
}
- private String filterText, oldFilterText;
- private ConcurrentHashMap<Object, Boolean> cache = new
ConcurrentHashMap<Object, Boolean>();
+ private String filterText;
private Navigator navigator;
- private boolean requiresRefine;
- private RefineThread refineThread = null;
+ private HashMap<Object, Boolean> matches = null;
+ private HashMap<Object, Boolean> shouldShow = null;
+ private RefineThread refineThread;
+
public QueryContribution(final Navigator navigator) {
this.navigator = navigator;
map.put(navigator.getCommonViewer(), this);
@@ -65,104 +68,248 @@
protected void addListener() {
navigator.getFilterText().addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
- oldFilterText = filterText;
- filterText = navigator.getFilterText().getText();
- final String old = oldFilterText == null ? "" : oldFilterText;
- final String neww = filterText == null ? "" : filterText;
-
- if( old.equals("") || neww.equals("") || !neww.startsWith(old))
{
- clearCache();
- } else if(neww.startsWith(old) && !neww.equals(old)) {
- requiresRefine = true;
+ boolean searchNew = matches == null || filterText == null ||
filterText.equals("")
+ || !navigator.getFilterText().getText().startsWith(filterText);
+ RefineThread thread = new RefineThread(searchNew,
+ navigator.getFilterText().getText(),
+ matches, shouldShow);
+ if( !navigator.getFilterText().getText().equals("")) {
+ if( refineThread != null )
+ refineThread.cancel();
+ refineThread = thread;
+ refineThread.start();
+ } else {
+ matches = null;
+ shouldShow = null;
+ refreshView();
}
- if( refineThread != null )
- refineThread.cancel();
- refineThread = new RefineThread();
- refineThread.start();
}
});
}
- protected class RefineThread extends Thread {
+ protected void refreshView() {
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ navigator.getCommonViewer().refresh();
+ }
+ });
+ }
+
+ public class RefineThread extends Thread {
private boolean canceled = false;
- public void run() {
- cacheEntry(requiresRefine,
(ITreeContentProvider)navigator.getCommonViewer().getContentProvider());
- refineThread = null;
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- navigator.getCommonViewer().refresh();
- }
- } );
+ private boolean searchNew;
+ private String newFilter;
+ private HashMap<Object, Boolean> matchClone;
+ private HashMap<Object, Boolean> showClone;
+ public RefineThread(
+ boolean searchNew, String newFilter,
+ HashMap<Object, Boolean> matches,
+ HashMap<Object, Boolean> shouldShow) {
+ this.searchNew = searchNew;
+ this.newFilter = newFilter;
+ this.matchClone = matches == null ?
+ new HashMap<Object, Boolean>() :
+ (HashMap<Object, Boolean>) matches.clone();
+ this.showClone = shouldShow == null ?
+ new HashMap<Object, Boolean>() :
+ (HashMap<Object, Boolean>) shouldShow.clone();
}
- public void cancel() {
- canceled = true;
+
+ /*
+ * TODO MAKE SURE YOU FIX THE CONTENT PROVIDER
+ * IT IS NOT RETURNING GETPARENT AS IT SHOULD!!!
+ *
+ */
+ public void run() {
+ if( searchNew )
+ searchNew();
+ else
+ refine();
+
+ if( !canceled ) {
+ threadFinished(matchClone, showClone, newFilter);
+ }
}
- protected void cacheEntry(boolean refine, ITreeContentProvider provider) {
+ protected void searchNew() {
+ ITreeContentProvider provider =
(ITreeContentProvider)navigator.getCommonViewer().getContentProvider();
Object[] elements = provider.getElements(navigator.getCommonViewer().getInput());
for( int i = 0; i < elements.length; i++ )
if( !canceled )
- cache(elements[i], refine, provider);
+ fullCache(elements[i], provider);
}
+
+ protected void fullCache(Object o, ITreeContentProvider provider) {
+ boolean found = false;
+ String elementAsString = MBeanExplorerLabelProvider.getText2(o);
+ if( elementAsString.contains(newFilter)) {
+ matchClone.put(o, TRUE_BOOL);
+ recurse(o, provider, true);
+ } else {
+ // if I don't match, then if ANY of my children match, I also match
+ Object[] children = provider.getChildren(o);
+ for( int i = 0; i < children.length; i++ )
+ if( !canceled )
+ fullCache(children[i], provider);
- protected boolean cache(Object o, boolean refine, ITreeContentProvider provider) {
- if( !refine ) {
- Boolean val = cache.get(o);
- if( val != null ) {
- return val.booleanValue();
+ if( found ) {
+ showClone.put(o, TRUE_BOOL);
+ found = true;
}
}
-
- // If I match, all my children and grandchildren must match
- String elementAsString = MBeanExplorerLabelProvider.getText2(o);
- if( elementAsString.contains(filterText)) {
- recurseTrue(o, provider);
- return true;
- }
-
- // if I don't match, then if ANY of my children match, I also match
- boolean belongs = false;
- Object tmp;
+ }
+
+ protected void recurse(Object o, ITreeContentProvider provider, boolean match) {
Object[] children = provider.getChildren(o);
for( int i = 0; i < children.length; i++ ) {
- if( !canceled ) {
- tmp = cache.get(children[i]);
- if( !refine || (tmp != null && ((Boolean)tmp).booleanValue())) {
- belongs |= cache(children[i], refine, provider);
- }
+ if( match )
+ showClone.put(children[i], TRUE_BOOL);
+ else
+ showClone.remove(children[i]);
+ recurse(children[i], provider, match);
+ }
+ Object parent = provider.getParent(o);
+ if( match ) {
+ while( parent != null ) {
+ showClone.put(parent, TRUE_BOOL);
+ parent = provider.getParent(parent);
}
+ } else {
+ while( parent != null ) {
+ showClone.remove(parent);
+ parent = provider.getParent(parent);
+ }
}
- cache.put(o, new Boolean(canceled || belongs));
- return belongs;
}
+
+
+ protected void refine() {
+ ITreeContentProvider provider =
(ITreeContentProvider)navigator.getCommonViewer().getContentProvider();
+ Iterator i = matchClone.keySet().iterator();
+ Set<Object> toRemove = new HashSet<Object>();
+ Set<Object> mustRemain = new HashSet<Object>();
- protected void recurseTrue(Object o, ITreeContentProvider provider) {
- cache.put(o, new Boolean(true));
- Object[] children = provider.getChildren(o);
- for( int i = 0; i < children.length; i++ )
- recurseTrue(children[i], provider);
+ Object o;
+ String elementAsString;
+
+ while(i.hasNext() && !canceled) {
+ o = i.next();
+ elementAsString = MBeanExplorerLabelProvider.getText2(o);
+ if( !elementAsString.contains(newFilter)) {
+ toRemove.add(o);
+ } else {
+ mustRemain.add(o);
+ }
+ }
+
+ for( Object o2 : toRemove ) {
+ matchClone.remove(o2);
+ recurse(o2, provider, false);
+ }
+
+ for( Object o2 : mustRemain ) {
+ matchClone.put(o2, TRUE_BOOL);
+ recurse(o2, provider, true);
+ }
}
+
+ public void cancel() {
+ canceled = true;
+ }
}
-
- protected void clearCache() {
- cache = new ConcurrentHashMap<Object,Boolean>();
- requiresRefine = false;
+
+ protected synchronized void threadFinished(
+ HashMap<Object, Boolean> newMatches,
+ HashMap<Object, Boolean> newShow, String filter) {
+ matches = newMatches;
+ shouldShow = newShow;
+ filterText = filter;
+ refineThread = null;
+ refreshView();
}
public boolean shouldShow(Object element, Object parentElement) {
- String filterText = this.filterText;
- if( filterText != null && filterText.length() > 0 ) {
- boolean tmp = cache.get(element) != null &&
cache.get(element).booleanValue();
- return tmp;
- }
- return true;
+ return matches == null || matches.containsKey(element)
+ || shouldShow.containsKey(element);
}
public void dispose() {
- clearCache();
- oldFilterText = null;
- filterText = null;
}
+
+
+
+
+
+
+
+//
+// protected class RefineThread extends Thread {
+// private boolean canceled = false;
+// public void run() {
+// cacheEntry(requiresRefine,
(ITreeContentProvider)navigator.getCommonViewer().getContentProvider());
+// refineThread = null;
+// Display.getDefault().asyncExec(new Runnable() {
+// public void run() {
+// navigator.getCommonViewer().refresh();
+// }
+// } );
+// }
+//
+// public void cancel() {
+// canceled = true;
+// }
+//
+// protected void cacheEntry(boolean refine, ITreeContentProvider provider) {
+// Object[] elements = provider.getElements(navigator.getCommonViewer().getInput());
+// for( int i = 0; i < elements.length; i++ )
+// if( !canceled )
+// cache(elements[i], refine, provider);
+// }
+//
+// protected boolean cache(Object o, boolean refine, ITreeContentProvider provider) {
+// if( !refine ) {
+// Boolean val = cache.get(o);
+// if( val != null ) {
+// return val.booleanValue();
+// }
+// }
+//
+// // If I match, all my children and grandchildren must match
+// String elementAsString = MBeanExplorerLabelProvider.getText2(o);
+// if( elementAsString.contains(filterText)) {
+// recurseTrue(o, provider);
+// return true;
+// }
+//
+// // if I don't match, then if ANY of my children match, I also match
+// boolean belongs = false;
+// Object tmp;
+// Object[] children = provider.getChildren(o);
+// for( int i = 0; i < children.length; i++ ) {
+// if( !canceled ) {
+// tmp = cache.get(children[i]);
+// if( !refine || (tmp != null && ((Boolean)tmp).booleanValue())) {
+// belongs |= cache(children[i], refine, provider);
+// }
+// }
+// }
+// cache.put(o, new Boolean(canceled || belongs));
+// return belongs;
+// }
+//
+// protected void recurseTrue(Object o, ITreeContentProvider provider) {
+// cache.put(o, new Boolean(true));
+// Object[] children = provider.getChildren(o);
+// for( int i = 0; i < children.length; i++ )
+// recurseTrue(children[i], provider);
+// }
+// }
+//
+// protected void clearCache() {
+//// cache = new ConcurrentHashMap<Object,Boolean>();
+//// requiresRefine = false;
+// }
+
}